我将处理aws lambda版本和别名。我试图在template.yaml文件的已创建函数中创建一个新的lambda版本。在无服务器函数中,我尝试在已创建的函数上创建新版本和别名但是他们并没有改变lambda服务。在GUI模式(weeb portal)它正在工作。请提一下创建lambda版本和别名的代码。请问有人帮我吗?
答案 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资源。但是你不能组合AutoPublishAlias
和AWS::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