我的可用资源是
操作系统 - ubuntu 18.04 |地形 CLI - 地形 v0.12.9 |用户 - 根登录
我的问题是- 我希望tfstate通过 s3 远程存储后端,所以我手动创建了
S3 存储桶 -销售员基础设施
为此我创建了backend.tf文件和我的地形脚本在下面,当我在下面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
您收到的通知是因为这两个变量skip_requesting_account_id
和skip_get_ec2_platforms
已被弃用,请参阅文档。
对于凭据错误,请将凭据移动到 ~/.aws/credentials 中,并在文件中仅保留:
provider "aws" {}
就安全性而言,这也是一种更好的做法,因为您不会将凭据与代码一起存储。在您的原始代码中,您还有一个错字,access_key
不是acces_key
.
S3 状态存储后端和 AWS 提供程序是两个需要单独配置的独立组件。
通常,我们避免使用标准 AWS 环境变量或凭证文件直接配置它们,AWS 提供商和 S3 后端将自动读取和使用这些文件。
对于需要为后端和提供商使用单独凭证的更复杂的场景,Terraform 文档部分多账户 AWS 架构提供了一个参考架构,允许仍使用标准 AWS 凭证机制,同时让 AWS 提供商承担特殊角色来获取特定 AWS 账户所需的访问权限。
AWS提供商和 S3 后端上的access_key
和secret_key
配置参数适用于不适合使用标准 AWS 凭证机制的非常不寻常的情况。使用这些应该非常罕见,但是如果您选择使用它们,则需要在provider "aws"
块和backend "s3"
块中分别设置它们。我建议将这些论点视为最后的手段,并且只有在您尝试了所有其他选项并得出结论认为由于某种原因不适合您的不寻常情况时才使用它们。