私は元のバケットの 'root'のイメージでうまく動作している私の最初のAWS Lambdaイメージオプティマイザスクリプトを作成しています。AWS Lambda Pythonのフォルダ処理
私は3つのバケツを持っています。 'mybucket'には、サイズを変更したいオリジナルの画像が保存されます。私はそれを見ているpythonラムダ関数を持っている 'mybucket-photos'にそれらをコピーすることに決めました。 Lammbda関数は入力された写真を最適化し、 'mybucket-photosresized'に保存します。
しかし、mybucketの写真にmybucketの内容をコピーしようとすると、私はpythonスクリプトファイルの処理とキーの 'サブフォルダ'部分に関して失敗します。
例失敗:
そのようなファイルまたはディレクトリ:「/ tmpに/ 91979758-51b3-44df-b2b1-d9eeddeb0802saddles /親指/ 27dfahl/16-5-DK-馬場馬術サドルの売却/ saddle_photo02_300 .3a38de5F ':IOError
私の疑問は、スラッシュを含むフォルダ名が問題を引き起こしているということです。私は 'フォルダ'がキーの一部であることを理解しています。
ちなみに、作成中のレコード、バケツ、キーに関して、ハンドラメソッドが何をしているのか分かりません。私の素朴な本能は、何とか置き換えて、それを元に戻すことです。
のpythonは次のとおりです。
from __future__ import print_function
import boto3
import os
import sys
import uuid
from PIL import Image
import PIL.Image
s3_client = boto3.client('s3')
def resize_image(image_path, resized_path):
with Image.open(image_path) as image:
image.save(resized_path,optimize=True)
def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
upload_path = '/tmp/resized-{}'.format(key)
s3_client.download_file(bucket, key, download_path)
resize_image(download_path, upload_path)
s3_client.upload_file(upload_path, '{}resized'.format(bucket), key)
いただきました。このスクリプトで「フォルダ」を処理するための最良の方法は?
私は最終的なコードに追加しました。 –