【发布时间】:2020-06-14 12:36:23
【问题描述】:
场景 1:我有以下架构和 lambda,它可以在 MQTT 代理(IoT-Core)中侦听事件(1),并可以检索数据并将其保存@987654326 RDS 中的@。 RDS 和 Lambda 都在同一个 VPC 内。这里的问题是 lambda 无法在 Broker 中发布回(3) 事务的结果。
场景 2:我有相同的 lambda,但它在 RDS VPC 之外。在此配置中,lambda 可以侦听 MQTT 代理 (IoT-Core) 内的事件 (1) 并发布回 (3)。问题是 lambda 无法在 RDS (2) 中保存数据。
我希望允许 lambda 在 Scenario-1 中的 MQTT 代理中发布。事实上,我不知道为什么 lambda 可能被代理中的事件触发但不允许发布回来如果 VPC 的原因也无法监听。
如何让 lambda 在 Scenario-1 中重新发布?
这是serverless.yml里面的配置:
lambdaRSDInsert:
name: ${self:provider.stage}-${self:custom.fnLambdaRSDInsert}
handler: fnLambdaRSDInsert.fnLambdaRSDInsert
events:
- iot:
name: ${self:custom.fnLambdaRSDInsert}
sql: "SELECT *, topic() AS topic FROM 'company/sys/cmd/fnLambdaRSDInsert/#' "
memorySize: 256
iamRoleStatementsName: ${self:provider.stage}-${self:custom.fnLambdaRSDInsert}-iamFnLambdaRSDInsert
iamRoleStatements:
- Effect: 'Allow'
Action:
- 'rds:*'
Resource: 'arn:aws:rds:${self:provider.region}:xxxxxxx:db:${file(env.yml):rdsMySqlCluster-${self:provider.stage}}'
- Effect: 'Allow'
Action:
- 'logs:CreateLogGroup'
- 'logs:CreateLogStream'
- 'logs:PutLogEvents'
- 'ec2:CreateNetworkInterface'
- 'ec2:DescribeNetworkInterfaces'
- 'ec2:DeleteNetworkInterfaces'
Resource: "*"
- Effect: "Allow"
Action:
- "iot:*"
Resource: '*'
vpc: ${file(env.yml):vpc-${self:provider.stage}}
environment:
rdsMySqlDb: ${file(env.yml):rdsMySqlDb-${self:provider.stage}}
rdsMySqlHost: ${file(env.yml):rdsMySqlHost-${self:provider.stage}}
rdsMySqlUsername: ${file(env.yml):rdsMySqlUsername-${self:provider.stage}}
rdsMySqlPassword: ${file(env.yml):rdsMySqlPassword-${self:provider.stage}}
MQTT_ENDPOINT: '${file(env.yml):mqttEndPoint}${self:provider.region}.amazonaws.com'
【问题讨论】:
标签: aws-lambda mqtt serverless amazon-vpc aws-iot