0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】CodePipeline未サポートの大阪リージョンにCodePipelineでデプロイする方法

Posted at

はじめに

本記事では、CodePipelineがサポートされていない大阪リージョンにCodePipelineを用いてデプロイする方法を紹介します。

  • サマリ
    • 大阪リージョンはCodePipeline未サポート(2022/04/10時点)
    • クロスリージョンアクションは対象リージョンがCodePipelineをサポートしている必要がある
    • 大阪リージョンにデプロイする場合、CodeBuildを介してデプロイする

大阪リージョンはCodePipeline未サポート

2021年3月に大阪リージョンがフルリージョン化されました。

これにより、国内リージョンのみでDR (Disaster Recovery) サイトの構築が可能となりました。
海外リージョンの使用が禁止されている、かつ、DRサイトの構築が求められる要件等においては、ありがたい話です。

しかし、フルリージョン化と言っても、すべてのサービスが提供されているわけではありません。
東京リージョンでは提供されているが、大阪リージョンでは提供されていないサービスは意外とたくさんあります。
以下の記事に比較的新しい情報が掲載されています。(感謝)

残念ながら、本記事のテーマであるCodePipelineも大阪リージョンでは提供されていません。(2022/04/10時点)

解決案

大阪リージョンはCodePipeline未サポートですが、DR (Disaster Recovery) サイトの構築等、東京リージョンと同等の環境を大阪リージョンにもデプロイしたいケースはあります。

そこで解決案を考えてみました。

  • 案①:大阪リージョンにCodePipelineを構築する
  • 案②:東京リージョンのCodePipelineから大阪リージョンにクロスリージョンデプロイする
  • 案③:東京リージョンのCodePipelineからCodeBuildを介して大阪リージョンにデプロイする

案①:大阪リージョンにCodePipelineを構築する

前述のとおり、大阪リージョンはCodePipeline未サポートのため、この案は実現不可です。
ただし、今後、サポートされる可能性はあるため、案として挙げておきます。

案②:東京リージョンのCodePipelineから大阪リージョンにクロスリージョンデプロイする

CodePipelineにはクロスリージョンアクションという機能があります。
名前が示すとおり、パイプラインを作成したリージョンとは別のリージョンに対してアクションを実行する機能です。

結論から言うと、この方法では大阪リージョンにデプロイすることはできません。
CodePipelineのクロスリージョンアクションは、アクションを実行するリージョンがCodePipelineをサポートしている必要があるため、CodePipelineをサポートしていない大阪リージョンを対象とした場合、エラーになります。

検証してみた

CodePipelineがサポートされているリージョンの場合(バージニア北部リージョン)

デプロイ先リージョンがCodePipelineをサポートしているバージニア北部リージョンの場合、パイプラインを作成することができ、期待通りにデプロイもできました。

cross_region_deploy_virsinia.png

CodePipelineがサポートされていないリージョンの場合(大阪リージョン)

マネジメントコンソールからデプロイ先リージョンの変更しようとしたところ、選択肢に大阪リージョンがありません。

image.png

CLIではどうでしょうか?
update-pipelineコマンドを用いて、デプロイ先リージョンを大阪リージョンに変更しようとしたところ、以下のエラーが発生しました。

The region ap-northeast-3 specified in 'pipeline.artifactStores' is not a valid AWS Region.

やはり、CodePipelineをサポートしていないリージョンに対するクロスリージョンアクションは設定できないようです。

案③:東京リージョンのCodePipelineからCodeBuildを介して大阪リージョンにデプロイする

残念ながら案①と案②もNGでした。
案③は、東京リージョンのCodePipelineからCodeBuildを介してCLIでデプロイする案です。
この案は実現可能です。

検証してみた

方法はシンプルです。
CodeBuildを介して、cloudformation deployコマンドにより、リージョンを指定してCloudFormationをデプロイするだけです。
以下のbuildspecでは、対象リージョン、スタック名、バケット名をパラメータとして、環境変数から取得しています。

buildspec.yaml
version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.8

  build:
    commands:
      - echo ${TARGET_REGION}
      - echo ${STACK_NAME}
      - echo ${BUCKET_NAME}

      # Deploy CloudFormation
      - |
        aws cloudformation deploy \
          --template-file ./cloudformation/template/main.yaml \
          --stack-name ${STACK_NAME} \
          --s3-bucket ${BUCKET_NAME} \
          --region ${TARGET_REGION}

cross_region_deploy_osaka.png

CodeBuildを介して、大阪リージョンにデプロイすることができました。

まとめ

  • 大阪リージョンはCodePipeline未サポート(2022/04/10時点)
  • クロスリージョンアクションは対象リージョンがCodePipelineをサポートしている必要がある
  • 大阪リージョンにデプロイする場合、CodeBuildを介してデプロイする

というわけで、CodePipelineから大阪リージョンにデプロイするには、CodeBuildを介してCLIでデプロイする必要がある、という話でした。
もしくは、別のCI/CDツールを使用するか、ですね。

なかなかニッチな内容、かつ、今後、CodePipelineが大阪リージョンでもサポートされたらお役御免になる内容でしたが、少しでもどなたかの役に立てば幸いです。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?