Хотя это можно было бы сделать, 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
})