

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 从 GitHub 运行脚本
<a name="integration-remote-scripts"></a>

本节介绍如何使用预定义 Systems Manager 文档（SSM 文档）`AWS-RunRemoteScript` 从 GitHub 下载脚本，包括 Ansible Playbook、Python、Ruby 和 PowerShell 脚本。通过使用此 SSM 文档，您不再需要将脚本手动移植到 Amazon Elastic Compute Cloud（Amazon EC2）中，也不需要将这些脚本封装在 SSM 文档中。AWS Systems Manager 与 GitHub 的集成可以促进实现*基础设施即代码*，这既可缩短管理节点所需的时间，又可在整个实例集中实现标准化配置。

您还可以创建自定义 SSM 文档，这使您可以从远程位置下载并运行脚本或其他 SSM 文档。有关更多信息，请参阅 [创建复合文档](documents-creating-content.md#documents-creating-composite)。

还可以下载包括多个脚本的目录。在运行目录中的主脚本时，Systems Manager 还会运行该目录中包含的任何引用的脚本。

请注意关于从 GitHub 运行脚本的下列重要详细信息。
+ Systems Manager 不会验证您的脚本是否能够在节点上运行。在下载和运行脚本之前，请确认相应节点上已经安装所需软件。您也可以创建一个复合文档，能够使用 Run Command 或State Manager（都是 AWS Systems Manager 中的工具）安装软件，然后再下载并运行脚本。
+ 您应负责确保满足所有 GitHub 要求。包括根据需要刷新访问令牌。确保不要超过已进行身份验证或未进行身份验证的请求的数量。有关更多信息，请参阅GitHub 文档。
+ 不支持 GitHub Enterprise 存储库。

**Topics**
+ [从 GitHub 运行 Ansible Playbook](integration-github-ansible.md)
+ [从 GitHub 运行 Python 脚本](integration-github-python.md)

# 从 GitHub 运行 Ansible Playbook
<a name="integration-github-ansible"></a>

本节包含帮助您使用控制台或 AWS Command Line Interface（AWS CLI）从 GitHub 运行 Ansible Playbook 的过程。

**开始前的准备工作**  
如果您计划运行私有 GitHub 存储库中存储的脚本，请为 GitHub 安全访问令牌创建 AWS Systems Manager `SecureString` 参数。通过 SSH 手动传递令牌无法访问私有 GitHub 存储库中的脚本。该访问令牌必须作为 Systems Manager `SecureString` 参数传递。有关创建 `SecureString` 参数的更多信息，请参阅 [在 Systems Manager 中创建 Parameter Store 参数](sysman-paramstore-su-create.md)。

## 从 GitHub 运行 Ansible Playbook（控制台）
<a name="integration-github-ansible-console"></a>

**从 GitHub 运行 Ansible Playbook**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Run Command**。

1. 选择 **Run command（运行命令）**。

1. 在 **Command document (命令文档)** 列表中，选择 **`AWS-RunRemoteScript`**。

1. 在**命令参数**中，执行以下操作：
   + 在**源类型**中，选择 **GitHub**。
   + 在 **Source Info (源信息)** 框中，按以下格式输入访问源所需的信息。

     ```
     {
       "owner": "owner_name",
       "repository": "repository_name", 
       "getOptions": "branch:branch_name",
       "path": "path_to_scripts_or_directory",
       "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}" 
     }
     ```

     此示例下载名为 `webserver.yml` 的文件。

     ```
     {
         "owner": "TestUser1",
         "repository": "GitHubPrivateTest",
         "getOptions": "branch:myBranch",
         "path": "scripts/webserver.yml",
         "tokenInfo": "{{ssm-secure:mySecureStringParameter}}"
     }
     ```
**注意**  
仅当您的 SSM 文档存储在 `master` 以外的分支中时， `"branch"` 才是必需的。  
要使用存储库中特定*提交* 中的脚本版本，请使用 `commitID` 和 `getOptions`，而不是 `branch`。例如：  
`"getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",`
   + 在 **Command Line (命令行)** 字段中，输入用于脚本执行的参数。见下列。

     **ansible-playbook -i “localhost,” --check -c local webserver.yml**
   + （可选）在 **Working Directory**（工作目录）字段中，输入节点（要在其中下载和运行脚本）上的目录的名称。
   + (可选) 在**执行超时**中，指定脚本命令执行失败之前系统要等待的秒数。

1. 在 **Targets**（目标）部分中，通过指定标签、手动选择实例或边缘设备或指定资源组，选择要在其上运行此操作的托管式节点。
**提示**  
如果未列出您希望看到的托管式节点，请参阅 [排除托管式节点可用性的问题](fleet-manager-troubleshooting-managed-nodes.md) 以获取故障排除技巧。

1. 对于 **Other parameters（其他参数）**：
   + 对于 **Comment（注释）**，请输入有关此命令的信息。
   + 对于 **Timeout (seconds) (超时 (秒))**，请指定在整个命令执行失败之前系统等待的秒数。

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 AWS Resource Groups 来选择目标，但不确定有多少个托管式节点已被设为目标，则可通过指定百分比来限制可同时运行该文档的目标的数量。
   + 对于 **Error threshold**（错误阈值），请指定当命令在一定数量或百分比的节点上失败后，何时在其他托管式节点上停止运行该命令。例如，如果您指定三个错误，Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理该命令的托管式节点也可能发送错误。

1. （可选）对于 **输出选项**，要将命令输出保存到文件，请选中 **将命令输出写入 S3 存储桶** 框。在输入框中输入存储桶和前缀（文件夹）名称。
**注意**  
授予将数据写入 S3 存储桶的能力的 S3 权限，是分配给实例的实例配置文件（适用于 EC2 实例）或 IAM 服务角色（混合激活的计算机）的权限，而不是执行此任务的 IAM 用户的权限。有关更多信息，请参阅[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)或[为混合环境创建 IAM 服务角色](hybrid-multicloud-service-role.md)。此外，如果指定的 S3 存储桶位于不同的 AWS 账户 中，请确保与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

1. 在 **SNS 通知**部分，如果需要发送有关命令执行状态的通知，请选中 **Enable SNS notifications（启用 SNS 通知）**复选框。

   有关为 Run Command 配置 Amazon SNS 通知的更多信息，请参阅 [使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)。

1. 选择 **Run（运行）**。

## 使用 AWS CLI 从 GitHub 运行 Ansible Playbook
<a name="integration-github-ansible-cli"></a>

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令可从 GitHub 下载并运行脚本。

   ```
   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"]}'
   ```

   以下是一个要在本地 Linux 计算机上运行的示例命令。

   ```
   aws ssm send-command \    
       --document-name "AWS-RunRemoteScript" \
       --instance-ids "i-02573cafcfEXAMPLE" \
       --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 脚本
<a name="integration-github-python"></a>

本节包含帮助您使用 AWS Systems Manager 控制台或 AWS Command Line Interface（AWS CLI）从 GitHub 运行 Python 脚本的过程。

## 从 GitHub 运行 Python 脚本（控制台）
<a name="integration-github-python-console"></a>

**从 GitHub 运行 Python 脚本**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Run Command**。

1. 选择 **Run command（运行命令）**。

1. 在 **Command document (命令文档)** 列表中，选择 **`AWS-RunRemoteScript`**。

1. 对于**命令参数**，执行以下操作：
   + 在**源类型**中，选择 **GitHub**。
   + 在 **Source Info (源信息)** 框中，按以下格式输入访问源所需的信息：

     ```
     {
         "owner": "owner_name",
         "repository": "repository_name",
         "getOptions": "branch:branch_name",
         "path": "path_to_document",
         "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}"
     }
     ```

     以下示例会下载一个名为 *complex-script* 的脚本目录。

     ```
     {
         "owner": "TestUser1",
         "repository": "SSMTestDocsRepo",
         "getOptions": "branch:myBranch",
         "path": "scripts/python/complex-script",
         "tokenInfo": "{{ssm-secure:myAccessTokenParam}}"
     }
     ```
**注意**  
仅当您的脚本存储在 `master` 以外的分支中时，`"branch"` 才是必需的。  
要使用存储库中特定*提交* 中的脚本版本，请使用 `commitID` 和 `getOptions`，而不是 `branch`。例如：  
`"getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",`
   + 对于 **Command Line (命令行)**，输入脚本执行的参数。见下列。

     ```
     mainFile.py argument-1 argument-2
     ```

     此示例运行 `mainFile.py`，它可在随后运行 `complex-script` 目录中的其他脚本。
   + （可选）对于 **Working Directory**（工作目录），输入节点上要在其中下载和运行脚本的目录的名称。
   + （可选）对于 **Execution Timeout（执行超时）**，指定脚本命令执行失败之前系统要等待的秒数。

1. 在 **Targets**（目标）部分中，通过指定标签、手动选择实例或边缘设备或指定资源组，选择要在其上运行此操作的托管式节点。
**提示**  
如果未列出您希望看到的托管式节点，请参阅 [排除托管式节点可用性的问题](fleet-manager-troubleshooting-managed-nodes.md) 以获取故障排除技巧。

1. 对于 **Other parameters（其他参数）**：
   + 对于 **Comment（注释）**，请输入有关此命令的信息。
   + 对于 **Timeout (seconds) (超时 (秒))**，请指定在整个命令执行失败之前系统等待的秒数。

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 AWS Resource Groups 来选择目标，但不确定有多少个托管式节点已被设为目标，则可通过指定百分比来限制可同时运行该文档的目标的数量。
   + 对于 **Error threshold**（错误阈值），请指定当命令在一定数量或百分比的节点上失败后，何时在其他托管式节点上停止运行该命令。例如，如果您指定三个错误，Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理该命令的托管式节点也可能发送错误。

1. （可选）对于 **输出选项**，要将命令输出保存到文件，请选中 **将命令输出写入 S3 存储桶** 框。在输入框中输入存储桶和前缀（文件夹）名称。
**注意**  
授予将数据写入 S3 存储桶的能力的 S3 权限，是分配给实例的实例配置文件（适用于 EC2 实例）或 IAM 服务角色（混合激活的计算机）的权限，而不是执行此任务的 IAM 用户的权限。有关更多信息，请参阅[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)或[为混合环境创建 IAM 服务角色](hybrid-multicloud-service-role.md)。此外，如果指定的 S3 存储桶位于不同的 AWS 账户 中，请确保与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

1. 在 **SNS 通知**部分，如果需要发送有关命令执行状态的通知，请选中 **Enable SNS notifications（启用 SNS 通知）**复选框。

   有关为 Run Command 配置 Amazon SNS 通知的更多信息，请参阅 [使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)。

1. 选择 **Run（运行）**。

## 使用 AWS CLI 从 GitHub 运行 Python 脚本
<a name="integration-github-python-cli"></a>

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令可从 GitHub 下载并运行脚本。

   ```
   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"]}'
   ```

   见下列。

   ```
   aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-02573cafcfEXAMPLE" --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` 目录中的其他脚本。