You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFormation报错:PathPart为只读属性,如何获取该值?

解决方案:复用PathPart值而非硬编码

问题核心在于:AWS::ApiGateway::Resource的PathPart是用户传入的可配置属性,并非CloudFormation生成的只读输出属性,所以!GetAtt无法获取它;而!Ref返回的是该资源的唯一ID(不是路径片段),自然没法用来拼接正确的SourceArn。

不用硬编码的解决办法是复用同一个变量值,具体可以这么做:

  1. 在模板里定义一个参数(或直接用自定义变量)存储PathPart的值
  2. 在AWS::ApiGateway::Resource的PathPart属性里引用这个变量
  3. 在AWS::Lambda::Permission的SourceArn里通过!Sub引用同一个变量

示例代码(YAML格式):

Parameters:
  ApiResourcePath:
    Type: String
    Default: helloworld # 这里只需要定义一次

Resources:
  # 定义API Gateway资源
  MyApiResource:
    Type: AWS::ApiGateway::Resource
    Properties:
      ParentId: !Ref MyApiRoot
      PathPart: !Ref ApiResourcePath
      RestApiId: !Ref MyRestApi

  # 配置Lambda调用权限
  LambdaInvokePermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyLambdaFunc
      Principal: apigateway.amazonaws.com
      SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${MyRestApi}/*/*/${ApiResourcePath}"

这样一来,后续要修改路径片段时,只需要修改Parameters里的默认值(或者部署时传入参数),不用在多个地方改硬编码的字符串,维护起来更方便。

内容的提问来源于stack exchange,提问作者MatteoT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:50:26