如何解决无服务器AWS堆栈-是否需要将具有AAM角色的ApiGatewayRestApi与IAM角色一起使用,没有Lambda或HTTP端点?
我目前有一个部署到AWS的堆栈,该堆栈具有许多REST端点(Lambda函数),一些其他用于维护操作的Lambda,以及DynamoDB,Cognito用户池,弹性搜索域,IAM角色等。无服务器框架,使用serverless.yml定义堆栈。
为了避免200个资源的限制(并获得更好的结构),我正在尝试将当前堆栈拆分为多个堆栈。
计划是使用持久化数据(DynamoDB,Elastic Search,Cognito,IAM等)为所有资源保留当前堆栈,然后为lambda函数定义新堆栈。一个用于维护功能,另外两个用于不同类型的堆栈,用于HTTP通过API网关调用的功能。
现在是问题所在:我已注释掉functions:
的整个serverless.yml
部分。
resources:
- ${file(resources/dynamoDb.yml)}
- ${file(resources/cognito.yml)}
- ${file(resources/iam.yml)}
- ${file(resources/elasticsearch.yml)}
Error: The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [ApiGatewayRestApi] in the Resources block of the template
出现此错误的原因可能是因为我在ApiGatewayRestApi
中引用了resources/iam.yml
:
GetVehicleByLicensePlatePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: GetVehicleByLicensePlate
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: execute-api:Invoke
Resource:
Fn::Join:
- ""
- - "arn:aws:execute-api"
- ":"
- Ref: AWS::Region
- ":"
- Ref: AWS::AccountId
- ":"
- Ref: ApiGatewayRestApi
- "/*/GET/vehicles/licenseplate/*"
我了解,ApiGatewayRestApi
引用在我删除了HTTP触发的所有功能后仍无法解决,因为此堆栈中没有部署API网关。
我将在其他两个堆栈中使用HTTP lambda函数,但是这些堆栈将依赖于此。 (而且我当然不希望循环依赖。)
那么如何使我的“主”堆栈引用子堆栈使用的API网关?
解决方法
我想我通过将API网关特定的IAM角色移动到包含相关端点的堆栈中来解决此问题。这实际上对我来说很有意义,因为根堆栈不需要了解api端点特定的角色。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。