Amazon AWS | Задача ECS не запускается при вызове из лямбды - PullRequest
0 голосов
/ 20 апреля 2020

Я использую Amazon Web Services и пытаюсь запустить определение задачи ECS в кластере, запущенном с лямбды. Определение задачи запускает контейнер, который должен изменить размер изображения, полученного через лямбду, а затем выполнить загрузку измененной версии того же изображения. Вот лямбда-определение, которое запускается при загрузке в корзину S3, отсюда я отправляю команду python в методе запуска задачи:

import json
import boto3

def run_fargate_task(img_name, img_resized_name):
    client = boto3.client('ecs', region_name='us-east-1')
    response = client.run_task(
        cluster='cloud-p2-cluster',
        launchType = 'FARGATE',
        taskDefinition='cloud-p2-task-definition',
        count = 1,
        platformVersion='LATEST',
        networkConfiguration={
            'awsvpcConfiguration': {
                'subnets': [
                    'subnet-1824f955',
                    'subnet-889d93d4',
                    'subnet-c40508a3',
                    'subnet-6a8a8244',
                    'subnet-71dd8c4f',
                    'subnet-3f07c031',
                ],
                'assignPublicIp': 'ENABLED'
            }
        },
        overrides={
            'containerOverrides': [
                {
                    'name': 'cloud-p2',
                    'command': [
                            'python',
                            'app.py',
                            img_name,
                            img_resized_name
                        ]
                },
            ],
        },
    )

    return str(response)

def lambda_handler(event, context):
    print(event)
    s3 = boto3.resource('s3')
    for record in event['Records']:   #Eventos de s3
        bucket = record['s3']['bucket']['name']
        file = record['s3']['object']['key']

        file_aux = file.split('.')
        img_resized_name = file_aux[0] + '-small.' + file_aux[1]

        resp = run_fargate_task(file, img_resized_name)

        print("File to process:" + file)
        print("Run task response: " + resp)
    return {
        'statusCode': 200,
        'body': resp
    }

А вот код моего изображения контейнера:

from PIL import Image
from resizeimage import resizeimage
import sys
import boto3
import json

#Bucket setup
s3 = boto3.client('s3') #.client('s3')
#download file
ext = sys_argv[1].split('.')
temp_file_name = ext[0] + '-tmp.' + ext[1] 
s3.download_file('cloud-p2-cubeta, sys_argv[1], temp_file_name)

with open(temp_file_name,'r+b') as f:
    with Image.open(f) as image:
        cover = resizeimage.resize_cover(image,[150,150])
        cover.save(sys.argv[2],image.format)
    s3.upload_fileobj(f, 'cloud-p2-cubeta', cover)

Вот код из Dockerfile, если он помогает, файл resize. sh содержит команду python, которая выполняет app.py, но она не должна быть релевантной, поскольку я посылаю команду переопределения из лямбды.

FROM python:3.6

RUN pip3 install boto3
RUN pip3 install python-resize-image

WORKDIR /app
COPY app.py /app/
COPY resize.sh /app/

VOLUME ["/app/images"]

Кто-нибудь знает, что может быть не так или где я могу посмотреть журнал в моем кластере?

...