我希望我的一些Lambda资源使用aws-sdk
的{{1}}函数推送到AWS IOT端点 - 其中endpoint是必需参数。
现在,我通过环境变量将端点URL传递给我的Lambda。但是,当放入SAM / CF模板时,我找不到检索IOT端点URL的方法,因此我可以简单地AWS.IotData({ endpoint: url })
。
浏览AWS resource type reference我没有找到任何与IOT端点对应的资源。
似乎IOT端点只能通过AWS控制台手动配置(启用/禁用),如下面的屏幕截图所示:
有关如何控制配置IOT端点或至少从SAM / CF模板中读取IOT URL的任何建议,而不使用!Ref
编写脚本吗?
答案 0 :(得分:5)
对于任何对CloudFormation Custom Resource解决方案感兴趣的人,我写了一个简单的Lambda和CF模板,为其他CF堆栈提供IOT端点地址。
app.controller('Test',function($scope){
$scope.first = true;
});
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
IotEndpointProvider:
Type: 'AWS::Serverless::Function'
Properties:
FunctionName: IotEndpointProvider
Handler: iotEndpointProvider.handler
Runtime: nodejs6.10
CodeUri: .
MemorySize: 128
Timeout: 3
Policies:
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- iot:DescribeEndpoint
Resource:
- '*'
IotEndpoint:
Type: 'Custom::IotEndpoint'
Properties:
ServiceToken: !GetAtt IotEndpointProvider.Arn
Outputs:
IotEndpointAddress:
Value: !GetAtt IotEndpoint.IotEndpointAddress
Export:
Name: IotEndpointAddress
答案 1 :(得分:2)
我担心您无法配置IoT端点,因为与IoT端点相关的唯一API调用是DescribeEndpoint
。
您可以做的是创建一个Lambda支持的CloudFormation自定义资源。 Lambda函数将执行DescribeEndpoint
调用(根据Lambda的运行时使用您选择的AWS SDK)并返回端点的URL,以便您的其他CloudFormation资源可以使用它。
以下是Lambda支持的自定义资源的一个很好的示例:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html。