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

【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 同期は、米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (北カリフォルニア)、米国西部 (オレゴン)、カナダ (中部)、アジア太平洋 (ムンバイ)、アジア太平洋 (東京)、アジア太平洋 (ソウル)、アジア太平洋 (シンガポール)、アジア太平洋 (シドニー)、欧州 (アイルランド)、欧州 (ロンドン)、欧州 (パリ)、欧州 (ストックホルム)、欧州 (フランクフルト)、欧州 (ミラノ)、および南米 (サンパウロ) の各リージョンで利用できます。

参考:GitSync 対応リージョンについて

代替案①:CodePipeline を利用して別のリージョンにスタックを作成する

AWS CodePipeline(以下、CodePipeline)をメインリージョンに作成し、CloudFormation スタックを別のリージョンに 作成するアクションを設定することができます。

  • CodePipeline:メインリージョンに作成
  • Source アクション:GitLab や GitHubなど
  • Build アクション:必要に応じて作成
  • Deploy アクション:CodePipeline とは別のリージョンに CloudFormation スタックを作成

gitsync-osaka-region-3.png

試してみる

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 を利用して別のリージョンにスタックを作成することができます。

gitsync-osaka-region-4.png

試してみる

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が好きです。

野間 太一

この記事を共有する

クラウドのご相談

CONTACT

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

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

DOWNLOAD

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