#amazon-web-services #aws-lambda #amazon-cloudformation #amazon-sns
#amazon-веб-службы #aws-lambda #aws-cloudformation #amazon-sns
Вопрос:
Я пытаюсь «заполнить» SG, который подключен к моему ALB, чтобы разрешить трафик из Cloudfront.
Этот ALB / CF dist создается с помощью Cloudformation. В настоящее время у меня есть функция Lambda, которая обрабатывает сообщения SNS из AmazonIpSpaceChanged. Однако, когда я создаю этот стек CF, это сообщение SNS должно быть запущено для первоначального заполнения SG.
Есть ли способ создать SNS-сообщение для запуска этой лямбда-функции? Я просмотрел пользовательские ресурсы, поддерживаемые SNS, но, похоже, это не сработало.
Ответ №1:
Я также лично столкнулся с этой проблемой. Мне не удалось заставить мой раздел SNS работать для запуска функции lambda. Однако я смог сделать это с помощью пользовательских ресурсов.
Всякий раз, когда лямбда-функция связана с пользовательским ресурсом в шаблоне CloudFormation, она вызывается во время создания этого пользовательского ресурса. Вам придется зависеть от ресурса cloudformation, в котором содержится код, потому что он не будет работать, если он запустится до создания функции lambda.
Комментарии:
1. В настоящее время я этим занимаюсь. Я создаю пользовательский ресурс с функцией, поддерживаемой lambda, которая использует python для ПОЛУЧЕНИЯ диапазонов ip. файл json, а затем обновите SGS этим извлеченным списком. ОДНАКО я бы предпочел сделать это по-другому, потому что эта лямбда-функция является почти дубликатом другой лямбда-функции, которая прослушивает SNS-сообщения из AWS для AmazonIpSpaceChanged.
2. Что ж, все ваши возможности уже перечислены здесь, вы можете выбрать из них свой яд, у каждого из них есть свои недостатки РЕДАКТИРОВАТЬ: По крайней мере, все возможности, о которых я знаю
3. Это своего рода то, о чем я беспокоюсь. Это странно, хотя, потому что есть пользовательский ресурс, поддерживаемый SNS, который, как я надеялся, выполнит это, но, хоть убейте, я не могу найти хорошую документацию по нему или примеры.
Ответ №2:
Почему бы не добавить правило в группу безопасности непосредственно из CloudFormation с помощью AWS::EC2::SecurityGroupIngress?
InboundRule:
Type: AWS::EC2::SecurityGroupIngress
Properties:
IpProtocol: tcp
FromPort: 0
ToPort: 65535
SourceSecurityGroupId:
Fn::GetAtt:
- XX_NEW_SECURITY_GROUP_XX
- GroupId
GroupId: sg-XX_EXISTING_GROUP_XX
Комментарии:
1. Я не знаю диапазоны IP-адресов до тех пор, пока не отправлю запрос GET в AWS на удаление диапазонов IP-адресов. файл json.
Ответ №3:
Одним из вариантов, который вы могли бы использовать, является функция уведомления, предлагаемая CloudFormation API: при вызове UpdateStack
вы можете предоставить список NotificationARNs
, который представляет собой список разделов SNS, которые получают уведомления о каждом изменении в вашем стеке, связанном с CloudFormation. Вы могли бы установить в разделе SNS уведомлений раздел SNS, на который вы подписались на свою функцию AWS Lambda. Это, конечно, работает, только если вы не создаете раздел SNS как часть вашего стека CloudFormation, вы не полагаетесь на содержимое сообщения SNS и вам просто нужно такое сообщение в качестве триггера, и если вы фильтруете сообщения SNS в своей функции Lambda, чтобы реагировать только на сообщения, которые важны для вас (например, выполнять обновления только при создании стека, а не при удалении стека).
Используя интерфейс командной строки AWS и его deploy
команду, указание ARN уведомления будет выглядеть следующим образом:
aws cloudformation deploy
--template-file your-template.yaml
--stack-name your-stack
--notification-arns arn:aws:sns:us-east-1:1234567890123456:yourtopic
Комментарии:
1. Я думал об этом маршруте, но по сути это «ручной» шаг в процессе создания среды с нуля.