delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

terraform importで指定するオプションは対象のサービスによって異なる

tech.layerx.co.jp

上記の記事を参考にさせて頂いて

  1. まずはAWSマネージメントコンソール上でインフラを作成する
  2. terraform importで取り込む
  3. 作成されたtfstateを参考にしつつオプションを調べる

という手順でTerraformの定義を実装していた。

その際にterraform importのオプション指定の仕方が対象のAWSサービスによって微妙に異なるということを知ったのでメモしておく。

S3の場合

以下のように定義していたとする。(同名のバケットAWSマネージメントコンソールで作成済みの前提)

resource "aws_s3_bucket" "example-bucket" {
    bucket = "example-bucket"
}

以下のようにterraform import <プロバイダ>_<タイプ>.<リソース名> <バケット名>とするとインポートに成功する。

terraform import aws_s3_bucket.example-bucket example-bucket

SQSの場合

SQSの場合も同じようにいけると思い、以下のようなコマンドを実行した。

import aws_sqs_queue.example-queue example-queue

すると以下のようなエラーメッセージが出た。

Error: SQS Queue URL (example-queue) is in the incorrect format

公式ドキュメントのimportの項を読んだところ、SQSの場合はキュー名ではなくキューのURLを指定しないといけないらしい。 registry.terraform.io

正しいコマンド

terraform import aws_sqs_queue.example-queue https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxxx/example-queue

公式ドキュメントにはAWSの各サービスごとのimportコマンドのサンプルが必ず乗っているようなので、それを確認するようにする。