- コマンド
import
を使用することで、既存リソースの取り込みができる- 今あるリソースをtfファイルに取り込むことができる ※若干の語弊あり
- 試しにS3のimportの流れを確認した
- 注意:
- もしかしたら、もっと効率の良いやり方があるかもです
- 一部推測で記載している内容があります
概要:Terraformでの既存リソース取り込み
※話をシンプルにするため、正確ではない表現を多様します。ご容赦くださいm( )m
-
Terraformには大きく分けて2つの種類のファイルがある
- tfファイル(〇〇.tf)
- tfstateファイル(□□.tfstate)
-
リソース作成の際に開発者が実際に触るのはtfファイル
-
tfstateファイルはシステムが使用する
-
今回
import
コマンドで作成できるのはtfstateファイル -
取り込む作業は
import
で取り込んだtfstateファイルとtfファイルを差分を無くす作業になる- 差分の確認はコマンドでできるが、tfファイルを直すのは手作業での実施が必要
-
※上記手作業を自動化するための機能として、importブロックがあるが、まだ実験的リリースの段階のため、今回は言及しない
実施手順
- ①作業ディレクトリの作成
- ②main.tfの作成
- ③Terraformの初期化(terraform init)
- ④リソースのインポート(terraform import)
- ⑤planで差分比較→修正
- ⑥tfファイルと既存リソースの紐付け(apply)
①作業ディレクトリの作成
- Terraform実行時に複数のファイルが作成される
- Terraform実行ディレクトリとしてディレクトリを用意する
- 名前はなんでも良い
- 今回は
terraform-s3-import
とした
- 今回は
②main.tfの作成
- 今回は既存リソースの取り込みを行うが、tfファイルはあらかじめ作成しておかないといけない
- 今回は以下のように作成
provider "aws" {
region = "ap-northeast-1" # 使用するAWSリージョン
}
resource "aws_s3_bucket" "import-bucket" {
bucket = "【バケット名】" # ユニークなS3バケット名
}
resource "aws_s3_bucket" "import-bucket" {}
について- リソースの設定を記述する
aws_s3_bucket
- リソースの種類の設定値、今回はS3のため
aws_s3_bucket
- 別種類のリソース(IAMとかLambdaとか)の場合は別の名称になる
import-bucket
- tfファイルでの定義名。任意の値でOK
- プログラムコードで設定する関数名や変数名のイメージ
- importコマンド実行時に使用する
bucket = "【バケット名】"
- バケット名を設定。取り込みたいバケット名を設定
③Terraformの初期化(terraform init)
- ターミナル上、main.tfと同じディレクトリ階層で
terraform init
コマンドを実行
terraform init
- main.tfが無いとエラーになるため、main.tf作成後にコマンドを実行する
- ↑tfファイルが無いとエラーになるという意味です(ファイルの名前は任意です)
Terraform has been successfully initialized!
と表示されたらOK
④リソースのインポート(terraform import)
import
コマンドを実行
terraform import aws_s3_bucket.import-bucket 【バケット名】
- コマンドの中身について
aws_s3_bucket
= リソースの種類import-bucket
= tfファイルのresource
で設定した値と同じにする【バケット名】
= 取り込みたいS3のバケット名を設定
- このコマンド実行によってtfstateファイルが作成される→次のステップでtfファイルと比較する
⑤planで差分比較→修正
plan
コマンドの実行(差分確認)
terraform plan
- 一致しないリソースや設定が表示されるので、その情報からmain.tfを修正する
- 修正したら、再度
plan
コマンドを実行し、差分がなくなるまで繰り返す No changes
と出力されたら差分がなくなったのでOK
⑥tfファイルと既存リソースの紐付け(apply)
- 【推測】この工程は必須ではない?
- 差分がなくなったら、
apply
コマンドでリソースをdeploy- 差分のない
apply
のため、リソースには影響なし
- 差分のない
terraform apply
- 【推測】このコマンド実行によって、システム的にmain.tfと実際のリソースが紐づくのでやっておいた方が良い?
- 差分が無い場合は
No changes
、Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
が出力される
コメント