既存のサービスを移行する

このガイドでは、Cloud Run のコンテナで実行するウェブ サービスを準備する方法について説明します。データの移行は対象外です。

PORT 環境変数で定義されたポートでリッスンする

サービスは、コンテナ ランタイムの契約で指定されているように、PORT 環境変数で指定されているポートでリッスンする必要があります。

PORT 環境変数が定義されていない場合は、デフォルト値を追加できます。この変数は docker run コマンドで省略できるため、開発が簡単になります。

コードを変更して PORT 変数をリッスンする

PORT 環境変数に定義された優先ポートの構成をサポートするようにサービスを変更します。これにより、オペレーションのオーバーヘッドが減少します。

  1. サービスが起動すると、すべての環境構成が利用可能になります。 PORT 環境変数が設定されているか確認してください。 この変数は Cloud Run に常に存在しますが、ローカルで実行している場合は使用できない可能性があります。

  2. PORT 環境変数が設定されている場合、サービスはその値をリッスンする必要があります。

  3. PORT 環境変数が設定されていない場合は、これをエラーとして処理するか、フォールバック ポートの値を指定します。

これらのステップを実行するサンプルコードについては、ビルドとデプロイのクイックスタートをご覧ください。

PHP や HTTP インターフェースのない言語の場合、ポート構成はウェブサーバー(Apache など)経由で処理されます。環境変数をリッスンするようにウェブサーバーを構成できない場合は、コンテナ エントリ ポイントのカスタマイズが必要になることがあります。詳しくは以降で説明します。

コンテナ エントリ ポイントを介して既存のポート構成を設定する

環境変数や構成ファイルなど、ポートを構成するメカニズムがサービスに存在する場合は、アプリケーション コードのリファクタリングを行う必要はありません。代わりに、PORT 環境変数を構成にマッピングする起動ロジックを追加します。

  1. サービスの Dockerfile を開きます。存在しない場合は、最初に Dockerfile を追加してから、以降のステップを続けます。

  2. PORT 環境変数を構成設定にマッピングするために、コンテナ エントリ ポイントのシェル スクリプトを作成します。たとえば、dockerfile-entrypoint.sh という名前で新しいファイルを作成し、次の内容を記述します。

    #!/usr/bin/env bash
        export YOURAPP_PORT=":${PORT}"
        # Execute the rest of your ENTRYPOINT and CMD as expected.
        exec "$@"
        

    上記の例では、BASH スクリプトで YOURAPP_PORT という環境変数に PORT をマッピングしています。この環境変数の前にはコロン(:)が必要です。これは代替ポートを表す一般的な形式です。

    最後の行では、exec "$@"Dockerfile で構成されているエントリ ポイントのステップを実行し、その後にサービスを開始するコマンド(CMD)を実行します。

  3. スクリプトが実行可能であることを確認します。

     chmod +x docker-entrypoint.sh
        
  4. 次の行を Dockerfile に追加して、スクリプトをコンテナにコピーします。

     COPY docker-entrypoint.sh /docker-entrypoint.sh
        
  5. 次の行を Dockerfile に追加して、コンテナ エントリ ポイントの一部としてスクリプトを実行します。

     ENTRYPOINT [ "/docker-entrypoint.sh" ]
        

    Dockerfile でエントリ ポイントが定義されている場合(または、それを定義するベースイメージから拡張されている場合)は、既存のエントリ ポイントを維持する必要があります。

     ENTRYPOINT [ "/docker-entrypoint.sh", "/existing-entrypoint.sh" ]
        

永続ストレージのローカル ファイル システムへの依存を削除する

アプリケーション コードでローカル ファイル システムへの依存を確認し、Cloud Storage のファイル ストレージや、Cloud FirestoreCloud SQL などのデータ ストレージに切り替えます。

Dockerfile を追加する

サービスをコンテナにラップするには、Dockerfile で動作環境を定義する必要があります。参考として使用できる基本的な Docker ファイルが用意されています。ビルドとデプロイのクイックスタートをご覧ください。

Dockerfile のカスタマイズ方法については、サービスを開発するをご覧ください。

同時実行とメモリ制限を調整する

同時実行の仕組みを学習して、サービスの同時実行サポートを最適化します。詳細については、同時実行を調整するための開発のヒントをご覧ください。

サービスに必要な一時ファイル ストレージの容量も含めて、アプリケーションの実行に十分なメモリ制限が設定されているかどうか確認してください。

stdout、stderr または /var/log ログを送信する

ロギングページの説明のように、Cloud Run は Google Cloud のオペレーション スイートを使用して、ログの集計と確認を自動的に行います。