2016-09-29 2 views
9

В целом, я довольно смущен использованием AWS Lambda в VPC. Проблема заключается в том, что Lambda отключается, пытаясь получить доступ к ведро S3. Решение, похоже, является конечной точкой VPC.Доступ AWS S3 от Lambda внутри VPC

Я добавил функцию Lambda в VPC, чтобы он мог получить доступ к базе данных RDS, которая не показана в коде ниже, но функциональна. Однако теперь я не могу получить доступ к S3 и любой попытке сделать так много времени.

Я попытался создать конечную точку VPC S3, но ничего не изменилось.

VPC Конфигурация

Я использую простой VPC созданный по умолчанию всякий раз, когда я первый сделал экземпляр EC2. Он имеет четыре подсети, все созданные по умолчанию.

VPC маршрута Таблица

_Destination - Target - Status - Propagated_ 

172.31.0.0/16 - local - Active - No 

pl-63a5400a (com.amazonaws.us-east-1.s3) - vpce-b44c8bdd - Active - No 

0.0.0.0/0 - igw-325e6a56 - Active - No 

Simple S3 Скачать Lambda:

import boto3 
import pymysql 
from StringIO import StringIO 

def lambda_handler(event, context): 
    s3Obj = StringIO() 

    return boto3.resource('s3').Bucket('marineharvester').download_fileobj('Holding - Midsummer/sample', s3Obj) 
+2

Конечные точки VPC S3 требуют конфигурации таблицы маршрутов и конфигурации политики безопасности. Вам нужно будет показать, как вы настроили эти параметры, если вам нужна помощь в этом. Документация находится здесь: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html В качестве альтернативы вы можете добавить NAT-шлюз в VPC, который даст функции Lambda доступ ко всем вне VPC , а не только сервис S3. –

+0

Это проблема конфигурации vpc. настройте любой sbunet assosiatio с помощью nat gateway на таблице маршрутов. Вы все еще ищете проблему? –

+0

Я добавил некоторую информацию о конфигурации VPC. Я подумал, что это будет проблема, но VPC в значительной степени является черным ящиком для меня. Я не знаю, что проверить с ним, чтобы увидеть, что может быть неправильно настроено. – noobiemcfoob

ответ

1

Причиной моего вопроса была не правильной конфигурации Outbound Rules моей группы безопасности. В частности, мне нужно было добавить правило исходящего исходящего трафика с назначением pl-XXXXXXXX (услуга S3. Фактическое значение было предоставлено консолью AWS).

+3

Можете ли вы привести пример, как это сделать, так как даже я столкнулся с одной проблемой – Lajpat

+0

«pl-xxx» выглядит как префиксный список, как описано здесь: http: //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html # vpc-endpoints и можно найти в командной строке с 'aws ec2 describe-prefix-lists'. –

+0

В конце концов, я просто создал группу безопасности только для этой лямбда-функции: 'aws ec2 create-security-group -group-name my-lambda -description 'Удачи' --vpc-id vpc-123456' Я применил этой группы и никого другого. Правила выхода - единственные, что имеет значение. Если вы ничего не дадите, все разрешено. Я был не очень доволен этим, но код был небольшим и проверялся, и я не мог заставить жесткий контроль работать. Если код будет более сложным, мне придется пересмотреть это. –

4

С помощью boto3 URL-адреса S3: виртуальный по умолчанию, который затем требует доступа к Интернету для решения определенных URL-адресов региона. Это вызывает зависание функции лямбда до истечения времени ожидания.

Для решения этой проблемы требует использования Config объекта при создании клиента, который говорит boto3 создать тракту на основе URLs S3 вместо:

import boto3 import botocore.config 

client = boto3.client('s3', 'ap-southeast-2, config=botocore.config.Config(s3={'addressing_style':'path'})) 

Обратите внимание, что область в вызове должна быть область который вы развертываете лямбда и конечная точка VPC.

Тогда вы сможете использовать префикс pl-xxxxxx для конечной точки VPC в группе безопасности Lambda и по-прежнему обращаться к S3.

Работает CloudFormation script, что демонстрирует это. Он создает ведро S3, лямбда (которое помещает записи в ведро), связанное с VPC, содержащим только частные подсети и конечную точку VPC, и необходимые роли IAM.

+1

Спасибо за это объяснение !! Я так рассердился. – Mat

Смежные вопросы