aws lambda版本和别名

时间:2018-04-10 09:56:45

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

我将处理aws lambda版本和别名。我试图在template.yaml文件的已创建函数中创建一个新的lambda版本。在无服务器函数中,我尝试在已创建的函数上创建新版本和别名但是他们并没有改变lambda服务。在GUI模式(weeb portal)它正在工作。请提一下创建lambda版本和别名的代码。请问有人帮我吗?

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

正如我在之前回答的第一句中所提到的,我的示例使用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 的内容。

答案 2 :(得分:0)

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