Amazon web services 如何将Cloudwatch输出添加到EC2上的runShellScript文档中?

Amazon web services 如何将Cloudwatch输出添加到EC2上的runShellScript文档中?,amazon-web-services,amazon-ec2,amazon-cloudwatch,ssm,Amazon Web Services,Amazon Ec2,Amazon Cloudwatch,Ssm,我在EC2上有一个python脚本,它需要每天运行,而不需要任何人手动启动。我当前的设置使用计划的Lambda函数将SSM文档作为命令发送到EC2。SSM文档包含一个简短的“runShellScript”命令来运行python脚本。(SSM文档和缩写lambda函数见下文)。这个过程很好 问题是我需要将日志流式传输到CloudWatch。我知道CloudWatch可以检索EC2上的日志文件;但是,我希望Cloudwatch直接从标准输出(stdout)捕获日志,而不是获取日志文件 当我通过AWS

我在EC2上有一个python脚本,它需要每天运行,而不需要任何人手动启动。我当前的设置使用计划的Lambda函数将SSM文档作为命令发送到EC2。SSM文档包含一个简短的“runShellScript”命令来运行python脚本。(SSM文档和缩写lambda函数见下文)。这个过程很好

问题是我需要将日志流式传输到CloudWatch。我知道CloudWatch可以检索EC2上的日志文件;但是,我希望Cloudwatch直接从标准输出(stdout)捕获日志,而不是获取日志文件

当我通过AWS UI的“run Command”部分手动运行SSM文档时,它会将其发送到Cloudwatch,因为我直接将Cloudwatch配置为run命令启动的一部分。但是,我看不到任何地方可以将Cloudwatch配置为文档的一部分

如何调整SSM文档(或此过程的任何部分)以将日志流式传输到CloudWatch?

如果有帮助的话,我愿意改变文档中的模式。我已经查阅了SSM参数文档,但没有找到答案

以下是Lambda函数的相关部分:

def lambda_handler(event, context):

    # Execute the script
    ssm = boto3.client('ssm', region_name=region)
    ssm_response = ssm.send_command(InstanceIds=instances, DocumentName='CustomRunScript', Comment='Starting init script from lambda prod')
    print('SSM response is: ', ssm_response)

这是我的SSM文档:

{
  "schemaVersion": "1.2",
  "description": "Custom Run Script",
  "parameters": {},
  "runtimeConfig": {
    "aws:runShellScript": {
      "properties": [
        {
          "id": "0.aws:runShellScript",
          "runCommand": [
            "/usr/bin/python3 /home/app/init.py"
          ]
        }
      ]
    }
  }
}

我想您正在寻找
CloudWatchOutputConfig

def lambda_handler(event, context):
    # Execute the script
    ssm = boto3.client('ssm', region_name=region)
    ssm_response = ssm.send_command(
        InstanceIds=instances,
        DocumentName='CustomRunScript',
        Comment='Starting init script from lambda prod',
        CloudWatchOutputConfig={
            'CloudWatchLogGroupName': 'some-group-name',
            'CloudWatchOutputEnabled': True,
        },
    )
    print('SSM response is: ', ssm_response)
使用Run命令发送命令时,可以指定要将命令输出发送到的位置。默认情况下,Systems Manager仅返回命令输出的前2500个字符。如果要查看命令输出的完整详细信息,可以指定Amazon简单存储服务(Amazon S3)存储桶。或者您可以指定Amazon CloudWatch日志。如果指定CloudWatch日志,Run命令会定期将所有命令输出和错误日志发送到CloudWatch日志。您可以近实时地监视输出日志,搜索特定短语、值或模式,并基于搜索创建报警

注意:您需要为Lambda提供适当的IAM权限才能访问日志组。下面的参考中列出了这些权限