Лямбда-функция не добавляет правило в группу безопасности

У меня есть этот код Python 3.7, который также работает с моего локального компьютера. Это код моей лямбда-функции. Однако, когда я тестирую его в AWS, он не добавляет входящее правило в группу безопасности. Я хотел бы помочь в том, чтобы заставить его работать. Опять же, когда я запускаю его с моего локального компьютера, он работает.

    import boto3
    
    ec2 = boto3.client('ec2')
    
    def modify_sg_add_rules(event, context):
            response = ec2.authorize_security_group_ingress(
            GroupName='boto3-sg',
            IpPermissions=[
                { 
                    'FromPort': 1521,
                    'IpProtocol': 'tcp',
                    'IpRanges': [
                        {
                            'CidrIp': '12.345.67.890/32',
                            'Description': 'My home IP',
                        },
                    ],
                    'ToPort': 1521,
                },
                ],
                DryRun=False
            ) #closes response
            return response

#if __name__ == '__main__':
#    modify_sg_add_rules()

Это разрешение в политике, привязанной к роли:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Resource": "*"
        }
    ]
}

Пожалуйста, помогите мне! Спасибо! --Вилли

Разрешения правильные. Можете ли вы показать реальный лямбда-код, а не ваш скрипт на локальной рабочей станции? Кроме того, проверяли ли вы журналы CloudWatch на наличие ошибок?

Marcin 21.12.2020 06:57

Выше приведен фактический лямбда-код. Спасибо!

Willie 21.12.2020 07:22

Я вижу, обработчик modify_sg_add_rules. Код и разрешения правильные. Сидр '12.345.67.890/32' неправильный, но я думаю, что это только для ТАК. Вы проверяли журналы CW?

Marcin 21.12.2020 07:24

Сидр как раз в том, что я не хотел размещать там реальный домашний IP. Этот сидр поддельный. CloudWatch ошибок не показывает. Вот что есть в CloudWatch: START RequestId: ff3f0f2f-9c9a-4d07-9f54-50527a88a55f Версия: $LATEST 2020-12-21T01:20:43.057-05:00 Функция загрузки 2020-12-21T01:20:43.060-05: 00 значение1 = значение1 2020-12-21T01:20:43.060-05:00 значение2 = значение2 2020-12-21T01:20:43.060-05:00 значение3 = значение3 2020-12-21T01:20:43.061-05:00 КОНЕЦ RequestId: ff3f0f2f Копировать ОТЧЕТ RequestId: ff3f0f2f Продолжительность: 1,56 мс Продолжительность выставления счета: 2 мс

Willie 21.12.2020 07:26

Это имя обработчика в настройках времени выполнения: lambda_function.lambda_handler

Willie 21.12.2020 07:30

В вашем коде нет функции lambda_handler.

Marcin 21.12.2020 07:32

Да вы правы. Однако я имел в виду именно название в настройках Runtime, а не сам код функции. Мне просто интересно, имеет ли это какое-то отношение к тому, что код не делает то, что должен делать.

Willie 21.12.2020 07:37

AWS попытается вызвать метод lambda_handler. У вас нет такого метода, поэтому он не может работать.

Marcin 21.12.2020 07:41

Я думаю, что это та часть, которую я не знаю, как сделать: добавление метода lambda_handler.

Willie 21.12.2020 07:45

Просто переименуйте modify_sg_add_rules в lambda_handler.

Marcin 21.12.2020 07:48

Да! Это сделало это! Также хотелось бы отметить, что после переименования функции сmodify_sg_add_rules на lamdba_function мне также пришлось нажать на Deploy. Даже после изменения имени функции на lambda_function она не работала, пока я не нажал Deploy. Большое спасибо, Марчин. Оно работает!

Willie 21.12.2020 08:10

Нет, я не против. Пожалуйста, продолжайте и предоставьте ответ для дальнейшего использования. Если есть что-то, что я должен сделать, например, чтобы убедиться, что вы получите признание за помощь мне в этом, пожалуйста, дайте мне знать. Я не уверен, как это работает здесь. Спасибо!

Willie 21.12.2020 08:14

Спасибо. Вы можете принять это, нажав кнопку «галочка» под кнопками «за»/«против».

Marcin 21.12.2020 08:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
13
171
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На основании комментариев.

Проблема была вызвана использованием неправильного имени для обработчика лямбда-функции. Вместо modify_sg_add_rules должно быть lambda_handler, которое является именем по умолчанию для обработчика.

Таким образом, решением было переименовать modify_sg_add_rules в lambda_handler. Альтернативой является изменение имени обработчика по умолчанию на modify_sg_add_rules.

Другие вопросы по теме