1

我只想知道是否有其他方法可以解决这个问题:

我有一个 AWS 多账户设置。EC2 将对所有帐户进行监控,当通过 sns 触发警报时,将发送一封邮件。对于使用 Windows Server 2016 及更高版本、Amazon Linux 和 Ubuntu 16.04 和 18.04 的所有 EC2,SSM 代理已预安装。这样我就可以通过 System Manager Run Command 将 CloudWatch 代理推送到 EC2 的每个 AWS 账户。

我想知道是否有一种更简单的方法可以强制在 AWS 账户中部署的每个新 EC2 上安装 CloudWatch 代理,而无需在实例上手动或通过运行命令安装代理?

我正在考虑使用标签,例如:“IsMonitored”,并作为值真或假。例如,每天 17 点,Lambda 函数将遍历该帐户中的所有实例并搜索 IsMonitored = false,获取该实例 ID 并使用(boto3?)脚本推送该实例上的代理。这似乎很复杂,所以我想检查是否有其他简单的解决方案可以做到这一点。

提前致谢,

伊曼

4

2 回答 2

1

要在每个实例特定区域安装cloudwatch代理,您可以通过 shell 脚本实现。

方法是:

  • 手动工作是在参数存储中为两种实例类型创建一些默认配置文件 a. 对于窗户 b。基于 linux

在 shell 脚本中
针对特定区域

  1. ec2获取实例id列表的总数
  2. 检查平台哪种类型的机器正在使用基于 Windows 或 Linux 的
  3. 如果平台是 Windows,则从参数存储中添加 Windows 类型配置文件,否则添加Linux配置文件

获取平台名称:

platform=$(aws ec2 describe-instances --instance-ids <instance id> --query 'Reservations[*].Instances[*].[Platform]' --output text)

对于安装包:

aws ssm send-command --instance-ids <instance id> --document-name "AWS-ConfigureAWSPackage" --parameters "name=AmazonCloudWatchAgent,action=Install,installationType=Uninstall and reinstall"  --comment "Install CloudWatch Agent on EC2 Windows/Linux machine" 

开始CWagent

aws ssm send-command  --instance-ids $one_instance --document-name "AmazonCloudWatch-ManageAgent" --parameters "mode=ec2,optionalRestart=yes,optionalConfigurationSource=ssm,action=configure,optionalConfigurationLocation=AmazonLinuxCloudWatchAgentConfig"  --comment "Configure CloudWatch Agent on EC2 Linux machine"

如需更多参考,您可以使用此链接

于 2021-09-17T06:35:00.960 回答
0

一种更简单的方法是使用预烘焙的 AMI。首先,使用您使用的普通 AMI 启动 EC2。接下来,安装 CloudWatch 代理并创建映像。从现在开始,您可以使用预安装了 CloudWatch 代理的新 AMI 启动 EC2。

如果预烘焙的 AMI 不适合您,我建议使用像 Ansible 这样的基础架构即代码 (IaC) 工具来自动化安装过程。

于 2020-05-13T13:23:58.777 回答