我在 Python 中使用 Lambda 函数在 Windows 机器上执行命令时遇到问题ssm.send_command。此 Lambda 函数应在 Windows 机器上执行简单的命令:
import boto3
ssm = boto3.client('ssm')
region = 'us-east-1'
instances = ['i-XXXXXXXXXXXXX']
def lambda_handler(event, context):
response = ssm.send_command(
InstanceIds=instances,
DocumentName='AWS-RunPowerShellScript',
DocumentVersion='$DEFAULT',
DocumentHash='2142e42a19e0955cc09e43600bf2e633df1917b69d2be9693737dfd62e0fdf61',
DocumentHashType='Sha256',
TimeoutSeconds=123,
Comment='string',
Parameters={
'commands': [
# 'query user'
'mkdir test-dir'
]
},
MaxErrors='1',
CloudWatchOutputConfig={
'CloudWatchLogGroupName': 'WindowsLogs',
'CloudWatchOutputEnabled': True
}
)
print response
此 L 函数的执行角色是
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand"
],
"Resource": [
"arn:aws:ssm:*:*:document/*"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand"
],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:*"
]
},
{
"Action": [
"iam:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
我还添加了策略:
AmazonEC2FullAccess
AmazonEC2RoleforSSM
AmazonSSMManagedInstanceCore
CloudWatchLogsFullAccess
AmazonSSMFullAccess
AmazonSSMAutomationRole
AmazonSSMMaintenanceWindowRole
对于 EC2,未分配任何角色
问题:我没有看到在 Windows 服务器上创建了文件夹"test-dir"。请您帮助我确定缺少什么,或者如何配置 Lambda 函数以执行命令并将结果发送到 CloudWatch。
谢谢。
将AmazonSSMFullAccess
策略分配给实例,否则它将不起作用。请确保在更改后重新启动实例。
如果这不起作用:
- 将
try
和except
块添加到代码中以检查错误所在。- 检查您的实例上是否安装了 SSMAgent(连接到它,打开 PowerShell 并执行
Restart-Service AmazonSSMAgent
(。
感谢您@fsinis90的建议。
我尝试了它们,并将此类策略添加到我的实例角色中:
- AWSHealthFullAccess
- AmazonEC2RoleforSSM
- AWSConfigUserAccess
- AmazonSSMFullAccess
- CloudWatchReadOnlyAccess
它有帮助。