Я использую 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"]
Кто-нибудь знает, что может быть не так или где я могу посмотреть журнал в моем кластере?