建立及上傳藍圖

藍圖是封裝為開放容器倡議 (OCI) 映像檔的 Terraform 設定。Terraform 設定會指定 SaaS 執行階段部署至 Google Cloud的基礎架構和應用程式。

本頁說明如何從現有 Terraform 設定建立 OCI 映像檔,以及如何將這些映像檔上傳至 SaaS 執行階段。

如要進一步瞭解這些 Terraform 設定,請參閱「SaaS 執行階段中的藍圖」。

事前準備

  1. 請確認您已啟用 SaaS 執行階段
  2. 在用於 SaaS Runtime 的專案中,請確認您有設為 Docker 格式的 Artifact Registry 存放區。詳情請參閱「為 SaaS 執行階段建立存放區」。
  3. 找出要使用 SaaS Runtime 部署的 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 封存檔提供藍圖,請按照下列步驟操作:

  1. 前往 Terraform 專案目錄。
  2. 建立包含 Terraform 設定的 ZIP 封存檔。
    • 請確認下列事項:
      • 壓縮封存檔只包含 Terraform 檔案。例如 main.tfvariables.tfoutputs.tfversions.tf 和模組。
      • 壓縮封存檔含不必要的檔案,例如 .git 目錄或 Dockerfile。
    • 建立 ZIP 封存檔的指令可能類似如下: zip terraform-files.zip main.tf outputs.tf variables.tf versions.tf
  3. 建立版本或建立單元類型時,請上傳 ZIP 封存檔。

SaaS Runtime 會使用 ZIP 封存檔建立必要的 OCI 映像檔,並將其推送至 Artifact Registry 存放區。

連線至 Git 存放區

如果將 Terraform 設定儲存在 Git 存放區中,您可以將 SaaS 執行階段連線至這個存放區。建立單元類型或發布版本時,SaaS Runtime 會使用這些檔案建立必要的 OCI 映像檔。

如要透過 Git 存放區提供藍圖,請按照下列步驟操作:

  1. 確認 Terraform 檔案位於 Git 存放區的根目錄中。
  2. 建立版本或建立單元 kind 時,將 Git 存放區連結至 SaaS 執行階段。

SaaS 執行階段會使用 Developer Connect 連線至 Git 存放區。如要進一步瞭解 Developer Connect,請參閱這份說明文件

SaaS 執行階段會使用 Git 存放區中的 Terraform 檔案建立必要的 OCI 映像檔,並將其推送至 Artifact Registry 存放區。

只要您更新存放區中的 Terraform 程式碼,這項整合功能就會自動建立藍圖。如果連結的 Git 存放區有變更,SaaS 執行階段會使用變更的檔案自動建構新的 OCI 映像檔,然後將其推送至 Artifact Registry 存放區。

手動建構及推送映像檔

這種方法可讓您精細控管藍圖建立程序。

如要手動建立藍圖,請按照下列步驟操作:

  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 buildx 透過下列指令建立 docker-container 建構工具:

    docker buildx create --name container --driver=docker-container
    
  3. 從 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:映像檔版本的標記 (例如 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 存放區。

如要在 SaaS 執行階段使用這個映像檔,請在建立版本或建立單元 kind 時選取這個映像檔。

自動建立藍圖

您可以使用 Cloud Build 自動建立 OCI 映像檔,並將其推送至 Artifact Registry。您可以設定觸發條件,每當 Terraform 程式碼變更時,系統就會自動建構 OCI 映像檔並推送至 Artifact Registry。

如要設定這項自動化功能,請按照下列步驟操作:

  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
    

    更改下列內容:

    • PROJECT_ID:專案 ID。
    • CLOUD_BUILD_SERVICE_ACCOUNT:Cloud Build 服務帳戶的完整名稱。如要進一步瞭解 SaaS 執行階段和服務帳戶,請參閱 SaaS 執行階段服務帳戶
    • REPOSITORY_NAME:Artifact Registry 存放區的名稱。
    • IMAGE_NAME:藍圖映像檔的名稱。
    • TAG:映像檔版本的標記 (例如 latestv1.0.0)。選擇描述性標記有助於有效管理藍圖版本。
    • TERRAFORM_VERSION:要使用的 Terraform 支援版本。如需 Infrastructure Manager 支援的版本清單,請參閱「支援的 Terraform 版本」。
  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。詳情請參閱「建立及管理自動建構觸發條件」。

OCI 映像檔現在位於 Artifact Registry 存放區中。

如要在 SaaS 執行階段使用這個映像檔,請在建立版本或建立單元 kind 時選取這個映像檔。

後續步驟