Как добавить вывод Cloudwatch в документ RunShellScript на EC2? - PullRequest
0 голосов
/ 28 января 2020

У меня есть сценарий 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"
          ]
        }
      ]
    }
  }
}

Ответы [ 2 ]

1 голос
/ 28 января 2020

Я думаю, что вы ищете 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)
0 голосов
/ 28 января 2020

Когда вы отправляете команду с помощью команды «Выполнить», вы можете указать, куда вы хотите отправить вывод команды. По умолчанию системный менеджер возвращает только первые 2500 символов вывода команды. Если вы хотите просмотреть полную информацию о выводе команды, вы можете указать корзину Amazon Simple Storage Service (Amazon S3). Или вы можете указать Amazon CloudWatch Logs. Если вы укажете «Журналы CloudWatch», «Команда запуска» периодически отправляет все выходные данные команд и журналы ошибок в «Журналы CloudWatch». Вы можете отслеживать выходные журналы практически в реальном времени, искать определенные c фразы, значения или шаблоны и создавать аварийные сигналы на основе поиска.

Обратите внимание, что вам нужно будет предоставить надлежащие разрешения IAM для лямбда-доступа к журналу группы. Эти разрешения перечислены в ссылке ниже.

См. Настройка журналов Amazon CloudWatch для команды запуска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...