ウェブサービスを作成する

このページでは、Golang で記述された Gin ウェブ フレームワークを使用して VM にウェブサービスを作成する方法について説明します。使用する他のフレームワークでウェブサービスを作成することもできます。

  1. VM に Go パッケージをダウンロードするには、VM で次のコマンドを実行します。
    wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
      
  2. VM に Go をインストールします。詳細については、Go をインストールするをご覧ください。
  3. ウェブサービスの新しいディレクトリを作成するには、次のコマンドを実行します。
    mkdir SERVICE_REPO
      cd SERVICE_REPO
      

その他の考慮事項

ウェブサービスを作成する際は、次の点を考慮する必要があります。

  • VM の作成時に必要な入力は環境変数として使用でき、接頭辞は CONNECTOR_ENV_ です。
  • ウェブサービスを設定するときに、環境変数を使用してこのような値を読み取ります。
  • VM の作成時に入力として受け取る必要があるのは、ウェブサービスの設定に必要な値のみです。
  • サービスのポートは、CONNECTOR_ENV_PORT 変数から入力として取得する必要があります。
  • オプションの入力には、他の環境変数を使用します。
  • 接続の作成時に入力を取得することもできます。これらのフィールドは、カスタム コネクタを作成するときに定義し、各 API 呼び出しでパス、クエリ、ヘッダーとして渡すことができます。
  • サーバーが localhost で実行されていることを確認します。

ロギング

必要な情報をログに記録し、ログを Cloud Logging に push します。これにより、コネクタ コンシューマは障害をトラッキングしてデバッグできます。ログを Cloud Logging に公開するには、Go で利用可能な次の Cloud Logging クライアントを使用します。https://pkg.go.dev/cloud.google.com/go/logging#NewClient

メインでロガーを初期化し、Gin にミドルウェアを追加して、受信したすべてのリクエストを追跡する必要があります。リクエストのメソッド、パス、ステータス、レイテンシを追跡する必要があります。ログをフィルタするには、ロギング中に適切な重大度を使用します。ウェブサービスで、環境変数からログレベルを読み取ります。ログレベルは、VM の作成時にオプションの入力として取得されます。デフォルトでは、情報ログを使用できます。ログレベルは次のとおりです。

  • DEBUG: HTTP リクエスト/レスポンスのトレースを含むリクエストのすべての部分をログに記録します。
  • INFO: サービスの起動、サービスのシャットダウン、リクエストなどの情報をログに記録します。
  • ERROR: リクエストの失敗、書式設定例外、その他のエラーをログに記録します。

正常なシャットダウン

進行中のリクエストを適切にシャットダウンして処理するようにサーバーを設定します。サーバーを正常に再起動または停止する方法については、グレースフル リスタートまたは停止をご覧ください。

同時実行

Gin サーバーは、Go ルーティンを使用した同時リクエストを本質的にサポートしています。デフォルトでは、Go ルーティンで処理できるリクエストの数に上限はありません。ただし、リクエストでリソース使用量が増加することが予想される場合は、ワーカープールを使用して、サーバー上でリクエストを制限してバッファリングします。詳細については、ワーカープールの例をご覧ください。

バイナリをテストしてビルドする

  1. 次のコマンドを使用してポートを設定し、サーバーを実行します。
  2. EXPORT CONNECTOR_ENV_PORT = 8081
    go get .
    go run .

    これらのコマンドは、必要なライブラリをバンドルしてサーバーを実行します。

  3. サーバーを検証するには、VM で次の curl コマンドを実行します。
    curl -X POST -H "Content-Type: application/json" -H "X-Custom-Header: MyValue" -d '{"name": "Alice", "address": "123 Main St", "gender": "F"}' http://localhost:8081/postData/456
    curl -v http://localhost:8081/getData -H "TestKey: MyValue"
  4. 次のコマンドを使用してバイナリを作成し、VM イメージとして使用します。
    go build -o SERVICE_NAME
  5. 次のコマンドを使用して、バイナリをルートフォルダに移動します。
    sudo cp SERVICE_NAME /opt
  6. サービスを再度実行し、次のコマンドを使用してバイナリが期待どおりに動作していることを確認します。
    sudo chmod +x SERVICE_NAME
    ./SERVICE_NAME

アプリケーションをコンテナ化する

  1. Docker をインストールします。詳細については、Docker をインストールするをご覧ください。
  2. バイナリを実行する Docker ファイルを作成します。
    FROM alpine:latest
    WORKDIR /opt
    COPY . .
    CMD ["./SERVICE_NAME"]
  3. 次のコマンドを使用してコネクタ コンテナをビルドします。
    sudo docker build -t connector-container .
  4. Docker コンテナを実行します。予期しない障害が発生した場合にサービスを再起動するには、--restart=unless-stopped に設定します。

コンテナレベルのタスク

Docker コンテナの実行中に gcplogs ログドライバを使用すると、stdout のすべてのログを Cloud Logging に転送できます。これにより、サービスの起動、予期しない障害、シャットダウンを追跡できます。

ログを Cloud Logging に転送するには、次のコマンドを実行します。
  sudo docker run --name connector-service -e
  CONNECTOR_ENV_PORT=$CONNECTOR_ENV_PORT -p
  $CONNECTOR_ENV_PORT:$CONNECTOR_ENV_PORT --restart=unless-stopped ----log-driver=gcplogs connector-container

次のステップ