

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

# 从 Amazon S3 运行脚本
<a name="integration-s3"></a>

本节介绍如何从 Amazon Simple Storage Service (Amazon S3) 下载和运行脚本。以下主题包含与 Amazon S3 相关的信息和术语。要了解有关 Amazon S3 的更多信息，请参阅[什么是 Amazon S3？](https://docs.amazonaws.cn/AmazonS3/latest/userguide/Welcome.html) 您可以运行不同类型的脚本，包括 Ansible Playbooks、Python、Ruby、Shell 和 PowerShell。

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

请注意有关从 Amazon S3 运行脚本的以下重要详细信息：
+ Systems Manager 不会验证您的脚本是否能够在节点上运行。在下载和运行脚本之前，请确认相应节点上已经安装所需软件。您也可以创建一个复合文档，能够使用 Run Command 或State Manager（都是 Amazon Systems Manager 中的工具）安装软件，然后再下载并运行脚本。
+ 验证并确保您的用户、角色或组已经获得读取 S3 存储桶所需的 Amazon Identity and Access Management（IAM）权限。
+ 确保 Amazon Elastic Compute Cloud (Amazon EC2) 实例上的实例配置文件拥有 `s3:ListBucket` 和 `s3:GetObject` 权限。如果实例配置文件没有这些权限，系统将无法从 S3 存储桶下载脚本。有关更多信息，请参阅 *IAM 用户指南*中的[使用实例配置文件](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。

## 从 Amazon S3 运行 Shell 脚本
<a name="integration-s3-shell"></a>

以下信息包含帮助您使用 Amazon Systems Manager 控制台或 Amazon Command Line Interface（Amazon CLI）从 Amazon Simple Storage Service（Amazon S3）运行脚本的过程。尽管示例中使用了 Shell 脚本，但可以替换其他类型的脚本。

### 从 Amazon S3 运行 Shell 脚本（控制台）
<a name="integration-s3-ruby-console"></a>

**从 Amazon S3 运行 Shell 脚本**

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

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

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

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

1. 在**命令参数**中，执行以下操作：
   + 在**源类型**中，选择 **S3**。
   + 在 **Source Info (源信息)** 文本框中，按以下格式输入访问源所需的信息。将每个*示例资源占位符*替换为您自己的信息。
**注意**  
将 https://s3.*aws-api-domain* 替换为您的存储桶 URL。您可以在 **Objects**（对象）选项卡上复制 Amazon S3 中的存储桶 URL。

     ```
     {"path":"https://s3.aws-api-domain/path to script"}
     ```

     示例如下：

     ```
     {"path":"https://amzn-s3-demo-bucket.s3.us-east-2.amazonaws.com/scripts/shell/helloWorld.sh"}
     ```
   + 在 **Command Line (命令行)** 字段中，输入用于脚本执行的参数。见下列。

     ```
     helloWorld.sh argument-1 argument-2
     ```
   + （可选）在 **Working Directory**（工作目录）字段中，输入节点（要在其中下载和运行脚本）上的目录的名称。
   + (可选) 在**执行超时**中，指定脚本命令执行失败之前系统要等待的秒数。

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

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

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 Amazon 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 存储桶位于不同的 Amazon Web Services 账户 中，请确保与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

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

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

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

### 从 Amazon S3 运行 Shell 脚本（命令行）
<a name="integration-s3-shell-cli"></a>

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

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

1. 运行如下命令。将每个*示例资源占位符*替换为您自己的信息。
**注意**  
将 https://s3.*aws-api-domain*/*script path* 替换为您的存储桶 URL。您可以在 **Objects**（对象）选项卡上复制 Amazon S3 中的存储桶 URL。

------
#### [ Linux & macOS ]

   ```
   aws ssm send-command \
       --document-name "AWS-RunRemoteScript" \
       --output-s3-bucket-name "amzn-s3-demo-bucket" \
       --output-s3-key-prefix "key-prefix" \
       --targets "Key=InstanceIds,Values=instance-id" \
       --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/script path\"}"],"commandLine":["script name and arguments"]}'
   ```

------
#### [ Windows ]

   ```
   aws ssm send-command ^
       --document-name "AWS-RunRemoteScript" ^
       --output-s3-bucket-name "amzn-s3-demo-bucket" ^
       --output-s3-key-prefix "key-prefix" ^
       --targets "Key=InstanceIds,Values=instance-id" ^
       --parameters "sourceType"="S3",sourceInfo='{\"path\":\"https://s3.aws-api-domain/script path\"}',"commandLine"="script name and arguments"
   ```

------
#### [ PowerShell ]

   ```
   Send-SSMCommand `
       -DocumentName "AWS-RunRemoteScript" `
       -OutputS3BucketName "amzn-s3-demo-bucket" `
       -OutputS3KeyPrefix "key-prefix" `
       -Target @{Key="InstanceIds";Values=@("instance-id")} `
       -Parameter @{
           sourceType = "S3"; 
           sourceInfo = '{"path": "s3://bucket-name/path/to/script"}'; 
           commandLine = "script name and arguments"
       }
   ```

------