组件管理器支持的操作模块 - EC2 映像生成器
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

组件管理器支持的操作模块

本节包含在 EC2 映像生成器 配置生成映像的实例时使用的组件管理应用程序支持的操作模块列表。还包括操作模块的相应功能详细信息和输入/输出值。

注意

所有操作模块都使用与 SSM 代理相同的账户执行,该账户在 Linux 上为 root,在 Windows 上为 NT Authority\SYSTEM

ExecuteBinary

ExecuteBinary 模块用于执行包含命令行参数列表的二进制文件。

如果执行退出并显示退出代码 194 (Linux) 或 3010 (Windows),则 ExecuteBinary 模块处理系统重新启动。在触发后,该应用程序执行以下操作之一:

  • 如果是由 SSM 代理执行的,该应用程序将向调用方返回退出代码。SSM 代理处理系统重新引导并重新调用执行,如从脚本中重新引导托管实例中所述。

  • 该应用程序保存当前 executionstate,配置重新启动触发器以重新执行该应用程序,然后重新引导系统。

在系统重新启动后,该应用程序执行触发重新启动的相同步骤。如果需要使用该功能,您必须编写幂等脚本以处理多次调用同一 Shell 命令的操作。

输入
原语 描述 类型 必需
path 要执行的二进制文件的路径。 字符串
arguments 包含在执行二进制文件时使用的命令行参数列表。 字符串列表

输入示例

name: "InstallDotnet" action: ExecuteBinary inputs: path: C:\PathTo\dotnet_installer.exe arguments: - /qb - /norestart
输出
字段 描述 类型
stdout 命令执行的标准输出。 字符串

输出示例

{ "stdout": "success" }

ExecuteBash

ExecuteBash 模块用于通过内联 Shell 代码/命令运行 bash 脚本。该模块支持 Linux。

您在命令块中指定的所有命令和指令将转换为文件(例如 input.sh)并使用 bash Shell 执行。Shell 文件的执行结果是该步骤的退出代码。

如果执行退出并且退出代码为 194,则 ExecuteBash 模块处理系统重新启动。在触发后,该应用程序执行以下操作之一:

  • 如果是由 SSM 代理执行的,该应用程序将向调用方返回退出代码。SSM 代理处理系统重新引导并重新调用执行,如从脚本中重新引导托管实例中所述。

  • 该应用程序保存当前 executionstate,配置重新启动触发器以重新执行该应用程序,然后重新引导系统。

在系统重新启动后,该应用程序执行触发重新启动的相同步骤。如果需要使用该功能,您必须编写幂等脚本以处理多次调用同一 Shell 命令的操作。

输入
原语 描述 类型 必需
commands 包含根据 bash 语法执行的指令或命令列表。允许使用多行 YAML。 列表

输入示例

name: InstallAndValidateCorretto action: ExecuteBash inputs: commands: - sudo yum install java-11-amazon-corretto-headless -y - | function fail_with_message() { 1>&2 echo $1 exit 1 } ARCH=`/usr/bin/arch` JAVA_PATH=/usr/lib/jvm/java-11-amazon-corretto.$ARCH/bin/java if [ -x $JAVA_PATH ]; then echo "Amazon Corretto 11 JRE is installed." else fail_with_message "Amazon Corretto 11 JRE is not installed. Failing." fi JAVAC_PATH=/usr/lib/jvm/java-11-amazon-corretto.$ARCH/bin/javac if [ -x $JAVAC_PATH ]; then echo "Amazon Corretto 11 JDK is installed." else fail_with_message "Amazon Corretto 11 JDK is not installed. Failing." fi
输出
字段 描述 类型
stdout 命令执行的标准输出。 字符串

输出示例

{ “stdout”: “This is the standard output from the shell execution\n" }

如果您执行重新引导,并返回退出代码 194 以作为操作模块的一部分,生成将在启动重新引导的同一操作模块步骤处继续执行。如果执行重新引导而没有退出代码,生成过程可能会失败。

ExecutePowerShell

ExecutePowerShell 模块用于通过内联 Shell 代码/命令运行 PowerShell 脚本。该模块支持 Windows 平台和 Windows PowerShell。

在命令块中指定的所有命令/指令将转换为脚本文件(例如 input.ps1)并使用 Windows PowerShell 执行。Shell 文件执行结果是退出代码。

如果 Shell 命令退出并且退出代码为 3010,则 ExecutePowerShell 模块处理系统重新启动。在触发后,该应用程序执行以下操作之一:

  • 如果是由 SSM 代理执行的,则向调用方返回退出代码。SSM 代理处理系统重新引导并重新调用执行,如从脚本中重新引导托管实例中所述。

  • 保存当前 executionstate,配置重新启动触发器以重新执行该应用程序,然后重新引导系统。

在系统重新启动后,该应用程序执行触发重新启动的相同步骤。如果需要使用该功能,您必须编写幂等脚本以处理多次调用同一 Shell 命令的操作。

输入
原语 描述 类型 必需
commands 包含根据 PowerShell 语法执行的指令或命令列表。允许使用多行 YAML。 字符串列表

必须指定 commandsfile,但不能同时指定。

file 包含 PowerShell 脚本文件的路径。PowerShell 将使用 -file 命令行参数执行该文件。路径必须指向 .ps1 文件。 字符串

必须指定 commandsfile,但不能同时指定。

输入示例

name: InstallMySoftware action: ExecutePowerShell inputs: commands: - Set-SomeConfiguration -Value 10 - Write-Host 'Successfully set the configuration.' name: ExecuteMyScript action: ExecutePowerShell inputs: file: 'C:\PathTo\MyScript.ps1'
输出
字段 描述 类型
stdout 命令执行的标准输出。 字符串

输出示例

{ “stdout”: “This is the standard output from the shell execution\n" }

如果您执行重新引导,并返回退出代码 3010 以作为操作模块的一部分,生成将在启动重新引导的同一操作模块步骤处继续执行。如果执行重新引导而没有退出代码,生成过程可能会失败。

Reboot

Reboot 操作模块重新引导实例。它具有一个可配置的选项以延迟启动重新引导。由于重新引导实例,它不支持步骤超时值。默认行为是 delaySeconds60,这意味着没有延迟。

如果该应用程序是由 SSM 代理调用的,则向 SSM 代理返回退出代码(Windows 为 3010,Linux 为 194)。SSM 代理处理系统重新引导,如从脚本中重新引导托管实例中所述。

如果该应用程序是在主机上作为单独进程调用的,它将保存当前执行状态,配置重新引导后自动运行触发器以重新执行该应用程序,然后重新引导系统。

重新引导后自动运行触发器:

  • Windows。创建一个包含 At SystemStartup 触发器的任务计划程序条目。

  • Linux。在 crontab 中添加一个作业。

@reboot /download/path/awstoe run --document s3://bucket/key/doc.yaml

在该应用程序启动时,将清除该触发器。

要使用 Reboot 操作模块,对于包含重新引导 exitcode 的步骤(例如,3010),您必须以 sudo user 形式运行应用程序二进制文件。

输入
原语 描述 类型 必需 默认值
delaySeconds 在启动重新引导之前延迟特定的时间。 整数

0

输入示例

name: RebootStep action: Reboot onFailure: Abort maxAttempts: 2 inputs: delaySeconds: 60

输出

无。

Reboot 模块完成后,镜像生成器 继续执行生成中的下一步。

UpdateOS

UpdateOS 操作模块增加了对安装 Windows 和 Linux 更新的支持。

默认情况下,UpdateOS 操作模块安装所有可用的更新。您可以提供一个包括列表(要包括在安装中的一个或多个更新)和/或排除列表(要从安装中排除的一个或多个更新)以覆盖该操作。

如果同时提供了“包括”和“排除”列表,则结果更新列表只能包含在“包括”列表中列出并且在“排除”列表中未列出的那些更新。

  • Windows。更新是从目标计算机上配置的更新源中安装的。

  • Linux。该应用程序检查 Linux 平台中支持的软件包管理器,并使用 yumapt-get 软件包管理器。如果不支持这两个软件包管理器,则会返回错误。您应该具有运行 UpdateOS 操作模块的 sudo 权限。如果您没有 sudo 权限,则会返回 error.Input

输入
原语 描述 类型 必需
include

对于 Windows,您可以指定一个或多个 Microsoft 知识库 (KB) 文章 ID 以包括在可以安装的更新列表中。有效的格式为:KB12345671234567

对于 Linux,您可以指定一个或多个要包括在安装列表中的软件包。

字符串列表
exclude

对于 Windows,您可以指定一个或多个 Microsoft 知识库 (KB) 文章 ID 以包括在要从安装中排除的更新列表中。

对于 Linux,您可以指定一个或多个要从安装中排除的软件包。

字符串列表

输入示例

name: UpdateMyLinux action: UpdateOS onFailure: Abort maxAttempts: 3 inputs: exclude: - ec2-hibinit-agent

输出

无。

S3Upload

S3Upload 操作模块用于将文件从源文件/文件夹上传到某个 Amazon S3 位置。允许将通配符与源一起使用,并以 * 字符表示通配符。

如果递归 S3Upload 操作失败,将保留已上传的 Amazon S3 文件。

支持的使用案例:

• 将本地文件上传到 S3 对象。

• 将文件夹中的本地文件(使用通配符)上传到 S3 KeyPrefix

• 将本地文件夹(必须将 recurse 设置为 true)复制到 S3 KeyPrefix

IAM 要求

与实例配置文件关联的 IAM 角色必须具有运行 S3Upload 操作模块的权限。必须将以下 IAM 角色策略附加到与实例配置文件关联的 IAM 角色:针对存储桶/对象(例如 arn:aws:s3:::BucketName/*)的 s3:PutObject

输入
原语 描述 类型 必需 默认值
source 本地路径。源支持 * 表示的通配符。 字符串

destination 远程路径。 字符串

recurse 如果设置为 true,则递归执行 S3Upload 字符串 false

输入示例:将本地文件复制到 S3 对象

以下示例说明了如何将本地文件复制到 Amazon S3 对象。

name: MyS3UploadFile action: S3Upload onFailure: Abort maxAttempts: 3 inputs: - source: C:\myfolder\package.zip destination: s3://mybucket/path/to/package.zip

输入示例:将本地文件夹中的所有文件复制到具有 KeyPrefix 的 S3 存储桶

以下示例说明了如何将本地文件夹中的所有文件复制到具有 KeyPrefix 的 Amazon S3 存储桶。该示例不会复制子文件夹或其内容,因为未指定 recurse,并且它默认为 false

name: MyS3UploadMultipleFiles action: S3Upload onFailure: Abort maxAttempts: 3 inputs: - source: C:\myfolder\* destination: s3://mybucket/path/to/

输入示例:将所有文件和文件夹从本地文件夹递归复制到 S3 存储桶

以下示例说明了如何将所有文件和文件夹从本地文件夹递归复制到具有 KeyPrefix 的 Amazon S3 存储桶。

name: MyS3UploadFolder action: S3Upload onFailure: Abort maxAttempts: 3 inputs: - source: C:\myfolder\* destination: s3://mybucket/path/to/ recurse: true

输出

无。

S3Download

S3Download 操作模块用于将 Amazon S3 对象或 KeyPrefix 下载到本地目标路径。目标路径可能是文件或文件夹。如果目标路径已存在,S3Download 将失败,除非 override 设置为 true

如果 S3KeyPrefixS3Download 操作失败,目标文件夹将保留失败时的状态。文件夹内容不会回滚到失败之前的内容。

支持的使用案例:

  • 将 S3 对象下载到本地文件。

  • 将 S3 对象(在 S3 文件路径中具有 KeyPrefix)下载到本地文件夹,这会将 KeyPrefix 中的所有 S3 文件递归复制到本地文件夹。

IAM 要求

与实例配置文件关联的 IAM 角色必须具有运行 S3Download 操作模块的权限。必须将以下 IAM 角色策略附加到与实例配置文件关联的 IAM 角色:

  • 单个文件:针对存储桶/对象(例如 arn:aws:s3:::BucketName/*)的 s3:GetObject

  • 多个文件:针对存储桶/对象(例如 arn:aws:s3:::BucketName)的 s3:ListBucket 以及针对存储桶/对象(例如 arn:aws:s3:::BucketName/*)的 s3:GetObject

输入
原语 描述 类型 必需
source 远程路径。源支持 * 表示的通配符。 字符串

destination 本地路径。 字符串
注意

对于以下示例,可以将 Windows 文件夹路径替换为 Linux 路径。例如,可以将 C:\myfolder\package.zip 替换为 /myfolder/package.zip

输入示例:将 S3 对象复制到本地文件

以下示例说明了如何将 S3 对象复制到本地文件。

name: DownloadMyFile action: S3Download inputs: - source: s3://mybucket/path/to/package.zip destination: C:\myfolder\package.zip

输入示例:将具有 KeyPrefix 的 S3 存储桶中的所有 S3 对象复制到本地文件夹

以下示例说明了如何将具有 KeyPrefix 的 Amazon S3 存储桶中的所有 S3 对象复制到本地文件夹。S3 没有文件夹概念,因此,将复制与 KeyPrefix 匹配的所有对象。最大对象数限制为 1000 个。

name: MyS3DownloadKeyprefix action: S3Download maxAttempts: 3 inputs: - source: s3://mybucket/path/to/* destination: C:\myfolder\

输出

无。

SetRegistry

SetRegistry 操作模块接受输入列表,用于设置指定注册表项的值。如果注册表项不存在,则会在定义的路径中创建该注册表项。该功能仅适用于 Windows。

输入
原语 描述 类型 必需
path 注册表项的路径。 字符串
name 注册表项的名称。 字符串
value 注册表项的值。 字符串/数字/数组
type 注册表项的值类型。 字符串

支持的路径前缀

  • HKEY_CLASSES_ROOT / HKCR:

  • HKEY_USERS / HKU:

  • HKEY_LOCAL_MACHINE / HKLM:

  • HKEY_CURRENT_CONFIG / HKCC:

  • HKEY_CURRENT_USER / HKCU:

支持的类型

  • BINARY

  • DWORD

  • QWORD

  • SZ

  • EXPAND_SZ

  • MULTI_SZ

输入示例

name: SetRegistryKeyValues action: SetRegistry maxAttempts: 3 inputs: - path: HKLM:\SOFTWARE\MySoftWare name: MyName value: FirstVersionSoftware type: SZ - path: HKEY_CURRENT_USER\Software\Test name: Version value: 1.1 type: DWORD

输出

无.