Я пытаюсь создать AWS Lambda с безсерверной структурой. Лямбда запускается с помощью правила темы AWS IoT. В случае сбоя выполнения правила я хочу выполнить действие по ошибке. Вся конфигурация должна осуществляться в serverless.yml .
Насколько я могу судить из документации , нет возможности описать errorAction
для события iot:
functions:
foobar:
events:
- iot:
errorAction: ?
Возможно определить ресурс Cloud Formation с ErrorAction
внутри serverless.yml :
resources:
Resources:
FoobarIotTopicRule1:
Type: AWS::IoT::TopicRule
Properties:
ErrorAction:
Republish:
RoleArn: arn:aws:iam::1234567890:role/service-role/iot_execution_role
Topic: FAILURE
Но тогда я не знаю, как связать ресурс, чтобы он действовал как триггер лямбда-функции.
functions:
foobar:
handler: index.handler
events:
- iot:
name: iot_magic_rule
sql: "SELECT * FROM 'my/dedicated/topic'"
enabled: true
sqlVersion: '2016-03-23'
resources:
Resources:
FoobarIotTopicRule1:
Type: AWS::IoT::TopicRule
Properties:
RuleName: iot_magic_rule
TopicRulePayload:
AwsIotSqlVersion: '2016-03-23'
RuleDisabled: false
Sql: "SELECT * FROM 'my/dedicated/topic'"
ErrorAction:
Republish:
RoleArn: arn:aws:iam::1234567890:role/service-role/iot_execution_role
Topic: FAILURE
При описанной выше конфигурации попытка развертывания в AWS не удалась, так как Cloud Formation пытается дважды создать правило темы IoT AWS. Один раз для определения в events
и один раз как определенный ресурс FoobarIoTTopicRule1
.
EDIT1
Определяя действие Lambda внутри ресурса IoTTopicRule, создает правило по назначению с действием Lambda и событием ошибки. К сожалению, правило не отображается как триггер в лямбде.