как хранить tfstate удаленно Terraform backend от s3 bucket - PullRequest
0 голосов
/ 08 октября 2019

Мои доступные ресурсы:

ОС - Ubuntu 18.04 |Terraform cli - Terraform v0.12.9 |user - root login

Моя проблема - я хочу, чтобы tfstate сохранял удаленно бэкэнд с помощью s3, поэтому я создал вручную

s3 bucket - sellist-infra

, для которого я создал backend.tf файл и мой скрипт terraform ниже, когда я terraform initошибка в ниже. Что не так со сценарием?

provider "aws" {
    acces_key  = "**************"
    secret_key = "**************"
}

terraform {
    backend "s3" {
        bucket                      = "sellist-infra"
        key                         = "terraform/sellist/do/prod/terraform.tfstate
        endpoint                    = "nyc3.digitaloceanspaces.com"
        region                      = "us-east-1"
        profile                     = "sellist-do"
        skip_credentials_validation = true
        skip_get_ec2_platforms      = true
        skip_requesting_account_id  = true
        skip_metadata_api_check     = true
    }
} 


***OUTPUT*** 

Initializing the backend...

Warning: "skip_requesting_account_id": [DEPRECATED] The S3 Backend no longer automatically looks up the AWS Account ID and this attribute is no longer used.



Warning: "skip_get_ec2_platforms": [DEPRECATED] The S3 Backend does not require EC2 functionality and this attribute is no longer used.



Error: Failed to get existing workspaces: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Бэкэнд хранилища состояний S3 и провайдер AWS - это два отдельных компонента, которые необходимо настраивать отдельно.

Обычно мы избегаем прямой их настройки, используя стандартные переменные среды AWS или файл учетных данных , который будет автоматически считываться и использоваться как провайдером AWS, так и бэкендом S3.

Для более сложных сценариев, где необходимо использовать отдельные учетные данные для бэкэнда и провайдерараздел документации Terraform Архитектура AWS с несколькими учетными записями дает эталонную архитектуру для работы, которая позволяет по-прежнему использовать стандартные механизмы учетных данных AWS, в то время как поставщик AWS берет на себя особую роль для получения доступа, который ему необходим для конкретногоУчетная запись AWS.

Аргументы конфигурации access_key и secret_key как для поставщика AWS, так и для бэкэнда S3 существуют для очень необычных ситуаций, когда использование стандартных механизмов учетных данных AWS не подходит. Использовать их очень редко, но если вы do решите их использовать, вам нужно будет установить их отдельно как в блоке provider "aws", так и в блоке backend "s3". Я бы посоветовал рассматривать эти аргументы в качестве крайней меры и использовать их только в том случае, если вы перепробовали все другие варианты и пришли к выводу, что они по какой-то причине неприемлемы для вашего необычного случая.

0 голосов
/ 08 октября 2019

Уведомления, которые вы получаете, происходят потому, что эти 2 переменные skip_requesting_account_id и skip_get_ec2_platforms устарели, см. документы .

В случае ошибки учетных данных переместите учетные данные в ~ /. aws / credentials и оставьте в файле просто:

provider "aws" {}

Это также лучший способ с точки зрения безопасности, так как вы не сохраняете учетные данные вместе с кодом. В исходном коде у вас также была опечатка, это access_key не acces_key.

...