首页 > 解决方案 > 更新被 lex 测试命中的 lambda 函数的最快方法是什么?

问题描述

我有一个 lex 机器人和意图,以及一个 lambda 函数来处理机器人的实现和验证。我正在努力为开发建立一个有效的开发工作流程。

确保我正在使用的 Lambda 函数在最新版本上的最有效方法是什么?

目前我正在更新我的 IDE 中的功能代码,并用这个脚本更新它:

#!/bin/bash -e
rm lambda.zip || echo "Cleaning zip"
zip lambda.zip *.js -r node_modules/
aws lambda update-function-code \
    --profile myprofile \
    --function-name my-lambda-function \
    --zip-file fileb://lambda.zip

然后我使用 lex 控制台中的测试接口对其进行更新,并使用以下脚本读取日志输出:

#!/bin/bash
LOGSTREAM=$(aws logs describe-log-streams --profile myprofile --log-group-name /aws/lambda/my-lambda-function | jq -r '.logStreams | .[-1].logStreamName')
aws logs get-log-events --profile myprofile --log-group-name /aws/lambda/my-lambda-function --log-stream-name "$LOGSTREAM" --limit 5

AWS cli 的这种使用会产生任何主要的同步问题吗?有没有更好的方法来加快开发周期?

编辑:

感谢 Marcin,我已将其更新为使用别名,这是生成的部署代码:

#!/bin/bash -e
rm lambda.zip || echo "Cleaning zip"
zip lambda.zip *.js node_modules/
VERSION=$(aws lambda update-function-code \
    --profile myprofile \
    --publish \
    --function-name my-lambda-function \
    --zip-file fileb://lambda.zip \
    | jq -r .Version)
aws lambda update-alias \
    --profile myprofile \
    --function-name my-lambda-function \
    --name dev \
    --function-version $VERSION

标签: amazon-web-servicesaws-lambdaaws-cliamazon-lex

解决方案


通常你会使用lambda aliases。这样您就可以为您的 lex 的验证和履行选项提供别名的 arn 。

然后当你更新你的函数时,你发布它的一个新版本,并将别名指向这个版本。

此过程可确保您将lex 与 lambda 代码完全解耦。这是因为别名是静态的,不需要对 lex 配置进行任何更改。唯一改变的是别名指向您的 lambda 函数的新版本。从 lex 的角度来看,这是一个透明的过程。


推荐阅读