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)でした。