Terraformチュートリアルをやってみた
こんにちは、iCAREサーバーサイドエンジニアの寺井(@krpk1900_dev)です。
私は普段RailsとGraphQLを用いたサーバーサイドの開発を担当していますが、最近はインフラ技術について強い関心があります。
そこで、以前のAWSの記事に引き続き、今回はTerraformについて書いていきたいと思います。
はじめに
今回の記事ではTerraformの詳細な説明は省略し、公式チュートリアル
と三菱総研DCS様の記事にしたがって実際に手を動かし、Terraformによってインフラの構築を行っていきます。
Terraformのinstall
どちらの記事でも紹介されていませんが、Terraformはバージョンアップによって仕様の変更が多いようなので、バージョン管理できるようにtfenvによってTerraformをinstallしたいと思います。
まずはtfenvをinstallします。
次にtfenvで最新版のTerraformをinstallします。
これでTerraformのinstallは完了しました。
インフラの構築
Terraformではコマンド実行時にいるディレクトリ配下に存在する.tfファイルをすべて読み込むため、あらかじめ作業ディレクトリを作成してそこで作業を行いたいと思います。
今回はAWSでインフラの構成を行っていくため、
で、AWS Access Key IDとAWS Secret Access Keyを設定します。
まずはmain.tfファイルから作成していきます。
terraformブロックではTerraform自体の定義を、providerブロックでは構成するプロバイダ(AWS、Googleなど)の指定を行っています。
次に、EC2インスタンスを1台たてるaws_ec2.tfファイルを作成します。
resourceブロックでは、構成するインフラのコンポーネント(EC2やVPCなど)を定義しています。
いったんこの段階でEC2インスタンスをたてることができるか確認したいと思います。
以下のコマンドを実行することで、必要なプラグインの初期化が行われます。
次に、以下のコマンドでコードのフォーマットを行います。
フォーマットによってコードが変更されたファイルがあれば出力されます。
最後の準備として、インフラ構成の検証を行います。
構成に問題がなければ、Success! The configuration is valid.
と出力されます。
インフラ構築の準備が整ったので、記述したコードを適用していきます。
適用する前後のインフラ構成の差分が出力されるので、確認して問題なければ続けてyesを入力すると、記述したコードに基づいてインフラ構築が行われます。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
と出力され無事完了したようです。
AWSマネジメントコンソールのEC2画面を開いて本当にEC2インスタンスがたっているか見にいきたいと思います。
たしかに1台たっていることが確認できました。
インフラの変更
次はインフラ構成の変更を行ってみたいと思います。
変更後のインフラ構成は三菱総研DCS様の記事を参考にして、以下の構成にしたいと思います。
(三菱総研DCS様の記事より引用)
VPC、サブネット、インターネットゲートウェイ、ルートテーブル、セキュリティグループを設定したaws_vpc.tfファイルを作成します。
次に、先ほど作成したaws_ec2.tfファイルを変更します。
サブネットとセキュリティグループの設定と、立てたEC2インスタンス上でApacheを起動するシェルスクリプトを追加します。
ファイルに変更を加えたので改めてフォーマットと検証を実行し、インフラ構成の変更を適用します。
Plan: 7 to add, 0 to change, 1 to destroy.
EC2インスタンスの設定の変更は、インスタンスを削除して新しく作ることで適用させるようです。
Apply complete! Resources: 7 added, 0 changed, 1 destroyed.
完了したようなので、AWSのVPCの画面を見にいきたいと思います。
新しくVPCが作成されていることが確認できました。
さらに、EC2の画面で確認できるパブリックIPアドレスに接続して、たてたEC2インスタンス上でApacheが起動していることも確認できました。
インフラの削除
最後に、Terraformで構築したインフラ構成を削除します。
以下のコマンドで、Terraformで構築したインフラ構成を一括削除することができます。
Destroy complete! Resources: 7 destroyed.
AWSの画面上でも、作成したVPCとEC2インスタンスが削除されていることを確認できました。
おわりに
実務で稼働しているサービスのインフラ構成をコードにするようなレベルではなく、今回やったようなチュートリアルを通してインフラを構築してみるレベルでは、予想以上に簡単にできました。
逆にTerraformで難しい点はどこに当たるのかが気になり、iCAREのインフラ技術顧問である馬場さんに伺ったところ、主に以下の2点であるようです。
- Stateの管理
- 関連するリソースを漏れなく書き下ろす難易度が高い
今回Terraformのチュートリアルを手を動かしてやってみて概要が掴めたことはとても良かったですが、まずは手動でも良いのでAWSの1つ1つの機能の理解を深めて、その後でもう一度Terraformに戻ってきたいと思います。
また、DockerやKubernetesなど深堀りしたいテーマが溜まっているので、引き続きインフラの勉強を続けていきたいと思います。