2017-12-15 12 views
1

terraform.tfstateファイルを作成するアクセス権を持つS3バケットを作成するにはどうすればよいですか?どのようにしてtfstateをバケットに入れるのですか?これを行う適切な方法は何ですか?terraformバックエンドs3バケット作成は、Terraform 0.11.1を返します。

はじめに、私はこれを理解するために6時間以上を費やしました。私はsimilar postがMFAに起因する問題を見た。それは私の問題ではない。

EC2インスタンス、VPCなどのリソースを作成するのに同じコードを使用しています。

---[ REQUEST POST-SIGN ]----------------------------- 
GET /?prefix=env%3A%2F HTTP/1.1 
Host: tfstate-neonaluminum.s3.us-east-2.amazonaws.com 
User-Agent: aws-sdk-go/1.10.36 (go1.9.2; darwin; amd64) APN/1.0 HashiCorp/1.0 Terraform/0.11.1 
Authorization: AWS4-HMAC-SHA256 Credential=<CUT>/20171215/us-east-2/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=<CUT> 
X-Amz-Content-Sha256: <CUT> 
X-Amz-Date: 20171215T103755Z 
Accept-Encoding: gzip 

----------------------------------------------------- 
2017/12/15 04:37:55 [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, 15 Dec 2017 10:37:55 GMT 
Server: AmazonS3 
X-Amz-Bucket-Region: us-east-2 
X-Amz-Id-2: UwWJlCAtabKny2Ncam+D7/s9Rozjw43ozsVNdtZgQqPSXoSvZbO3JnuPz3B9cmLcgYea6x8xPqQ= 
X-Amz-Request-Id: 470C02B96A60090B 

ここ.tfコードです: - stackoverflowの上の質問をする新しい

provider "aws" { 
    access_key = "${var.aws_access_key}" 
    secret_key = "${var.aws_secret_key}" 
    region = "${var.region}" 
} 

terraform { 
    backend "s3" { 
    bucket = "tfstate-neonaluminum" 
     key = "terraform.tfstate" 
    region = "us-east-2" 
    } 
} 
resource "aws_s3_bucket" "terraform_state_bucket" { 
    bucket = "tfstate-neonaluminum" 
    acl = "private" 
    tags { 
    management = "terraform" 
    } 
} 

は、私は必要なすべての詳細を残していなかった願っています。

+0

あなたの提供されたキー( 'var.aws_access_key')はs3バケット' tfstate-neonalumin'への書き込み権限とリスト権限を持っていますか? – fishi

+0

実際にTerraformによって作成されたバケットを使ってs3をバックエンドとして使用することは可能でしょうか?いずれにしてもわかりませんが、Terraformを実行する前にバケツが存在する必要があります。それ以外の場合、状態ファイルはどのように取得されますか? – timothyclifford

+0

はい、私は既にterraformでS3バケットを作成しました。バケツを作成したのと同じキーを使用してバケットに書き込むことができますか? – Neal

答えて

1

残念ながら、それはTerraformへのバックエンドとしてS3を使用するための1つの警告です。手動でバケットを作成する必要があります。時には、一般的なパターンは、組織が複数のAWSアカウントを持つことです(さまざまな理由で、Terraformの状態だけでなく)。これは可能なオプションである可能性があります。そのアカウントにS3バケットを作成することができますTerraformによって定義された他のアカウントのインフラストラクチャのすべて - 個人的には、自分のアカウントで手動で作成します。

Terraformで管理したい場合は、実際にterraform importでバケツをインポートしてください。ちょうど鶏肉と卵の問題が残っています。または、バケットの作成中に最初にローカル状態を使用し、後でそれを定義します。どちらの方法でも、リソースオブジェクトを介してバケットを動的に参照することはできません。

しかし、あなたはTerraformでバケットを同時に作成することはできません。

+0

これは意味があります。私は実際にローカル状態ファイルを作成し、リモート状態ファイルを使用するようにtfスクリプトを変更したいと思います。 – Neal

+0

My S3バケットはリモートで作成されます。コンソールからS3のtf状態ファイルを削除できますか? – Neal

+0

@Nealそれをローカルからリモートに変更し、適用を実行する - Terraformはあなたのためにそれを行います –

関連する問題