TL;DR
- Finchでbuild/pushしたコンテナイメージをCloudRunで使いたかった
- FinchでGCPのArtifact RegistryへログインできずにDockerでpushする結果に。
概要
Finchで作成したコンテナイメージをCloud bRun
Versions
- finch
- v0.6.2
- nestjs/nest
- v9.8.0
- node
- v20.4.0
流れ
コードの用意
今回はnestを使用します。
$ npx nest new app
動作確認用に雑にエンドポイントを3つ用意します。
import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; @Controller() export class AppController { constructor(private readonly appService: AppService) { } @Get() getHello(): string { return this.appService.getHello(); } @Get('2') getHello2(): string { return 'hello2'; } @Get('/3') getHello3(): string { return 'hello3'; } }
Artifact Registryへpush
結論から、ここでつまずきです。
Artifact RegistryはDockerにのみ対応しております。
Artifact Registryへのpush方法とリポジトリの形式を見たところDockerのみ対応している様子です。
※他に方法があれば教えて下さい
$ gcloud auth configure-docker \ asia-northeast1-docker.pkg.dev
Finchにも以下のログインコマンドがあるのですが、username/passwordが必要なため使用することができませんでした。
$ finch login
方針転換
以上のことから、Docker for Macを使用してpushを行います。
Dockerでビルドを行います
$ docker build \ -t asia-northeast1-docker.pkg.dev/<PROJECT ID>/learn/app .
Artifact Registryのログインを行います
$ gcloud auth configure-docker \ asia-northeast1-docker.pkg.dev
Artifact Registryへpushします
$ docker push asia-northeast1-docker.pkg.dev/<PROJECT ID>/learn/app .
CloudRunへデプロイ
今回はマニュアルでサクッと作ります。
Cloud RunはGUIからだと設定項目が少なくシンプルに使用可能で、yamlからは様々なユースケースに対応できるのが良い点ですね。
GCPのCloud Runから「サービス選択」からデプロイを開始します
以下の項目を設定し、ページ最下部の「作成」を押下します。 1. コンテナイメージの指定 2. リージョンの指定 3. 未認証の呼び出しを許可
動作確認
デプロイ完了したことを確認します
発行されたURLにアクセスし、「Hello World」と表示されれば成功です。
所感
Finchで一気通貫でやってみたかったところ、躓いてしまい名残惜しい結果になってしまいました。
(調査不足なだけでFinchでも可能かもしれませんが、)まだまだDockerはデファクトスタンダードの立ち位置なのかなと痛感しました。