У меня есть сценарий python на EC2, который должен запускаться ежедневно, и никто не запускает его вручную. Моя текущая установка использует запланированную лямбда-функцию для отправки документа SSM в качестве команды на EC2. Документ SSM содержит короткую команду «runShellScript» для запуска сценария python. (см. ниже документ SSM и сокращенную лямбда-функцию). Этот процесс работает нормально.
Проблема в том, что мне нужны журналы для потоковой передачи в CloudWatch. Я знаю, что CloudWatch может получать файлы журналов, которые находятся на EC2; Однако я хочу, чтобы Cloudwatch захватывал журналы непосредственно из стандартного вывода (стандартный выход), а не из файлов журналов.
Когда я вручную запускаю документ SSM через раздел «Выполнить команду» пользовательского интерфейса AWS он красиво отправляет его в Cloudwatch, поскольку я непосредственно настраиваю CloudWatch как часть запуска команды запуска. Однако я нигде не вижу, чтобы настроить Cloudwatch как часть документа.
Как настроить документ SSM (или любой другой элемент этого процесса) для потоковой передачи журналов в CloudWatch?
Я открыт для изменения schemaVersions в документе, если это поможет. Я уже просмотрел документацию по параметрам SSM для этого, но не смог найти там ответа.
Вот соответствующий раздел лямбда-функции:
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"
]
}
]
}
}
}