AWS ProtonでテンプレートのGitHub連携機能を使う

2022.02.02

いわさです。

これまでいくつかの記事で、Protonテンプレートを開発する方法を紹介させて頂きました。

これらの記事ではいずれも、作成したテンプレートバンドルをS3バケットへアップロードしています。
テンプレート差分をすぐにProtonへ連携する、あるいはテンプレートの変更をプルリクエストでレビューするために、GitHubリポジトリを統合することが出来ます。

リポジトリ登録

事前にCodeシリーズからGitHubリポジトリへの接続を済ませておいたうえで、Protonコンソールでリポジトリを作成します。

リポジトリの登録自体はこれだけです。

テンプレートとリポジトリを同期設定

複数のリポジトリを登録することが出来ますが、先程のリポジトリ登録では詳細な情報は何も指定していませんでした。
同期のための詳細情報はテンプレートの設定画面で設定します。

同期させるブランチとオプションで検索対象のディレクトリを制限することが出来ます。

リポジトリ内のどのフォルダ内に格納しても良いのですが、テンプレート一式は以下のルールに従う必要があります。
テンプレート構成については、S3へアップロードしたテンプレートバンドルの非圧縮版です。

*/{テンプレート名}/{バージョン}/テンプレート構成

仮に環境テンプレートが上記の場合は以下のディレクトリ構成となります。

ブランチへプッシュされるとコミットされた内容で新たなバージョンのProtonテンプレートが作成されます。
ただし、同期されたテンプレートはDRAFTなので、公開作業は手動で必要です。

マイナーバージョンアップ

v1.0が登録されたので、早速バージョンアップしてみます。
任意の変更をCloudFormationテンプレートへ加えて、プッシュします。

iwasa.takahito@hoge iwasa-proton-template-repository % git commit
[main 34ae1ee] サブネットのタグを削除
 1 file changed, 4 insertions(+), 4 deletions(-)
iwasa.takahito@hoge iwasa-proton-template-repository % git push
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 646 bytes | 323.00 KiB/s, done.
Total 7 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/Tak1wa/iwasa-proton-template-repository.git
   c3261d5..34ae1ee  main -> main

10~20秒ほど待つと、新しいテンプレートバージョンの同期が始まりました。
説明にはコミットIDとコミットメッセージが表示されるようですね。良いですね。

v1ディレクトリ内のバンドルを更新していくと、全てメジャーバージョンアップとなります。

メジャーバージョンアップ

続いて、メジャーバージョンを更新してみましょう。
これを行うためには、新しいバージョンのディレクトリを作成し管理する必要があります。

複製してバージョン名だけ変更してコミットしてみましょう。

メジャーバージョンで作成されましたね。なるほど。

メジャーバージョン番号は指定が出来る

先程はv1をコピーしてv2を作成しました。
v3をスキップしてv2->v4という更新は可能なのか一応確認してみたいと思います。

メジャーバージョンをスキップして作成することが出来ました。
メジャーバージョンスキップするケースあるのか、という感じもしますけど、PHP6とかWindows9みたいな感じでしょうか。

ディレクトリを削除してもテンプレートは削除されない

メジャーバージョンのディレクトリを作成すると、新たなメジャーバージョンが作成されました。
削除するとどうなるのか気になりますね。試してみました。

iwasa.takahito@hoge iwasa-proton-template-repository % git commit -m "v4を削除"
[main ac1f882] v4を削除
 3 files changed, 63 deletions(-)
 delete mode 100644 hoge-templates/hogehoge/v4/infrastructure/hoge-cfn.yaml
 delete mode 100644 hoge-templates/hogehoge/v4/infrastructure/manifest.yaml
 delete mode 100644 hoge-templates/hogehoge/v4/schema/schema.yaml

削除してもテンプレートのメジャーバージョンは残ったままでした。
また、削除コミットに関連したマイナーバージョンアップもされていません。

その後、削除前と同じ内容でディレクトリやテンプレートを作成してコミットしてみたのですが、マイナーバージョンアップされませんでした。
コミット単位で更新有無を見ているのではなく、コードの変更差分をちゃんと見ているようですね。

古いバージョンのマイナーバージョンアップ&複数のバージョンを同時にアップ

最後に、古いメジャーバージョンテンプレートのマイナーバージョンアップをしてみましょう。
旧メジャーバージョンが複数あったので、まとめて変更してコミットします。

iwasa.takahito@hoge iwasa-proton-template-repository % git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   hoge-templates/hogehoge/v1/infrastructure/hoge-cfn.yaml
        modified:   hoge-templates/hogehoge/v2/infrastructure/hoge-cfn.yaml

no changes added to commit (use "git add" and/or "git commit -a")

それぞれのマイナーバージョンが追加されました。
ひとつのコミットで、複数のテンプレートが作成されていますね。

さいごに

本日はProtonテンプレートのGitHub連携を試してみました。
圧縮してS3へアップロードを繰り返すのに煩わしさを感じていたので、GitHub連携かなり良いですね。

前回の記事まではマイナーバージョンとメジャーバージョンの扱いが微妙なところだったと思うのですが、この機能におけるそれぞれの扱いを見るとかなり違っていますね。
旧メジャーバージョンを残り続けることが出来るので、その点も加味してProtonテンプレートのバージョン設計を行うのが良いなと思います。