Skip to content

使用SSM部署CloudWatch Agent

  • 日期:2 Jul 2025
  • 作者:Marlowe
  • Ubuntu 24

默认SSM Agent以root运行,因此,需要在root主目录下创建配置文件。也可以使用变量的方式。快速部署SSM Agent

默认Ubuntu映像已经封装了SSM Agent,启动它即可。直接在创建实例的时候,在用户数据中填入以下代码:

#!/bin/bash
# 创建用户凭据
sudo -s
mkdir /root/.aws
cat > /root/.aws/credentials << EOF
[default]
aws_access_key_id = AKIA6D4***
aws_secret_access_key = H4hBblC0ObhDbfl***
EOF
# 启动Agent
sudo snap start amazon-ssm-agent

创建一个角色同时包含CloudWatch Agent和SSM Agent。

IAM控制台->角色->创建角色:

  • 授信实体:AWS服务
  • 使用案例:EC2
  • 权限策略:
    • CloudWatchAgentServerPolicy
    • AmazonSSMManagedInstanceCore
    • CloudWatchAgentAdminPolicy
  • 角色名称:CloudWatchAgentServerRoleWithSSM

EC2控制台 -> 选中实例 -> 操作 -> 安全 -> 修改IAM角色-> CloudWatchAgentServerRoleWithSSM -> 更新IAM角色。

SSM控制台->节点工具->队列管理器中,可以看到刚刚添加的实例。

!!! tip 如果是首次打开队列管理器,则可能需要在“账户配置->配置默认主机管理配置->启用默认主机管理配置”,这会让SSM自动创建一个符合权限的角色。点击配置即可。

SSM控制台->应用程序工具->Parameter Store->创建参数

  • 名称:CloudWatch-Linux
  • 层:标准
  • 类型:String
  • 数据类型:text
  • 值:将之前生成的config.json文件粘贴进来。CloudWatch Agent部署-手动部署
  • 创建参数
  • 转到节点工具->运行命令:
  • 命令文档:AWS-ConfigureAWSPackage
  • 文档版本:运行时的最新版本
  • 命令参数:
    • Action:Install
    • Installation Type:Uninstall and reinstall
    • Name:AmazonCloudWatchAgent
    • Version:latest
  • 目标->手动选择实例
  • 运行

在目标与输出中观测命令下发的状态。

转到节点工具->运行命令:

  • 命令文档:AmazonCloudWatch-ManageAgent
  • 命令参数:
    • Action:configure
    • Model:ec2
    • Optional Configuration Source:ssm
    • Optional Configuration Location:CloudWatch-Linux
      • (Parameter Store参数库的参数名称)
    • Optional Restart:Yes
  • 目标:手动选择实例

一开始在创建实例的时候,在用户数据中创建了凭据文件,现在让它生效。

转到节点工具->运行命令:

  • 命令文档:

转到节点工具->运行命令

  • 命令文档:AWS-RunShellScript
  • 命令参数:
cd /opt/aws/amazon-cloudwatch-agent/etc/
sudo sed -i '$a\shared_credential_file = "/root/.aws/credentialscredentials"' common-config.toml

!!! warning 遇到了下发任务的bug,错误显示平台类型为Windows,但是其实实例是Ubuntu。暂时终止实验,日期 2 Jul 2025

方法2-上传到SSM的参数仓库(二选一)

Section titled “方法2-上传到SSM的参数仓库(二选一)”

可以跟随配置向导上传到SSM参数仓库,或者手动上传配置文件到参数仓库。

你希望将配置文件存储到哪个参数仓库下?(如果使用AWS的策略的话,将以AmazonCloudWatch-作为命名前缀。)

如果选择上传,则跟随步骤继续往下走。需要准备访问密钥。上传成功后,在ssm->应用程序工具->Parameter Store下就可以看到。

What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-linux]

尝试获取从EC2的默认区域获取元数据。检测到默认区域,你希望将配置文件存储在这个区域吗?选择你希望的区域。

Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesWhich region do you want to store the config in the parameter store?
default choice: [ap-southeast-5]

请输入访问密钥和访问密钥密码

Please provide credentials to upload the json config file to parameter store.
AWS Access Key:
AWS Secret Key:

程序已经成功将配置文件推送到AmazonCloudWatch-Linux参数仓库。程序退出。

Successfully put config to parameter store AmazonCloudWatch-linux.
Program exits now.

SSM控制台->应用程序工具->Parameter Store。可以看到AmazonCloudWatch-linux命名的参数集。

写入到 Parameter Store 的权限提供了广泛的访问。此角色不应附加到您的所有服务器,只有管理员才能使用它。在创建代理配置文件并将其复制到 Parameter Store 后,应将该角色从实例中分离并改用 CloudWatchAgentServerRole