Не могу скачать файл с S3 в AWS Lambda без ошибки HTTP

json amazon-s3 lambda

1182 просмотра

2 ответа

21 Репутация автора

Это мой код в AWS лямбда:

import boto3
def worker_handler(event, context):

s3 = boto3.resource('s3')
s3.meta.client.download_file('s3-bucket-with-script','scripts/HelloWorld.sh', '/tmp/hw.sh')
print "Connecting to "

Я просто хочу скачать файл, хранящийся на S3, но когда я запускаю код, программа просто запускается до истечения времени ожидания и ничего не печатает. Это файл журналов

START RequestId: 8b9b86dd-4d40-11e6-b6c4-afcc5006f010 Version: $LATEST
END RequestId: 8b9b86dd-4d40-11e6-b6c4-afcc5006f010
REPORT RequestId: 8b9b86dd-4d40-11e6-b6c4-afcc5006f010  Duration: 300000.12 ms  Billed Duration: 300000 ms  Memory Size: 128 MB Max Memory Used: 28 MB  
2016-07-18T23:42:10.273Z 8b9b86dd-4d40-11e6-b6c4-afcc5006f010 Task timed out after 300.00 seconds

I have this role in the this Lambda function, it shows that I have the permission to get file from S3
{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DeleteNetworkInterface"
        ],
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "arn:aws:logs:*:*:*"
    },
    {
        "Sid": "AllowPublicRead",
        "Effect": "Allow",
        "Action": [
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::*"
        ]
    }
]
}

Есть ли какие-то другие настройки, которые я пропустил? Или в любом случае я могу продолжить эту программу? Заранее спасибо.

Автор: Chien-Yu Chan Источник Размещён: 19.07.2016 12:08

Ответы (2)


0 плюса

916 Репутация автора

Согласно документации ваш код должен быть немного другим:

    import boto3

    # Get the service client
    s3 = boto3.client('s3')

    # Download object at bucket-name with key-name to tmp.txt
    s3.download_file("bucket-name", "key-name", "tmp.txt")

Также обратите внимание, что у Lambda эфемерная файловая структура, то есть загрузка файла на самом деле ничего не делает. Вы только что загрузили его, а затем Lambda закрылась и перестала существовать, вам нужно отправить его куда-нибудь после загрузки в Lambda, если вы хотите сохранить его.

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

Автор: cameck Размещён: 21.09.2016 06:28

0 плюса

120 Репутация автора

Как вы упомянули время ожидания, я бы проверил конфигурацию сети. Если вы проходите через VPC, это может быть вызвано отсутствием маршрута к Интернету. Это можно решить с помощью шлюза NAT или конечной точки S3 VPC. Видео ниже объясняет необходимую конфигурацию.

Представляем поддержку VPC для AWS Lambda

Автор: David Reis Размещён: 09.03.2017 02:25
Вопросы из категории :
32x32