私の単純な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
(terrafrom {}ブロックがコメントのとき)
terrafrom apply
- バケットが作成され、Dynmpoテーブルも作成したことを私のAWSで見ることができます。
今、私はTerraFromブロックと再びコメントしていますterraform init
と私は次のエラーを獲得します。
Error loading state:
AccessDenied: Access Denied
status code: 403, request id: xxx, Host id: xxxx
_
私のIAMはアクセス管理を使用していますTerraform v0.12.24
を観察できるように、私は直接私のAWSキーと秘密をファイルに書き込んでいます
私は何が悪いのですか?助けに感謝します!
私はこれまでに遭遇しました。以下は、そのエラーを克服するのに役立つステップです。
backend "s3" {
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
access_key = "<access-key>"
secret_key = "<secret-key>"
}
}
_
エラーはなくされるべきです。
私も同じ問題に直面しました。次に、私は自分のローカルシステムから状態ファイルを手動で削除します。 terraform.tfstateファイルをfillraform/directoryにあり、もう一度Initを実行できます。 AWS CLIに複数のプロファイルが設定されている場合AWSプロバイダーの設定でプロファイルを言及していないことは、Terraformをデフォルトプロファイルを使用するようになります。
私は隣接していましたが、何も役に立ちません。これがあなたの問題を解決することを願っています。私の訴訟:私は地元からAWS S3のバケツから状態を移行していました。
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"
}
}
terraform init
terraform plan -out test.tfplan
tera apply "test.tfplan"
リソースを作成するには(S3バケットとDynamoDB)
AWS_PROFILE=REPLACE_IT_WITH_YOUR TF_LOG=DEBUG terraform init
エラーが発生した場合は、X-Amz-Bucket-Region:
を検索するだけです
-----------------------------------------------------
2020/08/14 15:54:38 [DEBUG] [aws-sdk-go] DEBUG: Response s3/ListObjects Details:
---[ RESPONSE ]--------------------------------------
HTTP/1.1 403 Forbidden
Connection: close
Transfer-Encoding: chunked
Content-Type: application/xml
Date: Fri, 14 Aug 2020 08:54:37 GMT
Server: AmazonS3
X-Amz-Bucket-Region: eu-central-1
X-Amz-Id-2: REMOVED
X-Amz-Request-Id: REMOVED
X-Amz-Bucket-Region
の値をコピーすると、私の場合はeu-central-1
です。
region
を対応する値に変更します。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
}
}