ブループリントを作成してアップロードする

ブループリントは、Open Container Initiative(OCI)イメージとしてパッケージ化された Terraform 構成です。 Terraform 構成では、 App Lifecycle Manager がデプロイするインフラストラクチャとアプリケーションを指定します Google Cloud。

このページでは、既存の Terraform 構成から OCI イメージを作成する方法と、それらを App Lifecycle Manager にアップロードする方法について説明します。

これらの Terraform 構成の詳細については、 App Lifecycle Manager のブループリントをご覧ください。

始める前に

  1. App Lifecycle Manager が 有効になっていることを確認します
  2. App Lifecycle Manager で使用しているプロジェクトで、Docker 形式に設定された Artifact Registry リポジトリがあることを確認します。詳細については、 App Lifecycle Manager のリポジトリを作成するをご覧ください。
  3. App Lifecycle Manager を使用してデプロイする Terraform 構成を特定します。

ブループリントを作成してアップロードする

App Lifecycle Manager を使用して Terraform 構成を Google Cloud にデプロイするには、 次の操作を行う必要があります。

  • Terraform 構成を OCI イメージにパッケージ化します。これらの OCI イメージはブループリントと呼ばれます。
  • これらの OCI イメージを、特定または設定した Artifact Registry リポジトリに配置します。

ブループリントの作成とアップロードの方法に応じて、すべての手順を手動で行うことも、App Lifecycle Manager で一部の手順を実行することもできます。

次のいずれかの方法で OCI イメージを作成してリポジトリにアップロードできます。

  • Terraform 構成を含む zip アーカイブをアップロードします。 App Lifecycle Manager は、zip アーカイブを使用して OCI イメージを作成します。

    詳細については、次のセクションの zip アーカイブをアップロードするをご覧ください。

  • Terraform ファイルを含む Git リポジトリを接続します。App Lifecycle Manager は、このファイルを使用して OCI イメージを作成します。リポジトリを更新すると、App Lifecycle Manager は Cloud Build を使用してブループリントをビルドしてアップロードします。

    詳細については、次のセクションの Git リポジトリに接続するをご覧ください。

  • OCI イメージをローカルでビルドし、Artifact Registry のリポジトリに push します。

    詳細については、次のセクションの イメージを手動でビルドして push するをご覧ください。

  • OCI イメージの作成と Artifact Registry のリポジトリへの push を自動化します。このプロセスを自動化すると、App Lifecycle Manager を CI/CD パイプラインに組み込むことができます。

    詳細については、次のセクションの ブループリントの作成を自動化するをご覧ください。

zip アーカイブをアップロードする

Terraform ファイルの zip アーカイブを作成できます。リリースまたはユニットの種類を作成するときに、このアーカイブを App Lifecycle Manager にアップロードします。App Lifecycle Manager は、zip アーカイブを使用して必要な OCI イメージを作成します。

zip アーカイブを使用してブループリントを提供するには、次の操作を行います。

  1. Terraform プロジェクト ディレクトリに移動します。
  2. Terraform 構成を含む zip アーカイブを作成します。
    • 次のことを確認します。
      • zip アーカイブには Terraform ファイルのみが含まれています。たとえば、main.tfvariables.tfoutputs.tfversions.tf、モジュールなどです。
      • zip アーカイブに、不要なファイル(.git ディレクトリや Dockerfile など)が含まれていない。
    • zip アーカイブを作成するコマンドは、zip terraform-files.zip main.tf outputs.tf variables.tf versions.tf のようになります。
  3. リリースを作成するとき、またはユニットの種類を作成するときに、zip アーカイブをアップロードします。

App Lifecycle Manager は、zip アーカイブを使用して必要な OCI イメージを作成し、Artifact Registry リポジトリに push します。

Git リポジトリに接続する

Terraform 構成を Git リポジトリに保存している場合は、App Lifecycle Manager をこのリポジトリに接続できます。ユニットの種類を作成するとき、またはリリースを作成するときに、App Lifecycle Manager はファイルを使用して必要な OCI イメージを作成します。

Git リポジトリを使用してブループリントを提供するには、次の操作を行います。

  1. Terraform ファイルが Git リポジトリのルート ディレクトリにあることを確認します。
  2. リリースを作成するとき、またはユニットの種類を作成するときに、Git リポジトリを App Lifecycle Manager に接続します。

App Lifecycle Manager は Developer Connect を使用して Git リポジトリに接続します。Developer Connect の詳細については、 Developer Connect のドキュメントをご覧ください。

App Lifecycle Manager は、Git リポジトリの Terraform ファイルを使用して必要な OCI イメージを作成し、Artifact Registry リポジトリに push します。

この統合により、リポジトリで Terraform コードを更新するたびに、ブループリントの作成プロセスが自動化されます。リンクされた Git リポジトリに変更があると、App Lifecycle Manager は変更されたファイルを使用して新しい OCI イメージを自動的にビルドし、Artifact Registry リポジトリに push します。

イメージを手動でビルドして push する

この方法では、ブループリントの作成プロセスをきめ細かく制御できます。

ブループリントを手動で作成する手順は次のとおりです。

  1. Terraform ファイルのルート ディレクトリに、次の内容の Dockerfile というファイルを作成します。

    # syntax=docker/dockerfile:1-labs
    FROM scratch
    COPY --exclude=Dockerfile --exclude=.git --exclude=.gitignore . /
    

    この Dockerfile は最小限のベースイメージ(scratch)を使用します。関連性のないファイル(次のようなファイル)を除外するには、dockerignore をコマンドに含めることを検討してください。

    • Dockerfile 自体
    • .git ディレクトリ
    • .gitignore ファイル
  2. Docker ビルダーがない場合は、次のコマンドを使用して docker buildxdocker-container ビルダーを作成します。

    docker buildx create --name container --driver=docker-container
    
  3. Terraform ディレクトリから次の docker buildx build コマンドを実行して、ブループリントをビルドして Artifact Registry に push します。

    IMAGE_NAME=us-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:TAG
    ENGINE_TYPE=inframanager
    ENGINE_VERSION=TERRAFORM_VERSION
    
    docker buildx build -t $IMAGE_NAME \
      --builder=container \
      --push \
      --annotation "com.easysaas.engine.type=$ENGINE_TYPE" \
      --annotation "com.easysaas.engine.version=$ENGINE_VERSION" \
      --provenance=false .
    

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

    • PROJECT_ID: プロジェクト ID。
    • REPOSITORY_NAME: Artifact Registry リポジトリの名前。
    • IMAGE_NAME: ブループリント イメージの名前。
    • TAG: イメージ バージョンのタグ(latestv1.0.0 など)。説明的なタグを選択すると、ブループリントのバージョンを効果的に管理できます。
    • TERRAFORM_VERSION: 使用する Terraform のサポートされているバージョン。Infrastructure Manager でサポートされているバージョンのリストについては、 サポートされている Terraform バージョン をご覧ください。

    コマンドは次の例のようになります。

    IMAGE_NAME=us-docker.pkg.dev/saas-docs-testing/blueprints-repo/my-terraform-blueprint:v1.0.0
    ENGINE_TYPE=inframanager
    ENGINE_VERSION=1.5.7
    
    docker buildx build -t $IMAGE_NAME \
      --builder=container \
      --push \
      --annotation "com.easysaas.engine.type=$ENGINE_TYPE" \
      --annotation "com.easysaas.engine.version=$ENGINE_VERSION" \
      --provenance=false .
    

OCI イメージは Artifact Registry リポジトリにあります。

このイメージを App Lifecycle Manager で使用するには、リリースを作成するとき または ユニットの種類を作成するときに、このイメージを選択します。

ブループリントの作成を自動化する

Cloud Build を使用すると、OCI イメージの作成と Artifact Registry への push を自動化できます。Terraform コードが変更されるたびに、OCI イメージが自動的にビルドされて Artifact Registry に push されるようにトリガーを設定できます。

この自動化を設定するには、次の操作を行います。

  1. Terraform リポジトリのルートに、次の構成の cloudbuild.yaml ファイルを作成します。

    steps:
    - id: 'Create Dockerfile'
      name: 'bash'
      args: ['-c', 'echo -e "# syntax=docker/dockerfile:1-labs\nFROM scratch\nCOPY --exclude=Dockerfile.Blueprint --exclude=.git --exclude=.gitignore . /" > Dockerfile.Blueprint']
    - id: 'Create docker-container driver'
      name: 'docker'
      args: ['buildx', 'create', '--name', 'container', '--driver=docker-container']
    - id: 'Build and Push docker image'
      name: 'docker'
      args: ['buildx', 'build', '-t', '${_IMAGE_NAME}', '--builder=container', '--push', '--annotation', 'com.easysaas.engine.type=${_ENGINE_TYPE}','--annotation', 'com.easysaas.engine.version=${_ENGINE_VERSION}', '--provenance=false','-f', 'Dockerfile.Blueprint', '.']
    serviceAccount: '${_SERVICE_ACCOUNT}'
    substitutions:
      _SERVICE_ACCOUNT: 'projects/PROJECT_ID/serviceAccounts/CLOUD_BUILD_SERVICE_ACCOUNT'
      _IMAGE_NAME: 'us-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest'
      _ENGINE_TYPE: 'inframanager'
      _ENGINE_VERSION: 'TERRAFORM_VERSION'
    options:
      logging: CLOUD_LOGGING_ONLY
    

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

  2. cloudbuild.yaml ファイルを含むディレクトリから gcloud builds submit コマンドを使用して、Cloud Build ジョブを開始します。

    gcloud builds submit --config=cloudbuild.yaml --substitutions=_IMAGE_NAME='us-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:TAG'
    

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

    • PROJECT_ID: プロジェクト ID。
    • REPOSITORY_NAME: Artifact Registry リポジトリの名前。
    • IMAGE_NAME: ブループリント イメージの名前
    • TAG: イメージ バージョンのタグ(latestv1.0.0 など)。説明的なタグを選択すると、ブループリントのバージョンを効果的に管理できます。
  3. Terraform コードが変更されるたびに、 OCI イメージが自動的にビルドされて Artifact Registry に push されるようにトリガーを設定できます。詳細については、 ビルドトリガーの作成と管理をご覧ください。

OCI イメージが Artifact Registry リポジトリに保存されました。

このイメージを App Lifecycle Manager で使用するには、リリースを作成するとき または ユニットの種類を作成するときに、このイメージを選択します。

次のステップ