🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

Q&A

解決済

1回答

3366閲覧

Terraformにてresource not foundでのstate lockエラーの解決について

Yuta_for

総合スコア21

Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

0グッド

0クリップ

投稿2021/02/17 14:01

概要

Terraformの学習でState Lockingの導入の練習で詰まっている箇所があります。

terraform

1# Specify the provider and access details 2provider "aws" { 3 region = "ap-northeast-1" 4 profile = "default" 5} 6 7terraform { 8 backend "s3" { 9 key = "terraform.tfstate" 10 bucket = "terraform-sample-yuta" 11 region = "ap-northeast-1" 12 dynamodb_table = "terraform-state-lock-dynamo" 13 } 14} 15 16resource "aws_dynamodb_table" "dynamodb-terraform-state-lock" { 17 name = "terraform-state-lock-dynamo" 18 hash_key = "LockID" 19 read_capacity = 20 20 write_capacity = 20 21 22 attribute { 23 name = "LockID" 24 type = "S" 25 } 26 27 tags = { 28 Name = "DynamoDB State Lock Table" 29 } 30} 31 32resource "aws_instance" "web" { 33 instance_type = "t3.small" 34 # Amazon Linux2 35 ami = "ami-0992fc94ca0f1415a" 36 count = 1 37 tags = { 38 Name = "EC2 instance terraform" 39 } 40} 41

こちらのHCLファイルをterraform planで実行しますと以下のエラーがでます。

$ terraform plan Error: Error locking state: Error acquiring the state lock: 2 errors occurred: * ResourceNotFoundException: Requested resource not found * ResourceNotFoundException: Requested resource not found Terraform acquires a state lock to protect the state from being written by multiple users at the same time. Please resolve the issue above and try again. For most commands, you can disable locking with the "-lock=false" flag, but this is not recommended.

エラー内容を確認しますとリクエストしたリソースが見つからないというエラーのように見えます。
2つあるので、DynamoDBとEC2インスタンスの作成でリソースがないと怒られていると思うのですが、分割して実行したときはちゃんと上手く言ったので、足りていないとは思えないです。
非推奨のterraform apply -lock=falseで実行すればいちおう動きますが非推奨なのでなるべく使いたくないという気持ちです。
なにがいけないか分かる方いますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらの方の回答を基に解決に至りました。Terraform error “Error locking state: Error acquiring the state lock: 2 errors occurred”

原因としてはS3バックエンド宣言とDynamoDBの作成を一緒に行うとダメなようです。
まず最初にS3とDynamoDBを作成してから、S3バックエンドの宣言を行う必要があります。

terraform

1# Specify the provider and access details 2provider "aws" { 3 region = "ap-northeast-1" 4 profile = "default" 5} 6 7resource "aws_s3_bucket" "terraform_state" { 8 bucket = "terraform-sample-yuta" 9 10 versioning { 11 enabled = true 12 } 13 14 server_side_encryption_configuration { 15 rule { 16 apply_server_side_encryption_by_default { 17 sse_algorithm = "AES256" 18 } 19 } 20 } 21} 22 23resource "aws_dynamodb_table" "dynamodb-terraform-state-lock" { 24 name = "terraform-state-lock-dynamo" 25 hash_key = "LockID" 26 read_capacity = 20 27 write_capacity = 20 28 29 attribute { 30 name = "LockID" 31 type = "S" 32 } 33 34 tags = { 35 Name = "DynamoDB State Lock Table" 36 } 37} 38 39#terraform { 40# backend "s3" { 41# key = "terraform.tfstate" 42# bucket = "terraform-sample-yuta" 43# region = "ap-northeast-1" 44# dynamodb_table = "terraform-state-lock-dynamo" 45# } 46#}

この状態でterraform initterraform applyを実施しS3とDynamoDBを作成後、改めてS3バックエンド宣言を行うことでリソースの作成に成功することが出来ました。

terraform apply ~~~~~~~~~~~~~~~~ Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

投稿2021/02/20 08:41

Yuta_for

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問