サーバーレス環境でホストされているサービスへの接続性

このページでは、Google Cloud の Cloud Run などのサーバーレス環境でホストされているサービスに接続するように Integration Connectors を構成する方法について説明します。

次の図は、Integration Connectors から Google Cloud の Cloud Run 環境でホストされているサービスへのプライベート ネットワーク接続の設定を示しています。

このページでは、次のコンセプトを理解していることを前提としています。

考慮事項

PSC サービス アタッチメントを作成する場合は、次の重要な点に留意してください。

  • PSC サービス アタッチメントとロードバランサは、同じ VPC 内の異なるサブネットに作成されます。具体的には、サービス アタッチメントは常に NAT サブネットに作成されます。
  • ロードバランサとヘルスチェック プローブからのトラフィックは、同じポートに送信する必要があります。
  • ファイアウォール ルールを構成して、トラフィック フローを促進します。

    上り(内向き)ルール

    PSC サービス アタッチメントのサブネットからのトラフィックがバックエンド サービスに到達する必要があります。

    下り(外向き)ルール

    特定の拒否ルールが構成されていない限り、Google Cloud プロジェクトで下り(外向き)トラフィックはデフォルトで有効になっています。

  • PSC サービス アタッチメントやロードバランサなど、すべての Google Cloud コンポーネントは同じリージョンに存在する必要があります。

PSC サービス アタッチメントを作成する

Integration Connectors からプライベート接続を確立するには、PSC サービス アタッチメントを使用して、サービスが Integration Connectors に公開されている必要があります。サービス アタッチメントは常にロードバランサを使用します。したがって、サービスがロードバランサの背後にない場合は、ロードバランサを構成する必要があります。

  1. ロードバランサを作成する。 すでにロードバランサがある場合は、この手順をスキップします。

    Cloud Run を使用してリージョン内部アプリケーション ロードバランサを設定するの手順に沿って、サーバーレス NEG をバックエンドとして使用してアプリケーション ロードバランサを作成します。

  2. サービス アタッチメントを作成します。
    1. PSC NAT のサブネットを作成します。次のコマンドは、psc-nat-subnet1 という名前のサブネットを作成します。目的は PRIVATE_SERVICE_CONNECT です。
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. PSC NAT からロードバランサへのトラフィックを許可するファイアウォール ルールを作成します。
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. 明示的な承認を使用してサービス アタッチメントを作成します。
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      このコマンドでは、LIMIT はプロジェクトの接続上限です。接続上限は、このサービスに接続できるコンシューマ PSC エンドポイントの数になります。SERVICE_DIRECTORY_PROJECT_ID を取得する手順は次のとおりです。

      • 指定した Google Cloud プロジェクトからのリクエストのみを受け入れるように PSC サービス アタッチメントを作成できます。ただし、これを行うには、Google Cloud プロジェクトに関連付けられているサービス ディレクトリのプロジェクト ID が必要です。サービス ディレクトリのプロジェクト ID を取得するには、次の例に示すように List Connections API を使用できます。

        構文

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

        次のように置き換えます。

        • CONNECTORS_PROJECT_ID: 接続を作成した Google Cloud プロジェクトの ID。

        この例では、connectors-test Google Cloud プロジェクトのサービス ディレクトリのプロジェクト ID を取得します。

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

        ターミナルでこのコマンドを実行すると、次のような出力が表示されます。

        .....
        {
          "connections": [
            {
              "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
              "createTime": "2022-10-07T09:02:31.905048520Z",
              "updateTime": "2022-10-07T09:22:39.993778690Z",
              "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
              "status": {
                "state": "ACTIVE"
              },
              "configVariables": [
                {
                  "key": "project_id",
                  "stringValue": "connectors-test"
                },
                {
                  "key": "dataset_id",
                  "stringValue": "testDataset"
                }
              ],
              "authConfig": {},
              "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
              "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
              "nodeConfig": {
                "minNodeCount": 2,
                "maxNodeCount": 50
              }
            },
        ....
        

        サンプル出力では、connectors-test Google Cloud プロジェクトの場合、サービス ディレクトリのプロジェクト ID は abcdefghijk-tp です。

PSC サービス アタッチメントを使用するエンドポイント アタッチメントを作成する

IP アドレスとしてのエンドポイント アタッチメント

エンドポイント アタッチメントを IP アドレスとして作成する手順については、エンドポイント アタッチメントを IP アドレスとして作成するをご覧ください。

エンドポイント アタッチメントをホスト名として使用

TLS 対応のバックエンドなど、特定のケースでは、宛先で TLS 検証を行うために、プライベート IP ではなくホスト名を使用する必要があります。ホスト宛先の IP アドレスの代わりに限定公開 DNS を使用する場合は、エンドポイント アタッチメントを IP アドレスとして作成するだけでなく、マネージド ゾーンも構成する必要があります。エンドポイント アタッチメントをホスト名として作成する方法については、エンドポイント アタッチメントをホスト名として作成するをご覧ください。

後で、エンドポイント アタッチメントを使用するように接続を構成するときに、このエンドポイント アタッチメントを選択できます。

エンドポイント アタッチメントを使用するように接続を構成する

エンドポイント アタッチメントを作成したので、接続でエンドポイント アタッチメントを使用します。新しい接続を作成するか、既存の接続を更新する場合は、[宛先] セクションで [宛先の種類] として [エンドポイント アタッチメント] を選択し、[エンドポイント アタッチメント] リストから作成したエンドポイント アタッチメントを選択します。

マネージド ゾーンを作成した場合は、[宛先の種類] として [ホストアドレス] を選択し、マネージド ゾーンの作成時に作成した A レコードを使用します。

トラブルシューティングのヒント

よくある問題を回避するには、このセクションのガイドラインに従ってください。