GOOGLE ADS

суббота, 9 апреля 2022 г.

AWS CDK — создание роли условно в лямбда-функции

Я пытаюсь создать функцию Lambda в Python, используя AWS CDK. Проблема в том, что свойство роли этой функции исходит из входного параметра. Если значением входного параметра является ARN, то он должен использовать его при создании лямбды. Если значение входного параметра представляет собой пустую строку, то явно создайте новую роль и назначьте разрешения. Я смог заставить это работать, назначив фиктивную роль arn, а затем назначив ее снова.

myLambdaFunction = _lambda.CfnFunction(self, 
id = "myFunction",
function_name = "myLambdaFunction",
description = My Lambda Function",
memory_size = 1024,
timeout = 30,
vpc_config=_lambda.CfnFunction.VpcConfigProperty(
security_group_ids=["sg-00000000000000000"],
subnet_ids=["subnet-00000000"]
),
runtime = "PYTHON_3_9",
handler = "lambda-handler.main",
code=_lambda.S3Code(
bucket=my_lambda_code_bucket,
key=inputParams.myLambdaFunctionPackage
),
role = "arn:aws:iam::111111111111:role/Lambda-Role-DUMMY"
)
myLambdaFunction.node.default_child.add_property_deletion_override("Role")
myLambdaFunction.node.default_child.add_property_override(
"Role",
cdk.Fn.condition_if(
"createrolecondition",
my_lambda_role.role_arn,
RoleARNFromInputParameter
)
)

Это сработало нормально.

Однако проблема началась, когда я добавил источник событий в эту лямбда-функцию. Он автоматически пытается создать политику, используя фиктивную роль 11111.

myLambdaFunction.add_event_source(
_lambda_event_source.SqsEventSource(
my_queue,
batch_size=10
)
)

Если я запускаю синтезатор cdk после добавления источника событий, он автоматически добавляет новую политику SQS и разрешает доступ SQS к этой лямбде, и у него есть этот фиктивный Arn, которого даже не существует.

Пожалуйста, предложите, есть ли лучший способ использовать условие при настройке роли при создании лямбда.


Решение проблемы

Требование использовать параметры CloudFormation (разрешение времени развертывания) усложняет CDK, который оптимизирован для разрешений времени синтеза. Чтобы поддерживать условность параметра, вы должны повторить шаблон переопределения свойства escape-hatch из OP, чтобы внедрить CfnCondition везде, где появляется значение параметра.

Одним из таких случаев является добавление источника событий SQS в Functionцель. CDK услужливо предоставляет разрешения на синтезирование с помощью this.queue.grantConsumeMessages(target);( github source ), что, как вы отметили, проблематично. Поэтому вам нужно будет ввести еще один CfnConditionв сгенерированный ресурс политики. Вы также можете подключить цель события вручную и создать свои собственные разрешения с нуля, но это не кажется проще.

Есть ли способ лучше? Избегайте параметров:

Как правило, мы не рекомендуем использовать параметры AWS CloudFormation с AWS CDK. В отличие от значений контекста или переменных среды, которые являются обычным способом передачи значений в ваши приложения AWS CDK без их жесткого кодирования, значения параметров недоступны во время синтеза и поэтому не могут быть легко использованы в других частях вашего приложения AWS CDK, особенно для контрольный поток.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...