Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

合作伙伴和产品集成

您可以将 Systems Manager 与 GitHub 和 Amazon S3等合作伙伴和产品技术结合使用,从而自动完成托管实例的部署、配置和维护。本部分介绍如何使用 AWS-RunRemoteScript 预定义的 SSM 文档下载来自 GitHub 和 Amazon S3 的脚本,包括 Ansible、Python、Ruby 和 PowerShell 脚本。通过使用该文档,不再需要将脚本手动导入 Amazon EC2,也不需要将其封装在 SSM 文档中。通过将 Systems Manager 与 GitHub 和 Amazon S3 集成,可以促进实现基础设施即代码,由此可缩短管理实例需要的时间,同时在队列中实现标准化配置。

还可以创建自定义 SSM 文档,实现从远程位置即可下载并运行脚本或其他 SSM 文档。有关更多信息,请参阅 创建复合文档

从 GitHub 运行脚本

本部分介绍如何从私有或公有 GitHub 存储库下载并运行脚本。您可以运行不同类型的脚本,包括 Ansible Playbooks、Python、Ruby 和 PowerShell 脚本。

还可以下载包括多个脚本的目录。在运行目录中的主脚本时,Systems Manager 也会同时运行所有引用的脚本 (只要引用的脚本包含在该目录中)。

请注意关于从 GitHub 运行脚本的下列重要详细信息。

  • Systems Manager 不检查您的脚本是否能够在实例上运行。在下载并运行脚本之前,必须验证对应实例上是否已经安装所需软件。您也可以创建一个复合文档,以使用 Run Command 或 State Manager 安装软件,然后再下载并运行脚本。

  • 您负责确保满足所有 GitHub 要求,包括根据需要刷新访问令牌。另外,必须确保不超过已验证或未验证请求的数量。有关更多信息,请参阅 GitHub 文档。

从 GitHub 运行 Ansible Playbooks

本部分包含帮助您使用 EC2 控制台或 AWS CLI 从 GitHub 运行 Ansible Playbooks 的过程。

开始前的准备工作

如果您计划运行私有 GitHub 存储库中存储的脚本,必须为 GitHub 安全访问令牌创建 Systems Manager SecureString 参数。通过 SSH 手动传递令牌无法访问私有 GitHub 存储库中的脚本。访问令牌必须作为 Systems Manager SecureString 参数传递。有关创建 SecureString 参数的更多信息,请参阅创建 Systems Manager 参数

使用 EC2 控制台从 GitHub 运行 Ansible Playbook

  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. 在导航窗格中,选择 Run Command,然后选择 Run a command

  3. Document 列表中,选择 AWS-RunRemoteScript

  4. Select Targets by 部分中,选择相应选项并选择要在其中下载和运行脚本的实例。

  5. (可选) 在 Execute on 字段中,指定可同时运行 AWS-RunRemoteScript 文档的 Targets 的数量 (例如,10)。或者指定可同时运行该文档的目标数量的百分比 (例如 10%)。

    注意

    如果通过选择 EC2 标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量。

  6. (可选) 在 Stop after 字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数。例如,如果您指定 3,Systems Manager 将在收到第 4 个错误时停止发送命令。仍在处理命令的实例也可能发送错误。

  7. Source Type 列表中,选择 GitHub

  8. Source 文本框中,按以下格式键入访问源所需的信息:

    Copy
    {"owner":"owner_name", "repository": "repository_name", "path": "path_to_scripts_or_directory", "tokenInfo":"{{ssm-secure:SecureString_parameter_name}}" }

    例如:

    Copy
    {"owner":"TestUser1", "repository": "GitHubPrivateTest", "path": "scripts/webserver.yml", "tokenInfo":"{{ssm-secure:mySecureStringParameter}}" }
  9. Command Line 字段中,键入脚本执行的参数。以下是示例。

    Copy
    ansible-playbook -i “localhost,” --check -c local webserver.yml
  10. Working Directory 字段中,键入实例上要在其中下载和运行脚本的目录的名称。

  11. Comments 字段中,键入有关该命令的信息。

  12. Advanced Options 部分中,选择 Write to S3 以便在 Amazon S3 存储桶中存储命令输出。在文本框中键入存储桶和前缀名称。

  13. 选择 Enable SNS notifications 以接收有关命令执行的通知和状态。有关为 Run Command 配置 SNS 通知的更多信息,请参阅为 Run Command 配置 Amazon SNS 通知

  14. 选择 Run

使用 AWS CLI 从 GitHub 运行 Ansible Playbook

  1. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 IAM 中被授予相应权限。有关更多信息,请参阅 Systems Manager 先决条件

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  2. 执行以下命令可从 GitHub 下载并运行脚本。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "instance-IDs" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"repository_name\", \"path\": \"path_to_file_or_directory\", \"tokenInfo\":\"{{ssm-secure:name_of_your_SecureString_parameter}}\" }"],"commandLine":["commands_to_run"]}'

    以下是示例。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-1234abcd" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\": \"GitHubPrivateTest\", \"path\": \"scripts/webserver.yml\", \"tokenInfo\":\"{{ssm-secure:mySecureStringParameter}}\" }"],"commandLine":["ansible-playbook -i “localhost,” --check -c local webserver.yml"]}'

从 GitHub 运行 Python 脚本

本部分包含帮助您使用 EC2 控制台或 AWS CLI 从 GitHub 运行 Python 脚本的过程。

开始前的准备工作

如果您计划运行私有 GitHub 存储库中存储的脚本,必须为 GitHub 安全访问令牌创建 Systems Manager SecureString 参数。通过 SSH 手动传递令牌无法访问私有 GitHub 存储库中的脚本。访问令牌必须作为 Systems Manager SecureString 参数传递。有关创建 SecureString 参数的更多信息,请参阅创建 Systems Manager 参数

使用 EC2 控制台从 GitHub 运行 Python 脚本

  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. 在导航窗格中,选择 Run Command,然后选择 Run a command

  3. Document 列表中,选择 AWS-RunRemoteScript

  4. Select Targets by 部分中,选择相应选项并选择要在其中下载和运行脚本的实例。

  5. (可选) 在 Execute on 字段中,指定可同时运行 AWS-RunRemoteScript 文档的 Targets 的数量 (例如,10)。或者指定可同时运行该文档的目标数量的百分比 (例如 10%)。

    注意

    如果通过选择 EC2 标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量。

  6. (可选) 在 Stop after 字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数。例如,如果您指定 3,Systems Manager 将在收到第 4 个错误时停止发送命令。仍在处理命令的实例也可能发送错误。

  7. Source Type 列表中,选择 GitHub

  8. Source 文本框中,按以下格式键入访问源所需的信息:

    Copy
    {"owner":"owner_name", "repository": "repository_name", "path": "path_to_scripts_or_directory", "tokenInfo":"{{ssm-secure:SecureString_parameter_name}}" }

    例如:

    Copy
    {"owner":"TestUser1", "repository":"GitHubPrivateTest", "path": "scripts/python/complex-script","tokenInfo":"{{ssm-secure:mySecureStringParameter}}"}

    此示例下载名为 complex-script 的脚本目录。

  9. Command Line 字段中,键入脚本执行的参数。以下是示例。

    Copy
    mainFile.py argument-1 argument-2

    该示例运行 mainFile.py,后者之后会运行 complex-script 目录中的其他脚本。

  10. Working Directory 字段中,键入实例上要在其中下载和运行脚本的目录的名称。

  11. Comments 字段中,键入有关该命令的信息。

  12. Advanced Options 部分中,选择 Write to S3 以便在 Amazon S3 存储桶中存储命令输出。在文本框中键入存储桶和前缀名称。

  13. 选择 Enable SNS notifications 以接收有关命令执行的通知和状态。有关为 Run Command 配置 SNS 通知的更多信息,请参阅为 Run Command 配置 Amazon SNS 通知

  14. 选择 Run

使用 AWS CLI 从 GitHub 运行 Python 脚本

  1. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 IAM 中被授予相应权限。有关更多信息,请参阅 Systems Manager 先决条件

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  2. 执行以下命令可从 GitHub 下载并运行脚本。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "instance-IDs" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"path_to_script_or_directory"}"],"commandLine":["commands_to_run"]}'

    以下是示例。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-abcd1234" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\":\"GitHubTestPublic\", \"path\": \"scripts/python/complex-script\"}"],"commandLine":["mainFile.py argument-1 argument-2 "]}'

    此示例下载名为 complex-script 的脚本目录。commandLine 条目运行 mainFile.py,它之后会运行 complex-script 目录中的其他脚本。

从 Amazon S3 运行脚本

本部分介绍如何从 Amazon S3 下载并运行脚本。您可以运行不同类型的脚本,包括 Ansible Playbooks、Python、Ruby 和 PowerShell。

还可以下载包括多个脚本的目录。在运行目录中的主脚本时,Systems Manager 也会同时运行所有引用的脚本 (只要引用的脚本包含在该目录中)。

请注意关于从 Amazon S3 运行脚本的下列重要详细信息。

  • Systems Manager 不检查您的脚本是否能够在实例上运行。在下载并运行脚本之前,必须验证对应实例上是否已经安装所需软件。您也可以创建一个复合文档,以使用 Run Command 或 State Manager 安装软件,然后再下载并运行脚本。

  • 验证您的 AWS Identity and Access Management (IAM) 用户账户、角色或组是否有权读取 S3 存储桶。

从 Amazon S3 运行 Ruby 脚本

本部分包含帮助您使用 EC2 控制台或 AWS CLI 从 Amazon S3 运行 Ruby 脚本的过程。

使用 EC2 控制台从 Amazon S3 运行 Ruby 脚本

  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. 在导航窗格中,选择 Run Command,然后选择 Run a command

  3. Document 列表中,选择 AWS-RunRemoteScript

  4. Select Targets by 部分中,选择相应选项并选择要在其中下载和运行脚本的实例。

  5. (可选) 在 Execute on 字段中,指定可同时运行 AWS-RunRemoteScript 文档的 Targets 的数量 (例如,10)。或者指定可同时运行该文档的目标数量的百分比 (例如 10%)。

    注意

    如果通过选择 EC2 标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量。

  6. (可选) 在 Stop after 字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数。例如,如果您指定 3,Systems Manager 将在收到第 4 个错误时停止发送命令。仍在处理命令的实例也可能发送错误。

  7. Source Type 列表中,选择 S3

  8. Source 文本框中,按以下格式键入访问源所需的信息:

    Copy
    {"path":"https://s3.amazonaws.com/path_to_script"}

    例如:

    Copy
    {"path":"https://s3.amazonaws.com/rubytest/scripts/ruby/helloWorld.rb"}
  9. Command Line 字段中,键入脚本执行的参数。以下是示例。

    Copy
    helloWorld.rb argument-1 argument-2
  10. Working Directory 字段中,键入实例上要在其中下载和运行脚本的目录的名称。

  11. Comments 字段中,键入有关该命令的信息。

  12. Advanced Options 部分中,选择 Write to S3 以便在 Amazon S3 存储桶中存储命令输出。在文本框中键入存储桶和前缀名称。

  13. 选择 Enable SNS notifications 以接收有关命令执行的通知和状态。有关为 Run Command 配置 SNS 通知的更多信息,请参阅为 Run Command 配置 Amazon SNS 通知

  14. 选择 Run

使用 AWS CLI 从 S3 运行 Ruby 脚本

  1. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 IAM 中被授予相应权限。有关更多信息,请参阅 Systems Manager 先决条件

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  2. 执行以下命令可从 Amazon S3 下载并运行脚本。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "instance-IDs" --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_script\"}"],"commandLine":["script_name_and_arguments"]}'

    以下是示例。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-abcd1234" --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.amazonaws.com/RubyTest/scripts/ruby/helloWorld.rb\"}"],"commandLine":["helloWorld.rb argument-1 argument-2"]}'

从 Amazon S3 运行 PowerShell 脚本

本部分包含帮助您使用 EC2 控制台或 AWS CLI 从 Amazon S3 运行 PowerShell 脚本的过程。

从 Amazon S3 运行 PowerShell 脚本

  1. Open the Amazon EC2 console at https://console.amazonaws.cn/ec2/.

  2. 在导航窗格中,选择 Run Command,然后选择 Run a command

  3. Document 列表中,选择 AWS-RunRemoteScript

  4. Select Targets by 部分中,选择相应选项并选择要在其中下载和运行脚本的实例。

  5. (可选) 在 Execute on 字段中,指定可同时运行 AWS-RunRemoteScript 文档的 Targets 的数量 (例如,10)。或者指定可同时运行该文档的目标数量的百分比 (例如 10%)。

    注意

    如果通过选择 EC2 标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量。

  6. (可选) 在 Stop after 字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数。例如,如果您指定 3,Systems Manager 将在收到第 4 个错误时停止发送命令。仍在处理命令的实例也可能发送错误。

  7. Source Type 列表中,选择 S3

  8. Source 文本框中,按以下格式键入访问源所需的信息:

    Copy
    {"path": "https://s3.amazonaws.com/path_to_script"}

    例如:

    Copy
    {"path": "https://s3.amazonaws.com/PowerShellTest/powershell/helloPowershell.ps1"}
  9. Command Line 字段中,键入脚本执行的参数。以下是示例。

    Copy
    helloPowershell.ps1 argument-1 argument-2
  10. Working Directory 字段中,键入实例上要在其中下载和运行脚本的目录的名称。

  11. Comments 字段中,键入有关该命令的信息。

  12. Advanced Options 部分中,选择 Write to S3 以便在 Amazon S3 存储桶中存储命令输出。在文本框中键入存储桶和前缀名称。

  13. 选择 Enable SNS notifications 以接收有关命令执行的通知和状态。有关为 Run Command 配置 SNS 通知的更多信息,请参阅为 Run Command 配置 Amazon SNS 通知

  14. 选择 Run

使用 AWS CLI 从 S3 运行 PowerShell 脚本

  1. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 IAM 中被授予相应权限。有关更多信息,请参阅 Systems Manager 先决条件

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  2. 执行以下命令可从 Amazon S3 下载并运行脚本。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "instance-IDs" --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\": \"https://s3.amazonaws.com/path_to_script\"}"],"commandLine":["script_name_and_arguments"]}'

    以下是示例。

    Copy
    aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-1234abcd" --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\": \"https://s3.amazonaws.com/TestPowershell/powershell/helloPowershell.ps1\"}"],"commandLine":["helloPowershell.ps1 argument-1 argument-2"]}'