0
2

AWS CloudFormationがスタックのGit管理をしたので試してみる

Posted at

AWS CloudFormationがスタックのGit管理を導入しました。

昨年の11月、AWS CloudFormation は、Git リポジトリに保存されたテンプレートからスタックを同期できるようになりました。
これにより、Git ワークフローに CloudFormation デプロイを統合し、スタックパラメータやタグなどの値は YAML デプロイファイルで指定でき、Git ファイルで変更履歴を追跡できるようになっています。

またAWS CloudFormationはコミットごとにスタックを自動的に更新してくれるので一回設定をしてしまえば継続してリソースを最新化してくれます。Git 同期は、GitHub や GitLab などのサービスで動作し東京リージョンをはじめ、多くのリージョンで利用可能です。

今回はこの機能を試してみたいと思います。
AWS マネジメントコンソールで確認していきます。

用語説明

デモの前に用語の説明を行います。今回はデプロイファイルとスタックテンプレートを作成していきます。
スタックテンプレートはCloudfromationを実行する際に普段作成するjson/Yamlファイルを指しており、詳細は割愛します。

デプロイファイル

デプロイファイルはCloudFormation スタックを管理するパラメータと値を含むJson/Yaml形式のファイルです。
このファイルへの変更がリポジトリにコミットされると、関連するスタックが自動的に更新されます。

  • template-file-path
    CloudFormation テンプレート ファイルのリポジトリの完全パスを記載します。

  • parameters
    パラメーターにて、ポート番号やタスク設定などのキーと値を記載します。最大 50 個のパラメータを含めることができます。

  • tags
    タグにて、スタック内のリソースのタグ設定が可能です。最大 50 個のタグを含めることができます。

スタックの作成

image.png
まずはCloudfromationでスタックを作成します。

image.png

早速テンプレートの設定の項目に既存のS3とテンプレートのアップロードに加え「Gitから同期」の項目が増えています。
注意書きにもありますが、この機能はAWSのコンプライアンスプログラムの対象外となります。

image.png
次の画面で適当に名前を作成し、デプロイファイルの作成方法を記載します。
Json/Yaml形式のファイルで自分で作成して使用することもできますが、この画面で作成することもできるため今回は後者で進めます。

image.png
続いて、同期するGitレポジトリを指定します。
2回目以降はリンクされているGitレポジトリを使用してリンクの作業を省略できます。
今回はGitHubと連携します。

早速接続の項目で、「新しい接続を作成する」を選択し、Gitとのリンクを作成します。
image.png
任意の名前を選択し、次に進むと以下の画面に切り替わります。
image.png
image.png
「新しいアプリをインストールする」をクリックするとGitのログインに移るためログインを完了することで認証が完了します。

Photokako-mosaic-Wuh84MoMlHS2NsIu.png

Cloudfromationのスタック作成画面に戻り先ほど作成した接続名を選択し、レポジトリとブランチを指定します。
デプロイファイルのパスを指定しますが、今回はわかりやすくdeployfile.yamlと記載します。

image.png

IAMロールは今回は新規に作成します。
事前作成する場合、以下の権限が必要です。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/git-sync-prereq.html

  • cloudformation:CreateChangeSet
  • cloudformation:DeleteChangeSet
  • cloudformation:DescribeChangeSet
  • cloudformation:DescribeStackEvents
  • cloudformation:DescribeStacks
  • cloudformation:ExecuteChangeSet
  • cloudformation:ListChangeSets
  • cloudformation:ValidateTemplate
  • events:PutRule
  • events:PutTargets

テンプレートファイル名はstacktemplate.yamlと指定します。この時点でGit上にファイルはまだ格納していません。
タグを任意に設定したらスタックを作成します。
image.png

image.png

作成が完了したらstacktemplate.yamlがまだ格納していないのでなにも実行されていないスタックができています。
事前にstacktemplate.yamlを配置していた場合、リソースが作成されます。

image.png
Git Hubを確認するとdeployfile.yamlのプルリクエストが届いているため、内容を確認し、承認します。

image.png
上記のようなファイルが作成されたはずです。

続いてstacktemplate.yamlを配置します。
テスト用のVPCを作成するテンプレートを格納します。

stacktemplate.yaml
AWSTemplateFormatVersion: "2010-09-09"

Resources:
  VPCname:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.10.0.0/16
      Tags:
        -
          Key: Name
          Value: Gittest

image.png
格納が完了すると自動的にリソースが作成されます。

続いて、stacktemplate.yamlにサブネット作成の処理を追加してコミットしてみます。

stacktemplate.yaml
AWSTemplateFormatVersion: "2010-09-09"

Resources:
  VPCname:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.10.0.0/16
      Tags:
        -
          Key: Name
          Value: Gittest
  Subnetname:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.10.1.0/24
      MapPublicIpOnLaunch: true
      VpcId: !Ref VPCname
      AvailabilityZone: 
        Fn::Select: 
          - 0
          - Fn::GetAZs: ""
      Tags:
        - Key: Name
          Value: GittestSubnet

image.png

image.png
サブネットも無事作成されました。

image.png
また、Gitと同期タブからログも確認できるため、失敗した場合のエラー調査も可能です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2