假設我有一支 Lambda function,內容如下:
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda! (Version 1)')
}
並成功完成 Test:
Test Event Name
MyTest
Response
{
"statusCode": 200,
"body": "\"Hello from Lambda! (Version 1)\""
}
Function Logs
START RequestId: f0a719c8-1ffb-499d-942f-206f73dd0045 Version: $LATEST
END RequestId: f0a719c8-1ffb-499d-942f-206f73dd0045
REPORT RequestId: f0a719c8-1ffb-499d-942f-206f73dd0045 Duration: 11.58 ms Billed Duration: 12 ms Memory Size: 128 MB Max Memory Used: 34 MB
Request ID
f0a719c8-1ffb-499d-942f-206f73dd0045
透過 AWS CLI 發佈第一個版本:
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda publish-version --function-name HelloWorldFunction
{
"FunctionName": "HelloWorldFunction",
"FunctionArn": "arn:aws:lambda:us-east-1:827888540138:function:HelloWorldFunction:1",
"Runtime": "python3.12",
"Role": "arn:aws:iam::827888540138:role/service-role/HelloWorldFunction-role-2pj1z9b2",
"Handler": "lambda_function.lambda_handler",
"CodeSize": 277,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2024-02-19T00:51:48.000+0000",
"CodeSha256": "FGaiUQRyAxEPhQmLcV9dUlGl1qIvgba7Ae1zCInXC3g=",
"Version": "1",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "d42bcc86-34a7-4ce4-a739-16e6d785c3af",
"State": "Active",
"LastUpdateStatus": "Successful",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
:...skipping...
修改 Lambda function,程式內容如下:
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda! (Version 2)')
}
發佈第二個版本:
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda publish-version --function-name HelloWorldFunction
{
"FunctionName": "HelloWorldFunction",
"FunctionArn": "arn:aws:lambda:us-east-1:827888540138:function:HelloWorldFunction:2",
"Runtime": "python3.12",
"Role": "arn:aws:iam::827888540138:role/service-role/HelloWorldFunction-role-2pj1z9b2",
"Handler": "lambda_function.lambda_handler",
"CodeSize": 276,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2024-02-19T01:02:46.000+0000",
"CodeSha256": "xzDR5dGezW2VtWOvVraE1yY6kIQXIKy7UBS/1WDMeyw=",
"Version": "2",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "299ba2c8-c055-4314-9b29-bbd9e9332e96",
"State": "Active",
"LastUpdateStatus": "Successful",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
建立 Alias,PROD 指向 Version 1、DEV 指向 Version 2
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda create-alias --function-name HelloWorldFunction --name PROD --function-version 1
{
"AliasArn": "arn:aws:lambda:us-east-1:827888540138:function:HelloWorldFunction:PROD",
"Name": "PROD",
"FunctionVersion": "1",
"Description": "",
"RevisionId": "dfc0cdd9-5bf8-4483-bd0b-0cc098e4a70e"
}
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda create-alias --function-name HelloWorldFunction --name DEV --function-version 2
{
"AliasArn": "arn:aws:lambda:us-east-1:827888540138:function:HelloWorldFunction:DEV",
"Name": "DEV",
"FunctionVersion": "2",
"Description": "",
"RevisionId": "2526ec87-e93b-4189-828a-bab954fcf019"
}
執行 PROD alais,結果如下:
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda invoke --function-name "HelloWorldFunction:PROD" outputfile.txt
{
"StatusCode": 200,
"ExecutedVersion": "1"
}
執行 DEV alais,結果如下:
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda invoke --function-name "HelloWorldFunction:DEV" outputfile.txt
{
"StatusCode": 200,
"ExecutedVersion": "2"
}
Version 2 完成測試後,將 PROD 指向 Version 2:
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda update-alias --function-name "HelloWorldFunction" --name "PROD" --function-version "2"
{
"AliasArn": "arn:aws:lambda:us-east-1:827888540138:function:HelloWorldFunction:PROD",
"Name": "PROD",
"FunctionVersion": "2",
"Description": "",
"RevisionId": "9b3c5ce4-4c46-4bba-a5bf-ceb8291e090d"
}
執行 PROD alais,結果如下:
[cloudshell-user@ip-10-132-51-15 ~]$ aws lambda invoke --function-name "HelloWorldFunction:PROD" outputfile.txt
{
"StatusCode": 200,
"ExecutedVersion": "2"
}