计算巢通过文件部署物解决脚本部署中软件资源下载的问题(云资源无公网访问或下载源不稳定)。本文为您介绍文件部署物使用场景与原理,以及如何创建和使用文件部署物。
使用背景
-
为什么使用文件部署物?
计算巢通过文件部署物解决了云资源无公网访问、大文件或不稳定源导致的软件下载问题。服务商将文件上传至指定OSS Bucket后,系统自动复制到多个区域,并在部署过程中自动替换模板中的标识位为对应区域的内网OSS链接,确保了数据传输的稳定性和安全性。
-
文件部署物的优势?
服务商仅需在模板中撰写关联标识位,并在计算巢控制台的服务详情页面配置文件部署物关联即可。
-
文件复制:计算巢会将服务商上传的文件复制到计算巢的通用账号下,在此账号下的OSS Bucket中完成文件多地域复制。
-
文件关联:计算巢会识别模板中标识位(
{{ computeneset::file::xxx}}),在创建服务时将标识位与文件部署物关联。用户部署时,计算巢会识别用户的部署地域,自动选择该地域对应的OSS URL替换模板的标识位,实现文件URL的动态替换。 -
权限管理:部署物权限跟随服务,若未关联服务,部署物权限为私有。若关联至少一个公开权限服务,则文件部署物权限为公开。若全部关联私有权限服务,则文件部署物权限为私有。
-
内网下载:计算巢通过内网下载文件部署物,在标识位替换时,计算巢默认会自动生成一个内网OSS的HTTP地址替换标识位。通过内网下载,链路稳定安全。
-
使用说明
服务ROS模板中定义文件关联的标识位,并在文件关联中设置文件部署物,在创建服务实例时,计算巢会自动识别模板中的标识位,并根据服务实例部署地域,自动替换成部署物对应地域的文件URL。
文件关联标识位的固定表达式如下:
-
(推荐)若部署物的文件URL为私网URL时,文件的固定表达式为:
{{ computenest::file:: ${key}}}。 -
若部署物的文件URL为公网URL时,文件的固定表达式为:
{{ computenest::publicfile::${key}}}。说明其中
${key}为任意单词,中间不可用空格隔开。
使用文件部署物进行部署的示例YAML如下:
-
模板中定义文件关联标识位时,推荐使用单引号('')或双引号(“”)将标识位的内容引起来。
-
如果使用wget命令下载,推荐加入-O参数指定输出文件名。
-
常用模板定义标识位。
以
userData中下载文件并将文件的名称修改为TestFirst.txt和TestSecond.tar为例,展示模板中定义的标识位。TiDBServer: Type: ALIYUN::ECS::InstanceGroup Properties: …… UserData: Fn::Sub: - | #!/bin/sh sleep 10 wget '{{ computenest::file::DemoFirst }}' -O TestFirst.txt wget '{{ computenest::file::DemoSecond }}' -O TestSecond.tar …… -
数据库类型
MigrateTask中定义标识位。SQLDump: Type: ALIYUN::RDS::MigrateTask Properties: …… DBName: mytest DBInstanceId: Fn::GetAtt: - Database - DBInstanceId OssObjectPositions: {{ computenest::file::DemoFirst }}
创建和使用
前提条件
准备您要上传的文件。
创建文件部署物
-
配置部署物的基本信息。
-
登录计算巢控制台,在左侧导航栏选择服务部署物,并在部署物区域中单击创建部署物。
-
在部署物信息区域,完成部署物信息填写。
配置项
说明
部署物名称
由中文、数字、英文及下划线组成,长度在 3~128 个字符之间,一个中文字等于 2 个字符,部署物名称创建后不可修改。
部署物版本名称
由中文、数字、英文及下划线组成,长度在 3~50 个字符之间,一个中文字等于 2 个字符。
部署物描述
简介长度在10-500个字符之间,一个中文字等于2个字符。
资源组
选择创建的部署所归属的资源组名称。
资源组对您拥有的云资源从用途、权限、归属等维度进行分组,实现企业内部多用户、多项目的资源分级管理。更多信息,请参见资源组。
标签配置
选择或填写完整的标签键和标签值,为部署物定标签。每个资源最多可绑定20条标签。若无可选的标签键和标签值,可创建自定义标签。创建自定义标签的详细操作,请参见创建并绑定自定义标签。
-
-
配置文件部署物。
-
在部署物内容区块,选择部署物类型为文件。
-
选择上传文件的地域,并根据您上传的本地文件大小,选择上传本地文件或上传超过5G大文件。
-
(可选)选择是否配置脚本命令功能,配置脚本命令主要用于服务实例升级功能,文件关联功能不需要配置脚本命令。
-
在设置分发区域,文件部署物默认全部地域分发。
-
单击发布部署物。
部署物发布后,不可对当前版本内容进行修改,只能通过创建新版本或新部署物的方式进行修改。
-
-
查看部署物。
-
返回服务部署物页面,单击部署物名称,进入部署物详情界面查看部署进度。
-
当状态为可用后单击查看,会获取到文件部署物的分发结果。
分发结果中包含分发地域及对应的分发链接,展示部署物已分发到的各地域(如华北 2(北京)、华北 6(乌兰察布)等)的记录。
-
使用文件部署物
本节以创建私有化部署服务为例,重点介绍在创建服务时文件部署物相关配置。
-
登录计算巢控制台。
-
在左侧导航栏中选择我的服务,在我创建的服务区域下单击创建新服务。
-
在创建新服务页面,创建服务的方式选择为自定义创建服务,服务类型选择为私有部署服务,单击下一步:配置服务。

-
根据提示填入服务基本信息,在录入模板中根据实际情况选择ROS模板。
当ROS模板中存在
{{ computenest::file::test }}或者{{ computenest::publicfile::test }},则在部署物关联区块中可设置文件关联。 -
单击设置文件关联下方的关联部署物,在弹框中选择部署物和版本单击确定完成。
弹框中 关联标志符 字段的值为
{{ computenest::file::springboot }},仅可选择文件类型的部署物。完成后,关联标志符 显示对应的模板变量(如
{{ computenest::file::springboo…),关联部署物 显示所选部署物名称。 -
完成服务的创建,并测试通过后, 请根据计算巢服务的发布审核标准进行自检,并提交审核。发布审核标准的详细信息,请参见发布审核标准。
-
审核通过后,上线服务。详细步骤,请参见上线服务。
当用户创建了服务实例后,计算巢会将模板中的内容根据服务实例部署地域和部署物自动替换为对应部署地域的文件URL。
-
常用模板定义标识位替换后的结果如下所示。
-
当部署物的文件URL为私网URL时,替换结果如下。
Resources: ECSInstances: Type: 'ALIYUN::ECS::InstanceGroup' Properties: UserData: | #!/bin/sh mkdir /root/lzq cd /root/lzq wget 'https://computenest-artifacts-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/xxx/cn-zhangjiakou/xxx/示例文本.txt' wget 'https://computenest-artifacts-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/xxx/cn-guangzhou/xxx/changes.txt' wget {{DemoThird}} SystemDiskCategory: -
当部署物的文件URL为公网URL时,替换结果如下。
Properties: UserData: | #!/bin/sh mkdir /root/lzq cd /root/lzq wget 'https://computenest-artifacts-cn-wulanchabu.oss-cn-wulanchabu.aliyuncs.com/xxx/cn-beijing/xxx/1976虚拟背景.jpg' wget {{DemoThird}} SystemDiskCategory: Ref: SystemDiskCategory VpcId:
-
-
数据库类型MigrateTask中,计算巢会将文件部署物的URL更改为
OssObjectPositions参数的格式。由于OssObjectPositions参数是由OSS Endpoint地址、OSS Bucket名称和OSS上的备份文件Key三段组成,每段中间用英文冒号
:分隔(例如:oss-ap-southeast-1.aliyuncs.com:rdsmssqlsingapore:autotest_2008R2_TestMigration_FULL.bak,更多信息,请参见ALIYUN::RDS::MigrateTask),因此计算巢会将文件部署物的URL替换成该格式,如下所示。}, "OssObjectPositions": "oss-cn-hangzhou-internal.aliyuncs.com:computenest-artifacts-cn-hangzhou:xxx/cn-zhangjiakou/xxx/示例文本.txt", "DBInstanceId": { ... }
-