脚本管理 - Cloud Migration Factory on AWS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

脚本管理

Cloud Migration Factory on AWS 解决方案允许用户在用户界面中全面管理自动化脚本或软件包库。您可以使用脚本管理界面上传新的自定义脚本以及脚本的新版本。当有多个版本可用时,管理员可以在这些版本之间切换,从而能够在将更新设为默认版本之前对其进行测试。脚本管理界面还允许管理员下载脚本包以更新或查看内容。

支持的脚本包是一个压缩的 zip 存档,根目录中包含以下必需文件:

  • Package-Structure.yml:用于定义脚本的参数和其他元数据,例如描述和默认名称。有关更多详细信息,请参阅 Composing a new script package

  • [自定义 python 脚本].py:这是提交作业时将运行的初始脚本。此脚本可以调用其他脚本和模块,如果是,则应将其包含在存档中。此脚本的名称必须与 Package-Structure.ymlMasterFileName 键中指定的值相匹配。

上传新的脚本包

注意

脚本包必须符合支持的格式。有关更多详细信息,请参阅 Composing a new script package

  1. 自动化脚本表中选择添加

  2. 选择要上传的数据包存档文件。

  3. 为脚本输入唯一名称。用户将以此名称引用脚本来启动作业。

下载脚本包

您可以从控制台下载脚本包以激活更新和内容验证。

  1. 选择自动化,然后选择脚本

  2. 从表格中选择要下载的脚本,然后选择操作并选择下载默认版本下载最新版本

您可以下载脚本的特定版本。为此,请选择脚本,然后选择操作,然后选择更改默认版本脚本默认版本列表中,选择下载所选版本

添加脚本包的新版本

可按照以下步骤在 “自动化” > “脚本” 部分上传 AWS 云迁移工厂脚本包的更新:

  1. 选择自动化,然后选择脚本

  2. 选择要添加新版本的现有脚本,然后选择操作并选择添加新版本

  3. 选择要上传的更新的数据包存档文件,然后选择下一步。默认情况下,新的脚本版本将保留现有名称。输入唯一的脚本名称。任何名称更改都将仅适用于此版本的脚本。

  4. 通过选择设为默认版本,可以将新版本的脚本设为默认版本。

  5. 选择上传

删除脚本包和版本

您不能出于审计目的删除脚本或脚本版本。这样就可以查看某个时间点针对系统运行的确切脚本。每个脚本版本在上传时都有一个唯一的签名和 ID,这些签名和 ID 会记录在使用该脚本和版本的作业历史记录中。

编写新的脚本包

AWS 脚本包上的云迁移工厂支持 Python 作为主要脚本语言。您可以根据需要在 Python 主程序或包装器中启动其他 shell 脚本语言。要快速创建一个新的脚本包,我们建议下载一个预打包脚本的副本,然后更新它来执行所需的任务。您必须首先创建一个主 Python 脚本,它将执行脚本的核心功能。然后,创建一个 Package-Structure.yml 文件来定义脚本所需的参数和其他元数据。有关更多详细信息,请参阅 Package-Structure.yml 选项。

主 Python 脚本

这是启动作业时运行的初始主脚本。脚本完成运行后,任务就完成了,最终的返回代码决定了作业的状态。远程运行时,该脚本的所有输出都会被捕获,并传入任务的输出审计日志中,以供参考。此日志也存储在 Amazon 中 CloudWatch。

通过 AWS 数据和APIs脚本访问云迁移工厂

要提供对云迁移工厂 AWS APIs和数据的访问权限,您可以使用随附的 python 帮助器模块。该模块提供了以下主要功能,以下是一些入门的关键功能:

factory_login

返回可用于调用 Cloud Migration Factory 的访问令牌 AWS APIs。此函数将尝试CMF使用多次凭据尝试登录:

  1. 尝试访问包含服务帐户用户 ID 和密码的默认密钥(如果存在且允许访问)。这个秘密的名字 MFServiceAccount-[userpool id] 将被选中。

  2. 如果步骤 1 不成功,并且用户正在通过命令行运行脚本,则系统将提示用户提供 AWS Cloud Migration 出厂用户名和密码。如果从远程自动化作业运行,则该作业将失败。

get_server_credentials

通过凭据管理器或通过用户输入返回存储在 AWS 云迁移工厂中的服务器的登录凭据。该函数将检查多个不同来源,以确定特定服务器的凭证,这些来源的顺序为:

  1. 如果设置了 local_username 和 local_password 并且有效,则将返回这些内容。

  2. 如果设置了 secret_overide,则将使用它来检索从 Secret Manager 中指定的 AWS 密钥,否则,检查服务器记录是否包含密钥 secret_name 并且该密钥不为空,则将使用此密钥名称

  3. 如果定位或访问指定的密钥时出现故障,则该函数将回退到提示用户输入凭证,但前提是 no_user_prompts 设置为 False,否则它将返回失败。

参数

local_username:如果通过,则将返回该内容。

local_password:如果通过,则将返回该内容。

服务器 — CMF 服务器字典,由 get_factory_servers. 在云迁移工厂中返回。 AWS

secret_overide:通过后,它将设置要从该服务器的 Secrets Manager 中检索的密钥名称。

no_user_promps:如果未存储用户 ID 和密码,则告诉函数不要提示用户输入用户 ID 和密码,对于任何远程自动化脚本,该值都应为 True。

get_credentials

从 Secrets Manager 中获取使用 AWS Cloud Migration 工厂凭据管理器存储的凭据。

参数

secret_name:要检索的密钥名称。

get_factory_servers

根据提供的 waveid 从 AWS 云迁移工厂数据存储中返回服务器数组。

参数

waveid — 将返回的服务器的 Wave 记录 ID。

令牌 — 从 FactoryLogin Lambda 函数获取的身份验证令牌。

app_ids — 可选的浪潮中要包含的应用程序 ID 列表。

server_ids — 浪潮中的服务器 ID 和要包含的应用程序的可选列表。

os_split — 如果设置为true,则将返回两个列表,一个用于 Linux,一个用于 Windows 服务器,如果为 False,则返回一个组合列表。

rtype — 可选字符串,仅针对服务器的特定迁移策略进行筛选,即传递值 “Rehost” 将仅返回使用 Rehost 的服务器。

最终消息摘要

建议提供脚本结果的摘要消息,作为屏幕或 sysout 的最终输出。这将显示在控制台的最终消息属性中,该属性提供脚本结果的快速状态,用户无需阅读完整的输出日志。

返回代码

如果主 python 脚本的运行不完全成功,则该脚本应该在退出时返回一个非零的返回代码。收到非零返回代码后,作业状态将在作业日志中显示为失败,向用户说明他们应查看输出日志以了解有关失败的详细信息。

YAML软件包结构.yml 选项

示例 YAML 文件

Name: "0-Check MGN Prerequisites" Description: "This script will verify the source servers meet the basic requirements for AWS MGN agent installation." MasterFileName: "0-Prerequisites-checks.py" UpdateUrl: "" Arguments: - name: "ReplicationServerIP" description: "Replication Server IP." long_desc: "IP Address of an AWS MGN Replication EC2 Instance." type: "standard" required: true - name: "SecretWindows" long_desc: "Windows Secret to use for credentials." description: "Windows Secret" type: "relationship" rel_display_attribute: "Name" rel_entity: "secret" rel_key: "Name" - name: "SecretLinux" long_desc: "Linux Secret to use for credentials." description: "Linux Secret" type: "relationship" rel_display_attribute: "Name" rel_entity: "secret" rel_key: "Name" - name: "Waveid" description: "Wave Name" type: "relationship" rel_display_attribute: "wave_name" rel_entity: "wave" rel_key: "wave_id" validation_regex: "^(?!\\s*$).+" validation_regex_msg: "Wave must be provided." required: true SchemaExtensions: - schema: "server" name: "server_pre_reqs_output" description: "Pre-Req Output" type: "string"

YAML密钥描述

必需

Name:脚本将在导入时使用的默认名称。

Description:脚本用法的描述。

MasterFileName— 这是脚本运行的起点,它必须是脚本包存档中包含的 python 文件名。

参数-P MasterFileName ython 脚本接受的参数列表。需要指定的每个参数都采用 AWS 云迁移工厂属性定义格式。每个参数的必需属性为 NameType,所有其他属性均为可选属性。

可选

UpdateUrl— 提供脚本包源码可用来提供更新的URL位置。目前这仅供参考。

SchemaExtensions— Python 脚本在架构中存储输出或检索其他数据所需的属性列表。必须以属性定义格式指定每个AWSCMF属性。每个属性的必需属性为 Schema Name、DescriptionType。所有其他属性均为可选属性。当脚本初次加载时,任何新属性都将自动添加到架构中,对于新版本的脚本, SchemaExtensions 将不会处理对的更改。如果需要这样才能添加新脚本,则必须手动更新架构。