「AWS CloudFormation」内でコマンドが用意されていないインフラを「カスタムリソース」を使って自動構築させる:AWSチートシート
AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「AWS CloudFormation」内でコマンドが用意されていないインフラを「カスタムリソース」を使って自動構築させる方法を紹介する。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「AWS CloudFormation」内でコマンドが用意されていないインフラを自動構築したい場合に、CloudFormationの「カスタムリソース」を使って自動構築させる方法を紹介します。
CloudFormationとは
公式ドキュメントでは、CloudFormationを下記のように定義しています。
AWS CloudFormationはAmazon Web Servicesリソースのモデル化およびセットアップに役立つサービスです。リソース管理に割く時間を減らし、AWSで実行するアプリケーションにさらに注力できるようになります。使用するすべてのAWSリソース(Amazon EC2インスタンスやAmazon RDS DBインスタンスなど)を記述するテンプレートを作成すれば、AWS CloudFormationがお客様に代わってこれらのリソースのプロビジョニングや設定を受け持ちます。AWSリソースを個別に作成、設計して、それぞれの依存関係を考える必要はありません。AWS CloudFormationがすべてを処理します。
つまりCloudFormationは、「用意したテンプレートに基づいてインフラ環境を自動構築できるサービス」です。下記のような要望が上がったら、CloudFormationの出番です。
- AWSリソースの管理、構築を効率化したい
- 開発標準に基づいてインフラを作成、更新したい
- リソースの依存関係やプロビジョニングの順序を確実にしたい
CloudFormationには下記のような特徴があります。
- 一度テンプレートを作成すれば、同じ構成を再現できる
- 開発環境の構築
- ブログシステム、Webシステム、ゲームプラットフォームなど、同じ仕組みでアプリやデータが異なるようなもの
- ベストプラクティスが盛り込まれたテンプレートが使用可能
- 複数のAZ(Availability Zone)をまたいでリソースを配置する可用性の高い構成
- セキュリティ要件を満たす上での必須ソフト、設定が入った構成
- 起動時にパラメーターを渡せる
- 例えばDBのエンドポイントをEC2に渡せる
なおCloudFormationの利用自体は無料なので気兼ねなく使うことができます(もちろんCloudFormationで立てたEC2やRDSなどに対しては料金が発生します)。
テンプレートとスタック
CloudFormation内で出てくる「テンプレート」「スタック」について簡単に説明します。
テンプレート
どういうリソースが欲しいかについて、JSONかYAMLのどちらかで記載したファイルのことです。依存関係や順番もまとめて記載できます。
例えば、新しく「AWS Identity and Access Management」(IAM)ロールを作り、そのロールを使って「AWS Lambda」内で別の処理をさせたい場合、IAMが完成するまでLambdaの処理を待たせることができます。
スタック
テンプレートから作られたリソースの集合体のことです。スタック単位で管理できるので、ワンクリックで、ひも付いた全てのリソースを削除するといったことができます。
テンプレートとスタックは下図のような関係にあります。
テンプレートをJSON/YAML形式で書いて、それをCloudFormationに入れることでリソースを作ります。その際にできたリソース全体をひとまとめに「スタック」といいます。
ほとんどの場合、このCloudFormationやそれに派生する「AWS Serverless Application Model」(SAM)、「Amazon Elastic Container Service」(ECS)、「AWS Amplify」といった、より便利なサービスが登場していることもあり、インフラの自動構築はそれらで事足りることが多いでしょう。ですが、AWS側の都合なのか、SDK(Pythonなら「Boto3」)では用意されているのに、CloudFormationでは用意されていないコマンドがあります。
そういった場合は「通常のCloudFormationの書き方では実行できないので諦めるかしかないか……」というとそうでもなく、これから紹介するカスタムリソースを使えばCloudFormationの中で実行可能です。
カスタムリソースとは
まずは公式ドキュメントから定義を確認します。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「AWS Lambda」が拡張機能を介して各種運用ツールと統合可能に
サーバのプロビジョニングや管理をすることなくコードを実行できる「AWS Lambda」サービスが利用しやすくなった。AWS Lambda拡張機能を使うことでモニタリングや可観測性、セキュリティ、ガバナンスのための運用ツールをAWS Lambdaと統合して利用できる。 - 1000万ダウンロード規模の「ロマサガRS」が障害を回避できた理由
アカツキでエンジニアを務める駒井祐人氏が、スマートフォンゲームアプリ「ロマサガRS」でどのように障害を回避したのか紹介した。 - 「AWS Cloud Development Kit」をAWSが正式リリース、インフラとアプリを同時に管理
Amazon Web Services(AWS)は、オープンソースのソフトウェア開発フレームワーク「AWS Cloud Development Kit」(AWS CDK)の一般提供を開始した。YAMLやJSONを使ったインフラ管理と比較してさまざまなメリットがあるという。