【问题标题】:aws lambda version and aliasaws lambda 版本和别名
【发布时间】:2018-09-19 21:36:03
【问题描述】:

我正在研究 aws lambda 版本控制和别名。我试图在 template.yaml 文件上已创建的函数中创建一个新的 lambda 版本。在无服务器函数中,我尝试在已创建的函数上创建新版本和别名。但他们并没有改变 lambda 服务。在 GUI 模式(门户网站)下它正在工作。请提及创建 lambda 版本和别名的代码。请问有人可以帮帮我吗?

【问题讨论】:

  • 能否提供模板?
  • DeliforceSettingsBillingPut:类型:AWS::Serverless::Function 属性:FunctionName:Dev_deliforce_setting_billing_put 处理程序:index.handler 运行时:nodejs6.10 CodeUri:build/set_billing_put.zip 超时:300
  • Properties下放一个新的:AutoPublishAlias: dev
  • 谢谢@TomasTulka。它对我有用。
  • @TomasTulka。如果有任何替代方法来创建 lambda 版本控制和别名?如果你愿意,请提供代码。

标签: amazon-web-services aws-lambda yaml


【解决方案1】:

要获得更多的低级控制,请避免 SAM 的简单性并直接使用 CloudFormation 模板模型。

在这种情况下,这些元素是否有趣:

  • AWS::Lambda::Version
  • AWS::Lambda::Alias

代码如下:

MyLambdaVersion:
  DeletionPolicy: Retain
  Type: AWS::Lambda::Version
  Properties:
    FunctionName:
      Ref: MyLambda

MyLambdaAlias:
  Type: AWS::Lambda::Alias
  Properties:
    FunctionVersion:
      Fn::GetAtt:
      - MyLambdaVersion
      - Version
    FunctionName:
      Ref: MyLambda
    Name: prod

然后,您可以创建 CodeDeploy 以自动部署新的 lambda 版本:

MyLambdaAlias:
  Type: AWS::Lambda::Alias
  UpdatePolicy:
    CodeDeployLambdaAliasUpdate:
      ApplicationName:
        Ref: ServerlessDeploymentApplication
      DeploymentGroupName:
        Ref: MyLambdaDeploymentGroup
  ...

ServerlessDeploymentApplication:
  Type: AWS::CodeDeploy::Application
  Properties:
    ComputePlatform: Lambda             

MyLambdaDeploymentGroup:
  Type: AWS::CodeDeploy::DeploymentGroup
  Properties:
    ApplicationName:
      Ref: ServerlessDeploymentApplication
    AutoRollbackConfiguration:
      Enabled: true
      Events:
      - DEPLOYMENT_FAILURE
      - DEPLOYMENT_STOP_ON_ALARM
      - DEPLOYMENT_STOP_ON_REQUEST
    ServiceRoleArn:
      Fn::GetAtt:
      - CodeDeployServiceRole
      - Arn
    DeploymentConfigName:
      Fn::Sub:
      - CodeDeployDefault.Lambda${ConfigName}
      - ConfigName: AllAtOnce
    DeploymentStyle:
      DeploymentType: BLUE_GREEN
      DeploymentOption: WITH_TRAFFIC_CONTROL

有关详细信息,请参阅文档:

https://aws.amazon.com/documentation/cloudformation/ https://aws.amazon.com/documentation/codedeploy/

【讨论】:

  • @Thomas Tulka,感谢您回答我的问题。
  • AWS::Lambda::Version 和 AWS::Lambda::Alias。我在 template.yml 文件中写了资源之后。我怀疑我在哪里编写用于自动部署的 CodeDeploy 代码新的 lambda version.same template.yml 文件或其他文件
  • 我有一个 lambda 函数。函数名称是 hello_lambda。在您的帮助下,我将创建一个版本控制和别名。我需要提供多个版本控制和别名。我给了 AutoPublishAlias: dev 和 AutoPublishAlias:测试。但它只使用“测试”别名。所以你能帮我吗。
【解决方案2】:

正如我在上一个答案的第一句话中提到的,我的示例使用 CloudFormation 而不是 SAM。但 SAM 本身会消耗 CloudFormation 资源,因此理论上您也可以使用相同的 SAM 模板来创建 CodeDeploy 资源。但是您不能将AutoPublishAliasAWS::Lambda::Alias 组合在一起。

使用 SAM AutoPublishAlias,您在堆栈中不能有多个别名。这意味着,您必须使用 a) 更多堆栈 b) AWS::Lambda::Alias 资源。

我示例中的 Lambda 可能如下所示:

MyLambda:
  Type: AWS::Lambda::Function
  Properties:
    FunctionName: my-lambda
    Runtime: nodejs6.10
    Handler: index.handler
    MemorySize: 1024
    Timeout: 120
    Role: !GetAtt MyLambdaRole.Arn
    Code:
      ZipFile: >
        exports.handler = (event, context, callback) => {
            console.log("Hello World!")
        }

这都是 CloudFormation 的东西。

【讨论】:

  • 我会尝试第一种方法。那个时候我得到一个像这样的错误“函数名 my-lambda 已经存在于开发堆栈中。”我更改了函数名。那个时候它被更新了。没有更改函数名称我们如何更新版本和别名
  • 我不明白这个问题,堆栈内的一切都必须是一致的。请先清理资源。
  • ,我会给出确切的要求。我有一个函数名称是 My-lambda。我使用了与上面相同的代码。我不会在 template.yaml 文件中创建版本控制和别名。下面我举个例子。Function name= My-lambda.Version is 1.Alias is Dev.After that I need version is 2.and alias is Test.实际上我想要这样。我是如何创建这样的。请提及代码
【解决方案3】:

您可以拥有多个别名,但管理其他别名需要自定义资源。签出:how-to-use-sam-deploy-to-get-a-lambda-with-autopublishalias-and-additional-alises

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2022-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多