想ひ出23: AWS/CloudFormationに入門する/1
おはようございます、moqrinです。
今更感満載ですが、CloudFormationに入門したので、その学習まとめ1です。
しばらく触らないと忘れるため、個人的後日振り返り用でございます。
なお、また後日、学習を続けてまとめるつもりでございます。
内容としては、公式リファレンスを組み換えたまとめです。
目次
2. テンプレートの作成方法
3. テンプレートの基礎項目
4. 主な組み込み関数
5. その他の重要機能
6. AWS CLIの利用
1. AWS CloudFormationの仕組み
テンプレートを作成
テンプレートをローカルまたは S3 バケットに保存。
ローカルに保存されたテンプレートファイルを指定した場合、AWS CloudFormation はそれを AWS アカウントの S3 バケットにアップロードする
テンプレートのファイルの場所 (ローカルコンピューターのパスや Amazon S3 の URL など) を指定し、AWS CloudFormation スタックを作成する。
用語
テンプレート --- JSON または YAML 形式のテキストファイル。AWS リソースを作成する際の設計図として使用する。
リソースの依存関係はAWS CloudFormationで自動判別してくれる。
スタック --- テンプレートで作成されたリソースのコレクションを管理する単位。スタックを作成、更新、削除することで、リソースのコレクションを作成、更新、削除する。
スタックを削除しても、その中のいくつかのリソースは保持したい場合には、削除ポリシーを使用してそのリソースを保持できる。
2. テンプレートの作成(利用)方法
クイックスタート
サンプルテンプレート & テンプレートスニペット
サンプルからリファレンスを確認して、カスタマイズを施す
ゼロからテンプレート書く
ツールによる書式・構文チェックを活用 VSCodeの"CloudFormation support for Visual Studio Code"
https://marketplace.visualstudio.com/items?itemName=aws-scripting-guy.cform
Linterとしてcfn-python-lint CLIから"aws cloudformation validate-template"よりこちらの方が範囲が広いらしい! (validate-templateで確認していました・・・後日使ってみる。)
https://github.com/awslabs/cfn-python-lint https://marketplace.visualstudio.com/items?itemName=kddejong.vscode-cfn-lint
3. テンプレートの基礎項目
項目 | 内容 |
---|---|
Resources | ※ 必須項目 スタックを構成するリソースとプロパティを指定 |
Parameters | 実行時にユーザ入力を求めるパラメータ値(Keypair名やDBユーザ名など) |
Mappings | キーと値のマッピング。パラメータ値の条件指定に使用 |
Outputs | スタック構築後にAWS CloudFormationから出力させる値(DNSやEIPなど) |
Transform | サーバレスアプリケーションの場合に使用。使用するSAMのバージョンを指定 |
Description | テンプレートの説明文 |
Metadata | テンプレートに関する追加情報 |
AWSTemplateFormatVersion | テンプレートのバージョン |
4. 主な組み込み関数
関数 | 内容 |
---|---|
!Ref | テンプレート内の論理名(ID)から物理名(ID)を参照する |
!GetAtt | リソースが持つ属性値を取得する |
!Join | 文字列の結合 |
!GetAZs | AZを取得する擬似パラメーター |
Fn::ImportValue | エクスポート値を取得する |
Fn::Base64 | Base64エンコード |
Fn::If,Fn::Equals,Fn::Not | 条件関数 |
5. その他の重要機能
- DependsOn 属性: あるリソースに続けて別のリソースを作成する必要があることを指定する
DeletionPolicy 属性: リソースの削除を AWS CloudFormation でどのように処理するかを指定する
Metadata 属性: リソースを含む構造化データを指定する
6. AWS CLIの使用
# テンプレートの検証 aws cloudformation validate-template --template-url file:///home/testuser/mytemplate.json
# 新規作成 aws cloudformation create-stack --stack-name myteststack --template-body file:///home/testuser/mytemplate.json --parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=Parm2,ParameterValue=test2
# 新規作成/複数パラメータ aws cloudformation create-stack --stack-name myteststack --template-body file:///home/testuser/mytemplate.json --parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=SubnetIDs,ParameterValue=SubnetID1\\,SubnetID2
# 更新 aws cloudformation update-stack --stack-name myteststack --template-body file:///home/testuser/mytemplate.json --parameters ParameterKey=Parm1,ParameterValue=test1 ParameterKey=Parm2,ParameterValue=test2
# 削除 aws cloudformation delete-stack --stack-name myteststack
7. CloudFormation ヘルパースクリプト
Amazon EC2 インスタンスでソフトウェアをインストールしたりサービスを開始したりするために使用できる、Python ヘルパースクリプト。
後日の宿題。。。
CloudFormation ヘルパースクリプトリファレンス