You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过AWS SAM重命名AWS Lambda函数名称且不更改其Function URL?

能否在不更改Lambda Function URL的前提下重命名函数?

我正在使用以下AWS SAM模板:

Resources:
  PaymentFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: payment_function
      CodeUri: PaymentFunction/
      Description: 'A lambda function to do a payment'
      ... ... ...
      FunctionUrlConfig:
        AuthType: NONE
        Cors:
          AllowOrigins:
            - "*"
          AllowHeaders:
            - "*"
          AllowMethods:
            - "*"
Outputs:
  PaymentFunctionUrl:
    Value:
      Fn::GetAtt: PaymentFunctionUrl.FunctionUrl

当我使用aws sam deploy命令部署该函数时,会得到如下格式的Function URL:https://{random_string}.lambda-url.{aws_region}.on.aws/。每当我更改LogicalResourceId(即PaymentFunction)或实际函数名称(即payment_function)时,都会生成新的{random_string},也就是新的Function URL。请问是否可以在不更改Function URL的前提下重命名函数名称?


好问题!这其实涉及到AWS SAM管理资源的逻辑以及Lambda Function URL的绑定机制,我来给你分情况说明解决方案:

1. 仅修改物理函数名称(FunctionName属性)——完全可以保留URL

如果只是想把函数的物理名称(比如从payment_function改成new_payment_function),但保持模板里的LogicalResourceId(也就是PaymentFunction)不变,那么SAM会执行资源更新操作,而不是删除旧资源再创建新资源。

Lambda Function URL是直接绑定到Lambda函数资源本身的,只要这个资源没有被删除重建,URL就会保持不变。你只需要修改模板里的FunctionName字段,然后重新运行aws sam deploy即可,部署完成后Function URL不会有任何变化。

2. 修改LogicalResourceId——无法直接保留原生URL,需用替代方案

如果你要修改模板里的LogicalResourceId(比如把PaymentFunction改成NewPaymentFunction),SAM会将原有的PaymentFunction资源标记为删除,然后创建一个全新的Lambda函数资源。这种情况下,原生的Function URL必然会变化,因为新资源是完全独立的。

如果必须修改LogicalResourceId同时希望对外的访问地址不变,推荐使用自定义域名来映射Function URL:

  • 你可以在AWS控制台或通过SAM模板配置Lambda Function URL的自定义域名,将一个固定的域名(比如payment.yourdomain.com)指向当前的Function URL。
  • 后续无论你怎么修改函数的LogicalResourceId或物理名称,只要将新的Function URL重新映射到这个自定义域名,用户依然可以通过固定的自定义域名访问服务,无需关心原生Lambda URL的变化。

额外补救提示

如果已经不小心修改了LogicalResourceId导致URL变更,有两种可行的补救方式:

  • 改回原来的LogicalResourceId,重新部署,这样会恢复原来的Function URL;
  • 配置自定义域名并切换到该域名作为对外访问地址,后续就不用依赖原生的随机URL了。

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

火山引擎 最新活动