Amazon CodeCatalystがカスタムブループリントをサポートしました

2023.12.01

Amazon CodeCatalystでカスタムブループリントが使えるようになりました。

Announcing custom blueprints for Amazon CodeCatalyst

そもそもブループリントとは

プロジェクトのテンプレートです。GitHubで言うところの、テンプレートリポジトリ機能のようなものです。

ソースコードやCI/CDワークフローをテンプレート化することができます。

この機能を利用することで、利用者はより早くアプリケーション開発を始めることができます。

以下のようにプロジェクト作成時に選択することができます。

Blueprints in CodeCatalyst - Amazon CodeCatalyst

カスタムブループリント

これまでは、AWSが提供するブループリントを使うのみでしたが、ユーザーが独自で作成可能になりました。

組織に適したブループリントを作成できます。

現時点では機能を利用するために、Enterprise Tierが必要です。

1ユーザーあたり20USD/月の費用が発生します。Enterprise Tierへの変更手順は以下です。

やってみた

チュートリアルが用意されています。細かい手順はチュートリアルを参照いただくとして、スクショを交えてざっくり手順を説明します。

チュートリアル: React アプリケーションの作成と適用 - Amazon CodeCatalyst

カスタムブループリントの作成

以下のように必要な項目を設定して、ブループリントを作成します。

作成するとプロジェクトができます。デフォルトで入っているファイルは、スペース内へのブループリント公開用のものです。

CodeCatalystのDev EnvironmentでCloud9を開いて、コードを編集しPushしました。

ブループリントの公開・カタログに追加

コードをPushすると、ブループリントリリース用のワークフローが自動で実行されます。

ワークフローファイルは以下の内容です。

Name: blueprint-release
SchemaVersion: "1.0"
Triggers:
  - Type: PUSH
    Branches:
      - main
  - Type: MANUAL
Actions:
  check_commit:
    Identifier: aws/build@v1
    Inputs:
      Sources:
        - WorkflowSource
    Outputs:
      AutoDiscoverReports:
        Enabled: false
      Variables:
        - IS_RELEASE_COMMIT
    Configuration:
      Steps:
        - Run: TRIGGER_COMMIT_ID=$CATALYST_EVENT_SHA
        - Run: COMMIT_MESSAGE="$(git log -n 1 $TRIGGER_COMMIT_ID --oneline)"
        - Run: RELEASE_PREFIX='chore(release):'
        - Run: IS_RELEASE_COMMIT=false
        - Run: if grep -q "$RELEASE_PREFIX" <<< "$COMMIT_MESSAGE"; then echo 'this is a release commit' && IS_RELEASE_COMMIT=true; fi
  build_and_commit:
    Identifier: aws/build@v1
    Inputs:
      Sources:
        - WorkflowSource
      Variables:
        - Name: IS_RELEASE_COMMIT
          Value: ${check_commit.IS_RELEASE_COMMIT}
    Outputs:
      AutoDiscoverReports:
        Enabled: false
      Artifacts:
        - Name: codebase
          Files:
            - "**/*"
    Configuration:
      Steps:
        - Run: if $IS_RELEASE_COMMIT; then  echo 'This is a release commit, skipping'; else chmod +x release.sh && ./release.sh; fi
    DependsOn:
      - check_commit
  publish_blueprint:
    Identifier: aws/publish-blueprint-action@v1
    Inputs:
      Artifacts:
        - codebase
      Variables:
        - Name: IS_RELEASE_COMMIT
          Value: ${check_commit.IS_RELEASE_COMMIT}
    DependsOn:
      - build_and_commit
    Configuration:
      ArtifactPackagePath: dist/js/*.tgz
      PackageJSONPath: package.json
      InputArtifactName: codebase
      TimeoutInSeconds: "120"

この時点で、スペースに公開されます。

しかし、プロジェクト作成時のブループリントには表示されない状態です。カタログに追加を行うことで、選択可能になります。

バージョンを指定して、カタログに追加します。

カスタムブループリントを使ってプロジェクト作成

先ほどのブループリントが、選択可能になっているため選択してプロジェクトを作成します。(プロジェクト名は、react-app-projectとします)

ブループリントを更新し、プロジェクトを更新する

ブループリントの更新を試してみます。ブループリント側にファイルを追加して、使用しているプロジェクトでどう反映されるかみていきます。

ブループリント側を更新します。static-assets配下にhello-world.txtを追加して、Pushしました。

先ほどと同様に、Pushのタイミングでワークフローが実行されて、ブループリントのバージョンが更新されます。

カタログに最新のバージョンを追加しておきます。

プロジェクト側の更新を行います。

プロジェクト側を見ると、v0.0.1を使っておりv0.0.2にアップデートできることが分かります。

Updata Versionを選択します。

更新の適用を行うとPull Requestが作成されます。Pull Request内にはアップデート内容(hello-world.txt)が含まれていることがわかります。

マージを行えば、プロジェクト側の更新は完了です。

おわりに

CodeCatalystのカスタムブループリントでした。

Typescript書く必要はありますが、プロジェクト作成時のパラメータや含めるファイル等も色々カスタマイズ可能そうでした。

以上、AWS事業本部の佐藤(@chari7311)でした。

参考