Aws lambda 无服务器AWS堆栈-需要ApiGatewayRestApi在堆栈中与IAM角色一起使用,没有Lambdas或HTTP端点吗?

Aws lambda 无服务器AWS堆栈-需要ApiGatewayRestApi在堆栈中与IAM角色一起使用,没有Lambdas或HTTP端点吗?,aws-lambda,amazon-cloudformation,aws-api-gateway,serverless-framework,aws-serverless,Aws Lambda,Amazon Cloudformation,Aws Api Gateway,Serverless Framework,Aws Serverless,我目前有一个部署到AWS的堆栈,它有很多REST端点(Lambda函数),一些其他用于维护操作的Lambda,以及一个DynamoDB、Cognito用户池、弹性搜索域、IAM角色等。所有这些都部署在无服务器框架中,使用serverless.yml定义堆栈 为了避免200个资源的限制(并获得更好的结构),我尝试将当前堆栈拆分为多个堆栈 计划是为所有具有持久化数据的资源(DynamoDB、弹性搜索、Cognito、IAM等)保留当前堆栈,然后为lambda函数定义新堆栈。一个用于维护函数,另外两个

我目前有一个部署到AWS的堆栈,它有很多REST端点(Lambda函数),一些其他用于维护操作的Lambda,以及一个DynamoDB、Cognito用户池、弹性搜索域、IAM角色等。所有这些都部署在无服务器框架中,使用serverless.yml定义堆栈

为了避免200个资源的限制(并获得更好的结构),我尝试将当前堆栈拆分为多个堆栈

计划是为所有具有持久化数据的资源(DynamoDB、弹性搜索、Cognito、IAM等)保留当前堆栈,然后为lambda函数定义新堆栈。一个用于维护函数,另外两个用于不同类型的堆栈,用于HTTP通过API网关调用的函数

现在来看问题:我已经注释掉了
serverless.yml
的整个
函数:
部分

我有一个包含参考资料的部分,如下所示:

资源:
-${file(resources/dynamoDb.yml)}
-${file(resources/cognito.yml)}
-${file(resources/iam.yml)}
-${file(resources/elasticsearch.yml)}
当我尝试立即部署堆栈(所有函数都已注释掉)时,出现以下错误:

错误:CloudFormation模板无效:模板格式错误:模板的资源块中存在未解析的资源依赖项[ApiGatewayRestApi]

我出现此错误的原因可能是因为我在
resources/iam.yml
中引用了
ApiGatewayRestApi

GetVehicleByLicensePlatePolicy:
类型:AWS::IAM::ManagedPolicy
特性:
ManagedPolicyName:GetVehicleBylicesPlate
政策文件:
版本:“2012-10-17”
声明:
-效果:允许
操作:执行api:Invoke
资源:
Fn::加入:
- ""
--“arn:aws:执行api”
- ":"
-参考:AWS::地区
- ":"
-参考:AWS::AccountId
- ":"
-参考:ApiGatewayRestApi
-“/*/GET/vehicles/licenseplate/*”
我知道当我删除了由HTTP触发的所有函数时,
ApiGatewayRestApi
引用无法解析,因为此堆栈中没有部署API网关

我将在其他几个堆栈中使用HTTP lambda函数,但是这些堆栈将依赖于这个堆栈。(我当然不想要循环依赖关系。)

那么,如何使我的“主”堆栈能够引用子堆栈使用的API网关呢


解决此问题的常用/最佳实践方法是什么?

我想我通过将API网关特定的IAM角色移动到包含相关端点的堆栈来解决此问题。这对我来说很有意义,因为根堆栈不需要知道api端点特定的角色。

作为一种解决方法,只需创建一个虚拟lambda/http代理集成