藍圖是封裝為開放容器倡議 (OCI) 映像檔的 Terraform 設定。Terraform 設定會指定 SaaS 執行階段部署至 Google Cloud的基礎架構和應用程式。
本頁說明如何從現有 Terraform 設定建立 OCI 映像檔,以及如何將這些映像檔上傳至 SaaS 執行階段。
如要進一步瞭解這些 Terraform 設定,請參閱「SaaS 執行階段中的藍圖」。
事前準備
- 請確認您已啟用 SaaS 執行階段。
- 在用於 SaaS Runtime 的專案中,請確認您有設為 Docker 格式的 Artifact Registry 存放區。詳情請參閱「為 SaaS 執行階段建立存放區」。
- 找出要使用 SaaS Runtime 部署的 Terraform 設定。
- 如要瞭解如何使用藍圖決定 SaaS 產品的模式,請參閱「決定 SaaS 產品的模式」
- 如要進一步瞭解 Terraform 設定的需求條件,請參閱藍圖需求條件。
建立及上傳藍圖
如要使用 SaaS 執行階段將 Terraform 設定部署至 Google Cloud ,請完成下列步驟:
- 將 Terraform 設定封裝為 OCI 映像檔。這些 OCI 映像檔稱為藍圖。
- 將這些 OCI 映像檔放入您識別或設定的 Artifact Registry 存放區。
視您選擇建立及上傳藍圖的方式而定,您可以手動執行所有步驟,也可以讓 SaaS Runtime 執行部分步驟。
您可以使用下列任一方法建立 OCI 映像檔,並上傳至存放區:
上傳內含 Terraform 設定的 ZIP 封存檔。 SaaS 執行階段會使用 ZIP 封存檔建立 OCI 映像檔。
詳情請參閱下節: 上傳 ZIP 封存檔。
連線至含有 Terraform 檔案的 Git 存放區。SaaS 執行階段會使用這些檔案建立 OCI 映像檔。每當您更新存放區時,SaaS 執行階段就會使用 Cloud Build 建構及上傳藍圖。
詳情請參閱下節: 連線至 Git 存放區。
在本機建構 OCI 映像檔,並將該映像檔推送至 Artifact Registry 的存放區。
詳情請參閱下節: 手動建構及推送映像檔。
自動建立 OCI 映像檔,並推送至 Artifact Registry 的存放區。自動執行這項程序,有助於將 SaaS 執行階段納入 CI/CD 管道。
詳情請參閱下一節: 自動建立藍圖。
上傳 ZIP 封存檔
您可以建立 Terraform 檔案的 ZIP 封存檔。建立版本或單元 kind 時,請將這個封存檔上傳至 SaaS 執行階段。SaaS 執行階段會使用 ZIP 封存檔建立必要的 OCI 映像檔。
如要使用 ZIP 封存檔提供藍圖,請按照下列步驟操作:
- 前往 Terraform 專案目錄。
- 建立包含 Terraform 設定的 ZIP 封存檔。
- 請確認下列事項:
- 壓縮封存檔只包含 Terraform 檔案。例如
main.tf、variables.tf、outputs.tf、versions.tf和模組。 - 壓縮封存檔不含不必要的檔案,例如
.git目錄或 Dockerfile。
- 壓縮封存檔只包含 Terraform 檔案。例如
- 建立 ZIP 封存檔的指令可能類似如下:
zip terraform-files.zip main.tf outputs.tf variables.tf versions.tf
- 請確認下列事項:
- 建立版本或建立單元類型時,請上傳 ZIP 封存檔。
SaaS Runtime 會使用 ZIP 封存檔建立必要的 OCI 映像檔,並將其推送至 Artifact Registry 存放區。
連線至 Git 存放區
如果將 Terraform 設定儲存在 Git 存放區中,您可以將 SaaS 執行階段連線至這個存放區。建立單元類型或發布版本時,SaaS Runtime 會使用這些檔案建立必要的 OCI 映像檔。
如要透過 Git 存放區提供藍圖,請按照下列步驟操作:
- 確認 Terraform 檔案位於 Git 存放區的根目錄中。
- 建立版本或建立單元 kind 時,將 Git 存放區連結至 SaaS 執行階段。
SaaS 執行階段會使用 Developer Connect 連線至 Git 存放區。如要進一步瞭解 Developer Connect,請參閱這份說明文件。
SaaS 執行階段會使用 Git 存放區中的 Terraform 檔案建立必要的 OCI 映像檔,並將其推送至 Artifact Registry 存放區。
只要您更新存放區中的 Terraform 程式碼,這項整合功能就會自動建立藍圖。如果連結的 Git 存放區有變更,SaaS 執行階段會使用變更的檔案自動建構新的 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 存放區。
如要在 SaaS 執行階段使用這個映像檔,請在建立版本或建立單元 kind 時選取這個映像檔。
自動建立藍圖
您可以使用 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 服務帳戶的完整名稱。如要進一步瞭解 SaaS 執行階段和服務帳戶,請參閱 SaaS 執行階段服務帳戶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 存放區中。
如要在 SaaS 執行階段使用這個映像檔,請在建立版本或建立單元 kind 時選取這個映像檔。
後續步驟
- 如要進一步瞭解 SaaS 執行階段,請參閱「SaaS 執行階段總覽」。
- 如要進一步瞭解藍圖,請參閱「SaaS 執行階段中的藍圖」。
- 如要開始使用 SaaS 執行階段,請先建立 SaaS 產品。