mon fichier Terraform simple est:
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"
}
}
Tout ce que j'essaie de faire est de remplacer mon backend de local à stocker à S3. Je fais ce qui suit:
terraform init
(lorsque le bloc Terrafrom {} est un commentaire)
terrafrom apply
- Je peux voir dans mon AWS que le godet a été créé et la table Dynmpo aussi.
maintenant, je vais commenter le bloc Terrafrom et encore terraform init
Et je reçois l'erreur suivante:
Error loading state:
AccessDenied: Access Denied
status code: 403, request id: xxx, Host id: xxxx
Mon iam a administrer l'accès J'utilise Terraform v0.12.24
Comme on peut observer, je vais écrire directement ma clé AWS et Secret dans le fichier
qu'est-ce que je fais mal? Appréciez l'aide!
J'ai déjà rencontré cela auparavant. Voici les étapes qui vous aideront à surmonter cette erreur.
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>"
}
}
L'erreur devrait être partie.
J'ai aussi confronté le même problème. Ensuite, je supprimai manuellement le fichier d'état de mon système local. Vous pouvez trouver le fichier TerraForm.tfstate sous .Terraform/répertoire et exécuter init à nouveau. Si vous aviez plusieurs profils configurés dans AWS CLI. Sans mentionner le profil sous la configuration du fournisseur AWS effectuera un profil par défaut TerraForm.
J'ai choisi son contournement mais rien n'a d'aide. J'espère que cela résoudra votre problème. Mon cas: Je migratitais l'état de la section locale et AWS S3 Seau.
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"
pour créer des ressources (S3 Bucket et DynamoDB)
AWS_PROFILE=REPLACE_IT_WITH_YOUR TF_LOG=DEBUG terraform init
Si vous obtenez des erreurs, recherchez simplement 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
Copier la valeur de X-Amz-Bucket-Region
, mon cas est eu-central-1
.
region
dans la configuration du backend TerraForm à la valeur correspondante.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
}
}
Il n'est pas possible de créer le godet S3 que vous envisagez d'utiliser comme stockage de l'état distant dans le même projet Terraform. Vous devrez créer un autre projet TERRAFORM dans lequel vous prévoyez vos godets d'états (+ tables de verrouillage) ou simplement créer le godet manuellement.
Pour une réponse plus détaillée, veuillez lire - Ceci