memo.log

技術情報の雑なメモ

【Terraform】count のあるリソースを import する時にハマったこと

例えば以下のような定義があったとして、

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_s3_bucket" "kuredev" {
  count = 1
  bucket = "test-terraform-test-kuredev.info"
}

resource "aws_s3_bucket" "kuredev2" {
  count = 1
  bucket = "test-terraform-test-kuredev.info2"
}

output "s3_bucket" {
  value = aws_s3_bucket.kuredev[0].bucket
}

aws_s3_bucket.kuredev を import する。

% terraform import aws_s3_bucket.kuredev test-terraform-test-kuredev.info

次に kuredev2 を import しようとすると、

% terraform import aws_s3_bucket.kuredev2 test-terraform-test-kuredev.info2

以下のようにエラーになる。

│ Error: Invalid index │ │ on main.tf line 24, in output "s3_bucket": │ 24: value = aws_s3_bucket.kuredev[0].bucket │ ├──────────────── │ │ aws_s3_bucket.kuredev is empty tuple │ │ The given key does not identify an element in this collection value: the collection has │ no elements.

これは import したリソースが count のあるリソースにもかかわらず index が無いためにエラーとなるようだ。

% terraform state list
aws_s3_bucket.kuredev

解消のためには import した後に terraform refresh するとなぜか index が付く。

% terraform refresh   
aws_s3_bucket.kuredev[0]: Refreshing state... [id=test-terraform-test-kuredev.info]

Outputs:

s3_bucket = "test-terraform-test-kuredev.info"

 % terraform state list
aws_s3_bucket.kuredev[0]

import する時に index をつければ良さそうなものだが、なぜか import 時にエラーがでる。

% terraform import aws_s3_bucket.kuredev[0] test-terraform-test-kuredev.info
zsh: no matches found: aws_s3_bucket.kuredev[0]