Pocket

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

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

辛い汗

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

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


■config.tf

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

[Terraform][Backends][v0.9]tfstateファイルの管理方法


■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

Pocket

カテゴリー: AWSTerraform

adachin

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

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