ブループリントは、Open Container Initiative(OCI)イメージとしてパッケージ化された Terraform 構成です。 Terraform 構成では、 App Lifecycle Manager がデプロイするインフラストラクチャとアプリケーションを指定します Google Cloud。
このページでは、既存の Terraform 構成から OCI イメージを作成する方法と、それらを App Lifecycle Manager にアップロードする方法について説明します。
これらの Terraform 構成の詳細については、 App Lifecycle Manager のブループリントをご覧ください。
始める前に
- App Lifecycle Manager が 有効になっていることを確認します。
- App Lifecycle Manager で使用しているプロジェクトで、Docker 形式に設定された Artifact Registry リポジトリがあることを確認します。詳細については、 App Lifecycle Manager のリポジトリを作成するをご覧ください。
- App Lifecycle Manager を使用してデプロイする Terraform 構成を特定します。
- ブループリントを使用して SaaS サービスをモデリングする方法については、SaaS サービスのモデルを決定するをご覧ください。
- 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 アーカイブを使用してブループリントを提供するには、次の操作を行います。
- Terraform プロジェクト ディレクトリに移動します。
- Terraform 構成を含む zip アーカイブを作成します。
- 次のことを確認します。
- zip アーカイブには Terraform ファイルのみが含まれています。たとえば、
main.tf、variables.tf、outputs.tf、versions.tf、モジュールなどです。 - zip アーカイブに、不要なファイル(
.gitディレクトリや Dockerfile など)が含まれていない。
- zip アーカイブには Terraform ファイルのみが含まれています。たとえば、
- zip アーカイブを作成するコマンドは、
zip terraform-files.zip main.tf outputs.tf variables.tf versions.tfのようになります。
- 次のことを確認します。
- リリースを作成するとき、またはユニットの種類を作成するときに、zip アーカイブをアップロードします。
App Lifecycle Manager は、zip アーカイブを使用して必要な OCI イメージを作成し、Artifact Registry リポジトリに push します。
Git リポジトリに接続する
Terraform 構成を Git リポジトリに保存している場合は、App Lifecycle Manager をこのリポジトリに接続できます。ユニットの種類を作成するとき、またはリリースを作成するときに、App Lifecycle Manager はファイルを使用して必要な OCI イメージを作成します。
Git リポジトリを使用してブループリントを提供するには、次の操作を行います。
- Terraform ファイルが Git リポジトリのルート ディレクトリにあることを確認します。
- リリースを作成するとき、またはユニットの種類を作成するときに、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 する
この方法では、ブループリントの作成プロセスをきめ細かく制御できます。
ブループリントを手動で作成する手順は次のとおりです。
Terraform ファイルのルート ディレクトリに、次の内容の
Dockerfileというファイルを作成します。# syntax=docker/dockerfile:1-labs FROM scratch COPY --exclude=Dockerfile --exclude=.git --exclude=.gitignore . /この
Dockerfileは最小限のベースイメージ(scratch)を使用します。関連性のないファイル(次のようなファイル)を除外するには、dockerignoreをコマンドに含めることを検討してください。Dockerfile自体.gitディレクトリ.gitignoreファイル
Docker ビルダーがない場合は、次のコマンドを使用して
docker buildxでdocker-containerビルダーを作成します。docker buildx create --name container --driver=docker-containerTerraform ディレクトリから次の
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: イメージ バージョンのタグ(latest、v1.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 されるようにトリガーを設定できます。
この自動化を設定するには、次の操作を行います。
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次のように置き換えます。
PROJECT_ID: プロジェクト ID。CLOUD_BUILD_SERVICE_ACCOUNT: Cloud Build サービス アカウントの完全名。App Lifecycle Manager とサービス アカウントの詳細については、 App Lifecycle Manager サービス アカウントをご覧ください。REPOSITORY_NAME: Artifact Registry リポジトリの名前。IMAGE_NAME: ブループリント イメージの名前。TAG: イメージ バージョンのタグ(latest、v1.0.0など)。説明的なタグを選択すると、ブループリントのバージョンを効果的に管理できます。TERRAFORM_VERSION: 使用する Terraform のサポートされているバージョン。Infrastructure Manager でサポートされているバージョンのリストについては、 サポートされている Terraform バージョン をご覧ください。
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: イメージ バージョンのタグ(latest、v1.0.0など)。説明的なタグを選択すると、ブループリントのバージョンを効果的に管理できます。
Terraform コードが変更されるたびに、 OCI イメージが自動的にビルドされて Artifact Registry に push されるようにトリガーを設定できます。詳細については、 ビルドトリガーの作成と管理をご覧ください。
OCI イメージが Artifact Registry リポジトリに保存されました。
このイメージを App Lifecycle Manager で使用するには、リリースを作成するとき または ユニットの種類を作成するときに、このイメージを選択します。
次のステップ
- App Lifecycle Manager の詳細については、 App Lifecycle Manager の概要をご覧ください。
- ブループリントの詳細については、 App Lifecycle Manager のブループリントをご覧ください。
- App Lifecycle Manager の使用を開始するには、 SaaS サービスを作成するから始めます。