このページでは、Compose 仕様に基づくファイルを使用して、Cloud Run にサービスをデプロイする方法について説明します。
次の方法で、Compose ファイルを使用して Cloud Run にデプロイできます。
Compose を使用して Cloud Run にデプロイすることは、開発に最適であり、ローカル環境からクラウド環境への移行を簡素化します。これにより、ローカル アプリケーションとデプロイされたアプリケーションの両方で一貫した構成形式を維持できます。
Infrastructure as Code(IaC)環境で本番環境を管理する場合は、Terraform を使用することをおすすめします。
制限事項
- Compose デプロイでは、複数のコンテナを含む単一の Cloud Run サービスがデプロイされます。
- Compose デプロイは、サポートされている Cloud Run 機能のサブセットのみを変換します。
- Compose を使用して作成されたサービスは、デフォルトで最大インスタンス数 1 に設定されます。
- デプロイは簡素化されますが、Cloud Run Compose のデプロイは、本番環境向けの包括的な infrastructure-as-code 戦略の代わりにはなりません。
Compose を使用してコンテナ イメージからサービスをデプロイする
compose.yaml ファイルでサービスを定義し、既存のコンテナ イメージからデプロイします。詳細については、コンテナ イメージをデプロイするをご覧ください。
例: 単一サービス アプリケーション
次の例は、ビルド済みコンテナ イメージを使用するウェブサービスの compose.yaml ファイルを示しています。
services:
web:
image: us-docker.pkg.dev/cloudrun/container/hello
ports:
- "8080:8080"
サービスをデプロイする
サービスをデプロイするには、
gcloud beta run compose upコマンドを実行します。gcloud beta run compose up compose.yaml必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、
yと応答します。省略可: サービスへの未認証アクセスを許可する場合は、サービスを一般公開にします。
デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。
Compose を使用してソースからデプロイする
compose.yaml ファイルでサービスを定義し、ソースコードからビルドしてデプロイします。詳細については、ソースコードからサービスをデプロイするをご覧ください。
例: 単一サービス アプリケーション
次の例は、現在のディレクトリのソースからビルドするウェブサービスの compose.yaml ファイルを示しています。
services:
web:
build: .
ports:
- "8080:8080"
サービスをデプロイする
プロジェクト ディレクトリに、サービス定義を含む
compose.yamlファイルを作成します。サービスをデプロイするには、
gcloud beta run compose upコマンドを実行します。gcloud beta run compose up compose.yaml必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「
y」と応答します。省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。
サポートされている機能
compose.yaml ファイルを使用してデプロイすると、Cloud Run は Compose ファイルで定義されている他の Google Cloud リソースを自動的にプロビジョニングできます。リソースが必要な場合、Cloud Run はリソースを作成する前に同意を求めます。
Cloud Run は、Compose 機能の次のサブセットをサポートしています。
| Compose フィールド | Cloud Run のマッピングと説明 |
|---|---|
services |
サービスは、デプロイされた Cloud Run サービスの個々のコンテナにマッピングされます。 |
volumes |
一部サポート対象。 |
secrets |
サポートされています。Secret Manager の使用。 |
configs |
サポートされています。Cloud Storage の使用 |
build |
Cloud Build は、ビルド コンテキストを使用してコンテナをビルドし、タグ付けして Artifact Registry の |
image |
サポートされているレジストリからビルド済みのコンテナ イメージをデプロイします。ビルド済みのイメージがある場合に使用します。Docker Hub と Artifact Registry のイメージのみをサポートします。カスタム イメージの場合は、イメージを Artifact Registry に push して使用できます。 |
ports |
イングレコンテナを決定するポート マッピングのリスト( |
expose |
依存サービスが通信に使用できるポートを確保するために、 |
depends_on |
コンテナの起動順序を定義します。これにより、 |
cpu_count / cpus |
Cloud Run の CPU とメモリの上限を設定するために使用されるヒント。次のロジックに従ってリソースが自動的に割り当てられます。
|
container_name |
依存関係の解決に使用するコンテナの名前を設定します。指定されていない場合は、デフォルトでサービス名が使用されます。 |
environment |
環境変数を Cloud Run の対応するコンテナに渡します。 |
command |
コンテナで宣言されたコンテナのデフォルト コマンドを、Cloud Run の |
entrypoint |
サポート対象 |
env_file |
サポート対象 |
x-google-cloudrun:ingress-container |
(拡張機能)この Google 固有の拡張機能をサービスに追加し、 |
x-google-cloudrun:volume-type: in-memory |
(拡張機能)この Google 固有の拡張機能をボリュームに追加し、Cloud Storage でバックアップされたデフォルトのボリュームではなく、 |
Secret Manager にマッピングされたシークレット
compose.yaml ファイルで secrets が定義されている場合、gcloud CLI はこのデータを保存するために Secret Manager シークレットをプロビジョニングします。
Cloud Storage にマッピングされたボリュームと構成
compose.yaml ファイルでトップレベルの volumes または configs が定義されている場合、gcloud CLI はこのデータを管理するために Cloud Storage バケットをプロビジョニングします。デプロイごとに 1 つのバケットが作成され、フォルダを使用してボリュームと構成が分離されます。
- 名前付きボリューム: ボリューム名に対応する空のフォルダがバケットに作成されます。
- バインド マウント: バインド マウントの場合、Cloud Run はデプロイ前にローカル ソース ディレクトリの内容をバケット内のフォルダにアップロードします。
- 構成:
file:ソースで定義された構成ごとに、Cloud Run はローカル ファイルの内容をバケット内のフォルダにアップロードします。
必要なロール
デプロイ中、Cloud Run は、プロビジョニングされたリソースにアクセスするために必要なロールを、デプロイされたサービスのサービス ID に自動的に付与します。
- Cloud Storage バケット:
roles/storage.objectUser - Secret Manager シークレット:
roles/secretmanager.secretAccessor
同じインスタンスのコンテナ間の通信
Cloud Run は、各コンテナの /etc/hosts ファイルにエントリを追加します。このエントリは、compose.yaml ファイルのサービス名を内部 IP アドレスにマッピングします。これにより、サービスはサービス名を使用して相互に通信できます。
次のステップ
- サービスの管理の詳細を確認する。
- 認証の設定について学習する。
- シークレットを管理する方法を学習する。