紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【AWS】既存の本番環境から #CloudFormation のテンプレートを作る方法

f:id:yokoyantech:20181207175720p:plain

はじめに

はじめてCloudFormationでAWS環境を構築しました。 便利すぎて涙が出たので作業内容を共有します。

やりたいこと

  • すでに手動で構築した別プロダクトのProduction環境の構成をテンプレート化したい。
  • テンプレートを流用して、別プロダクトのAWS環境を構築したい。
    • イメージとしては、VPCのCIDRが違うだけで、Subnetの切り方などはほぼ同じにしたい。

今回は、最初の取っ掛かりとして、既存のProduction環境からCloudFormationのテンプレートを出力します。

実現方法

AWS公式のCloudFormer を使用して、既存環境からCloudFormationテンプレートを逆生成する。

docs.aws.amazon.com

CloudFormerのセットアップ手順

  • CloudFormationを開き、 スタックの作成 をクリック

image

  • テンプレートの選択 から、CloudFormer を選択する
    • 次へ をクリック

image

  • 任意のスタックの名前、パスワード、ユーザ名を入力する
    • VPCは、新規作成
    • 次へ をクリック

image

  • オプションは特に指定せず、 次へ をクリック image

  • 確認画面にて、 作成 をクリック image

  • 5分くらいで完了する image

CloudFormerの起動・テンプレートの出力手順

  • CloudFormationのコンソールから、 出力 タブを選択し、URLをクリックする
  • Basic認証がかかっているため、設定したユーザ名、パスワードを入力する
    • 認証に成功すると以下の画面が表示される
  • 東京リージョン を選択して、Create Template をクリック image

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の選択など
    • 今回は未選択とする

image

Managed Services

以下は使っていないため未選択のまま次へ進む。

  • AutoScaling Group
  • Beanstalk
  • OpsWorks

Managed Config

以下は使っていないため未選択のまま次へ進む。

  • AutoScaling Group
  • Beanstalk
  • OpsWorks

Compute

  • production環境で動いているEC2を選択する

image

Storage

テンプレートに含めるEBSボリューム、RDSデータベースインスタンス、ElastiCacheクラスタ、RedshiftクラスタDynamoDBテーブル、SimpleDBドメイン、およびS3バケットを選択します。 RDSデータベースインスタンスのマスターパスワードは、テンプレートにハードコードされることに注意してください。最終的なテンプレートを適切な値で編集する必要があります。

  • 以下を選択
    • RDS
    • S3

Storage Configuration

  • 前段で選択した、RDSに関する項目が自動選択されている
    • DB Subnet Groups
    • DB Parameter Groups image

App Services

  • 使用していないので未選択のまま次へ

image

Security Groups

  • 前段で選択したEC2、RDSに紐づくセキュリティグループ、S3に紐づくバケットポリシーが自動選択されている

Operational

  • Production環境で使用している設定を選択する
    • AutoScalingPolicy
    • CloudWatch Alarms
    • CloudTrail

最終確認

次のリソースを選択しました。テンプレートの論理リソース名は自動的に生成されますが、必要に応じて編集して独自の名前を割り当てることができます。スタックの作成時に返す出力値を選択することもできます。出力値は、AWS CloudFormationタブでスタックを選択すると、AWS管理コンソールに表示されます。論理名を編集するか、出力パラメータを選択するには、変更する各リソースの変更リンクをクリックします。

  • Continue をクリックする

image

CloudFormationTemplate

  • Templateが自動生成される
    • Template名サンプル
      • cloudformer.production.template
    • 出力先
      • default
  • Save Template をクリック

image

出力完了

AWS CloudFormationテンプレートを作成してS3に保存しました。 AWS Management Consoleのテンプレートを使用してスタックを起動できるようになりました。注意:テンプレートを起動すると、テンプレートを保存したS3バケットと同じリージョンで起動されます。これは、テンプレートの作成に使用した領域と同じではありません。

image

出力結果確認

S3バケットに指定したTemplate名で出力されている

image

templateファイルをJSONからYAMLに変換する

CloudFormarはJSON形式でテンプレートを出力します。そのままでは扱いにくいため、YAMLに変換しておくと便利です。

公式情報

docs.aws.amazon.com

手順

  • コンソールから、テンプレートのデザインをクリック image

  • S3バケットからテンプレートファイルを読み込む

    • この時点で何故か日本語が文字化けしてしまう
  • テンプレート言語の選択から、YAML を選択する image

以上でテンプレート作成は完了です!