- 公開日
- 最終更新日
【CloudFormation】GitSyncが使えないリージョンでCloudFormationのCI/CDを考える
この記事を共有する

目次
はじめに
こんにちは!パーソル&サーバーワークスの野間です。
AWS CloudFormation(以下、CloudFormation)でCI/CDを構築する際、Git同期機能(以下、GitSync)は有力な選択肢です。
しかし、2025 年 9 月現在は大阪リージョン(ap-northeast-3)を含む一部リージョンで GitSync が利用できません。
本記事では、GitSync が使えないリージョンでも Git 連携で CloudFormation スタックを自動更新する方法を紹介します。
GitSync について
GitSync は、CloudFormation の Git 同期機能で、Git リポジトリと CloudFormation スタックを連携させる仕組みです。
詳しくは過去記事「GitLabからAWSへ自動反映!GitSyncの設定を試してみた」をご参照ください。
また、2025 年 9 月現在、AWS のドキュメントによると以下のリージョンで利用できるようです。
Git 同期は、米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (北カリフォルニア)、米国西部 (オレゴン)、カナダ (中部)、アジア太平洋 (ムンバイ)、アジア太平洋 (東京)、アジア太平洋 (ソウル)、アジア太平洋 (シンガポール)、アジア太平洋 (シドニー)、欧州 (アイルランド)、欧州 (ロンドン)、欧州 (パリ)、欧州 (ストックホルム)、欧州 (フランクフルト)、欧州 (ミラノ)、および南米 (サンパウロ) の各リージョンで利用できます。
代替案①:CodePipeline を利用して別のリージョンにスタックを作成する
AWS CodePipeline(以下、CodePipeline)をメインリージョンに作成し、CloudFormation スタックを別のリージョンに 作成するアクションを設定することができます。
- CodePipeline:メインリージョンに作成
- Source アクション:GitLab や GitHubなど
- Build アクション:必要に応じて作成
- Deploy アクション:CodePipeline とは別のリージョンに CloudFormation スタックを作成
試してみる
CodePipeline でクロスリージョンのデプロイを行う場合は、次の 2 点に対応する必要があります。
- ArtifactStores の設定を追加
- Deploy アクションにリージョン名を追加
ArtifactStores の設定を追加
以下のように、ArtifactStores の設定でデプロイ先のリージョンを指定します。
クロスリージョン先に CodePipeline アーティファクト格納用の S3 バケットが必要です。
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
ArtifactStores:
- Region: !Ref AWS::Region
ArtifactStore:
Type: S3
Location: !Ref PipelineArtifactBucket
- Region: ap-northeast-3
ArtifactStore:
Type: S3
Location: !Ref PipelineArtifactBucketOsaka
Deploy アクションにリージョン名を追加
- Name: DeployOsaka
Actions:
- Name: CreateChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: 1
InputArtifacts:
- Name: BuildOutput
Configuration:
ActionMode: CHANGE_SET_REPLACE
RoleArn: !GetAtt CodePipelineExecutionRole.Arn
StackName: !Ref StackName
ChangeSetName: !Ref ChangeSetName
Capabilities: CAPABILITY_NAMED_IAM
TemplatePath: !Ref TemplatePath
RunOrder: 1
Region: ap-northeast-3 ##この記載を追加
代替案②:CodeBuild を利用して別のリージョンにスタックを作成する
AWS CodeBuild(以下、CodeBuild)から、AWS CLI を利用して別のリージョンにスタックを作成することができます。
試してみる
CodeBuild を使って別のリージョンに CloudFormation スタックを作成する場合は、次の 2 点を準備します。
- Git をトリガーとして動作する CodeBuildProject の作成
- buildspec ファイルの作成
Git をトリガーとして動作する CodeBuildProject を作成
以下は GitLab の対象リポジトリの main ブランチに Push イベントが起きた際に動作する CodeBuildProject の例です。
トリガー対象の階層やファイル名も細かく指定することが可能です。
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: !Ref CodeBuildProjectName
Source:
Type: GITLAB
Auth:
Type: CODECONNECTIONS
Resource: !Ref CodeConnectionsArn
BuildSpec: !Ref BuildSpecFilePath
Location: !Ref RepositoryUrl ##対象リポジトリのURLを指定
ReportBuildStatus: false
SourceVersion: refs/heads/main ##ブランチ名を指定
Triggers:
BuildType: BUILD
Webhook: true
FilterGroups:
- - Type: EVENT
Pattern: PUSH ##PUSHした際に動作するように指定
- Type: HEAD_REF
Pattern: refs/heads/main ##トリガー対象のブランチ名を指定
ExcludeMatchedPattern: false
- Type: FILE_PATH
Pattern: ^Build/.* ##トリガー対象の階層名を正規表現で指定(任意)
Environment:
Type: ARM_LAMBDA_CONTAINER
Image: aws/codebuild/amazonlinux-aarch64-lambda-standard:corretto21
ComputeType: BUILD_LAMBDA_1GB
EnvironmentVariables:
- Name: TEMPLATE_FILE_PATH
Value: !Ref TemplateFilePath
- Name: STACK_NAME
Value: !Ref StackName
Artifacts:
Type: NO_ARTIFACTS
ServiceRole: !GetAtt CodeBuildRole.Arn
buildspec ファイルを作成
今回は cloudformation deploy コマンドを利用して、Git で管理しているファイルから CloudFormation スタックを作成・更新するコマンドを設定しました。
version: 0.2
phases:
build:
commands:
- |
aws cloudformation deploy \
--template-file $TEMPLATE_FILE_PATH \
--stack-name $STACK_NAME \
--region ap-northeast-3 \
--capabilities CAPABILITY_NAMED_IAM
比較
- 代替案①:CodePipeline を利用して別のリージョンにスタックを作成する
- メリット
- 承認アクションを追加できる
- デプロイ状況が視覚的に分かりやすい
- デメリット
- CodeBuild と比べてアクションの自由度が低い
- ステージが増えると CodeBuild と比べて実行時間が長くなりやすい
- メリット
- 代替案②:CodeBuild を利用して別のリージョンにスタックを作成する
- メリット
- シンプルな構成のため初期構築が容易
- デメリット
- 処理が増えるほどスクリプトが属人化しやすい
- メリット
まとめ
普段はデプロイ状況の可視化のしやすさから CodePipeline を選ぶことが多かったですが、
今回のようなシンプルなケースでは、CodeBuild の短い実行時間が想像以上に魅力的だと気が付きました。
GitSync 非対応のリージョンで Git 同期機能の導入を考えている方の参考になれば幸いです!
この記事は私が書きました
野間 太一
記事一覧猫とCloudFormationが好きです。
