3【爆速Terraform入門】AWS環境をコードで管理してみようnginxAWSEC2環境構築Terraformまえがき東南アジア発のスタートアップスタジオ、GAOGAOでエンジニアをしているMass-minと申します。先日は、GAOGAOにて開発をサポートさせていただいている株式会社Ancar様のアドベントカレンダーで、記事を書かせていただきました!まだ読んでない方は是非!【ザンギョーウはヤメロ】スクラム開発で、チームが絶対に残業してはいけない理由そんなこんなで、今日はAncar様にてサービス開発を行った際に得た技術的知見をアウトプットしていこうかと思います。インフラ構築どうしてる?みなさま、インフラ構築ってどうしてますか?よほど大きな規模のプロダクトやレスポンスにシビアな要求があるプロダクトでない限りは、お手軽さという面でオンプレよりクラウドに軍配が上がるかと思います。AWSやGCP、Azureなどを使っているサービスは、今や世の中の大半を占めると言っても過言ではないかと思われます。そんな今の世の中ですが、一度クラウドサービスのコンソール上でポチポチボタンを押して環境を構築した後、その環境をドキュメントなり何なりで適切に管理、保守出来ているチームは意外に少ないのでは、と思いました。ドキュメントに落とし込んでいれば、同じような環境をもう一度作成する場合のスピードは段違いになりますよね。スタートアップにおいて、仮説検証の段階で環境を作っては壊しを繰り返す場合は顕著です。変更した箇所をちゃんとドキュメントにも反映していれば、わざわざコンソール画面の中で設定の項目を見なくてよくなります。したがって、何かしらのカタチで環境をまるごと管理したいという欲求が出てきます。ここで登場するのがTerraformです。Terraformはクラウド環境を独自の言語でコード化して管理し、コマンド1発で環境のセットアップ、及び削除を行えるツールです。TerraformはHashiCorp社が運営するサービスで、AWSが提供しているわけではありません。AWSに縛られず、GCPやAzureなどの環境もTerraformでコード管理することが出来ます。一度Terraformの書き方を覚えてしまえば、どんな環境でもおおよそコード化して管理できてしまう、というわけです。ステキじゃないですか!というわけで今回は、Terraformの入門編。EC2インスタンスの設定をコード化して、環境構築を行ってみましょう。インストールするTerraformのインストールMacの場合はHomebrewでTerraformがインストールできます。terraform2019/12/03時点では、Ver0.12.16が入りました。初級編さて、ではお待ちかねのEC2インスタンス作成です。Terraformのコードを置くディレクトリを作成しましょう。.tfという拡張子のファイルに書きます。今回はEC2インスタンスに関する記述をするので、ファイル名はec2.tfとしましょう。}}とりあえずこれだけ。この状態で、terraformプロジェクトの初期設定を行います。CLIのcredentials設定が終わっていないかもしれませんね。CLIの設定を見てキーの設定を行ってください。作成計画を確認し、実際にコードを実行するさて、では次に作成される予定のEC2について、作成計画を見てみましょう。planなんかワーって出てきたかと思います。次のステップ、実際にインスタンスを作成するところまでいってみましょう。destroyed.のようになれば作成完了です。AWSのコンソールにいってEC2インスタンスのタブを見てみましょう。作成できたのはいいものの、やっていることがよく分かりませんね。深堀りしてみましょう。ちなみにTerraformのAWS関連公式ドキュメントはこちらです。公式をあたるのが一番早いです。コマンドまず、terraformのコマンドについて。今出てきた3種類は、それぞれ以下のようになっています。Terraformコードの実行したがって、コードを書いたらplanで環境がどうなるかを確認し、OKそうならapplyで実行、という流れになります。ec2.tfの中を見てみましょう。1行1行にコメントを書いてみました。EC2インスタンスに関する記述。}}もうお分かりですね。providerで対象とするサービスを指定し、認証情報やリージョンを設定する。構築したい個々の内容をresourceに書いていく、という感じです。今はEC2のみ設定していますが、RDSやS3、VPCだって同じように書けます。書いていくとだんだん分かるのですが、コード管理できるのはめちゃめちゃ楽ですよ!実践編それではみなさんよいクリスマスを!...とはならず。EC2がポッと1つたっただけでは面白くないですよね。最後に、EC2インスタンスにNginxをインストールしトップページを表示するところまでやって終わりにしましょう。セキュリティグループの設定プラウザからアクセスしてNginxのトップページを表示するには、80番ポートへのアクセスを受け付ける必要があります。そもそもNginxをインストールするためにssh接続してインスタンスにアクセスしなければなりませんね。したがって、22番ポートも開けなければいけません。これらを設定していきましょう。}}まず、セキュリティグループのegressはアウトバウンド、igressはインバウンドのルールに関する記述です。セキュリティグループにルールを複数追加したい場合は、aws_security_group_ruleで記述します。EC2の記述には、セキュリティグループのidについての記述を追加します。applyを叩いてコンソールを見てみましょう。複数ルールが設定されたセキュリティグループが作成されています!EC2インスタンスにも作成されたセキュリティグループが正しく割り当てられていますね!Nginxのインストールさぁ、ここまできたならあとはもう少し。Nginxのインストールを行いましょう。ここで、ssh接続するために鍵の設定が必要になりますので、先にキーペア作成を行っておきます。本筋とずれるので詳細は省きます。やり方はAWS公式ドキュメントをみてくださいね。鍵ファイルが出来ました。自分は作成したファイルを~/.ssh/test_terraform.pemに置いていますので、それをコードに記述していきます。長くなるので、以下はEC2に関する記述の部分だけを記しています。destroyed.と出たら完了です。Nginxが動いているか確認しましょう!まずはTerraformで作成した環境の内容を表示するコマンドを打ってみます。showズラズラと出てきたかと思いますが、これが構築された環境の内容です。EC2の記述の中に、public_ipというのがあると思います。(というか、CLI経由で作ってた時代の手順をわかりやすくコード化した、という風にも言えますねw)いずれにせよコード化が出来たことにより、環境の変更差分等は全てGitで管理できるようになります。保守ができるようになるのではないでしょうか!また、一度よくあるインフラ形態をコード化しておけば、それを他のアプリケーションでも使い回すことが可能になります。requestStockLike8@mass-minスタートアップスタジオGAOGAOで働くWebエンジニア。エンジニア向けコリビングスペース「GAOGAO-TOKYO」運営長。PHP、Rubyが得意言語です。エンジニアメンバーが在籍し、0→1開発特化のプロフェッショナルが集まっています。upLoginユーザーは見つかりませんでした。