web-dev-qa-db-fra.com

Comment résoudre l'état de chargement des erreurs: Access

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:

  1. terraform init (lorsque le bloc Terrafrom {} est un commentaire)

  2. terrafrom apply - Je peux voir dans mon AWS que le godet a été créé et la table Dynmpo aussi.

  3. 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!

4
helpper

J'ai déjà rencontré cela auparavant. Voici les étapes qui vous aideront à surmonter cette erreur.

  1. Supprimer le répertoire .Terraformer
  2. Placez l'Access_Key et Secret_Key sous le bloc Backend. comme le code donné ci-dessous
  3. Run Terraform init
  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.

3
Mintu

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.

1
RVndra Singh

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.

  1. Commenter Terraform Scope
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"
    }
}
  1. Cours
terraform init
terraform plan -out test.tfplan
tera apply "test.tfplan"

pour créer des ressources (S3 Bucket et DynamoDB)

  1. Puis décroît la portée du Terraform, courir
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.

  1. Changez votre 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
  }
}
0
Sanh Phan Văn

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

0
DerPauli