背景和痛点
应用分布在多地域部署时,如需把一个镜像复制到多个地域(Region),当前您极可能是在控制台手动选择源镜像,然后逐个选择目的地域并进行复制镜像操作,再等待和查看所有地域的镜像复制完成。如此操作费时费力,而且容易出错。
解决方案
通过运维编排服务OOS,创建一个复制镜像到多地域模版的执行,一键即可助您完成向多地域复制镜像,精准便捷。
您只需选择一个源镜像(待复制的镜像),选择要复制到的目的地域(或者直接选择所有地域),然后单击创建执行就可完成镜像复制到多个地域。您也可结合实际场景重定义OOS模板,如此甚至可免去选择目的地域这一步。
操作步骤
- 首先登录到运维编排控制台 。
- 单击公共模版。
- 选择批量跨地域克隆镜像(ACS-ECS-BulkyCopyImage)模版,单击创建执行 。
- 单击 下一步,设置参数 。
输入以下的参数 。
- ImageId: 待复制的源镜像ID。
- targetRegionIds:将要复制到的目的地域(region)ID。可自行指定多个目的地域(region),表示复制镜像到被选中的目的地域;也可只选择"all-regions",表示复制镜像到所有阿里云可用地域。
- rateControl:模版中循环任务的并发及容错设置选项。
- OOSAssumeRole:可选参数。OOS默认使用当前登录用户的权限执行动作;如果指定了RAM角色名称,OOS扮演该RAM角色执行动作。
- 单击 下一步,确认 ,并单击 创建执行 。
- 在执行管理中可查看刚刚创建的执行,若创建执行成功,且执行状态处于运行中,则表示镜像正在复制中。
- 当执行状态转换为成功时,则表示镜像复制成功,可在执行详情中查看目的地域新镜像ID。
- 打开目的地域控制台,可在镜像列表中查看到复制成功的新镜像。
附录:公共模版及其逻辑
- 批量跨地域克隆镜像模板内容
FormatVersion: OOS-2019-06-01
Description:
en: Cross Regions copy image.
zh-cn: 批量跨地域克隆镜像。
name-en: ACS-ECS-BulkyCopyImage
name-zh-cn: 批量跨地域克隆镜像
categories:
- image_manage
Parameters:
imageId:
Description:
en: The ID of the image to clone.
zh-cn: 源镜像ID。
Type: String
AssociationProperty: 'ALIYUN::ECS::Image::ImageId'
targetRegionIds:
Description:
en: The Target Region Ids.
zh-cn: 目标地域ID。
Type: List
AllowedValues:
- all-regions
- cn-qingdao
- cn-beijing
- cn-zhangjiakou
- cn-huhehaote
- cn-hangzhou
- cn-shanghai
- cn-shenzhen
- cn-chengdu
- cn-hongkong
- ap-northeast-1
- ap-southeast-1
- ap-southeast-2
- ap-southeast-3
- ap-southeast-5
- ap-south-1
- us-east-1
- us-west-1
- eu-west-1
- me-east-1
- eu-central-1
Default:
- all-regions
rateControl:
Description:
en: Concurrency rate of task execution.
zh-cn: 任务执行的并发比率。
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 0
Concurrency: 15
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS扮演的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: queryAllAvailableRegions
Action: 'ACS::ExecuteAPI'
Description:
en: View all available regions.
zh-cn: 查询当前所有可用地域。
Properties:
Service: ECS
API: DescribeRegions
Parameters:
RegionId: '{{ACS::RegionId}}'
Outputs:
regionIds:
Type: List
ValueSelector: >-
Regions.Region[]|.RegionId|select([scan("{{ACS::RegionId}}|test")]|length<1)
allRegionsChosen:
Type: String
ValueSelector: '.|{{targetRegionIds}}|sort|.[0]'
- Name: whetherCloneToAllRegions
Action: 'ACS::Choice'
Description:
en: Choose next task by targetRegionIds Chosen.
zh-cn: 根据所选目的地域判断下一步执行。
Properties:
DefaultTask: copyImage
Choices:
- When:
'Fn::Equals':
- all-regions
- '{{ queryAllAvailableRegions.allRegionsChosen }}'
NextTask: copyImageToAllRegions
- Name: copyImage
Action: 'ACS::ECS::CopyImage'
OnSuccess: 'ACS::END'
OnError: 'ACS::END'
Description:
en: Copy image to regions chosen.
zh-cn: 复制镜像到被指定的地域。
Properties:
regionId: '{{ ACS::RegionId }}'
imageId: '{{ imageId }}'
targetRegionId: '{{ ACS::TaskLoopItem }}'
Loop:
Items: '{{ targetRegionIds }}'
RateControl: '{{ rateControl }}'
Outputs:
imageIdsWithRegion:
AggregateType: 'Fn::ListJoin'
AggregateField: imageIdWithRegion
Outputs:
imageIdWithRegion:
ValueSelector: '.|(.imageId),"{{ ACS::TaskLoopItem }}"'
Type: List
- Name: copyImageToAllRegions
Action: 'ACS::ECS::CopyImage'
Description:
en: Copy image to all available regions.
zh-cn: 复制镜像到所有可用地域。
Properties:
regionId: '{{ ACS::RegionId }}'
imageId: '{{ imageId }}'
targetRegionId: '{{ ACS::TaskLoopItem }}'
Loop:
Items: '{{ queryAllAvailableRegions.regionIds }}'
RateControl: '{{ rateControl }}'
Outputs:
imageIdsWithRegion:
AggregateType: 'Fn::ListJoin'
AggregateField: imageIdWithRegion
Outputs:
imageIdWithRegion:
ValueSelector: '.|(.imageId),"{{ ACS::TaskLoopItem }}"'
Type: List
Outputs:
imageIds:
Type: List
Value:
'Fn::If':
- 'Fn::Equals':
- all-regions
- '{{ queryAllAvailableRegions.allRegionsChosen }}'
- '{{ copyImageToAllRegions.imageIdsWithRegion }}'
- '{{ copyImage.imageIdsWithRegion }}'
模板执行逻辑如下
- 查询阿里云所有可用地域,供所选目的地域为all-regions时使用。
- 判断您选择的目的地域是阿里云所有可用地域还是某些地域。
- 向已选择的目的地域复制镜像。
- 当镜像成功复制到所有目的地域,则该执行结束,执行状态转为成功。