はじめに
本記事では、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をサポートしているバージニア北部リージョンの場合、パイプラインを作成することができ、期待通りにデプロイもできました。
CodePipelineがサポートされていないリージョンの場合(大阪リージョン)
マネジメントコンソールからデプロイ先リージョンの変更しようとしたところ、選択肢に大阪リージョンがありません。
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では、対象リージョン、スタック名、バケット名をパラメータとして、環境変数から取得しています。
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}
CodeBuildを介して、大阪リージョンにデプロイすることができました。
まとめ
- 大阪リージョンはCodePipeline未サポート(2022/04/10時点)
- クロスリージョンアクションは対象リージョンがCodePipelineをサポートしている必要がある
- 大阪リージョンにデプロイする場合、CodeBuildを介してデプロイする
というわけで、CodePipelineから大阪リージョンにデプロイするには、CodeBuildを介してCLIでデプロイする必要がある、という話でした。
もしくは、別のCI/CDツールを使用するか、ですね。
なかなかニッチな内容、かつ、今後、CodePipelineが大阪リージョンでもサポートされたらお役御免になる内容でしたが、少しでもどなたかの役に立てば幸いです。