我的简单Terraform文件如下:
provider "aws" {
region = "region"
access_key = "key"
secret_key = "secret_key"
}
terraform {
backend "s3" {
# Replace this with your bucket name!
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
# Replace this with your DynamoDB table name!
dynamodb_table = "great-name-locks-2"
encrypt = true
}
}
resource "aws_s3_bucket" "terraform_state" {
bucket = "great-name-terraform-state-2"
# Enable versioning so we can see the full revision history of our
# state files
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
}
resource "aws_dynamodb_table" "terraform_locks" {
name = "great-name-locks-2"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
我所做的就是将后端从本地替换到S3存储。 我正在执行以下操作:
terraform init
(当terraform {}
语句块被注释掉时)terrafrom apply
- 我可以在我的 AWS 中看到 Bucket 已经创建并且 Dynamo 表也已经创建。现在我正在取消注释 terraform 代码块,然后再运行
terraform init
,但是我收到了以下错误提示:
Error loading state:
AccessDenied: Access Denied
status code: 403, request id: xxx, host id: xxxx
我的身份和访问管理系统(IAM)拥有管理员访问权限
我正在使用Terraform v0.12.24
可以看到,我直接在文件中编写我的AWS密钥和秘钥
我做错了什么吗?
非常感谢任何帮助!
profile = your_profile_name_from_the_aws_credentials_file
。此外,删除.terraform
目录完全是不必要的。 - eatsfoodprofile
属性。不要删除 .terraform 目录,最好不要将access_key
或secret_key
放在其中,而是使用配置文件。 - Edeph