蓝图是一种打包为开放容器倡议 (OCI) 映像的 Terraform 配置。Terraform 配置用于指定 SaaS 运行时部署到的基础架构和应用 Google Cloud。
本页面介绍了如何从现有的 Terraform 配置创建 OCI 映像,以及如何将这些映像上传到 SaaS 运行时。
如需详细了解这些 Terraform 配置,请参阅 SaaS 运行时中的蓝图。
准备工作
- 确保您已启用 SaaS 运行时。
- 在您用于 SaaS Runtime 的项目中,确保您有一个设置为 Docker 格式的 Artifact Registry 代码库。如需了解详情,请参阅为 SaaS 运行时创建代码库。
- 确定要使用 SaaS 运行时部署的 Terraform 配置。
- 如需详细了解如何决定使用蓝图对 SaaS 产品进行建模,请参阅确定 SaaS 产品的模型
- 如需详细了解 Terraform 配置的要求,请参阅蓝图要求。
创建并上传蓝图
如需使用 SaaS 运行时将 Terraform 配置部署到 Google Cloud ,您需要:
- 将 Terraform 配置打包到 OCI 映像中。这些 OCI 映像称为蓝图。
- 将这些 OCI 映像放入您确定或设置的 Artifact Registry 代码库中。
您可以选择手动完成所有步骤,也可以让 SaaS 运行时执行部分步骤,具体取决于您选择如何创建和上传蓝图。
您可以使用以下任一方法创建 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 归档。您可以在创建版本或单元种类时将此归档上传到 SaaS 运行时。SaaS 运行时使用该 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 归档文件。
SaaS 运行时使用该 ZIP 归档文件创建所需的 OCI 映像,并将其推送到 Artifact Registry 代码库。
连接到 Git 代码库
如果您将 Terraform 配置存储在 Git 代码库中,则可以将 SaaS 运行时连接到此代码库。当您创建单元种类或创建版本时,SaaS 运行时会使用这些文件来创建所需的 OCI 映像。
如需使用 Git 代码库提供蓝图,请执行以下操作:
- 确保您的 Terraform 文件位于 Git 代码库的根目录中。
- 您可以在创建版本时或在创建单元种类时,将 Git 代码库连接到 SaaS 运行时。
SaaS 运行时使用 Developer Connect 连接到 Git 代码库。如需详细了解 Developer Connect,请参阅 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 运行时搭配使用,请在创建版本或创建单元种类时选择此映像。
自动创建蓝图
您可以使用 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 版本。
使用
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)。选择描述性标记有助于您有效地管理蓝图版本。
您可以设置触发器,以便在 Terraform 代码发生更改时,自动构建 OCI 映像并将其推送到 Artifact Registry。如需了解详情,请参阅创建和管理构建触发器。
OCI 映像现在位于 Artifact Registry 代码库中。
如需将此映像与 SaaS 运行时搭配使用,请在创建版本或创建单元种类时选择此映像。
后续步骤
- 如需详细了解 SaaS 运行时,请参阅 SaaS 运行时概览。
- 如需详细了解蓝图,请参阅 SaaS 运行时中的蓝图。
- 如需开始使用 SaaS 运行时,请先创建 SaaS 产品。