Cloud Run サービスをローカルでテストする

開発段階で、デプロイする前にコンテナ イメージをローカルで実行し、テストを行うことができます。Cloud Code またはローカルにインストールされた Docker を使用して、ローカルでの実行とテストを行うことができます。Google Cloud サービスにアクセスして、ローカルでテストを行うこともできます。

始める前に

ローカルで初めて実行する場合は、使用しているサポート対象のコンテナ レジストリからイメージにアクセスするために必要な権限の一部がない可能性があります。

アクセス権を取得する方法については、サポート対象の Container Registry のドキュメントをご覧ください。gcloud CLI 認証情報ヘルパーを使用して Artifact Registry にアクセスするように Docker を構成できます。

gcloud auth configure-docker LOCATION-docker.pkg.dev

ローカルでテストする

Docker、Google Cloud にアクセスする Docker、Cloud Code エミュレータ、Google Cloud CLI を使用して、ローカルでテストできます。適切なタブを選択して、手順をご覧ください。

Docker

Docker を使用してコンテナ イメージをローカルでテストするには:

  1. 次の Docker コマンドを使用します。

    PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL

    IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。

    PORT 環境変数には、アプリケーションが HTTP または HTTPS リクエストをリッスンするポートを指定します。これは、コンテナ ランタイムの契約要件です。この例では、ポート 8080 を使用します。

  2. ブラウザで http://localhost:9090 を開きます。

コンテナに慣れていない場合は、Docker のスタートガイドをご覧ください。Docker コマンドの詳細については、Docker のドキュメントをご覧ください。

Google Cloud にアクセスする Docker

Google Cloud クライアント ライブラリを使用してアプリケーションを Google Cloud サービスと統合していて、これらのサービスを外部アクセスから保護していない場合、ローカル コンテナを設定してアプリケーションのデフォルト認証情報を使用し、Google Cloud サービスで認証を行います。

ローカルで実行するには:

  1. サービス アカウントの認証情報を生成、取得、構成する方法については、認証の開始をご覧ください。

  2. 以下の Docker 実行フラグを使用して、ローカル システムからローカル コンテナに認証情報と構成を読み込みます。

    1. --volume-v)フラグを使用して、認証情報のファイルをコンテナに挿入します。この操作を行う前に、マシンに GOOGLE_APPLICATION_CREDENTIALS 環境変数が設定されている必要があります。
      -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
    2. --environment-e)フラグを使用して、コンテナ内に GOOGLE_APPLICATION_CREDENTIALS 変数を設定します。
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. (省略可能)この完全構成済みの Docker run コマンドを使用します。

    PORT=8080 && docker run \
    -p 9090:${PORT} \
    -e PORT=${PORT} \
    -e K_SERVICE=dev \
    -e K_CONFIGURATION=dev \
    -e K_REVISION=dev-00001 \
    -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \
    -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \
    IMAGE_URL

    上記の例のパス

    /tmp/keys/FILE_NAME.json
    は、認証情報を配置するコンテナ内の場所です。

    他のディレクトリも使用できますが、GOOGLE_APPLICATION_CREDENTIALS 環境変数の値がコンテナ内のバインド マウントの場所と一致している必要があります。

    一部の Google Cloud サービスでは、ローカルのトラブルシューティングが本番環境のパフォーマンスやデータに影響を及ぼさないように、別の構成を使用することをおすすめします。

Cloud Code エミュレータ

VS CodeJetBrains IDE 用の Cloud Code プラグインを使用すると、IDE 内の Cloud Run エミュレータにより、コンテナ イメージをローカルで実行し、デバッグできるようになります。エミュレータでは、Cloud Run 上で実行するサービスの環境を構成できます。

CPU やメモリ割り当てなどのプロパティの構成、環境変数の指定、Cloud SQL データベース接続の設定が実行できます。

  1. VS Code 用または JetBrains IDE 用の Cloud Code をインストールします。
  2. IDE を使用してローカルで開発とデバッグを行う手順を行います。
  3. VS Code: ローカルでの開発デバッグ
  4. IntelliJ: ローカルでの開発デバッグ

gcloud CLI

Google Cloud CLI には、Cloud Run をエミュレートするローカル開発環境が含まれています。この環境を利用すると、ソースからコンテナをビルドし、ローカルマシンでコンテナを実行できます。また、コードの変更時にソースにコンテナを自動的に再構築できます。

ローカル開発環境を開始するには:

  1. サービスのソースコードを含むディレクトリに移動します。

  2. 次のコマンドを起動します。

    gcloud beta code dev

Dockerfile がローカル ディレクトリに存在する場合、Dockerfile を使用してコンテナを構築します。Dockerfile が存在しない場合、コンテナは Google Cloud の buildpacks で構築されます。

サービスが実行されていることを確認するには、ブラウザで http://localhost:8080/ にアクセスします。--local-port オプションでカスタムポートを指定した場合は、そのポートでブラウザを開くようにしてください。

ローカル サーバーを停止するには:

  • Mac OS と Linux: Ctrl-C
  • Windows: Ctrl-Break

サービス構成をカスタマイズする

YAML ファイルを使用して、ローカルで実行されるサービスの Cloud Run 構成をカスタマイズできます。YAML 形式は、Cloud Run サービスのデプロイに使用できるものと同じですが、Cloud Run サービスの設定のサブセットのみをサポートしています。gcloud beta code dev は、現在のディレクトリで *.service.dev.yaml で終わるすべてのファイルを検索し、使用します。見つからない場合は、末尾が *.service.yaml のファイルが使用されます。

ローカル開発では、次の設定を構成できます。

コンテナの image フィールドはローカル開発には必要ありません。これは、コマンドの実行時にイメージがビルドされ、サービスに渡されるためです。

ローカル開発には、次のサンプル service.dev.yaml ファイルを使用できます。

  apiVersion: serving.knative.dev/v1
  kind: Service
  metadata:
    name: my-service-name
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar

認証情報を使用したテスト

コンテナに Google Cloud サービスを使用する権限を付与するには、コンテナにアクセス認証情報を付与する必要があります。

  • 独自のアカウントを使用してコンテナに認証情報へのアクセスを許可するには、gcloud を使用してログインし --application-default-credential フラグを使用します。

    gcloud auth application-default login
    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential

  • アプリケーション認証情報をサービス アカウントとして付与するには、--service-account フラグを使用します。

    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL

    --service-account フラグを指定すると、サービス アカウント キーがダウンロードされ、ローカルのキャッシュに保存されます。キーを安全に保管し、不要になったら削除してください。

コードがローカルで実行されていることを確認する

Cloud Run でのテストをローカルで行う場合、Cloud Run のすべてのコンテナで利用できる K_REVISION 環境変数をチェックすることで、コンテナがローカルで実行されていることを確認できます。

Docker

Google Cloud CLI で、コードがローカルで実行されていることを確認するには、K_REVISION 環境変数をクエリします。これはまだ設定されていないため、値はありません。

Google Cloud にアクセスする Docker

ステップ 3 の上記のセクションの正確な値を使用して、Google Cloud CLI でコードがローカルで実行されていることを確認するには、K_REVISION 環境変数をクエリして値 dev-00001 を探し、コードがローカルで実行されていることを確認します。

Cloud Code エミュレータ

Cloud Code で、コードがローカルで実行されていることを確認するには、K_REVISION 環境変数をクエリし、local の値を探してローカルで実行されていることを確認します。

gcloud CLI

Google Cloud CLI で、コードがローカルで実行されていることを確認するには、K_REVISION 環境変数をクエリし、dev- で始まる値を探して、ローカルで実行されていることを確認します。

次のステップ