我试着确认一下AWS Lambda的执行环境(AMI)是否会更新(包括Node.js和Python)
收到关于AWS Lambda执行环境所使用的AMI已更新的通知。
即将发布的AWS Lambda和AWS Lambda@Edge执行环境更新。
AWS Lambda和AWS Lambda@Edge运行在Amazon Linux操作系统分发的顶部,并维护核心操作系统和托管语言运行时的更新。我们正在将Lambda执行环境AMI更新到Amazon Linux的2018.03版本。这个更新的AMI提供了功能、性能、安全性的改进以及应用程序代码可能需要接口更新的包。
根据情况,尽管更新计划已经变更,但据说从2019/6/11开始创建新函数会使用新的执行环境。然而,有时候会在旧环境下执行,因此我进行了调查。
即将到来的AWS Lambda和AWS Lambda@Edge执行环境更新的更新时间表已更新。
2019年6月11日 – 新功能创建:除非已配置了延迟更新层,否则所有新创建的功能都将在新的执行环境中运行。(Google翻译)
假设
-
- AWSアカウントがある
-
- AWS CLIが利用可能
- リージョンはバージニア北部( us-east-1 )
Node.js 的意思是一种基于 Chrome V8 引擎的开源、跨平台的 JavaScript 运行环境。
由于Node.js使用Amazon Linux 2作为其10.x版本的基础,因此它不属于本次更新的目标(截至2019/06/20)。
AWS Lambda运行时- AWS Lambda
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html?icmpid=docs_lambda_rss
AWS Lambda运行时是AWS Lambda的一个功能。您可以通过访问上述链接获取有关AWS Lambda运行时的详细信息。
即将到来的更新将涉及AWS Lambda和AWS Lambda@Edge执行环境。
这不适用于最近宣布的Node.js v10运行时,该运行时目前在Amazon Linux 2上运行。(Google翻译)
创建一个新的函数
使用AWS CLI部署Lambda函数。函数实现如下,在函数内部执行uname -a和cat /etc/system-release命令,以确认AMI的版本。
exports.handler = async (event) => {
const execSync = require('child_process').execSync;
const unameResult = execSync('uname -a');
console.log(unameResult.toString());
const catResult = execSync('cat /etc/system-release');
console.log(catResult.toString());
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
# 実行ロールの作成
> cat <<EOF >lambda-role-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
> aws iam create-role \
--role-name check-lambda-environment-role \
--assume-role-policy-document file://lambda-role-policy.json
{
"Role": {
"Path": "/",
"RoleName": "check-lambda-environment-role",
"RoleId": "XXXXXXXXXXXXXXXXXXXXX",
"Arn": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"CreateDate": "2019-06-20T04:01:40Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
}
}
> touch index.js
# 内容は上記のコード
> zip index.zip index.js
> aws lambda create-function \
--function-name check-nodejs-environment \
--zip-file fileb://index.zip \
--handler index.handler \
--runtime nodejs8.10 \
--role arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role
{
"FunctionName": "check-nodejs-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-nodejs-environment",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "index.handler",
"CodeSize": 396,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T02:11:46.450+0000",
"CodeSha256": "oGABm6ZtX98ncjxUuwiJqhPUul6fdQq3waJcaJqHJiE=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "3b8ee8d9-86ec-4d3a-bbfa-1e4ee0b9482f"
}
一旦部署成功,我会尝试执行该函数。
> aws lambda invoke \
--function-name check-nodejs-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 7920dfc4-f7ee-4edc-96ab-15f7e259ad10 Version: $LATEST
2019-06-20T02:24:38.757Z 7920dfc4-f7ee-4edc-96ab-15f7e259ad10 Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
2019-06-20T02:24:38.778Z 7920dfc4-f7ee-4edc-96ab-15f7e259ad10 Amazon Linux AMI release 2018.03
END RequestId: 7920dfc4-f7ee-4edc-96ab-15f7e259ad10
REPORT RequestId: 7920dfc4-f7ee-4edc-96ab-15f7e259ad10 Duration: 24.06 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 28 MB
我确认了Amazon Linux AMI release 2018.03已经更新。
接下来我将尝试修改运行时环境为nodejs10.x并进行执行。
> aws lambda update-function-configuration \
--function-name check-nodejs-environment \
--runtime nodejs10.x
{
"FunctionName": "check-nodejs-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-nodejs-environment",
"Runtime": "nodejs10.x",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "index.handler",
"CodeSize": 396,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:11:51.718+0000",
"CodeSha256": "oGABm6ZtX98ncjxUuwiJqhPUul6fdQq3waJcaJqHJiE=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "7b306be7-a56d-431f-95c4-096d37d060b4"
}
> aws lambda invoke \
--function-name check-nodejs-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 844951be-8b94-4f69-b678-5fca6b51048b Version: $LATEST
2019-06-20T03:12:27.412Z 844951be-8b94-4f69-b678-5fca6b51048b INFO Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
2019-06-20T03:12:27.512Z 844951be-8b94-4f69-b678-5fca6b51048b INFO Amazon Linux release 2 (Karoo)
END RequestId: 844951be-8b94-4f69-b678-5fca6b51048b
REPORT RequestId: 844951be-8b94-4f69-b678-5fca6b51048b Duration: 387.86 ms Billed Duration: 400 ms Memory Size: 128 MB Max Memory Used: 26 MB
我的Amazon Linux 2 (Karoo)版本已经成功更新。接下来,我将将运行环境还原为nodejs8.10并进行执行,这可能会产生一些可疑的行为。
> aws lambda update-function-configuration \
--function-name check-nodejs-environment \
--runtime nodejs8.10
{
"FunctionName": "check-nodejs-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-nodejs-environment",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "index.handler",
"CodeSize": 396,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:15:14.557+0000",
"CodeSha256": "oGABm6ZtX98ncjxUuwiJqhPUul6fdQq3waJcaJqHJiE=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "4391a559-ba2b-4e70-97f5-b983988099a3"
}
> aws lambda invoke \
--function-name check-nodejs-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 8814f1b7-d3c7-46f9-a562-dc55b408e3c2 Version: $LATEST
2019-06-20T03:15:51.173Z 8814f1b7-d3c7-46f9-a562-dc55b408e3c2 Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
2019-06-20T03:15:51.311Z 8814f1b7-d3c7-46f9-a562-dc55b408e3c2 Amazon Linux AMI release 2017.03
END RequestId: 8814f1b7-d3c7-46f9-a562-dc55b408e3c2
REPORT RequestId: 8814f1b7-d3c7-46f9-a562-dc55b408e3c2 Duration: 366.43 ms Billed Duration: 400 ms Memory Size: 128 MB Max Memory Used: 22 MB
亚马逊 Linux AMI 2017.03版已发布。
根据博客文章显示,从2019/06/11开始创建的函数和从2019/06/25开始创建或更新的函数附带了一些条件,所以它们的行为看起来并没有错误。目前,只有新创建的函数才会使用新的执行环境。(截至2019/06/20)
即将推出的AWS Lambda和AWS Lambda@Edge执行环境的更新。
2019年6月11日- 新创建功能:所有新创建的功能将在新的执行环境中运行,除非它们配置了延迟更新层。
2019年6月25日- 现有功能更新:所有新创建或更新的现有功能都将在新的执行环境中运行,除非它们配置了延迟更新层。
我试试选择同意。
根据博客文章中提到的,有一个为本次训练准备的Lambda层,我们可以尝试使用它来创建一个新的执行环境。
据说,如果添加了 arn:aws:lambda:::awslayer:AmazonLinux1803 的Opt-in层,就会创建一个新的执行环境。据说这个层的代码大小为0,并被用作标志。如果我也可以使用这个机制,那会很方便,不知道可行吗?
> aws lambda update-function-configuration \
--function-name check-nodejs-environment \
--layers "arn:aws:lambda:::awslayer:AmazonLinux1803"
{
"FunctionName": "check-nodejs-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-nodejs-environment",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "index.handler",
"CodeSize": 396,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:21:28.575+0000",
"CodeSha256": "oGABm6ZtX98ncjxUuwiJqhPUul6fdQq3waJcaJqHJiE=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "414d41ec-98db-4588-8d1f-0c77fd50eef0",
"Layers": [
{
"Arn": "arn:aws:lambda:::awslayer:AmazonLinux1803",
"CodeSize": 0
}
]
}
> aws lambda invoke \
--function-name check-nodejs-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: dfb209e7-50ef-41b5-b960-60359e4566e4 Version: $LATEST
2019-06-20T03:22:25.570Z dfb209e7-50ef-41b5-b960-60359e4566e4 Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
2019-06-20T03:22:25.592Z dfb209e7-50ef-41b5-b960-60359e4566e4 Amazon Linux AMI release 2018.03
END RequestId: dfb209e7-50ef-41b5-b960-60359e4566e4
REPORT RequestId: dfb209e7-50ef-41b5-b960-60359e4566e4 Duration: 49.56 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 28 MB
只需一个选项,以下是对原文的中文本地化释义:
确认进行了 opt-in 操作后,我们可以确认 Amazon Linux AMI release 2018.03 将会被执行。
我们最后会将层级去掉以进行确认。
> aws lambda update-function-configuration \
--function-name check-nodejs-environment \
--layers []
{
"FunctionName": "check-nodejs-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-nodejs-environment",
"Runtime": "nodejs8.10",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "index.handler",
"CodeSize": 396,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:31:43.734+0000",
"CodeSha256": "oGABm6ZtX98ncjxUuwiJqhPUul6fdQq3waJcaJqHJiE=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "d1ca3a16-a01e-4f7e-8a30-00646c3c8d56"
}
> aws lambda invoke \
--function-name check-nodejs-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 76dd533b-5491-47de-a6f3-4234d1baed7e Version: $LATEST
2019-06-20T03:32:48.012Z 76dd533b-5491-47de-a6f3-4234d1baed7e Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
2019-06-20T03:32:48.090Z 76dd533b-5491-47de-a6f3-4234d1baed7e Amazon Linux AMI release 2017.03
END RequestId: 76dd533b-5491-47de-a6f3-4234d1baed7e
REPORT RequestId: 76dd533b-5491-47de-a6f3-4234d1baed7e Duration: 186.55 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 20 MB
我回到了 Amazon Linux AMI release 2017.03。
Python – Python
我也会用Python来确认一下。在Python的情况下,全部都是Amazon Linux(截至2019年6月20日)。
AWS Lambda 运行时 – AWS Lambda
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html?icmpid=docs_lambda_rss
AWS Lambda 运行时是 AWS Lambda 的一项功能。了解更多信息,请访问以下链接:https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html?icmpid=docs_lambda_rss
创建一个新的函数
使用subprocess模块执行”uname -a”和”cat /etc/system-release”命令。
import json
import subprocess
def lambda_handler(event, context):
res = subprocess.check_output(['uname', '-a'])
print(res)
res2 = subprocess.check_output(['cat', '/etc/system-release'])
print(res2)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
> touch main.py
# 内容は上記のコード
> zip main.zip main.py
> aws lambda create-function \
--function-name check-python-environment \
--zip-file fileb://main.zip \
--handler main.lambda_handler \
--runtime python3.7 \
--role arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.7",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:39:13.434+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "21591033-7aa1-4dc2-b977-cd39b2506b8a"
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: a1567ac2-7973-4495-b036-8e1ff325a6f4 Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2018.03\n'
END RequestId: a1567ac2-7973-4495-b036-8e1ff325a6f4
REPORT RequestId: a1567ac2-7973-4495-b036-8e1ff325a6f4 Duration: 64.31 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 35 MB
我确认了该实例正在使用Amazon Linux AMI Release 2018.03。
尝试更改运行时间
我們將嘗試更改執行環境以確認它是否會成為一個新的運行環境,就像Node.js一樣。
> aws lambda update-function-configuration \
--function-name check-python-environment \
--runtime python3.6
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.6",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:41:48.447+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "479990ce-9162-4393-b2d9-f7f8bca28605"
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 25765907-7d44-4a5a-b414-1ad942a87e62 Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2018.03\n'
END RequestId: 25765907-7d44-4a5a-b414-1ad942a87e62
REPORT RequestId: 25765907-7d44-4a5a-b414-1ad942a87e62 Duration: 46.01 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 26 MB
回到 Amazon Linux AMI release 2018.03 的状态。
> aws lambda update-function-configuration \
--function-name check-python-environment \
--runtime python3.7
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.7",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:43:10.933+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "82de01a8-a011-49f7-a0c6-adcf08f83161"
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 91a53cc6-bd67-418a-b583-b492f3410573 Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2018.03\n'
END RequestId: 91a53cc6-bd67-418a-b583-b492f3410573
REPORT RequestId: 91a53cc6-bd67-418a-b583-b492f3410573 Duration: 95.78 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
看起来Node.js的行为是不同的。。。
试试取消选择
我会试着选择退出。请注意,选择退出时Lambda层的ARN将会有所不同。
> aws lambda update-function-configuration \
--function-name check-python-environment \
--layers "arn:aws:lambda:::awslayer:AmazonLinux1703"
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.7",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:45:46.154+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "7b67d0e1-6c42-4edb-8be8-bbc12ebe46ff",
"Layers": [
{
"Arn": "arn:aws:lambda:::awslayer:AmazonLinux1703",
"CodeSize": 0
}
]
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: a44a1cda-fb09-4092-a40a-3b1112c66b3b Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2017.03\n'
END RequestId: a44a1cda-fb09-4092-a40a-3b1112c66b3b
REPORT RequestId: a44a1cda-fb09-4092-a40a-3b1112c66b3b Duration: 138.37 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 21 MB
确认了 Amazon Linux AMI release 2017.03 可以选择退出。
为了保险起见,我们将尝试去除层级。
> aws lambda update-function-configuration \
--function-name check-python-environment \
--layers []
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.7",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:47:42.043+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "dfcf4640-bff1-4018-b0d2-b72b25d64be5"
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: 48048135-8f2c-4fe4-a09c-baffea110561 Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2017.03\n'
END RequestId: 48048135-8f2c-4fe4-a09c-baffea110561
REPORT RequestId: 48048135-8f2c-4fe4-a09c-baffea110561 Duration: 70.53 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
嗯嗯嗯。亚马逊 Linux AMI 发布 2017.03 版仍然保持原样。
我尝试选择订阅
因为我很在意,所以最后我会尝试自愿选择并返回。
> aws lambda update-function-configuration \
--function-name check-python-environment \
--layers "arn:aws:lambda:::awslayer:AmazonLinux1803"
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.7",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:49:20.115+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "1e6a3849-3bb4-4be3-85d9-f2161adcfb88",
"Layers": [
{
"Arn": "arn:aws:lambda:::awslayer:AmazonLinux1803",
"CodeSize": 0
}
]
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: fa55a4eb-3181-485f-9096-e8ccee582e09 Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2018.03\n'
END RequestId: fa55a4eb-3181-485f-9096-e8ccee582e09
REPORT RequestId: fa55a4eb-3181-485f-9096-e8ccee582e09 Duration: 71.20 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
> aws lambda update-function-configuration \
--function-name check-python-environment \
--layers []
{
"FunctionName": "check-python-environment",
"FunctionArn": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:check-python-environment",
"Runtime": "python3.7",
"Role": "arn:aws:iam::xxxxxxxxxxxx:role/check-lambda-environment-role",
"Handler": "main.lambda_handler",
"CodeSize": 360,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2019-06-20T03:50:50.576+0000",
"CodeSha256": "Ra/oq/0Wx9NILMmLQdYPuD2JjMg6kscBAKJCVm81Fz4=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "fc639f68-98d9-49db-9727-a36978fb3d7e"
}
> aws lambda invoke \
--function-name check-python-environment \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D
START RequestId: dc4e13e8-733b-446c-b5a8-d4033baaef7c Version: $LATEST
b'Linux ip-xxx-xxx-xxx-xxx 4.14.123-86.109.amzn1.x86_64 #1 SMP Mon Jun 10 19:44:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
b'Amazon Linux AMI release 2017.03\n'
END RequestId: dc4e13e8-733b-446c-b5a8-d4033baaef7c
REPORT RequestId: dc4e13e8-733b-446c-b5a8-d4033baaef7c Duration: 79.33 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
毋庸置疑,Amazon Linux AMI 2017.03版本并没有改变,正如我们预期的那样。
大致上,根据博客文章,在2019/06/25之前新创建的函数将成为新的执行环境,当其进行更新时,旧的执行环境似乎会被取代。但是,Node.js和Python之间的更新定义似乎不同。我不太清楚具体细节。。。
总结吗?
从2019/06/25开始,应该会根据函数更新的时机应用新的执行环境,所以不会再出现像这次这样的行为。但是,将来切换到新的执行环境时可能会出现类似的行为…记住这一点可能会更好。
请参考
AWS Lambda和AWS Lambda@Edge执行环境的即将到来的更新。
近日,亚马逊计算服务博客发布了有关即将进行的AWS Lambda和AWS Lambda@Edge执行环境更新的最新时间安排。请参考以下链接了解详情:https://aws.amazon.com/jp/blogs/compute/updated-timeframe-for-the-upcoming-aws-lambda-and-aws-lambdaedge-execution-environment-update/
AWS Lambda 运行时 – AWS Lambda
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html?icmpid=docs_lambda_rss
lambda — AWS CLI 1.16.182 命令参考
https://docs.aws.amazon.com/cli/latest/reference/lambda/index.html#cli-aws-lambda
AWS Lambda 层 – AWS Lambda
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html