AWS SAM模板报错InvalidResourceException:Api类型资源未定义RestApiID属性
AWS SAM模板错误排查:RestApiID属性未定义问题
错误原因
- 属性名大小写错误:SAM的
Api事件类型中,关联已有API的合法属性名是**RestApiId**(最后一个字母为小写d),你模板中写成了RestApiID(大写D),SAM无法识别该属性,因此抛出异常。 - 资源缩进错误:
SamTestPrivateApi的缩进层级不对,导致它不属于Resources节点下的合法资源,会引发模板解析问题。 VpcConfig空值问题:SecurityGroupIds和SubnetIds未填写实际值,会导致部署时的校验错误。
解决方案
- 修正属性名:将
Events.personapi.Properties中的RestApiID改为RestApiId - 调整资源缩进:确保
SamTestPrivateApi与APIFunction同级别(缩进对齐) - 完善
VpcConfig:要么填写实际的安全组ID和子网ID,要么删除整个VpcConfig节点(如果函数不需要部署在VPC内)
修正后的完整模板
Resources: APIFunction: Type: AWS::Serverless::Function Properties: CodeUri: APIFunction Handler: com.java.Handler::handleRequest Policies: - arn:aws:iam::aws:policy/SecretsManagerReadWrite - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Runtime: java11 MemorySize: 1024 Environment: Variables: PARAM1: VALUE Events: personapi: Type: Api Properties: Path: /myapi/person Method: post RestApiId: !Ref SamTestPrivateApi # 如果不需要VPC部署,可删除以下VpcConfig节点 VpcConfig: SecurityGroupIds: - sg-xxxxxxxxxxxxxxxxx SubnetIds: - subnet-xxxxxxxxxxxxxxxxx SamTestPrivateApi: Type: AWS::Serverless::Api Properties: OpenApiVersion: 3.0.3 StageName: !Ref Environment
内容的提问来源于stack exchange,提问作者Tanu
相关产品推荐
相关产品推荐

