Closed9

Cloud Run を使ってみる

sekitatssekitats

コンポネをアプデする

$ gcloud components update

リージョンを設定する

$ gcloud config set run/region REGION 

東京リージョンもあるぽいけど us-central1にしてしまった

sekitatssekitats

コンテナをビルドする

コンテナのビルドにはローカルでビルドするか、Cloud Build を使う方法がある。

ローカルで Docker コンテナをビルドする

https://cloud.google.com/run/docs/building/containers?hl=ja

Dockerfile のあるディレクトリで

$ docker build --tag IMAGE_NAME:TAG_NAME .

IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。

コンテナイメージへの参照は例えば Docker hub みたいなプライベートリポジトリかな?使ってないので、今回は素直に Cloud Build を使うことにする

Cloud Build でビルドする

$ gcloud builds submit --pack \
image=[ホスト名]/[GCPプロジェクトID]/[GCP内でのイメージ名]:[タグ]

IMAGE_URL をコンテナ イメージ URL(たとえば、gcr.io/myproject/myservice)で置き換えます。

参考記事

ビルド始まる

...
ビルド〜
...
-----------------------------------------------------------------------------------------
ID                                    CREATE_TIME                DURATION  SOURCE                                                                                          IMAGES                                                   STATUS
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  2023-02-11T06:41:59+00:00  1M13S     gs://PROJECT_ID_cloudbuild/source/xxxxxxxxxx.xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.tgz  gcr.io/PROJECT_ID/IMAGE_NAME (+1 more)  SUCCESS

成功すると Container Registory (GCR) にアップロードされる

sekitatssekitats

今度は、Google Cloud CLI から Container Registory へのリクエストを許可するおまじないが必要らしい

$ gcloud auth configure-docker
...
// ~.docker/config.jsonというファイルができた模様。
Docker configuration file updated.
sekitatssekitats

エラー出る、詰む

ERROR: (gcloud.run.deploy) The user-provided container failed to start
 and listen on the port defined provided by the PORT=8080 environment variable.

Cloud Run サービスの場合、コンテナはリクエストの送信先ポートで 0.0.0.0 のリクエストをリッスンする必要があります。デフォルトでリクエストは 8080 に送信されますが、選択したポートにリクエストを送信するように Cloud Run を構成することもできます。Cloud Run は、PORT 環境変数をコンテナに追加します。Cloud Run コンテナ インスタンス内では、リクエスト送信先ポートが PORT 環境変数の値に常に反映されます。デフォルトは 8080 です。

Cloud Run は特定のポートでのリッスンが必須なのか?Cloud Run はwebサイト、API以外のアプリの実行はできないのだろうか?(スクレイピングとか。今回は Twitter のタイムライン監視アプリを作った。)

作ったアプリがリッスンが不要なのでここへ来て困ってしまった。

そもそも要件に Cloud Run の用途があっていなかったのかもしれない。

sekitatssekitats

gae がいいかもしれん

次回、Google App Engine(GAE)を使ってみる

sekitatssekitats

イメージを削除する

gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]@sha256:[IMAGE_DIGEST]

IMAGE_DIGEST は sha:256 のハッシュ値 sha256:<digest>

ERROR: Tags:
ERROR: (gcloud.container.images.delete) This operation will implicitly delete the tags \ listed above. Please manually remove with the `untag` command or re-run with \
--force-delete-tags to confirm.

untag するか --force-delete-tags しろと怒られる

$ gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG] --force-delete-tags

CLIから削除を確認。

イメージが削除されているか、Container Registory を確認したがすぐには反映されない模様

結局、コンソールから削除した。

sekitatssekitats

コンテナの削除

Cloud Run のコンソールから簡単に削除ができた。

このスクラップは2023/02/12にクローズされました