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

如何将Serverless HttpApi URL填入AWS Secrets Manager的NotificationUrl?解决循环引用

解决Secrets Manager中填入API URL的循环引用问题

你的模板出现循环引用的核心原因是:SquareSecret 创建时依赖 ServerlessHttpApi 的域名,同时函数又通过Secrets Manager解析依赖 SquareSecret 中的 NotificationUrl,形成了「API→函数→Secret→API」的闭环依赖。

以下是两种可行的解决方案:

方案一:直接让函数引用API URL,Secret后续更新

这种方式彻底消除循环依赖,函数不再从Secret读取NotificationUrl,而是直接获取API的域名,Secret中的NotificationUrl留空后手动或脚本更新,供Square平台配置使用。

修改后的模板代码:

Resources:  
  SquareWebhookAuthorizerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: square-webhook-authorizer/
      Handler: app.SquareWebhookAuthorizerFunction
      Runtime: nodejs16.x
      Environment:
        Variables:
          SignatureKey: !Sub '{{resolve:secretsmanager:${SquareSecret}:SecretString:SignatureKey}}'
          # 直接通过Sub生成API URL,无需从Secret读取
          NotificationUrl: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/'
          TABLE_NAME: !Ref SquareWebhookEventTable
      Events:
        SquareWebhookEvent:
          Type: HttpApi
          Properties:
            Path: /
            Method: POST

  SquareSecret:
    Type: AWS::SecretsManager::Secret
    Properties:
      Name: SquareSecretProxy
      Description: "Square App Secrets"
      # 先创建包含SignatureKey的基础Secret,NotificationUrl后续补充
      SecretString: !Sub |
        '{
          "SignatureKey": "xxxx",
          "NotificationUrl": ""
        }'

# 输出API的完整URL,方便后续更新Secret
Outputs:
  SquareWebhookApiUrl:
    Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/'

部署完成后,用输出的API URL更新Secret:

aws secretsmanager update-secret --secret-id SquareSecretProxy --secret-string '{"SignatureKey": "xxxx", "NotificationUrl": "替换为输出的API URL"}'

方案二:使用自定义资源自动更新Secret

如果需要自动化更新,可以添加CloudFormation自定义资源,在API创建完成后自动更新Secret中的NotificationUrl。这种方式无需手动操作,但配置稍复杂,适合持续部署场景。

核心思路是:

  • 创建一个Lambda函数作为自定义资源
  • 自定义资源依赖ServerlessHttpApi,在API创建完成后触发Lambda
  • Lambda调用Secrets Manager的UpdateSecret接口,填入正确的API URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:25:23