Можно ли передать данные из AWS Lambda в программу Java, расположенную в образе Docker? - PullRequest
0 голосов
/ 12 февраля 2019

Поскольку AWS Lambda имеет 15-минутный тайм-аут, мы работаем над созданием длительно работающей программы, аналогичной Lambda.Для этого мы решили использовать AWS Lambda, ECS Fargate и ECR, в которых находится образ Docker.

Flow: S3 PUT event ----> Lambda ---> ECS Fargate ---> Run Docker Container

Поскольку Lambda запускается событием S3, метод Lambda Handler будет вызываться с параметрами S3Event и Context,Теперь мне нужно получить доступ к данным S3Event и Context из java-программы, находящейся в образе Docker.Есть ли способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Хотя это можно было бы сделать, ECS / Fargate, как правило, предназначен для долго работающих приложений.

Я считаю, что лучшим решением будет AWS Batch , которое позволяет вамочередь заданий и запуск параллельных контейнеров для обработки этих заданий.Когда работа закончена, контейнер закрывается.В зависимости от того, как вы сконфигурируете среду, базовый экземпляр EC2 также может оставаться запущенным или выключенным.

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

import boto3
import json

s3 = boto3.resource('s3')
batchClient = boto3.client('batch')

def lambda_handler(event, context):
    for rec in event["Records"]:
        s3_bucket = rec["s3"]["bucket"]["name"]
        s3_key = rec["s3"]["object"]["key"]
        print("processing s3://" + s3_bucket + "/" + s3_key)

        # see https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/batch.html#Batch.Client.submit_job
        response = batchClient.submit_job(
                    jobName='lambda-invocation-example',
                    jobQueue='first-run-job-queue',
                    jobDefinition='first-run-job-definition',
                    parameters={
                        's3_bucket': s3_bucket,
                        's3_key': s3_key
                    })
0 голосов
/ 12 февраля 2019

Lambda может подключаться к докеру так же, как любой другой код подключается к докеру.Лямбда может обнаружить сервис докера, используя сервис обнаружения, а затем извлечь данные из докера.

...