Overview
There are some parts that I don't understand when I study State Locking of Terraform.
- terraform v0.14.6
# Specify the provider and access details
provider "aws" {
region = "ap-northeast-1"
profile = "default"
}
terraform {
backend "s3" {
key = "terraform.tfstate"
bucket = "terraform-sample-yuta"
region = "ap-northeast-1"
dynamodb_table = "terraform-state-lock-dynamo"
}
}
resource "aws_dynamodb_table" "dynamodb-terraform-state-lock" {
name = "terraform-state-lock-dynamo"
hash_key = "LockID"
read_capacity = 20
write_capacity = 20
attribute {
name = "LockID"
type = "S"
}
tags = {
Name = "DynamoDB State Lock Table"
}
}
resource "aws_instance" "web" {
instance_type = "t3.small"
# Amazon Linux2
ami = "ami-0992fc94ca0f1415a"
count = 1
tags = {
Name = "EC2 instance terraform"
}
}
I execute this main.tf, terraform plan main.tf and the following error has occurred.
$ 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.
With a similar error, Terraform Error: Error locking state: Error acquiring the state lock: 2 errors occurred:
so, I've created DynamoDB in advance. But, another following error occurred.
Acquiring state lock. This may take a few moments...
aws_instance.web[0]: Refreshing state... [id=i-084998a0833bc68cb]
aws_dynamodb_table.dynamodb-terraform-state-lock: Creating...
Error: error creating DynamoDB Table: ResourceInUseException: Table already exists: terraform-state-lock-dynamo
I can resolve it with the -lock=false flag, but this is not recommended.
Please give me some advice without using the -lock=false flag.