#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;