初心者がstreamlitを使って採点アプリを作ってみた#5

<!-- 目次部分(リンクになるところ) -->
# 目次
1. [はじめに](#anchor1)
1. [Google CloudでWordloadIdentityを設定する](#anchor2)
1. [終わりに](#anchor3)

<a id="anchor1"></a>
# はじめに
streamlitを使って、採点アプリを作ってみた記録の第５回目の投稿になります。
前回までの記事が気になった方は

第１回：<https://qiita.com/0dn09g3y726519/items/d78397d3c174f4388687>
第２回：<https://qiita.com/0dn09g3y726519/items/e95bae2595b951ddbecc>
第３回：<https://qiita.com/0dn09g3y726519/items/6fc96e928c4c910d3ed9>
第４回：<https://qiita.com/0dn09g3y726519/items/a4230330eed6a7359c1d>

こちらをご覧ください。
下図のような構成のアプリを作っています。

###
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/62a8f101-668e-21a8-4eb6-a02ebee17c33.png)


3回目までの記事で機能の紹介が終わりましたので、今回のアプリ制作活動の中で一番苦労したデプロイについてご紹介したいと思います。サーバーって何？ってレベルの初心者が、いろいろ調べながら頑張ってCI/CDができる環境を作って、アプリのデプロイまでたどり着きましたので、今後どなたかの参考になれば幸いです。
（初心者ゆえおそらく間違っているところも多々あると思いますので、間違いに気づかれた方はぜひコメントください。勉強させていただきたいと思います。）
前回はgithubactionsを利用して、googlecloudbuildを動かしてビルドを実行するところまで説明しました。
今回はgithubと連携をするために、google cloudのWorkloadIdentityの設定・ビルドファイルの作成について説明します。

<a id="anchor2"></a>
# Google CloudでWordloadIdentityを設定する
<https://qiita.com/NagaokaKenichi/items/42ca288022e96cda065d>
<https://zenn.dev/cloud_ace/articles/7fe428ac4f25c8>
↥これらの記事を参考にさせていただきました。
正直今回のデプロイで一番苦労したのが、この認証部分だったため、ここはいつも以上に丁寧に説明させていただきます。

google cloudコンソールに行きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/073cf504-f87f-af7c-671b-09dac2bd7282.png)
ここで左上の三を押して、IAMと管理→Workload Identity連携を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/1e138e91-3e74-321d-3b5c-9068708b5bfb.png)
ここの上のプールを作成をクリックして、プールを新規作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/be7feb99-9d93-b4c9-4619-918632ca4286.png)
ここで名前、説明を入力して、続行を押しましょう。
名前：作成したいWorkLoad Identityプールの表示名ID
説明：このプールの用途などを説明する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/f15bc241-1936-921b-648d-238df2020a48.png)
次に、プロバイダの設定をします。ここではgithubと連携をする場合は、画像と同じように入力してください。発行元のURLもみなさん共通のものです。
設定をして続行を押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/85fe6231-d570-2f44-0424-e2d530ccd7fe.png)
画像に従って、属性のマッピングの欄を埋めましょう。ここに何を入れるのが適切なのかわからなかったので、とりあえず必要そうなものはすべて入れています。
最後に属性条件のところに、githubactionsを実行したいgithubユーザ名/githubリポジトリ名を入れて、ほぞんを押しましょう。これでworload Identityのプールを作成することができたはずです。
次に作成したプールに対してサービスアカウントの権限を許可しましょう。

左側のWorkIndentityの連携をクリックすると、作成したプールが表示されていると思います。
ここをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/9b4df52d-4adc-f433-376f-b2bc08859d9f.png)
すると画像のような画面になると思うので、ここでアクセスを許可を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/42d83321-8f6c-3632-5707-e3cf75c250a8.png)
そうすると右側に、このような画面が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/1d6f4cdb-2f03-9078-9555-086022dcd375.png)
ここで、下の”サービスアカウントの権限借用を使用してアクセス権を付与する”を選びます。
次に、サービスアカウントをプルダウンから選び、下の”プリンシパルを選択する”のところでsubjectを選んで、右側のところに、githubユーザ名/リポジトリ名を入れて、保存を押します。
これでプールの権限に、入力したgithubへの権限を許可するようになっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/90b5bfd8-55b2-1b33-93e3-f36b56fcb458.png)

最後にサービスアカウントのプリンシパルにアクセス権を付与しないといけないので、そこを追加しましょう。

右のサービスアカウントというタブから、この画面に移動しましょう。
今アクセス権を付与したいサービスアカウントをここでクリックしてください。
![スクリーンショット 2024-10-19 103628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/1e10bb52-0e2b-55f5-f50c-c395045ae582.png)

ここで、上の権限というタブに行きましょう
![スクリーンショット 2024-10-19 104118.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/dc3d8de6-0c60-88d3-9f5c-4bb24882d228.png)

次に、アクセス権を許可を押しましょう。
![スクリーンショット 2024-10-19 104253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/0446f931-37fd-2839-e7f3-a4f00efc1814.png)

するとこのような画面になると思います。
ここで、新しいプリンシパル・ロールを入力しましょう。

#### 新しいプリンシパル:

principalSet://iam.googleapis.com/projects/プロジェクト番号/locations/global/workloadIdentityPools/Workload Identityプール名/attribute.repository/githubユーザ名/githubリポジトリ名
#### ロール：
Workload Identity ユーザー

と設定をしたら、保存を押します。

![スクリーンショット 2024-10-19 104545.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821078/188bf664-7720-11b8-543e-4e6fcc972d29.png)


これでようやくGitHubと認証周りの連携が完了しました！！
非常に長かったですね！
（ただたいていの場合、これで終わりではなく想定していないエラーがこの後出るので覚悟してください泣）

<a id="anchor3"></a>
# 終わりに
今回はGitHubとGoogleCloudの認証周りの連携について説明しました。
次回は、google cloud runを使って、いよいよstreamlitで作成したアプリをデプロイしたいと思います。

最後までお読みいただき、ありがとうございます。
良ければ次回もお付き合いください！！