y-ohgi's blog

TODO: ここになにかかく

CloudRun上でFinchで作成したcontainerdのコンテナイメージを動かしたかった

TL;DR

  • Finchでbuild/pushしたコンテナイメージをCloudRunで使いたかった
  • FinchでGCPのArtifact RegistryへログインできずにDockerでpushする結果に。

概要

Finchで作成したコンテナイメージをCloud bRun

Versions

流れ

コードの用意

今回は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

スクリーンショット 2023-07-20 14.44.48

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から「サービス選択」からデプロイを開始します スクリーンショット 2023-07-20 14.54.27

以下の項目を設定し、ページ最下部の「作成」を押下します。 1. コンテナイメージの指定 2. リージョンの指定 3. 未認証の呼び出しを許可

動作確認

デプロイ完了したことを確認します

発行されたURLにアクセスし、「Hello World」と表示されれば成功です。

所感

Finchで一気通貫でやってみたかったところ、躓いてしまい名残惜しい結果になってしまいました。
(調査不足なだけでFinchでも可能かもしれませんが、)まだまだDockerはデファクトスタンダードの立ち位置なのかなと痛感しました。