创建并上传蓝图

蓝图是打包为开放容器倡议 (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. 使用 gcloud builds submit 命令从包含 cloudbuild.yaml 文件的目录启动 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 搭配使用,请在创建版本 或 创建单元类型时选择此映像。

后续步骤