ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

GitLabからAWSへ自動反映!GitSyncの設定を試してみた

この記事を共有する

目次

はじめに

こんにちは!パーソル&サーバーワークスの野間です。
今回は、AWS CloudFormation(以下、CloudFormation ) の Git 同期機能(GitSync)を使って、GitLab から AWS にリソースを自動反映する仕組みを試してみました。

GitSync とは?

GitSync は、CloudFormation の Git 同期機能で、Git リポジトリと CloudFormation スタックを連携させる仕組みです。 指定した Git ブランチのテンプレートファイルの変更を自動で検出し、その内容をもとにスタックの変更セットを生成・適用します。

メリット

  • Git リポジトリの操作だけでインフラを管理できる
  • 手動操作のミスを減らせる
  • マージリクエストのチェックが簡単になる

GitSync 設定の流れ(準備編)

今回は以下のようなステップで設定を進めました。

1. GitLab と AWS の接続を作成する

まずは、GitLab とAWS をつなぐための接続を作成します。

  1. AWS マネジメントコンソールで CodePipeline を開き、左ペインの [設定] > [接続] を選択。
  2. [接続を作成] を選択。 codepipeline-create-connection_02.png
  3. プロバイダーを選択。(今回は [GitLab] を選択しました。
  4. 任意の接続名を入力し、[GitLab に接続] を選択。 create-connection.png
  5. 接続のステータスが「利用可能」になれば作業完了です! create-connection-complete.png

2. IAM Role を作成する

GitSync の利用には、「GiySync 用」と「CloudFormation 実行用」の 2 つの Role が必要なので、事前に作成します。

GiySync 用の IAM Role

GitSync を利用するには、CloudFormation や Amazon EventBridge のイベント に関する権限が必要です。 公式ドキュメントに参考の IAM Role が載っているので、今回はこれを利用していきます。

参考:https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/git-sync-prereq.html

CloudFormationテンプレート

  GitSyncRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid : CfnGitSyncTrustPolicy
            Effect: Allow
            Principal:
              Service:
                - cloudformation.sync.codeconnections.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: CodePipelinePolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Sid: SyncToCloudFormation
                Effect: Allow
                Action:
                  - cloudformation:CreateChangeSet
                  - cloudformation:DeleteChangeSet
                  - cloudformation:DescribeChangeSet
                  - cloudformation:DescribeStackEvents
                  - cloudformation:DescribeStacks
                  - cloudformation:ExecuteChangeSet
                  - cloudformation:GetTemplate
                  - cloudformation:ListChangeSets
                  - cloudformation:ListStacks
                  - cloudformation:ValidateTemplate
                Resource: "*"
              - Sid: PolicyForManagedRules
                Effect: Allow
                Action:
                  - events:PutRule
                  - events:PutTargets
                Resource: "*"
                Condition:
                  StringEquals:
                    events:ManagedBy: ["cloudformation.sync.codeconnections.amazonaws.com"]
              - Sid: PolicyForDescribingRule
                Effect: Allow
                Action: events:DescribeRule
                Resource: "*"



CloudFormation 実行用の IAM Role

CloudFormation を実行するための IAM Role を作成します。 今回は VPC を作成するため、対応したマネージドポリシーを使っていきます。

CloudFormationテンプレート

  CloudFormationRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - cloudformation.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonVPCFullAccess



3. CloudFormation のパラメーター用ファイルを作成する

GitSync では CloudFormation の Parameter セクションに記載するパラメーターを別ファイルで管理する必要があります。 今回は以下のファイルを作成し、GitLab リポジトリに格納しました。

  • template-file-path:CloudFormation スタック用のファイルの GitLab リポジトリ上のパス
  • parameters:CloudFormation の Parameter セクションの内容
  • tags:CloudFormation スタックのタグ
template-file-path: vpc.yml
parameters:
  VPCCIDR: 10.0.0.0/16
  PublicSubnet01CIDR: 10.0.1.0/24
tags: {}

CloudFormation スタックの作成

準備が完了したら CloudFormation スタックを作成していきます!

  1. CloudFormation コンソールから、[スタックの作成] > [新しいリソースを使用] を選択します
  2. [Git から同期] を選択します create-cloudformation-stack1.png
  3. CloudFormation スタック名を入力します create-cloudformation-stack2.png
  4. [Git リポジトリをリンクする] > リポジトリプロバイダーを選択(今回は GitLab)
  5. 接続は先程作成した接続を指定します create-cloudformation-stack3.png
  6. リポジトリとブランチを選択します
  7. デプロイファイルのパスは、パラメーターを格納したファイルのパスを指定します
  8. IAM ロールは「GitSync用」の IAM Role を指定します
  9. プルリクエストへのコメントを有効化にします(任意のため無効でも可、後述) create-cloudformation-stack4.png
  10. スタックオプションの設定画面の IAM Role は「CloudFormation用」の IAM Role を指定します create-cloudformation-stack5.png
  11. 後はデフォルト設定のままスタックを作成します

マージリクエストを作成してみる

マージリクエストへのコメントを有効化しているので、どんな表示になるか確認してみたいと思います。
今回はサブネットを 1 つ追加するマージリクエストを作成しました。
create-cloudformation-stack6.png

マージリクエストを作成するとどのような変更が行われるのか、変更セットの内容がコメントされました!
これによりマージリクエストの確認もかなり楽になるのではないでしょうか?

まとめ

GitLab への Push のみで AWS のインフラの管理が行えるのは、インフラ運用効率化に大きく貢献してくれる機能だと感じました。
CloudFormation をメインで利用している環境では積極的に利用していきたいと思います。
これから GitSync を導入したいと考えている方の参考になれば幸いです!

この記事は私が書きました

野間 太一

記事一覧

猫とCloudFormationが好きです。

野間 太一

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。