建立及上傳藍圖

藍圖是封裝為開放容器倡議 (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 中的存放區。

    詳情請參閱下節: 手動建構及推送映像檔。

  • 自動建立 OCI 映像檔,並推送至 Artifact Registry 中的存放區。自動化這項程序有助於將 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.tf、variables.tf、outputs.tf、versions.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 存放區。

連線至 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 存放區。

每當您在存放區中更新 Terraform 程式碼時,這項整合功能就會自動建立藍圖。連結的 Git 存放區發生變更時,App Lifecycle Manager 會使用變更的檔案自動建構新的 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:映像檔版本的標記 (例如 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。

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

  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 服務帳戶的全名。如要進一步瞭解 App Lifecycle Manager 和服務帳戶,請參閱「App Lifecycle Manager 服務帳戶」
    • REPOSITORY_NAME:Artifact Registry 存放區的名稱。
    • IMAGE_NAME:藍圖映像檔的名稱。
    • TAG:映像檔版本的標記 (例如 latest 或 v1.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:映像檔版本的標記 (例如 latest 或 v1.0.0)。選擇描述性標記有助於有效管理藍圖版本。
  3. 您可以設定觸發條件,這樣一來,每當 Terraform 程式碼變更時,系統就會自動建構 OCI 映像檔並推送至 Artifact Registry。詳情請參閱「建立及管理自動建構觸發條件」。

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

如要在 App Lifecycle Manager 使用這個映像檔,請在建立版本或建立單元種類時選取這個映像檔。

後續步驟