Google Cloud リソースのデプロイを自動化する

このページでは、既存のリポジトリと Infrastructure Manager を使用して Google Cloud リソースのデプロイを自動化するために Cloud Build トリガーを設定するプロセスについて説明します。

Infra Manager が Git リポジトリに接続すると、プル リクエストはデプロイのプレビューを呼び出し、コミットはデプロイのプレビューの作成またはデプロイの更新を呼び出します。

始める前に

  1. Infra Manager が有効になっていることを確認します。
  2. デプロイメントの作成に必要な IAM 権限があることを確認します。
    • roles/config.admin
  3. 必要な権限を持つサービス アカウントがあることを確認します。詳細については、サービス アカウントを構成するをご覧ください。
  4. Terraform 構成を含む既存の Git リポジトリを特定します。このページで説明する自動化を設定するときに、Infra Manager がリソースの更新に使用する Terraform 構成です。
  5. 推奨: Git リポジトリにブランチ保護を設定します。

Google Cloud リソースのデプロイを自動化する

次の手順では、Git リポジトリに保存されている Terraform 構成のプレビューとデプロイを自動化するために必要な設定について説明します。Terraform 構成のデプロイは、既存のデプロイのリビジョンにすることができます。リビジョンにより、プロビジョニングされた Google Cloud リソースが削除または置き換えられることがあります。

設定が完了すると、Git リポジトリの pull リクエストにより、Infra Manager でデプロイのプレビューが作成されます。pull リクエストが統合されると、Infra Manager は Terraform 構成を自動的にデプロイします。

im_cloudbuild_workspace モジュールは、次のような複数のリソースを作成します。

  • Cloud Build リポジトリ接続。
  • pull リクエストの作成時に呼び出される Cloud Build トリガー。このトリガーにより、Infra Manager はリポジトリ内の Terraform 構成を使用してプレビュー デプロイメントを作成します。
  • pull リクエストが Git リポジトリと統合されたときに呼び出される Cloud Build トリガー。このトリガーにより、Infra Manager はリポジトリ内の Terraform 構成を使用してデプロイを作成または更新します。

リポジトリが更新されたときに Terraform 構成のデプロイを自動化するには:

  1. ご利用の GitHub アカウントか所有する組織に Cloud Build GitHub アプリをインストールします。
  2. 個人用アクセス トークンを作成する

    トークンに有効期限が設定されていないことを確認し、GitHub に指示が表示されたら、reporead:user の権限を選択します。アプリが組織にインストールされている場合は、read:org 権限も選択してください。

    個人用のアクセス トークンを生成したら、そのトークンは安全な場所に保存します。生成したトークンは、次の手順で使用します。

  3. im_cloudbuild_workspace モジュールを Git リポジトリ内の main.tf ファイルにコピーします。

    module "im-workspace" {
     source = "terraform-google-modules/bootstrap/google//modules/im_cloudbuild_workspace"
     version = "~> 7.0"
    
     project_id = PROJECT_ID
     deployment_id = DEPLOYMENT_ID
     im_deployment_repo_uri = GIT_REPO
     im_deployment_ref = REF
    
     github_app_installation_id = GIT_APP_ID
     github_personal_access_token = TOKEN
    }
    

    以下のように置き換えます。

    • PROJECT_ID: Infrastructure Manager が実行されるプロジェクト ID。
    • DEPLOYMENT_ID: 指定したデプロイ ID。デプロイ ID の制約について詳しくは、デプロイ名をご覧ください。
    • GIT_REPO: Git リポジトリの URI。
    • REF: 構成の Git リファレンス。参照は省略可能です。参照を指定しない場合は、Git リポジトリのデフォルトで構成されたブランチが使用されます。
    • GIT_APP_ID: pull リクエスト トリガーと push リクエスト トリガーに使用される Cloud Build GitHub アプリのインストール ID。
    • TOKEN: GitHub リポジトリの個人用アクセス トークン。指定されている場合は、Secret Manager 内にシークレットを作成します。
  4. im_cloudbuild_workspace モジュールを使用してデプロイメントを作成します(または既存のデプロイメントを更新します)。

    gcloud infra-manager deployments apply projects/PROJECT_ID/locations/LOCATION/deployments/DEPLOYMENT_ID \ 
       --service-account projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT \
       --git-source-repo=GIT_REPO \
       --git-source-directory=DIRECTORY \
       --git-source-ref=REF
    

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

    • PROJECT_ID: Infrastructure Manager が実行されるプロジェクト ID。
    • LOCATION: Infra Manager が実行されるロケーション。ロケーションの一覧については、Infrastructure Manager のロケーションをご覧ください。
    • DEPLOYMENT_ID: 指定したデプロイ ID。デプロイ ID の制約について詳しくは、デプロイ名をご覧ください。
    • SERVICE_ACCOUNT: Infra Manager の呼び出しに使用するサービス アカウントの名前。
    • SERVICE_ACCOUNT_PROJECT_ID は、サービス アカウントのプロジェクト ID です。通常、これは Infrastructure Manager が実行されているプロジェクトと同じです。
    • GIT_REPO: 公開 Git リポジトリ。
    • DIRECTORY: Terraform 構成を含むディレクトリ。
    • REF: 構成の Git リファレンス。参照は省略可能です。参照を指定しない場合は、Git リポジトリのデフォルトで構成されたブランチが使用されます。
  5. Git リポジトリが Infra Manager に正しく接続されていることを確認するには、リポジトリに pull リクエストを作成します。

    フォークされた Terraform 構成の検証結果を確認するには、GitHub で pull リクエストを表示します。

この自動化が設定されたら、Cloud Build トリガーによって次のことが行われます。

  • リポジトリに pull リクエストが送信されると、Infra Manager は、Git リポジトリに保存されているフォークされた Terraform 構成を使用してプレビュー デプロイを作成します。
  • pull リクエストがリポジトリに統合されると、Infra Manager は、Git リポジトリに保存されているフォークされた Terraform 構成を使用してデプロイを更新します。

次のステップ