AWS CloudFormation を使用してリソースをプロビジョニング・管理してみる
Title: AWS CloudFormation を使用してリソースをプロビジョニング・管理してみる
こんにちは!よしななです。
今回は、AWS リソースを作成する際にマネージドコンソールから作成では時間がかかるため、
CloudFormation を使用してリソースを作成しました。その時のことを備忘録としてまとめます。
目次
- やりたいこと
- 前提
- AWS CloudFormation とは
- CloudFormation yml ファイルの記法
- 実行してみる
- 実行結果
- リソースの削除
- 最後に
前提
- OS
- Windows 11
- AWS CLI インストール済み
- こちら:を参考に、ローカル環境から AWS にサインインしておく
- Windows 11
- コードエディタ
- VSCode
- AWS 環境にサインインしている状態であること
AWS CloudFormation とは
- AWS リソースのモデル化およびセットアップに役立つサービス
- yaml 形式で書かれたテンプレートを実行することで、CloudFormation がすべての AWS リソース(EC2 インスタンスや RDS DB インスタンスなど)のプロビジョニングや設定を自動的に行ってくれる
- その結果、ソース管理に割く時間を減らし、AWS で実行するアプリケーションにさらに注力できるようになる使用する
公式サイト:
CloudFormation yaml ファイルの記法
以下の公式ドキュメントを参考に、基本的な構文について調べましたので以下にまとめます。
以下、VPC を作成する YAML 形式の CloudFormation テンプレートとなります。
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Details of the CloudFormation template'
Resources:
TestVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
EnableDnsSupport: true
InstanceTenancy: default
Tags:
- Key: Name
Value: TestVPC
AWSTemplateFormatVersion
:テンプレートファイルのバージョン指定(任意)- 作成したテンプレートファイルのバージョンを識別する
- 現在は
2010-09-09
のみサポート
Description
:CloudFormation スタックの説明(任意)- CloudFormation スタックの【説明】欄に入る文言を記載
- 上記の記載では、作成後のCloudFormation スタックの説明欄に
Details of the CloudFormation template
と記載される
Resources
:リソースの定義(必須)- VPC を構成する内容を記載します。
- 上記の CloudFomation テンプレートでは VPC を作成しているため、必須設定であるリソース名:
test-vpc
、リソースタイプ、AWS::EC2::VPC
、VPC の詳細設定であるCidrBlock
、オプションでTags
をあらかじめ指定しています。 - リソース名はアルファベット大文字・小文字のみ入力でないとエラーになるため
そのほか、以下のようなオプション項目があります。
Parameters
- このセクションを利用し、CloudFormation スタックの作成または更新の際にユーザーから入力を受け取ることが可能
- 例:EC2 を CloudFormation テンプレートで作成する際に、インスタンスタイプや AMI(Amazon Machine Image)ID を
Parameters
で登録しておくことにより、CloudFormation テンプレートを起動する際に、ユーザーはParameters
で登録されたインスタンスタイプを選択し、AMI ID を入力するフィールドを表示する、といったことが可能
- 例:EC2 を CloudFormation テンプレートで作成する際に、インスタンスタイプや AMI(Amazon Machine Image)ID を
- このセクションを利用し、CloudFormation スタックの作成または更新の際にユーザーから入力を受け取ることが可能
Outputs
- CloudFormation スタックの作成または更新が完了した後、その CloudFormation スタック内で作成されたリソースの情報を出力するために使われる
- これにより、特定のリソースの ID や URL などの情報を取得し、他の CloudFormation スタックや AWS リソース、アプリケーションで利用することができるようになる
- 例:Web アプリケーションのデプロイメントに CloudFormation を使用している場合、アプリケーションがデプロイされた Amazon EC2 インスタンスのパブリック IP アドレスや、アプリケーションにアクセスするためのロードバランサーの DNS 名を
Outputs
セクションに指定して出力することが可能
- 例:Web アプリケーションのデプロイメントに CloudFormation を使用している場合、アプリケーションがデプロイされた Amazon EC2 インスタンスのパブリック IP アドレスや、アプリケーションにアクセスするためのロードバランサーの DNS 名を
参考URL:
実行してみる
それでは、上記で作成した CloudFormation テンプレートを実行してみます。
※下記コマンド実行前に、CloudFormation の操作権限を持っているロールの Assume role を行っています。
まず、template.json があるディレクトリに移動します。
cd template
次に、以下のコマンドを実行します。
aws cloudformation create-stack --stack-name TestVPC --template-body file://testvpc.yaml
create-stack
コマンドは、指定された AWS CloudFormation テンプレートを読み込み、 CloudFormation スタックを作成します。
--stack-name
は CloudFormation スタック名を、--template-body
で CloudFormation テンプレートが格納されているディレクトリをfile://{CloudFormation テンプレートが格納されているディレクトリ}
で指定します。
また、上記で説明しましたParamaters
を指定しその通りにリソースを作成する、といったことも可能です。
実行が完了すると、以下の画面が表示されます。
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:{アカウントID}:stack/TestVPC/{CloudFormation スタック ID}"
}
実行結果
AWS マネージドコンソールを開きます。
以下の通り、今回作成した CloudFormation スタックが確認できます。
VPC を確認すると、test-vpc
が作成されたことが確認できました。
作成したリソースの削除
CloudFormation マネージドコンソールから削除をクリックするだけで作成した VPC が削除できます。リソースの削除漏れがなくなり、便利です。
以上で「AWS CloudFormation を使用してリソースをプロビジョニング管理してみる」は完了となります。
最後に
AWS を使用するならほぼ必須のサービスだと思います。
IaC サービスには Terraform などもあると思うので、今後比較記事も出してみたいです。
ここまで読んでいただき、ありがとうございました!