基础设施即代码 (IaC)
建模 使您能够自动执行 亚马逊云科技 资源的生命周期。但是,采用 iaC 的时机可能会有所不同。亚马逊云科技 客户一开始通常会通过将其服务器执行块级复制到云端来快速迁移。当成百上千台服务器需要在严格的时间表内退出其数据中心,而应用程序团队和其他供应商的参与最少时,这很合适。迁移后,客户会寻找更有效地管理其云环境的方法。他们还寻找减少过时的
亚马逊系统映像 (AMI)
数量的方法 。
本博客讨论了使用
亚马逊云科技 应用程序迁移服务 进行服务器迁移
的用例。我们将介绍如何简化
CloudFormation 的导入
和管理您的
转换
实例。 我们使用的是开源 iaC
模板 创建实用程序 Former2
。Former2 支持
亚马逊云科技
CloudFormation
、亚马逊云科技 云开发套件 (亚马逊云科技 CDK
)
和
Terraform 等。
启动后操作
可 确保每个直接转换实例都安装了
系统管理
器代理。 这提供了一种自动执行管理任务(例如 AMI 管理)的简单方法。这使您可以保持迁移速度并减少大规模运营的工作量。
注意事项和先决条件
建议使用以下方法继续撰写本文:
-
出于测试目的和熟悉实施过程,您可以
启动 Amazon EC2 Linux 实例
, 然后使用应用程序迁移服务触发
数据复制
,启动测试实例,然后 启动转换实例。
使用较旧的操作系统版本执行补丁或使用 亚马逊云科技 Systems Manager 进行升级。
-
Former2 提供了一个
CLI
,允许直接从命令行使用。请查阅
Former2 GitHub
项目,下载 Former2 并学习如何使用
生成
命令,以及构建 Docker 镜像,我们将该镜像上传到
亚马逊弹性容器注册表
(Amazon ECR)。
-
对于大规模迁移场景,我们建议使用
亚马逊云科技 解决方案上的 云迁移工厂
。 有关解决方案组件和安装步骤,请参阅
实施指南
。我们的实施程序适用于使用该解决方案执行的迁移浪潮。对于后者,直接
转换实例的 启动
和
启动后脚本 的 激活是以编程方式进行
的。
-
使用
亚马逊云科技 Systems Manager Automation
的客户 只需为所用内容付费。消耗量是根据步数和持续时间计算的。
使用 亚马逊云科技 Systems M
anager 补丁管理器修补 Linux 和 Windows EC2 实例 以及使用 亚马逊云科技 Systems Manager
Inventory 都不会产生额外费用。
有关
系统管理器定价
的详细信息,请访问 亚马逊云科技 网站 。
重要注意事项
由于 Former2 是一个开源实用程序,我们建议在将其导入 CloudFormation 之前对其输出进行全面审查。
解决方案概述
我们假设使用的是重新托管迁移工厂,使用应用程序迁移服务对成批服务器执行服务器迁移,也称为迁移波。如果您使用
亚马逊云科技 解决方案上的 云迁移工厂 或其他协调器来管理应用程序迁移服务任务,则该解决方案
同样适用。
识别 CloudFormation 管理之外的资源
对于具有多个迁移波的重新托管迁移工厂,我们可以构建事件驱动的工作流程,将转换实例添加到 IaC 中。这可以通过监听转换事件的
亚马逊 Ev ent
Bridge 规则来实现。直接转换事件存储有关实例 ID 和关联的应用程序迁移服务作业 ID 的数据。我们可以使用
亚马逊 Kinesis Data Firehose 将它们传输到亚马逊简单存储服务(亚马逊 S3)
存储桶(见下图 1)。
图 1。将现有 亚马逊云科技 资源添加到基础设施代码
将资源导入 CloudFormation 管理中
每次 向
亚马逊 S3 放置新对象时,我们都会使用 Amazon S3 事件通知
来调用 亚马逊云科技
Lambda。
Lambda 从 Amazon S3 获取服务器 ID 并启动 Former2,我们将其作为任务在 亚马逊云科技 Fargate 中运行。
Former2 生成基础设施代码并将其放到指定的 S3 存储桶中。然后,您可以使用 亚马逊云科技 CLI 或 亚马逊云科技 管理控制台查看 您的资源并将其
导入
CloudFormation 堆栈,而无需重新创建环境。
启用启动后操作
您可以 随时为所有直接转换实例启用
启动后操作
。这将确保每个实例都安装了
系统管理器代理
, 并将自己报告到 亚马逊云科技 Systems Manager 清单中。将实例添加到系统管理器清单后,您可以使用 Systems Manager 补丁管理器应用就地操作系统 (OS) 补丁, 并使用 Systems
M
anager
运行命令
自动执行管理任务。 System
s Manager 自动化操作手册
可以通过启动新实例并将其就地升级来执行自动升级,从而生成新的
亚马逊系统映像 (AMI)
。 这允许在为用户流量提供服务的同时测试新 AMI,然后将流量切换到新实例。下图对工作流程进行了可视化。
图 2。为直接转换实例启用自动升级
实施程序
第 1 步。确定相关事件
应用程序迁移服务会在切换事件之前创建临时的
亚马逊弹性计算云 (Amazon EC2)
资源。因此,重要的是只获取直接转换实例。
为此,请将 EventBridge 规则设置为监听
FinalizeCutOver API 调用和 “CUTOVER
” 生命周期状态,如下所示。
{
"source": ["aws.mgn"],
"detail": {
"eventName": ["FinalizeCutover"],
"responseElements": {
"lifeCycle": {
"state": ["CUTOVER"]
}
}
}
}
第 2 步。为 Amazon S3 事件通知创建目的地
Amazon S3 事件通知会启动我们的 Lambda 函数,该函数通过读取 亚马逊云科技ApplicationMigrationServerceSourceServerid 标签(由应用程序迁移服务创建)中的值并制定对我们的 Former2 Docker 映像的生成调用来获取相关的服务器 ID。
我们使用 Python 实现这个逻辑,如下所示。关联的 Lambda 资源需要 Amazon S3 读取权限才能解析切换事件,还需要
EC
S: runTask 权限才能调用 Former2。
import json
import boto3
def lambda_handler(event, context):
# Read S3 Event and identify event file
s3 = boto3.resource('s3')
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
content_object = s3.Object(bucket, key)
data = json.load(content_object.get()['Body'])
sourceServerID = data['detail']['responseElements']['sourceServerID']
print(sourceServerID)
run_former2(sourceServerID)
def run_former2(sourceServerID):
# Run Former2 CLI using the source Server ID tag as filter
client = boto3.client('ecs')
override = {
"containerOverrides":
[
{
'name': 'former-poc',
'command': ['--cfn-deletion-policy','Retain','--services', 'EC2', '--search-filter', sourceServerID]
}
]
}
response = client.run_task(
cluster='former', # name of the cluster
launchType = 'FARGATE',
taskDefinition='task-former-poc:8', # replace with your task definition name and revision
count = 1,
platformVersion='LATEST',
networkConfiguration={
'awsvpcConfiguration': {
'subnets': [
'subnet-0272da36749d3cbc1'
],
'assignPublicIp': 'ENABLED'
}
},
overrides=override
)
return str(response)
第 3 步。设置 Former2
Former2 提供了一个
CLI
,允许直接从命令行使用。它以 Docker 镜像的形式提供,可以直接上传到
亚马逊弹性容器注册表 (Amazon ECR
)。 按照
亚马逊 ECR 用户指南
中的步骤将 Former2 CLI Docker 映像推送 到亚马逊 ECR。然后,你可以继续在 Fargate 中定义 Former2 任务,它不需要端口映射或挂载点。记得 为任务创建一个
IAM 角色
,该角色具有 亚马逊云科技 只读访问权限以及向 Amazon S3 放置权限。
第 4 步。云端信息导入
CloudFormation
用户指南
描述了导入步骤。如果您想导入到现有 CloudFormat
ion 堆栈中,则每个资源都必须具有 DeletionPol
icy 属性。Former2 会自动添加此内容。
对于构建应用程序堆栈的任何辅助资源,例如
Elastic
Load Balancing,您可以使用 desc
ribe_stack_resources 亚马逊云科技 命令行接口 (亚马逊云科技 CLI) 命令并传递资源
ID 来确认这些资源是否属于现有 CloudFormation 堆栈。
我们建议保持较小的堆栈以缩小爆炸半径并降低后续变化的风险。应将由不同团队管理且更改频率不同的资源分成不同的堆栈。如果您的应用程序服务器由一个团队管理,而数据库服务器由另一个团队管理,我们建议将这些层拆分成单独的堆栈。
第 5 步。启用应用程序迁移服务启动后操作
通过导航到
设置
并编辑
启动后操作
模板,可以随时 在 亚马逊云科技 应用程序迁移服务中为所有直接转换实例激活启动
后
操作。 有关更多信息,请查阅
用户指南
。还将为
亚马逊云科技 S
y
stems Manager创建关联的亚马逊云科技身份和访问管理 (IAM) A
cces s Manager 角色 ,以便与实例进行交互。
正在清理
如果您不再需要示例资源,请记住将其删除,以避免将来产生费用。这包括:
-
删除或禁用
EventB ridge 规则
-
在 亚马逊云科技 管理控制台上清理 Kinesis Data Firehose 交付流。前往 Amazon Kinesis,然后转到交付流,选择要删除的传输流,然后点击删除。
-
删除 带有切换事件和基础设施代码的 S3 存储桶
-
登录 亚马逊云科技 管理控制台,删除触发 Former2 的 Lambda 函数。前往 亚马逊云科技 Lambda 中的函数部分,选择函数,点击操作,然后选择删除。
-
取消注册
Former2 Fargate 任务定义
-
终止
用于测试此解决方案的 所有 Amazon EC2 实例(包括转换实例)
-
删除
所有用于测试所提供解决方案的应用程序迁移服务作业
您可以使用 亚马逊云科技 Cost Explorer 用户界面查看您的成本和使用量。
结论
在这篇文章中,我们使用 Former2 简化了将迁移的 Amazon EC2 实例导入基础设施代码的过程。我们展示了如何设置事件驱动的工作流程以及如何将直接转换实例持续导入 CloudFormation。这样可以将 IaC 状态以外的资源数量降至最低。提出的解决方案可以适应不同的用例,包括快速原型设计和在沙盒环境中试验新的 亚马逊云科技 资源。您还可以从命令行启动 Former2 并控制堆栈中包含哪些 亚马逊云科技 资源。
想了解更多?
-
将现有资源引入 CloudFormation 管理
-
使用开源 Former2 加速基础设施即代码开发
作者简介: