LINEで送る
Pocket

手動で構築したやつもterraform化したい!

そんな願いを叶えるのがimport
例えばcloudfrontの設定を1からコード化するのは非常に……

辛い汗

ならば一旦手動で作り、からのimportして相違直して、
あとで変数化すれば工数が圧倒的に少ない!
というわけで今回は既存にあるインスタンスをterraform化してみます。

・追記
v0.10.1からtfstateファイルをbackendで管理している場合、
自動的にs3に反映されるようになったので以下のs3にcpする必要はありません。


■config.tf

tfstateファイルはbackendでS3に管理しています。

https://blog.adachin.me/wordpress/archives/5884


■terraform apply

apply時に必ずローカルにterraform.tfstate.backupが作られるので
これが命!

・terraform.tfstate.backupからterraform.tfstateにコピー


■fix ec2 tf file

・aws_ec2.tf

既にvpc,セキュリティグループ、EC2,EIP作成をコード化してます。
26行目に今回importしたいインスタンス名を追記します。


 ■terraform import

https://www.terraform.io/docs/import/usage.html

上記web01のインスタンスとEIPをインポートしてみます。
どうやら公式にはインスタンスの場合インスタンスID
EIPはアロケーションIDを指定します。

できた!


■terraform.tfstate copy to S3

先程importしたものがtfstateに書き込まれているので
このまま$ terraform planとやっても
ローカルのtfstateを見てしまうので何も相違はありません。
上記のようにS3にtfstateファイルを管理しているのでコピーします。

・terraform init

一旦ローカルに同期させます。(しなくていいかも)


■terraform plan

さあここで相違しまくってるので修正します。
参考にするのはtfstateファイルに全てJSONで書かれているので
照らし合わながら進めていきます。
地道な戦い…..

むむ!

(forces new resource)となってるのでなんか設定違うような….
このままだとインスタンスdestroyされる!w


 ■after fix… terraform plan

単純な間違えでしたw
それではplanして相違なかったらapplyしてみます。

 キタコレ!

  問題なし!


■まとめ

これで手動で作ったのも問題なくterraform化できましたが、
変数化できないのでちゃんと1から作ったほうがいいですね。(無理してやらないほうがいい)
別AWSにリプレイスとかなった場合に変数化してればメンテする必要ないので。。
ちなみにv0.10だとbackendで管理している場合はローカルtfstateファイルが反映されないバグがあるようで
いくらterraform planしても相違がないというw

https://github.com/hashicorp/terraform/issues/15735

※追記
terraform 0.10.1でバグ治った臭い(後で試してみる)
→普通にローカルからbackend(s3)に反映された!
バグ直しありがとう!!

https://github.com/hashicorp/terraform/pull/15768

LINEで送る
Pocket

カテゴリー: AWSTerraform

あだちん

1989年生まれ。 ランサーズ/SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、他社インフラレスポンス改善、ランサーズでの副業、ansibleでのインフラコード化を推進し、未経験によるエンジニアのMENTAなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/広報/VulsRepo init file,chatwork通知のコントリビュータでもある。現在はDocker開発環境の提供,AWSで新サービスのインフラ構築,PHPバージョンアップ,分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなし中。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください