🔍まえおき
開発環境からテスト環境、ステージング環境へ簡単に移行できるようにしたい。
そう考えた私は、CloudFormation(以後:CFn)について勉強を始めたので話していくよ。
🔍概要
CFnはJSONやYAMLで書かれたテンプレート文をもとにAWS環境を構築するサービスです。
以下に簡単な動作手順を説明するよ。
動作手順
- CFnコンソール上ではテンプレート文をもとにスタックを作成する。
- 作製したスタックに必要なパラメータ(テンプレートで要求するようにしていれば)
を入力し実行 - [CREATE_COMPLETE]と表示されていれば環境構築は完了。
-- 環境構築に失敗した場合は自動でロールバックを行う
🔍テンプレート文の書き方
環境構築を手動でやる代わりに文字で残したって言うのは説明しましたが、
実際テンプレートなんて何を書けばいいのか分からないと思うので解説していくよ。(yaml)
🔎必須
- バージョン
どのバージョンを利用してCFnを利用するか指定
※ 現状バージョンはこれしかないので、このまま貼ってね。
AWSTemplateFormatVersion: "2010-09-09"
- パラメータ
作成したいリソースの名前とか、CIDRとかその他場合によって変わるものは、
ここで宣言しておくと汎用性が高いものが書けるよ。
※ 一応なくても動作はします
Parameters:
- リソース
ここで実際どのAWSリソースをどの設定で起動するか書いていくよ。
※ 基本的に上から順に実行されるので、書く順番には注意!!
Resources:
🔎パラメータの書き方
- 標準入力型
どんな文字でも入れられるようにできるよ。
ただしCIDRやAMI等で無効なものを入力するとエラーになるので注意
ResourceName:
Type: String
Default: (最初から入力される文字)
Description: (入力の説明)
- 選択型
開発段階やtrue,falseでの指定など入力値を指定のものから選ばせたい場合に利用されるよ
Environment:
Type: String
AllowedValues:
- development
- staging
- production
- AWS固有パラメータ
[AWS固有パラメータ]というものを使ってキーペアやサブネットなど既存の選択可能なものを
プルダウン形式として選択できるよ。
※ 一部パラメータはプルダウン不可
KeyName:
Type: "AWS::EC2::KeyPair::KeyName"
Description: (入力の説明)
🔎リソースの設定
利用するAWSリソースを[Type]で宣言し、次の[Properties]で利用するリソース毎の設定を入力するよ。
※今回はEC2起動の設定
PrivateEC2:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref AMIId
KeyName: !Ref KeyName
InstanceType: !Ref InstanceType
NetworkInterfaces:
- AssociatePublicIpAddress: false
DeviceIndex: 0
SubnetId: !Ref SubnetId
Tags:
- Key: Name
Value: !Ref EC2Name
🔎パラメータを利用しての設定方法
上記の例にも書いているように[!Ref]に続けてパラメータで作成したリソース名を宣言することで
そこで設定したリソース名をパラメータで利用できるよ。
!Ref EC2Name
👓真実はいつも1つ!(結論)
今回はCFnについて基本的なことを説明しました。このほかにも複数のファイルを組み合わせる
ネスト化なども利用することで、さらにいろいろなことができるようになるんじゃないかな(勉強中)