藍圖是封裝為開放容器倡議 (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 設定。
- 如要進一步瞭解如何使用藍圖決定應用程式供應項目的模型,請參閱「決定應用程式供應項目的模型」。
- 如要進一步瞭解 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 中的存放區。
詳情請參閱下節: 手動建構及推送映像檔。
自動建立 OCI 映像檔,並推送至 Artifact Registry 中的存放區。自動化這項程序有助於將 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 存放區。
連線至 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 存放區。
每當您在存放區中更新 Terraform 程式碼時,這項整合功能就會自動建立藍圖。連結的 Git 存放區發生變更時,App Lifecycle Manager 會使用變更的檔案自動建構新的 OCI 映像檔,然後推送至 Artifact Registry 存放區。
手動建構及推送映像檔
這個方法可讓您精細控管藍圖建立程序。
如要手動建立藍圖,請按照下列步驟操作:
在 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-container在 Terraform 目錄中執行下列
docker buildx build指令,建構藍圖並推送至 Artifact Registry: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。您可以設定觸發條件,只要 Terraform 程式碼有變更,就會自動建構 OCI 映像檔並推送至 Artifact Registry。
如要設定這項自動化動作,請按照下列步驟操作:
在 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。詳情請參閱「建立及管理自動建構觸發條件」。
OCI 映像檔現在位於 Artifact Registry 存放區中。
如要在 App Lifecycle Manager 使用這個映像檔,請在建立版本或建立單元種類時選取這個映像檔。
後續步驟
- 如要進一步瞭解 App Lifecycle Manager,請參閱「App Lifecycle Manager 總覽」。
- 如要進一步瞭解藍圖,請參閱「App Lifecycle Manager 中的藍圖」。
- 如要開始使用 App Lifecycle Manager,請先建立應用程式方案。