Анализ аргументов, переданных из send_command системного менеджера aws

#aws-ssm

#aws-ssm

Вопрос:

У меня есть длительное задание, которое не может быть завершено в течение 15 минут лямбда. Итак, я решил использовать экземпляр EC2 worker для выполнения задания. Задание должно быть запущено из лямбда-функции. Я использую следующий код Python для отправки команды экземпляру EC2.

 ssm.send_command(
    InstanceIds=['*****'],
    DocumentName="AWS-RunShellScript",
    Parameters={'commands': [f'/home/ssm-user/get_cert_attributes.sh --doc_id={doc_id}']})
  

Вызывается сценарий оболочки. Однако я не могу проанализировать аргументы —doc_id . Я использую приведенный ниже блок кода для анализа аргумента. doc_id становится пустым. Любая помощь в этом отношении будет высоко оценена.

 #!/bin/bash
while [ "${1:-}" != "" ]; do
    case "$1" in
        "-d" | "--doc_id")
        shift
        doc_id=$1
        ;;
    esac
    shift
done
echo $doc_id
  

Ответ №1:

Я решил проблему, создав свой собственный документ ssm:

 schemaVersion: "2.2"
description: "Get document attributes"
parameters:
  docid:
    type: "String"
    description: "Document id to be processed"
mainSteps:
- action: "aws:runShellScript"
  name: "GetDocAttr"
  inputs:
    runCommand:
    - "/home/ssm-user/get_cert_attributes.sh --doc_id {{docid}}"
  

На стороне сценария оболочки мне пришлось использовать export doc_id для экспорта переменной среды, чтобы использовать ее в последующих дочерних сеансах.

 #!/bin/bash
while [ "${1:-}" != "" ]; do
    case "$1" in
        "-d" | "--doc_id")
        shift
        doc_id=$1
        ;;
    esac
    shift
done
echo $doc_id
export doc_id
  

Ответ №2:

Я могу запустить сценарий оболочки с такими аргументами. Вам не нужны все сообщения и другая информация, но она есть на всякий случай.

 commands = ['sudo -u ec2-user ./p1_consolidate.sh 0 1 0']
instanceid = 'i-0780a999exxxdxxx'
ssmc = boto3.client('ssm')
response_send = ssmc.send_command(
    DocumentName="AWS-RunShellScript",
    Parameters={'commands': commands,
                'workingDirectory': ['/home/ec2-user'],
                'executionTimeout': ['14400']},
    OutputS3BucketName='xxxxx-data-files-for-functions',
    OutputS3KeyPrefix='ssm-outputfiles-automation/',
    InstanceIds=[instanceid],
    ServiceRoleArn='arn:aws:iam::xxxxx6657583:role/SNS-Publish-SSM-Statuses',
    NotificationConfig={
                        'NotificationArn': 'arn:aws:sns:us-east-1:xxxxx6657583:your-sns',
                        'NotificationEvents': ['All'],
                        'NotificationType': 'Command'}
     

               )
  

p1_consolidate.sh хранится в каталоге /home/ec2-user/
Просто принимает три аргумента, отправленные с помощью команд, приведенных ниже. Затем файл python запускается с этими аргументами.

 s=$1
e=$2
q=$3

nohup python /home/ec2-user/code/mypythonfile.py -s $s -e $e -q $q amp;