[小ネタ]AWS Amplifyでデプロイが始まらなかった際にIncoming Webhooksを利用して手動デプロイする

AWS Amplifyで何故かデプロイが始まらなかった際のワークアラウンドです
2021.09.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

現在、自分はProfllyというプロフィールビューアーサービスの開発を行っています。

Profllyでは、ホスティングおよびCI/CDにAWS Amplify(以下、Amplify)を採用しており、連携されたリポジトリの各ブランチ(development/staging/production)にプッシュされたタイミングで、それぞれの環境へ自動デプロイされるような仕組みになっています。

ある日、Amplify経由でデプロイしようとしたところ、トリガーされずデプロイが開始されない事象が発生したので、Incoming Webhooks機能による手動デプロイを行って事なきを得た話をします。

AmplifyによるCI/CD

ProfllyにおけるプロジェクトのソースコードはGitHubでリポジトリ管理しているため、Amplifyと対象リポジトリを連携させることで、CI/CDを設定しています。

ざっくり説明すると、development/staging/production 用のブランチを用意し、それぞれのブランチを対象のAWS環境のAmplifyへ連携します。
各ブランチでコミットがプッシュされたら、対象のAWS環境に対し、自動でビルドおよびデプロイが実施されるような仕組みになっています。

なお、Amplifyそのものについては、以下のエントリが参考になります。

AWS再入門ブログリレー AWS Amplify編

なぜか始まらないAmplifyのデプロイ

サービスの本番リリースを迎えたある日、いつものようにAmplifyで連携されているブランチ(production)へプッシュを行いました。

・・が、数分待っても、Amplify Consoleではデプロイが始まる様子が無く、うんともすんとも言いません。

このままでは、予定されているリリース時間内にリリース作業が終わりません。どうしよう。。

Incoming Webhooksを使ったワークアラウンド

このままだとサービスリリース作業が完了できないため、何らかの方法でデプロイさせる必要があります。
単純に空コミットをプッシュしてデプロイするか試してみることも可能ですが、心情的に無駄なコミットは増やしたくありません。

そこで、Amplifyに用意されているIncoming Webhooks機能を使って手動デプロイを行ってみます。
Incoming Webhooksを利用すると、リポジトリにコードをプッシュせずともデプロイが実行できます。

webhookの新規作成

AmplifyのIncoming Webhooksを利用するには、コンソールの「ビルドの設定」-「Incoming Webhooks」を開き、「Create webhook」をクリックします。

続いてダイアログが開くので、適当にWebhook nameを入力し、「保存」をクリックしてWebhookを作成します。

無事webhookが作成されました。

デプロイの手動実行

右側の Command 列にcurlコマンドが表示され、URL横のアイコンをクリックすると以下のようなコマンドをコピーすることができます。

curl -X POST -d {} "https://webhooks.amplify.ap-northeast-1.amazonaws.com/xxx/webhooks?..." -H "Content-Type:application/json"

後は、実際にコマンドを実行することでデプロイがスタートします。
その後デプロイも無事完了し、なんとかリリース時間内にデプロイを終えることができました。ヨカッタヨカッタ。

webhookの削除

最後に、今回作成したwebhookは普段利用しないので、デプロイ完了後に削除しておきます。

デプロイが始まらなかった原因

今回事象が発生したプッシュではコミット数やコードの差分が比較的大きかったので、連携したリポジトリのGitHub Webhookから送られるpayloadが大きいことが直接的な原因なのでは、と推測をしていますが、はっきりとした原因を突き止めることはできませんでした。。

引き続き、デプロイが始まらなかった原因の調査を進めてみようと思います。

おわりに

Amplifyでデプロイが始まらなかった際に、Incoming Webhooksを利用して手動デプロイを行うワークアラウンドをご紹介しました。
どなたかの参考になれば幸いです。