自動ビルドが実行されない？CDKでホスティングしたAmplifyに起きた謎現象を追え！！

:::note warn
2022年7月時点の内容になります。
投稿後に原因が改善されている可能性があります。
:::

# 背景
今までAmplifyでホスティングを行いたい時はAmplifyCLIを使ってましたが、今年に入ってAWSの構築をCloudFormatinからCDKに移した事もあって、Amplifyはどっちに寄せようか考える機会がありました。

Amplifyで立てたバックエンドリソースを[エクスポート機能](https://aws.amazon.com/jp/blogs/news/export-amplify-backends-to-cdk-and-use-with-existing-deployment-pipelines/)を使ってCDKでも扱えるようにして、[override](https://aws.amazon.com/jp/blogs/news/override-amplify-generated-backend-resources-using-cdk/)で設定をカスタマイズする方法を取ることも考慮したのですが、その時点でAmplifyCLIの用途がホスティングくらいでバックエンドはCDKで用意することにしていたことと、エクスポート＆overrideは工程がやや煩雑になるのを嫌って、ならいっそCDKに統一してみるかと決めました。

CDKによるホスティング自体は問題なく終わったのですが、Amplifyの自動ビルドが実行されない事象が発生し、原因自体は小ネタでしたが個人的に「そんなことが・・・」だったので、ニッチなケースとは思いつつも、何処かの誰かが同じ事象でハマって貴重な時間を消費するのを未然に防げればいいなと思い書いてきます。

タグで内容を何となく察したあなたはきっと同士。

# 事象詳細
- CDKでAmplifyホスティングを構築したものの、Amplifyの自動ビルドが実行されない
![スクリーンショット_2022-07-09_12_03_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/2ab44eab-f1fb-ee18-ad8a-19059a92b6a9.png)

- Amplifyの設定は勿論自動ビルドを有効にしている

```lib/amplify-stack.ts
    //　抜粋
    const stgbranch = new amplify.CfnBranch(this, `${name}-stg`, {
      appId: app.attrAppId,
      branchName: 'stg',
      enableAutoBuild: true,  // 自動ビルド有効化
      enablePerformanceMode: false,
      enablePullRequestPreview: false
    })
```
- コンソールから手動でビルドを実行するときっちりGitbhubからソースコードを持ってきてCI/CDは全て最後まで成功する
![スクリーンショット 2022-07-09 12.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/8fcb3cc9-74f8-ed5c-28d6-0389693fa1a5.png)

- GitHubにソースコードの変更をPushしてもやはり自動ビルドは実行されない
![スクリーンショット_2022-07-09_12_14_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/e5f96f44-8056-23ba-1536-0e095f78e3ef.png)

- GitHubのブランチに"master"がないと上手く動かないというissueがあったので"master"ブランチを作って見たがやはり動かない
    - https://github.com/aws-amplify/amplify-hosting/issues/2140
- 同じGitHubのリポジトリを使ってCDKではなく最初からコンソールでホスティングすると問題なく自動ビルドが実行される
- CDK経由でホスティングしたAmplifyアプリケーションに対してブランチを追加を試みるも、GitHub認証は成功するが、接続候補のGitHubブランチの選択画面が表示されない
![スクリーンショット_2022-07-09_12_20_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/22ba1e84-8be0-c266-22ec-3ea4dc829049.png)

- GitHubアクセストークンの権限に不備でもあるのかと念の為の切り分けとして、awscliで同アクセストークンを用いてAmplifyアプリケーションを作成すると問題なく自動ビルドが実行される
![スクリーンショット_2022-07-09_13_20_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/33551082-b5b7-1768-98cc-ff00f8ba2e98.png)

- コンソール上から「リポジトリを再接続」を実行すると"We do not have permission to access this repository. Please update your permissions and try again."のエラーが出る
![スクリーンショット+2022-06-17+21.00.56 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/75698bc2-20a5-5783-7871-62b464f79f6f.png)
    - Permissionを確認するが問題ない
![スクリーンショット+2022-06-17+21.01.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/40814b9f-6588-c7ab-16bb-6cb90cb31310.png)
    - このエラーにissueが上がっていたので念の為、提示されているcliコマンドを実行してupdateをかけるもやはり自動ビルドは実行されない
    - https://github.com/aws-amplify/amplify-hosting/issues/2730

つまるところ、GitHubとの接続に対して`繋がっている`けど`繋がっていない`みたいな状況に陥ってました。

# 原因
対象のCDKではAmplifyだけでなくVPCやS3、Cloudfront、Aurora、ECSやCodeBuild、Security周りなどその他多くのリソースをスタックを分けて定義されてます。また、Amplifyに用いる接続先GitHubリポジトリはcdk.jsonで指定しており、元々定義していたCodeBuildと共用しておりました。それが宜しくなかった…。
![スクリーンショット 2022-07-09 12.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/7f426b45-9579-adb6-aedf-ae18bdaf5dc6.png)

CodeBuildではリポジトリへのHTTPSクローンURL`https://github.com/xxx/xxx.git`を指定する為、cdk.jsonにもそのように記述してました。しかし、Amplifyではまさかの`.git`が含まれたリポジトリURLを指定すると、今回の事象が発生してしまうという事がAWSサポートの方から教えて頂きました。
![スクリーンショット_2022-07-09_12_51_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/b0f3fbfa-3cce-c454-70ca-bbcdba68135b.png)

改めてCDKとCloudFormationのドキュメント(AmplifyのCDKはL1しか対応してない為)を確認しましたが、string型の指定くらいしか書かれてなかったので、まあ気付くわけもなく。
>repository?
Type: string (optional)
The repository for an Amplify app.
Pattern: (?s).*

AWSあるあるな、「Delete me」か「削除」みたいなサービスによる違いに当たったんだなあと、当時遠い空を見上げました。
![bg_pattern1_aozora.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/f55a64d2-85b9-283a-96d1-16eea3ca2fe1.png)

今回は引き続きCodeBuildと共用させるため、cdj.jsonをいじらずにamplify側のスタックで`.git`を除外させて改めてアプリケーションを立てる事で漸く自動ビルドが実行され事象が解消されるに至りました。

# グッドエンドを辿るには
CDKを書いたことがある人なら共感してくれると思いますが、CDKでリソースを記述する際公式のドキュメントをまず読んであれことと書くんですが、あちこちページを跨ぐ必要があったり、十分に量はありつつもそれでもいまいち分かり辛かったりしますよね。

自分はGitHubで検索かけて他所様はこのリソースのこの部分どう指定してるんやろな〜と探しに行ったりしていて、サンプルは少ないですがよくよく読むとそこでは`.git`抜きで書かれているのが見つかるので、頑張れば気付けなくもなかったかもしれない

# 最後に
気付いてしまえばとても些細なものでしたが、コンソール上で「ビルドを実行」を押すとビルドが実行されることからGitHubとの接続と認証が中途半端ではあるものの一応は出来ている事もあり、原因特定に非常に難儀しました。原因究明に協力してくださったAWSサポートの方々には感謝申し上げます。

# 参考
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-amplify-app.html#cfn-amplify-app-repository

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_amplify.CfnApp.html