Amazon CodeCatalyst のワークフローを GitHub Actions のワークフローへ移行してみた
いわさです。
Amazon が提供する統合開発サービスに「Amazon CodeCatalyst」というものがあります。
Amazon CodeCatalyst は現在は既存顧客のみに提供されており、新規サインアップができない状態となっています。

Explore | Amazon CodeCatalyst より
Amazon CodeCatalyst のドキュメントでは GitLab や GitHub への移行が案内されています。
以前このドキュメントに従って GitHub へのリポジトリ移行を試したことがあります。
複数リポジトリで構成されたワークスペースの場合は移行後のリポジトリ構造の再検討は必要ですが、リポジトリ移行であれば GitHub Importer を使った上記のとおり簡単に移行が可能です。
一方で、CI/CD パイプラインとして機能するワークフローについては移行方法が案内されていません。
現状のワークフロー定義ファイル(YAML)のダウンロード方法のみです。
結論としては GitHub アクション側で再構築が必要なのですが、今回簡単な CodeCatalyst ブループリントから作成したプロジェクトのワークフローを移行してみたのでその様子を紹介します。
CodeCatalyst 側のプロジェクトを用意
まず、CodeCatalyst で新規プロジェクトを作成します。
CodeCatalyst にはブループリントという機能があってソースコードや CI/CD パイプラインを含む、すぐに動くサンプルアプリケーション一式からプロジェクトを開始することが出来ます。
次の .NET Serverless Application を選んでみます。

プロジェクトには CI/CD ワークフローの定義ファイルも含まれており、プロジェクト作成後すぐにワークフローが動きます。
定義ファイルは.codecatalyst/workflows/配下に含まれています。

CodeCatalyst 上のワークフロー機能を見てみると、.NET アプリケーションのビルドとテスト・デプロイが完了していました。

このワークフローは .NET アプリケーションを SAM を使って Lambda 関数をデプロイしています。

GitHub リポジトリを作成(GitHub Importer)
この CodeCatalyst プロジェクトを GitHub へ移行してみます。
まずは GitHub 側にリポジトリが必要になるので、GitHub Imporer を使ってリポジトリの移行を行いましょう。
手順はここでは割愛するので冒頭のブログを参照してください。

GitHub 側でワークフローを再構築
つづいて、GitHub リポジトリの「アクション」メニューから新しくワークフローの定義を行いましょう。
リポジトリ移行直後は当然ながら何を存在していません。
まず、CodeCatalyst のワークフロー定義(YAML)は GitHub Actions のワークフロー定義(YAML)と互換性はありません。
貼り付けても次のように様々な構文エラーが発生します。

トリガーやジョブ依存関係の定義方法から違っていますし、実行コンテナも CodeCatalyst に依存したものになっています。
CodeCatalyst は AWS アカウントと統合されており、そのままデプロイ用 IAM ロールの連携が出来ますが、これも当然ながら GitHub 側では出来ません。
ということで、結論としてはワークフロー定義を GitHub Actions 用に作り直す必要があります。
幸いにしてこの生成 AI 時代、AI の力を借りながら変換することも出来ます。
私が対話しながら作成した移行後のワークフローは以下です。
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Build
run: dotnet build ServerlessApp.sln -c Release
- name: Test
run: dotnet test ServerlessApp.sln -c Release --no-build --logger "trx"
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: '**/TestResults/*'
deploy-to-aws:
runs-on: ubuntu-latest
needs: build-and-test
environment: production
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Install Amazon Lambda Tools
run: dotnet tool install Amazon.Lambda.Tools --global --version 5.*
- name: Deploy to AWS Lambda
run: |
cd src/ServerlessApp
dotnet lambda deploy-serverless --region us-west-2 --resolve-s3 true --stack-name serverless-stack-7ehkt
本来 OIDC を使うことが望ましいと思いますが、検証用に手順を簡略化したくてシークレットを使っています。
上記をmainブランチにプッシュすれば GitHub Actions が動きます。

無事ビルド・テストと Lambda 関数のデプロイまでが完了しました。テストとかまだしてないですが。

さいごに
本日は Amazon CodeCatalyst のワークフローを GitHub Actions のワークフローへ移行してみました。
やはり CodeCatalyst から GitHub Actions への移行方法は提供されておらず、自力で移行先のワークフロー定義を再構築する必要があります。
移行元ワークフローがどの程度複雑かにもよりますが、生成 AI の助けもあり今回くらいのシンプルなものであれば数分〜数十分で移行作業は完了しました。






