はじめに
はじめてCloudFormationでAWS環境を構築しました。 便利すぎて涙が出たので作業内容を共有します。
やりたいこと
- すでに手動で構築した別プロダクトのProduction環境の構成をテンプレート化したい。
- テンプレートを流用して、別プロダクトのAWS環境を構築したい。
- イメージとしては、VPCのCIDRが違うだけで、Subnetの切り方などはほぼ同じにしたい。
今回は、最初の取っ掛かりとして、既存のProduction環境からCloudFormationのテンプレートを出力します。
実現方法
AWS公式のCloudFormer を使用して、既存環境からCloudFormationテンプレートを逆生成する。
CloudFormerのセットアップ手順
- CloudFormationを開き、 スタックの作成 をクリック
- テンプレートの選択 から、CloudFormer を選択する
- 次へ をクリック
- 任意のスタックの名前、パスワード、ユーザ名を入力する
- VPCは、新規作成
- 次へ をクリック
オプションは特に指定せず、 次へ をクリック
確認画面にて、 作成 をクリック
5分くらいで完了する
CloudFormerの起動・テンプレートの出力手順
- CloudFormationのコンソールから、 出力 タブを選択し、URLをクリックする
- Basic認証がかかっているため、設定したユーザ名、パスワードを入力する
- 認証に成功すると以下の画面が表示される
- 東京リージョン を選択して、Create Template をクリック
DNS設定
- Route53の設定を選択する
- production環境に関係がありそうなものだけを選択する
VPC
- production環境のVPCを選択
VPCネットワーク設定
- 前段で選択したVPCに紐づくものが自動選択されている
- 例
- Subnet
- Internet Gateway
- Customer Gateway
- DHCPオプション
- VPNコネクション
- 例
VPCSecurity
- 前段で選択したVPCに紐づく設定が自動選択される
- 例
- ネットワークACL
- ルートテーブル
- 例
Network
テンプレートに含めるネットワークエントリポイントを選択します。インスタンスが関連付けられているEIPまたはENI、インスタンスまたはAuto Scalingグループが関連付けられているElastic Load Balancerを選択すると、インスタンスまたは自動スケーリンググループがデフォルトでテンプレートに含めるように選択されます次のステップでカスタマイズすることができます。
- EIPの選択など
- 今回は未選択とする
Managed Services
以下は使っていないため未選択のまま次へ進む。
- AutoScaling Group
- Beanstalk
- OpsWorks
Managed Config
以下は使っていないため未選択のまま次へ進む。
- AutoScaling Group
- Beanstalk
- OpsWorks
Compute
- production環境で動いているEC2を選択する
Storage
テンプレートに含めるEBSボリューム、RDSデータベースインスタンス、ElastiCacheクラスタ、RedshiftクラスタDynamoDBテーブル、SimpleDBドメイン、およびS3バケットを選択します。 RDSデータベースインスタンスのマスターパスワードは、テンプレートにハードコードされることに注意してください。最終的なテンプレートを適切な値で編集する必要があります。
- 以下を選択
- RDS
- S3
Storage Configuration
- 前段で選択した、RDSに関する項目が自動選択されている
- DB Subnet Groups
- DB Parameter Groups
App Services
- 使用していないので未選択のまま次へ
Security Groups
- 前段で選択したEC2、RDSに紐づくセキュリティグループ、S3に紐づくバケットポリシーが自動選択されている
Operational
- Production環境で使用している設定を選択する
- AutoScalingPolicy
- CloudWatch Alarms
- CloudTrail
最終確認
次のリソースを選択しました。テンプレートの論理リソース名は自動的に生成されますが、必要に応じて編集して独自の名前を割り当てることができます。スタックの作成時に返す出力値を選択することもできます。出力値は、AWS CloudFormationタブでスタックを選択すると、AWS管理コンソールに表示されます。論理名を編集するか、出力パラメータを選択するには、変更する各リソースの変更リンクをクリックします。
- Continue をクリックする
CloudFormationTemplate
- Templateが自動生成される
- Template名サンプル
cloudformer.production.template
- 出力先
- default
- Template名サンプル
- Save Template をクリック
出力完了
AWS CloudFormationテンプレートを作成してS3に保存しました。 AWS Management Consoleのテンプレートを使用してスタックを起動できるようになりました。注意:テンプレートを起動すると、テンプレートを保存したS3バケットと同じリージョンで起動されます。これは、テンプレートの作成に使用した領域と同じではありません。
出力結果確認
S3バケットに指定したTemplate名で出力されている
templateファイルをJSONからYAMLに変換する
CloudFormarはJSON形式でテンプレートを出力します。そのままでは扱いにくいため、YAMLに変換しておくと便利です。
公式情報
手順
コンソールから、テンプレートのデザインをクリック
S3バケットからテンプレートファイルを読み込む
- この時点で何故か日本語が文字化けしてしまう
- テンプレート言語の選択から、YAML を選択する
以上でテンプレート作成は完了です!