Open2
terraform import

SSOユーザー権限で使う
terraform import
手順
1. バージョン確認
# バージョンが1.5以上であることを確認
$ terraform -v
2. importブロックの作成
importブロックを記載したtfファイルの作成を作成する
ファイル名は任意でよい
import.tf
import {
to = aws_s3_bucket.xxx
id = "bucketName"
}
import {
to = lambda_function.xxx
id = "lambdaFunctionName"
}
※1: bucketName, lambdaFunctionNameは、コンソールのS3バケット一覧/Lambda関数一覧より確認できる名称
※2: Lambdaの場合、後続の作業実施前にソースの取得元の設定が必要
以下のページ参照
3. generate-config-out
2で作成したimportブロックより、ソースコードを生成
# generate-config-outする → importブロックの内容をもとにgenerated.tfファイルが生成される
$ terraform plan -generate-config-out=generated.tf
4. AWSへデプロイ
(1) 作業ディレクトリから反映する場合
作業ディレクトリ(ルートディレクトリ)で反映する場合
①以下のコマンドを実行
$ terraform plan
$ terraform apply -auto-approve
→ importブロックにより、stateへのimportも実施される
②管理対象のstateに存在するか確認
$ terraform statelist | grep xxx
# 以下、出力結果
aws_lambda_function.xxx
aws_s3_bucket.xxx
(2) 別ディレクトリから反映する場合
例えば、以下のような構成のmodule.hogeに属するリソースを作成する場合
module "hoge" {
source = "../../modules"
・・(省略)・・
}
①importブロックのコメントアウト
別階層で使いたい場合エラーになるので、importブロックをコメントアウトしておく
※以下実際に発生したエラー
その1: importブロックを別ディレクトリに移動させ、コメントアウトせずそのままterraform planした結果
│ Error: Invalid import configuration
│
│ on ../../modules/import.tf line 1:
│ 1: import {
│
│ An import block was detected in "module.hoge". Import blocks are only allowed in the root module.
その2: import.tfのみ作業ディレクトリにおいて、generate-config-outしてできたファイルをmodulesディレクトリに移動してterraform planした結果
Error: Configuration for import target does not exist
│
│ on import_1.tf line 14, in import:
│ 14: to = aws_lambda_function.xxx
│
│ The configuration for the given import target aws_lambda_function.xxx does not exist. If you wish to automatically generate
│ config for this resource, use the -generate-config-out option within terraform plan. Otherwise, make sure the target resource
│ exists within your configuration. For example:
│
│ terraform plan -generate-config-out=generated.tf
②terraform import
①の操作により、importブロックがなしになるので、代わりにterraform importする
$ terraform import module.hoge.aws_lambda_function.xxx lambdaFunctionName
$ terraform import module.hoge.aws_s3_bucket.xxx bucketName
③AWSへデプロイ
# generate-config-outで作成したファイルの移動
$ mv generated.tf ../../modules/
# AWSへデプロイ
$ terraform plan
$ terraform apply -auto-approve
④管理対象のstateに存在するか確認
$ terraform statelist | grep xxx
# 以下、出力結果
module.hoge.aws_lambda_function.xxx
module.hoge.aws_s3_bucket.xxx
参考