У меня есть этот код 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": "*"
}
]
}
Пожалуйста, помогите мне! Спасибо! --Вилли
Выше приведен фактический лямбда-код. Спасибо!
Я вижу, обработчик modify_sg_add_rules
. Код и разрешения правильные. Сидр '12.345.67.890/32'
неправильный, но я думаю, что это только для ТАК. Вы проверяли журналы CW?
Сидр как раз в том, что я не хотел размещать там реальный домашний 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 мс
Это имя обработчика в настройках времени выполнения: lambda_function.lambda_handler
В вашем коде нет функции lambda_handler
.
Да вы правы. Однако я имел в виду именно название в настройках Runtime, а не сам код функции. Мне просто интересно, имеет ли это какое-то отношение к тому, что код не делает то, что должен делать.
AWS попытается вызвать метод lambda_handler
. У вас нет такого метода, поэтому он не может работать.
Я думаю, что это та часть, которую я не знаю, как сделать: добавление метода lambda_handler.
Просто переименуйте modify_sg_add_rules
в lambda_handler
.
Да! Это сделало это! Также хотелось бы отметить, что после переименования функции сmodify_sg_add_rules на lamdba_function мне также пришлось нажать на Deploy. Даже после изменения имени функции на lambda_function она не работала, пока я не нажал Deploy. Большое спасибо, Марчин. Оно работает!
Нет, я не против. Пожалуйста, продолжайте и предоставьте ответ для дальнейшего использования. Если есть что-то, что я должен сделать, например, чтобы убедиться, что вы получите признание за помощь мне в этом, пожалуйста, дайте мне знать. Я не уверен, как это работает здесь. Спасибо!
Спасибо. Вы можете принять это, нажав кнопку «галочка» под кнопками «за»/«против».
На основании комментариев.
Проблема была вызвана использованием неправильного имени для обработчика лямбда-функции. Вместо modify_sg_add_rules
должно быть lambda_handler
, которое является именем по умолчанию для обработчика.
Таким образом, решением было переименовать modify_sg_add_rules
в lambda_handler
. Альтернативой является изменение имени обработчика по умолчанию на modify_sg_add_rules
.
Разрешения правильные. Можете ли вы показать реальный лямбда-код, а не ваш скрипт на локальной рабочей станции? Кроме того, проверяли ли вы журналы CloudWatch на наличие ошибок?