- 公開日
- 最終更新日
GitLabからAWSへ自動反映!GitSyncの設定を試してみた
この記事を共有する

目次
はじめに
こんにちは!パーソル&サーバーワークスの野間です。
今回は、AWS CloudFormation(以下、CloudFormation ) の Git 同期機能(GitSync)を使って、GitLab から AWS にリソースを自動反映する仕組みを試してみました。
GitSync とは?
GitSync は、CloudFormation の Git 同期機能で、Git リポジトリと CloudFormation スタックを連携させる仕組みです。 指定した Git ブランチのテンプレートファイルの変更を自動で検出し、その内容をもとにスタックの変更セットを生成・適用します。
メリット
- Git リポジトリの操作だけでインフラを管理できる
- 手動操作のミスを減らせる
- マージリクエストのチェックが簡単になる
GitSync 設定の流れ(準備編)
今回は以下のようなステップで設定を進めました。
1. GitLab と AWS の接続を作成する
まずは、GitLab とAWS をつなぐための接続を作成します。
- AWS マネジメントコンソールで CodePipeline を開き、左ペインの [設定] > [接続] を選択。
- [接続を作成] を選択。
- プロバイダーを選択。(今回は [GitLab] を選択しました。
- 任意の接続名を入力し、[GitLab に接続] を選択。
- 接続のステータスが「利用可能」になれば作業完了です!
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 スタックを作成していきます!
- CloudFormation コンソールから、[スタックの作成] > [新しいリソースを使用] を選択します
- [Git から同期] を選択します
- CloudFormation スタック名を入力します
- [Git リポジトリをリンクする] > リポジトリプロバイダーを選択(今回は GitLab)
- 接続は先程作成した接続を指定します
- リポジトリとブランチを選択します
- デプロイファイルのパスは、パラメーターを格納したファイルのパスを指定します
- IAM ロールは「GitSync用」の IAM Role を指定します
- プルリクエストへのコメントを有効化にします(任意のため無効でも可、後述)
- スタックオプションの設定画面の IAM Role は「CloudFormation用」の IAM Role を指定します
- 後はデフォルト設定のままスタックを作成します
マージリクエストを作成してみる
マージリクエストへのコメントを有効化しているので、どんな表示になるか確認してみたいと思います。
今回はサブネットを 1 つ追加するマージリクエストを作成しました。
マージリクエストを作成するとどのような変更が行われるのか、変更セットの内容がコメントされました!
これによりマージリクエストの確認もかなり楽になるのではないでしょうか?
まとめ
GitLab への Push のみで AWS のインフラの管理が行えるのは、インフラ運用効率化に大きく貢献してくれる機能だと感じました。
CloudFormation をメインで利用している環境では積極的に利用していきたいと思います。
これから GitSync を導入したいと考えている方の参考になれば幸いです!
この記事は私が書きました
野間 太一
記事一覧猫とCloudFormationが好きです。
