#lambda
#лямбда
Вопрос:
В настоящее время у меня есть этот скрипт в моей лямбда-функции
#-*- coding: utf-8 -*-
import time
import json
import boto3
region=['ap-southeast-1']
instance1 = 'i-XXXXXXXXXX'
instance2 = 'i-XXXXXXXXXX'
def lambda_handler(event, context):
# boto3 client
client = boto3.client('ec2')
ssm_client = boto3.client('ssm')
response = ssm_client.send_command(InstanceIds=[instance1],DocumentName="AWS-RunShellScript",Parameters={'commands': ['aws s3 sync cd/var/www/html s3://bucketname/']}, )
response2 = ssm_client.send_command(InstanceIds=[instance2],DocumentName="AWS-RunShellScript",Parameters={'commands': ['aws s3 sync s3://bucketname /var/www/html/']}, )
command_id = response['Command']['CommandId']
command_id2 = response2['Command']['CommandId']
time.sleep(60)
output = ssm_client.get_command_invocation(CommandId=command_id,InstanceId=instance1,)
output2 = ssm_client.get_command_invocation(CommandId=command_id2,InstanceId=instance2,)
print(output)
print(output2)
return {
'statusCode': 200,
'body': json.dumps('Done!')
}
результат успешный. но они выполняют команду одновременно. Я хочу, чтобы вторая команда выполнялась после завершения синхронизации с s3.
То, что я хочу сделать, это:
instance1> s3
после завершения синхронизации
s3 > инстанс2
причина, по которой я хочу это сделать, потому что instance1 не может синхронизироваться с instance2 по соображениям безопасности.
Ответ №1:
В таком сценарии, когда у вас есть последовательность выполнения, я бы сказал, что вы можете использовать пошаговые функции AWS:
1- создайте две отдельные лямбда-функции, одну для instance1> s3, а вторую для s3> instance2.
2. создайте пошаговые функции AWS для запуска бессерверного рабочего процесса, который координирует две функции AWS Lambda.
В этом примере показано, как создать функцию step state с использованием лямбда-выражения