Как опубликовать в SNS из Lambda в рамках VPC с использованием конечной точки VPC? - PullRequest
0 голосов
/ 04 мая 2018

Я установил VPC с 3 подсетями, чтобы иметь доступ к частному экземпляру RDS из моих функций Lambda. Лямбда-соединение RDS <-> работает нормально, но теперь я не могу публиковать в SNS.

Я обнаружил объявление о поддержке конечной точки VPC для SNS (включая этот пост https://aws.amazon.com/blogs/security/securing-messages-published-to-amazon-sns-with-aws-privatelink/) и добавил интерфейс конечной точки VPC со следующими свойствами:

Service name: com.amazonaws.eu-west-1.sns
VPC: same as Lambda functions and other services
Subnets: all included in my VPC (have also tested toggling them individually)
Security Groups: all VPC security groups selected

Все услуги находятся в регионе eu-west-1 . Я знаю, что код, который публикуется в SNS, является правильным, так как он работает при работе в среде без VPC. ARN, для которого я публикую, остался неизменным: arn:aws:sns:eu-west-1:962446592636:whatever.

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

1 Ответ

0 голосов
/ 05 мая 2018

У меня работает!

Я сделал следующее:

  • Создан раздел Amazon SNS и подписан на него
  • Создана Лямбда-функция AWS без конфигурации VPC, которая отправляет сообщение в тему SNS
  • Проверено лямбда-функция - получено сообщение
  • Создан VPC с двумя частными подсетями
  • Создана конечная точка службы для SNS в частных подсетях с группой безопасности, позволяющей Все TCP с 0.0.0.0/0 (для целей тестирования)
  • Изменена функция Lambda для использования частных подсетей
  • Проверено лямбда-функция - получено сообщение

Итак, все работало нормально. Мне не нужно было изменять лямбда-код.

Мой лямбда-код:

def lambda_handler(event, context):
    import boto3

    client = boto3.client('sns', region_name='ap-southeast-2')
    response = client.publish(
        TopicArn='arn:aws:sns:ap-southeast-2:123456789012:stack',
        Message='From Lambda'
        )

    return
...