Cloud Runプロキシを使用してWebアプリの動作確認をする方法

# はじめに
今までCloud RunにWebアプリをデプロイして、動作確認をするとき、毎回「未認証の呼び出しを許可」にして、確認し終えたら「認証が必要」に切り替えていました。
Cloud Run プロキシを使用する方法があったので、試してみました。

# 今までの確認方法
Cloud Runにデプロイしたら、基本的に認証方法が「認証が必要」になると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/52bb84a1-66bd-eb32-e2f8-d7fb3b9e7304.png)

この状態でURLにアクセスすると、開くことができないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/c85915e7-61d4-693c-f0d9-55a08d91d2ba.png)

これを「未認証の呼び出しを許可」に変更すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/51ede8c0-a6e8-1ea5-58d4-c058b393230c.png)

デプロイしたアプリを開くことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/e9e635d8-3990-a6fa-6372-5bb72f70bf10.png)

ただこの方法ですと、「未認証の呼び出しを許可」にしている期間は誰でもアクセス可能になってしまいセキュリティ上あまりよろしくないです。

# Cloud Run プロキシを使用する方法
Cloud Runサービスをローカルホストにプロキシ経由でアクセスすることができるようになります。
Cloud Shellで以下のコマンドを実行します。
```bash
gcloud run services proxy {サービス名} --port=8080
```

https://cloud.google.com/sdk/gcloud/reference/run/services/proxy

実行するとリージョン選択になるので、番号を入力します。
```bash
Please enter numeric choice or text value (must exactly match list item):
```

プロキシが実行状態になります。
```bash
Proxying to Cloud Run service [サービス名] in project [プロジェクトID] region [asia-northeast1]
http://127.0.0.1:8080 proxies to https://サービス名-an.a.run.app
```

Cloud Shellの「ポート8080でプレビュー」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/fffb086f-a2e8-f42f-b97a-b71ce32bdd36.png)

すると、デプロイしたがアプリが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/b6cf913e-03c9-2b3d-4c89-9c2972f60328.png)

Cloud Runのプロキシを使用することで、認証をかけたまま動作確認することが可能になります。

# おわりに
Cloud Runのプロキシを使用して、認証ありのまま動作確認することができました。
Cloud Runは結構使用頻度が高いサービスなので、テストする際には有用な方法なのかなと思います。

# 参考
以下に参考として、WSLにgcloud CLIをインストールする方法やArtifact RegistryへのPush方法を記載しています。

## Artifact RegistryへのPush 
### リポジトリの作成
ターゲットとなるリポジトリをArtifact Registry上に作成する。

### gcloud CLIのインストール(WSL)
gcloud CLIインストール済みの方はスキップしてください。

<details><summary>gcloud CLIのインストール方法(WSL)</summary>

以下のコマンドを実行して、Google Cloud SDK のリポジトリをシステムに追加します。
```bash
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
```

リポジトリを追加したら、以下のコマンドでパッケージリストを更新します。
```bash
sudo apt-get update
```

最後に、`google-cloud-cli`をインストールします。
```bash
sudo apt-get install google-cloud-cli
```

</details>

### gcloud CLI 認証ヘルパー
gcloud CLI 認証情報ヘルパーは、プロジェクト リソースに安全で短期間のアクセス権を付与するものです。

ユーザー認証情報により認証を構成するコマンドを実行します。
```bash
gcloud auth login
```

認証ヘルパー構成に追加するリポジトリホスト名を追加します。
```bash
gcloud auth configure-docker HOSTNAME-LIST
```

`asia-northeast1`の場合は、以下のようにします。
```bash
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
```

https://cloud.google.com/artifact-registry/docs/docker/authentication?hl=ja#gcloud-helper

### Dockerイメージの作成
前回[Fletで簡易アプリ作成](https://qiita.com/te_yama/items/d6614bca776da8da2608)で作成したDockerイメージを使用します。

その際にイメージ名を以下のような形式にする必要があります。
```
LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
```

### Pushする
以下コマンドでArtifact RegistryにPushします。
```bash
docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
```

https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=ja#pushing

## Cloud Runへデプロイ
Artifact RegistryにPushしたコンテナイメージを指定して、ポートを`8550`にしてデプロイする。
ポートは、[Fletで簡易アプリ作成](https://qiita.com/te_yama/items/d6614bca776da8da2608)で指定したポートを使用する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968617/e0bbd79e-070e-d887-f178-6d684c9f9f77.png)