2017-08-17 13 views
0

こんにちは私は、ラムダがS3のファイルアクセス権を持つ役割を果たしているにもかかわらず、S3からファイルを読み込めない以下のラムダ(python3.6)を持っています(IAMポリシー以下)。AWSラムダがS3からファイルを取得できない

Lambdaは単にS3からファイルを取得し、一時的な場所に書き込もうとします。しかし、それはs3.Bucket()を呼び出してブロックされ、タイムアウトになります(分単位のタイムアウトがあっても)。

本当に奇妙なのは、例外なくタイムアウトしていて、何らかの種類の許可エラーでs3.Bucket()への呼び出しを拒否していないということです。

これはかなり基本的なものですが、私はこれを分類することができません。役割があることを

import boto3 
from botocore import exceptions 

def lambda_handler(event, context): 
    key = event['image'] 
    bucket = event['bucket'] 
    tempfile = '/tmp/%s-%s' % (bucket, key) 
    print('(p) bucket: %s::%s' % (bucket, key)) 
    print('(p) tempfile: %s' % tempfile) 
    s3 = boto3.resource('s3') 
    print('(p) resource intiialized') 
    try: 
    b = s3.Bucket(bucket) 
    print('(p) bucket info: %s [%s]' % (b.name, b.creation_date)) 
    b.download_file(prefixed_key, tempfile) 
    print('(p} file downloaded to %s' % tempfile) 
    except exceptions.ParamValidationError as e: 
    return {"statusCode": 400, "body": 'ParamValidationError: [%s]' % e} 
    except exceptions.ClientError as e: 
    message = '[%s]: [%s]' % (e.response['Error']['Code'], e.response['Error']['Message']) 
    return {"statusCode": e.response['ResponseMetadata']['HTTPStatusCode'], "body": message} 
    print('(p) image downloaded from s3 and stored at: %s' % tempfile) 
    return None 

IAMポリシーは次のとおりです。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::my_bucket", 
       "arn:aws:s3:::my_bucket/*" 
      ] 
     } 
    ] 
} 

例ログ:

22:42:43 
START RequestId: 61c60167-839d-11e7-97b1-a772bbde2609 Version: $LATEST 
START RequestId: 61c60167-839d-11e7-97b1-a772bbde2609 Version: $LATEST 
22:42:43 
(p) bucket: my_bucket::my_key 
22:42:43 
(p) tempfile: /tmp/my_bucket/my_key 
22:42:43 
(p) resource intiialized 
22:43:13 
END RequestId: 61c60167-839d-11e7-97b1-a772bbde2609 
END RequestId: 61c60167-839d-11e7-97b1-a772bbde2609 
+0

ラムダ関数自体がタイムアウトしていますか?機能のタイムアウトをデフォルトの3秒から増やしましたか?送信ネットワーク接続がないVPCで動作していますか? – jarmod

+0

関数のタイムアウトを2分に設定しました。ラムダ自体がタイムアウトします。説明するためにいくつかのログ出力を追加しました。 –

+0

例外メッセージの詳細は何ですか? 「イメージをダウンロード」というメッセージが表示されないので、その前に関数が返されている必要があります。そのシーケンスの唯一の戻り値は例外節にあります。 –

答えて

0

問題はVPCの設定ミスに絞られました。 VPCの外で動作するように設定しただけで、今は必要なくなりました。

関連する問題