BlogAbout2019.01.21【AWS】Cloudformationテンプレートの活用AWSCloudformationCloudformationとは「テンプレートに記述されたAWSリソース群の構築とその管理するサービス」です。Cloudformationによって管理されるAWSリソース群を「スタック」と呼びます。Coudformationスタックを作成する際に使用する定義ファイルを「テンプレート」と呼びます。テンプレートとしてAWSリソースをコードに落とし込むことができるので、インフラリソースをコードで管理することでもできますし、サクッと高品質なAWSリソースを構築することもできるようになります。デモ用テンプレートスタック構成Cloudformationスタックのデモとして、VPCの簡単なスタックのテンプレートを作成しました。https://github.com/YoshinoriSatoh/cloudformation-templates/blob/master/vpc/basic.yaml本テンプレートでは、以下のAWSリソースが作成されます。VPCサブネットセキュリティグループルートテーブルインターネットゲートウェイ上記の構成図のようなVPCネットワークが構築されます。このネットワーク内に、例えばEC2やELBを配置したり、プライベートネットワークやNATゲートウェイを追加して、RDSを構築したりと、活用方法は様々です。サンプル構成例ですので、あまり内容がわからない場合でも、以降の説明には支障ありません。デモ用テンプレートの解説デモ用テンプレートには、以下のセクションが記述されています。ParametersResourcesOutputsParametersテンプレートには、マネジメントコンソールやCLIオプションなど、外部からパラメータを入力することができます。デモ用テンプレートでは、VPCと各サブネットのCIDRブロックをパラメータとして指定できように、Parametersセクションを記述しています。10.0.2.0/24ResourcesCloudformationテンプレートには、色々なセクションが存在しますが、最も基本的かつ必須なものは「Resources」セクションです。セクションには、構築したいAWSリソースを記述します。RouterはVPC内に暗黙的に作成されるものなので、リソースとして意識することはありません。65535OutputsCloudformationスタック内のAWSリソースの中で、参照頻度が高かったり、沢山あるリソースの中からは探しにくい値が出てきます。Outputsはそのような値を、Cloudformationスタックに紐づけて、コンソールやCLIから参照できるようにします。デモ用テンプレートでは、サブネットIDはVPCネットワーク構成を把握する際に参照することが多いので、Outputsに指定しています。"${AWS::StackName}-SecurityGroup"AWSリソース同士の関連を記述テンプレートには、図に示しているAWSリソースの他に「リソース同士の関係性を定義するAWSリソース」が記述されています。サブネットとルートテーブルを紐づけるリソース(SubnetRouteTableAssociation)VPCとインターネットゲートウェイを紐づけるリソース(VPCGatewayAttachment)これらは構成図にはリソースそのものとしては登場しません。これらはマネジメントコンソールから操作する場合は、以下のような操作に相当します。サブネットのルートテーブルの変更インターネットゲートウェイをVPCにアタッチ上記のような操作に相当する設定を、CloudformationテンプレートではAWSリソースの定義として記述できます。「AWSリソース同士の関連性の定義」もテンプレートに記述できます。Cloudformationテンプレートの記述量が多くなることで、複雑で難しそうにも見えてしまいますが、関連する手順までをテンプレートという「単なる設定ファイル」に落とし込むことができます。上記のテンプレートを使用して、実際にCloudformationスタックを作成・更新する手順を説明します。(記事では、Cloudformationデザイナーは使用しません)サービスロールCloudformationにはサービスロールを指定することができます。スタックを作成するユーザーが十分な権限を持っていれば、指定の必要はないのですが、指定されていた方が健全な運用と言えます。Clloudformationとサービスロールについては、別記事でまとめていますので、こちらも参考にしてください。【AWS】Cloudformationとサービスロールマネジメントコンソールによる操作2019年1月現在のマネジメントコンソールでの説明です。前に新しいコンソールになって画面が変わっています。本記事では新しいコンソールで説明しています。この新しいコンソールではまだ日本語化されていませんが、そのうち日本語化されると思います。(いつの間にかさらっと日本語化されると思います。以下のGithubリポジトリのテンプレートをダウンロードしておいてください。nameは適当な名前を入力してください。(demo-vpcなど)Parametersはデフォルト値が入力されているはずです。VPCやサブネットのCIDRブロックを変更できます。AWSリソースに対してタグを付与することができます。必須ではないですが、作成されたリソースがどのスタックによって作成管理されているものなのかがわかりやすくなるので、指定しておいたほうがいいです。Permissionsには、Cloudformationに付与するサービスロールを指定します。こちらも必須ではないのですが、サービスロールを適切に設定する方が健全と言えます。こちらについては、別記事にまとめていますので、参考にしてください。スタック作成が完了すると、ステータスが「CREATE_COMPLETE」となります。作成したスタックに対する更新のユースケースには、以下の2パターンがあります。ここでは、各サブネットのCIDRブロックを変更しています。stackと同様です。template」を選択して、変更したテンプレートをアップロードします。stackと同様です。CLIによる操作Coudformationに慣れるまではマネジメントコンソールを使用した方が簡単かもしれませんが、慣れてくるとCLIを使用した方が工数が少ないので楽です。CICDにも組み込みやすいです。いうパラメータが記述されたファイルも含まれています。以降の各コマンドはダウンロードしたvpcディレクトリ配下で実行してください。パラメータはparameters.jsonに記述しているものが適用されます。オプションは基本的にcreate-stackと同じです。file://parameters.jsonまとめ本記事では、Cloudformationの簡単な解説とテンプレートを使用したスタック構築手順について説明しました。デモとしてシンプルなVPCネットワークを構築しましたが、これをベースにしてもいいですし、汎用的なCloudformationテンプレートを用意して、使いまわしていくとサクッと品質の高いインフラやアプリケーション環境を構築できるようになります。Cloudformationを活用し始める際には、ぜひ本記事を参考にしてください。CLIによる操作まとめ。