デプロイ

このページでは、Metrics Configuration Generator(MCG)をデプロイする方法について説明します。

ソースコードにアクセスする

MCG のソースコードは、GitHub の aaos-sdv-telemetry-mcg でホストされています。MCG は、開発とテストのためにローカルで実行することも、チームアクセス用にクラウド環境にデプロイすることもできます。

ローカルで実行する

ローカルでの開発とテストのためにソース ディレクトリから MCG を実行するには、Bazel を使用します。Bazel がインストールされている必要があります。ローカルで実行する場合は、MCG_LOCALCACHE=true を設定して、インメモリ キャッシュを有効にする必要があります。これは、車両シグナル カタログの保存をサポートします。サービスをローカルでビルドして実行するには、ソース ディレクトリから次のコマンドを使用します。

# Build and run on default port 8005
MCG_LOCALCACHE=true bazel run //:mcg

# Or, to change the port, use:
MCG_LOCALCACHE=true bazel run //:mcg -- --listen :9000

Google Cloud にデプロイする

MCG コードベースには、MCG を Google Cloud Run サービスとして Google Cloud にデプロイするための Terraform ファイルと Google Cloud Build ファイルが含まれています。以降のセクションでは、デプロイ プロセスについて説明します。これには、変数ファイルの作成、インフラストラクチャのデプロイ、アプリケーションのビルドとデプロイ、アクセスの付与、デプロイの検証が含まれます。

Cloud Run はサーバーレス プラットフォームであるため、サーバーを 24 時間 365 日アクティブに保つのではなく、リクエストの処理時にのみコンテナを実行することでリソースを節約します。つまり、リクエスト間でコンテナ インスタンスがシャットダウンされると、インメモリ データが失われます。そのため、サービス呼び出し間でカタログデータの永続ストレージを提供するには、Redis が必要です。このアプローチでは、チームや本番環境での使用に適したスケーラブルなデプロイが可能です。

前提条件

Google Cloud へのデプロイを開始する前に、次の前提条件を満たしていることを確認してください。

  • 課金が有効になっていて、リソースと IAM ロールをプロビジョニングするための十分な権限がある Google Cloud プロジェクト
  • Terraform(v1.0.0 以降)がインストールされている
  • Google Cloud CLI(gcloud)がインストールされ、認証されている

ファイル構造

Google Cloud にデプロイするには、infrastructure/ サブディレクトリから Terraform コマンドを実行し、リポジトリのルートから Cloud Build コマンドを実行します。操作する主なファイルとディレクトリは次のとおりです。

repository-root/
├── cloudbuild.yaml
└── infrastructure/
    └── terraform.tfvars  <-- you create this file

Terraform 変数ファイルを作成する

infrastructure/ ディレクトリに terraform.tfvars という名前のファイルを作成して、variables.tf で定義された変数の値を指定し、デプロイをカスタマイズします。このファイルで project_id と region の値を定義する必要があります。他の変数はすべて省略可能です。terraform.tfvars に以下を追加します。

project_id        = "your-gcp-project-id"
region            = "your-gcp-region" # For example, us-central1 or europe-west1

使用可能なすべての変数とそのデフォルト値については、variables.tf をご覧ください。デフォルト値をオーバーライドするには、terraform.tfvars で設定します。

インフラストラクチャをデプロイする

terraform.tfvars を作成したら、Terraform 構成を初期化して適用できます。このステップでは、Artifact Registry、Redis、Cloud Run など、必要なすべての Google Cloud リソースをプロビジョニングします。完了すると、Terraform は Google Cloud Run サービスを作成し、プレースホルダ コンテナ イメージを実行します。この手順には数分かかることがあります。

# Run from the infrastructure/ directory
terraform init
terraform apply

terraform apply からプロンプトが表示されたら、プランを確認し、「yes」と入力して確定します。

MCG アプリケーションをビルドしてデプロイする

インフラストラクチャがプロビジョニングされたら、次のステップとして MCG ソースコードをビルドし、Google Cloud Run にデプロイします。これを行うには、ソースコードを Google Cloud Build に送信します。Google Cloud Build は Docker イメージをビルドして Artifact Registry に push し、新しいイメージを使用するように Google Cloud Run サービスを更新します。

Google Cloud Build は、COMMIT_SHA 置換変数を使用して、ビルドされたイメージにタグを付けます。バージョン番号(v1.0.0 など)またはリポジトリの commit SHA を使用できます。タグ付けにより、Artifact Registry でのバージョンの区別、デプロイの管理、必要に応じた以前のバージョンへのロールバックが可能になります。

次の gcloud コマンドを実行して、ビルドとデプロイをトリガーします。

# Run from the repository root
#
# The command tags the image with the Git commit SHA.
# To tag with a version number, replace '$(git rev-parse --short HEAD)' with the version number.
gcloud builds submit . \
  --config=cloudbuild.yaml \
  --substitutions=COMMIT_SHA=$(git rev-parse --short HEAD)

このコマンドは、アプリケーション コードの初期デプロイを実行します。MCG ソースコードの更新をデプロイするには、このコマンドを再度実行します。

アクセス権を付与してデプロイを確認する

ユーザーまたはサービス アカウントが MCG API を呼び出せるようにするには、Cloud Run 起動元(roles/run.invoker)IAM ロールを付与する必要があります。

gcloud run services add-iam-policy-binding mcg-service \
  --member=MEMBER_TYPE:EMAIL_ADDRESS \
  --role=roles/run.invoker \
  --region=your-gcp-region

サービス URL を取得するには、次のコマンドを実行します。URL はデプロイ間で安定しています。

SERVICE_URL=$(gcloud run services describe mcg-service \
  --region your-gcp-region \
  --format='value(status.url)')

権限を付与したら、/health エンドポイントを呼び出して、サービスが実行中でアクセス可能であることを確認します。Google Cloud Run サービスでは認証が必要なため、エンドポイントを呼び出すときに、gcloud の認証トークンをリクエスト ヘッダーに含める必要があります。

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  $SERVICE_URL/health

サービスが実行されている場合、このコマンドは OK を返します。これで、API を呼び出すで説明されているように、API エンドポイントを呼び出すことができます。