Как мне запустить две команды в лямбда-функции

#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 с использованием лямбда-выражения