我在使用Python中的ssm.send_command的Lambda函数在Windows机器上执行命令时遇到问题。这个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
块添加到您的代码中以检查错误是什么。Restart-Service AmazonSSMAgent
)。谢谢你@ fsinis90的推荐。
我尝试了它们,并且我将这些策略添加到我的实例的角色中:
它有帮助。