作成済みのリソースをTerraform管理下に加える - Terraformのきほん
ていねいを心掛けたTerraform記事です。スクリーンショット満載でやった気になれます。
Terraformといえばクラウドリソースの作成ですが、この記事ではローカルPC上のリソース作成で済むように工夫しています。
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。
概要
インフラ管理にTerraformを使用していると、やむにやまれぬ事情で手動で作成したリソースをterraform管理下に加えたい場合が出てきます。
このような場合は importコマンド を使用します。この記事では、importコマンドの使用方法を説明します。
ゴール
作成済みのリソースをimport文でterraform管理下に加えます
必要なもの
- 作業時間:15分
- Terraformを実行できる環境
- tfstateの存在を知っている
importコマンドとは
作成済みのリソースをterraform管理下に加えるためのコマンドで、指定したリソースをtfstateに追加します。
importコマンドの構文
importコマンドの構文は以下の通りです。
第1引数はソース上のリソース名です。このため、あらかじめソース上にリソース名を定義しておく必要があります。ソースに定義されていないリソース名にimportしようとするとエラーとなります。
第2引数はimport対象となる既存のオブジェクトのID等を指定します。具体的な値は対象ごとにことなりプロバイダーのドキュメントを参照して調べます。たとえばEC2の場合はインスタンスIDです。(awsプロバイダーのaws_instanceのimportの説明)
terraform import [ソース上のリソース名] [既存のオブジェクトのID等]
importによるリソース追加の流れ
既存のリソースをterraform管理下に加えるための代表的な流れは以下の通りです。
- ソースコードにリソースを定義する
- importを実行してtfstateを更新する
- planで差分が出ていないか確認する
- 実態とソースに差分があれば修正する
1.の段階で実態と完全に一致するソースが書けていれば不要な手順です
importの実践例
ここからはimportの実演です。私の記事は localプロバイダーのファイルリソース をよく使用するのですが、このリソースはimport非対応です。このため ramdomプロバイダーのランダム文字列リソース を利用して説明します。
-
ソースコードにリソースを定義する
まずは、インポート対象のソースを定義します。lengthが必須なので適当な値として1を設定しておきます。
ramdom.tfresource "random_string" "test" { length = 1 }
-
init
terraform initコマンドで初期化を行います。
-
tfstateにimportする
importする際に必要なパラメーターをランダム文字列ドキュメントのimport項で確認すると、ランダム文字列そのものをパラメーターにすればよいようです。
適当な値でimportを実行してみます。terraform import random_string.test sway-terraform-tutorial
importが成功しました。
tfstateを確認するとパラメーターで指定した「sway-terraform-tutorial」でリソースが作成されています。
-
planでソースの状態と比較する
importしたリソースがソースと一致するかplanコマンドで確認します。
terraform plan
ソース作成時に「length=1」と定義していたため差分が発生しています。
-
実態に合わせてソースを修正する
importしたリソースの値を生と考えてソースを実態に合わせます。
ramdom.tfresource "random_string" "test" { length = 23 }
修正後に再度planコマンドで確認します。
terraform plan
差分なしとなりました! これで無事にterraform管理下に加わりました。
サンプルコード
この記事で作成したコードはgithub上に公開しています。
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。
Discussion