在项目中堆叠可部署架构
您可以在一个项目中将可部署架构堆叠在一起,创建更复杂的端到端解决方案架构。 您无需编写 Terraform 代码,就能将可部署架构连接在一起。 在可部署架构中配置输入值时,可以引用其他架构中的输入或输出,将它们连接在一起。 部署堆叠架构后,您可以将其作为可部署架构添加到私有目录中,以便与组织内的其他人轻松共享端到端解决方案。
这是一项试验性功能,用于评估和测试目的,可能会更改,恕不另行通知。
在项目中,您可以堆叠目录中已有的可部署架构。 如果您正在创建尚未加入目录的可部署架构,则可以 通过将可部署架构与其他架构堆叠来扩展它。 这种方法提供了更多的定制选项,而这些选项是在项目中堆叠可部署架构时无法提供的,比如为不同的使用案例提供可选架构。 如果私有目录中还没有可部署架构,这种方法也同样适用。 无论你采用哪种方法将架构堆叠在一起,结果都是一个更强大的可部署架构,用户可以通过使用项目来配置和部署。
准备工作
确保您拥有以下访问权限。 有关访问和权限的更多信息,请参阅 为项目分配访问权限。
- IBM Cloud 项目服务中的编辑角色。
- IBM Cloud® Schematics 服务中的编辑和经理角色。
- 项目资源组中的查看器角色。
将您希望堆叠在一起的可部署架构添加到项目中。 有关详细信息,请参阅 将可部署架构添加到项目中。
在项目中添加可部署架构时,请提供有意义的名称以帮助识别它们。 例如,如果您添加了一个可部署的基础架构,为应用程序创建基础,那么首先需要部署该基础架构。 否则,应用程序就无法部署到该基础架构上。 将基础设施可部署架构添加到项目时,将其命名为 1 - infrastructure
。 将应用程序命名为 2 - application
,表示需要第二个部署。
使用 CLI 将架构堆叠在一起
将可部署架构添加到项目后,运行以下 ibmcloud project config-create
命令将它们堆叠在一起。 在 Definition
选项中,提供要堆叠在一起的现有可部署架构的名称和配置 ID,指定 members
:
ibmcloud project config-create --project-id PROJECT-ID [--definition DEFINITION]
例如,以下命令创建了一个可部署架构,在项目中命名为 StackDev
。 它包含两个可部署的架构 custom-apache
和 test-slz
,这两个架构已作为配置添加到项目中:
ibmcloud project config-create \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--definition '{"name": "StackDev", "members": [{"name": "custom-apache", "config_id": "caff3a49-0bf4-40c4-b348-47e5da6e2274"}, {"name": "test-slz", "config_id": "fc7fa3d1-33db-4c40-9570-7604348ab3c4"} ]}' --output json
有关命令参数的更多信息,请参阅 ibmcloud project config-create
.
使用 CLI 创建堆栈定义
要将可部署架构加入私有目录,必须创建堆栈定义。 它定义了每个可部署架构之间的关系。 提供此信息,以便用户从专用目录将整个解决方案添加到项目时,可以成功部署。
堆栈定义包含可在成员可部署架构中引用的输入和输出。 您还可以在可部署架构之间加入引用,从而为用户将它们联系在一起。 需要特定值或引用才能成功部署的输入必须包含在堆栈定义中。
目前,成员不能引用堆栈定义中的输出。
运行以下 ibmcloud project stack-definition-create
命令创建堆栈定义并提供输入:
ibmcloud project stack-definition-create --project-id PROJECT-ID --id
其中 id
是您刚在项目中创建的 StackDev
可部署架构的配置 ID。
例如,以下命令会在堆栈定义中添加以下三个输入。 这些输入是用户无法隐藏的必填字符串,因此用户必须配置这些输入值才能部署端到端可部署架构:
prefix
输入,默认值为。stackDemo
ssh_key
输入,无默认值。ssh_private_key
的默认值,以帮助用户配置输入。
该命令还包括堆叠在一起的两个可部署架构的输入名称。 用户将解决方案从私有目录添加到项目时,这些输入将作为引用值填充并保存:
test-slz
可部署架构包含一个prefix
输入端和一个ssh_key
输入端。custom-apache
可部署架构包含一个ssh_private_key
输入端和一个prerequisite_workspace_id
输入端。
有关编写引用的更多信息,请参阅 引用值。
ibmcloud project stack-definition-create \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id 4d69cee6-0fb2-4621-96c6-16d987f3d9d7 \
--stack-definition '{"inputs": [{"name": "prefix", "type": "string", "hidden": false, "required": true, "default": "stackDemo"}, {"name": "ssh_key", "type": "string", "hidden": false, "required": true}, {"name": "ssh_private_key", "type": "string", "hidden": false, "required": true, "default": "<<-EOF\nINSERT YOUR KEY HERE\nEOF"}], "members": [{"name": "test-slz", "inputs": [{"name": "prefix"}, {"name": "ssh_key"}]}, {"name": "custom-apache", "inputs": [{"name": "ssh_private_key"}, {"name": "prerequisite_workspace_id"}]} ]}' --output json
有关命令参数的更多信息,请参阅 ibmcloud project stack-definition-create
.
使用 CLI 在成员可部署架构中引用堆栈定义中的输入内容
现在输入已添加到堆栈定义中,请为堆栈在一起的每个架构运行 ibmcloud project config-update
命令,更新成员可部署架构以引用这些输入:
ibmcloud project config-update --project-id PROJECT-ID --id
例如,以下命令会更新 test-slz
可部署架构,以引用已添加到堆栈定义中的输入:
ibmcloud project config-update \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id fc7fa3d1-33db-4c40-9570-7604348ab3c4 \
--definition '{"inputs": {"prefix": "ref:../../inputs/prefix", "ssh_key": "ref:../../inputs/ssh_key"}}' --output json
由于 custom-apache
架构使用堆栈定义中的 ssh_private_key
值,因此更新 custom-apache
可部署架构以引用该值。 custom-apache
架构也将 schematics_workspace_id
输入值作为其输入之一,因此应包含对该值的引用:
ibmcloud project config-update \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id caff3a49-0bf4-40c4-b348-47e5da6e2274 \
--definition '{"inputs": {"ssh_private_key": "ref:../../inputs/ssh_private_key", "prerequisite_workspace_id": "ref:../test-slz/outputs/schematics_workspace_id"}}' --output json
有关命令参数的更多信息,请参阅 ibmcloud project config-update
.
使用 CLI 更新堆栈定义中的输入值
现在,成员可部署架构已配置为引用所需的值,请针对 StackDev
可部署架构运行 ibmcloud project config-update
更新堆栈定义中的输入值。 例如,以下命令更新了 test-slz
可部署架构引用的 prefix
输入值。 此外,还提供了 ssh_key
和 ssh_private_key
输入的数值:
ibmcloud project config-update \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id 4d69cee6-0fb2-4621-96c6-16d987f3d9d7 \
--definition '{"inputs": {"prefix": "kb-stack-0327", "ssh_key": "<publicKey>", "ssh_private_key": "<privateKey>"}}' --output json
有关命令参数的更多信息,请参阅 ibmcloud project config-update
.
现在,输入值已配置完毕,请 验证 并 部署 每个可部署的成员架构。
例如,以下命令可验证 test-slz
可部署架构:
ibmcloud project config-validate \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id fc7fa3d1-33db-4c40-9570-7604348ab3c4
以下命令批准部署 test-slz
可部署架构:
ibmcloud project config-approve \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id fc7fa3d1-33db-4c40-9570-7604348ab3c4 \
--comment 'I approve'
下面的命令将部署 test-slz
可部署架构:
ibmcloud project config-deploy \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id fc7fa3d1-33db-4c40-9570-7604348ab3c4
使用 CLI 接入专用目录
每个成员的可部署架构经过验证和部署后,您就可以将可部署架构加入私有目录,供其他人访问。 当用户从私有目录中将您的可部署架构添加到项目中时,您堆叠在一起的每个架构都会包含在项目中。 运行以下 ibmcloud project stack-definition-export
命令:
ibmcloud project stack-definition-export --project-id PROJECT ID
您可以创建一个新产品或为现有产品添加一个版本。 例如,以下命令将在专用目录中创建一个名为 My Apache Stack
的新产品:
ibmcloud project stack-definition-export --project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 --id 4d69cee6-0fb2-4621-96c6-16d987f3d9d7 --settings '{"catalog_id": "702ff97a-e35a-45a4-a0c0-a04e2e052bc8", "label": "My Apache Stack"}' --output json
而下面的命令是为现有产品创建一个新版本:
ibmcloud project stack-definition-export \
--project-id 0e13c360-45c4-4b68-a53f-bb8f6ac04161 \
--id 4d69cee6-0fb2-4621-96c6-16d987f3d9d7 \
--settings '{"catalog_id": "702ff97a-e35a-45a4-a0c0-a04e2e052bc8", "product_id": "1bf57631-27a2-42cc-ac87-733cca67e8a5", "target_version": "1.0.1"}' --output json
有关命令参数的更多信息,请参阅 ibmcloud project stack-definition-export
.
您的架构现在是私人目录中的草稿,尚未发布,但拥有私人目录编辑器权限的任何人都可以访问。
要完成私人目录的登录,请 编辑目录详细信息 并提供架构图和类别等信息。
使用控制台将架构堆叠在一起
将可部署架构添加到项目后,对其进行配置。 如果要堆叠在一起的架构相互依赖,可在配置时 通过引用输入或输出将架构连接在一起。 然后,通过完成以下步骤将架构堆叠在一起:
-
选择要堆叠在一起的可部署架构的复选框。
-
选择堆栈。
-
为可部署架构提供名称或选择现有名称。
可部署架构应共同提供解决方案。 考虑为端到端解决方案取一个有意义的名称,以准确地代表您堆叠在一起的每个架构。 例如,如果您要将 Apache 应用程序与基础架构基础堆叠在一起,则应将其命名为
Apache application with infrastructure base
这样的名称,以便清楚地识别架构部署的内容。 -
单击继续。
使用控制台定义变量
将可部署架构堆叠在一起后,需要为用户定义变量。 您的目标是将可部署架构连接在一起,这样用户就可以在一个界面中配置输入,而不是单独配置架构。
用户从目录中将可部署架构添加到项目后,就可以对定义的输入变量进行配置。 同样,您选择的输出变量也会显示给架构父级的用户。 不要选择用户不应配置的变量。 例如,如果架构要求输入变量(如存储计划)具有特定值,则不要选择存储计划输入。 不要选择 将可部署架构连接在一起的引用。 如果这样做,这些架构之间的连接可能会中断,整个解决方案可能无法成功部署。
为方便用户配置,应尽量减少所需输入值的数量。 查看每个架构所需的输入,并通过在堆栈定义中添加输入值引用或引用其他架构的输出值,确保这些输入已配置。
完成以下步骤:
-
在项目的 配置 选项卡上,单击堆叠式可部署架构的 选项 图标
,然后选择 定义变量。
-
在 “安全”选项卡上,选择用户需要配置的任何变量。
-
转到“所需输入”选项卡,选择用户需要配置的任何所需输入。
-
转到“可选输入”选项卡,选择用户需要配置的任何可选输入。
-
转到“输出”选项卡,选择希望在父级显示的任何输出变量。
让用户在部署架构后更容易找到重要的输出值,如应用程序 URL 或凭证名称。 从成员可部署架构中选择重要的输出值,显示给上级用户。
-
单击“下一步”,继续为其余架构选择变量。
-
完成后,单击“完成”并配置部署架构。 您在定义变量时选择的任何输入可能都需要进行配置。
使用控制台登录到专用目录
验证并部署堆叠在一起的每个可部署架构后,您可以将它们作为可部署架构添加到私有目录中,以便与组织内的其他人轻松共享解决方案。 更多信息,请参阅 共享私有目录。
完成以下步骤:
- 在项目的 配置 选项卡上,单击可部署架构的 选项 图标
,然后选择 添加到私人目录。
- 选择或创建要将可部署架构添加到的私有目录。
- 选择是新产品,还是现有产品的新版本。
- 提供产品名称(如适用)、类别、变体和版本等详细信息。
- 单击下一步。
- 查看用户从专用目录向项目添加可部署架构后可配置的变量。 如果需要更改,可以 定义变量。
- 单击添加。
您的可部署架构现在是私有目录中的草稿,尚未发布,但拥有编辑器访问权限的任何人都可以访问您的私有目录。 当用户从私有目录中将您的可部署架构添加到项目中时,您堆叠在一起的每个架构都会包含在项目中。
要将可部署架构加入到私有目录中,请 编辑目录详细信息 并提供架构图和类别等信息。
是否有新版本可用于您与他人堆叠的可部署架构? 更新项目中的配置以使用最新版本,验证并部署更改,然后完成将更新后的解决方案加入专用目录的步骤。 选择已加入的现有产品并提供新版本号。 这样做有助于确保更新后的可部署架构仍能与堆叠在一起的其他架构正常运行。