【AWS】创建Go Lambda的本地开发环境(aws-sam-cli + M1mac)
首先
如果使用aws-sam-cli,可以在本地终端中复制Lambda的执行环境,进行操作验证。
因为可以在现场进行代码修改和动作确认,所以可以减少部署和Lambda费用。
在众多nodejs和python的导入步骤中,我觉得Golang的文档较少,所以在这里总结一下。
做的事情 (zuò de
-
- 開発用にarm版Golangをローカル環境にインストールする
aws-sam-cliでローカル環境にLambdaとAPIGatewayを構築する
前提
-
- arm版(M1チップ)のmacOS環境をベースに説明する (goenv導入部分以外は大差ないはず)
-
- Z shell (zsh) をベースに説明する (環境変数の通し方以外は大差ないはず)
- Dockerは既にインストールしてあるものとして説明する
目录
-
- 安装Golang
-
- 安装aws-sam-cli
- 在本地环境中启动Lambda
1. 配置Golang
1-1. 安装goenv
如果直接使用brew安装goenv,只能获得旧版本。
因此,可以使用以下命令来强制获取最新版本。
% brew uninstall goenv && brew install --HEAD goenv
% goenv -v
goenv 2.0.0beta11
以下是在ARM版(M1芯片)的macOS上获取ARM版Go的设置。
如果不需要的话可以跳过。
% echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.zshrc
% echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.zshrc
% echo 'eval "$(goenv init -)"' >> ~/.zshrc
% cat ~/.zshrc
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
1-2. 安装Golang
% goenv install -l
Available versions:
1.2.2
1.3.0
…
1.17.5
1.17.6
1.18beta1
请注意,仅支持1.16.0版本及以后的arm macOS。
% goenv install 1.17.6
% goenv global 1.17.6
请确认是否可以参考所需的(AMD版/ARM版)的版本。
% exec $SHELL
% go version
go version go1.17.6 darwin/arm64
2. 安装aws-sam-cli
安装 aws-sam-cli。
在 macOS 中,您可以使用 brew 来安装 aws-sam-cli。
在除了macOS以外的环境中进行设置的步骤。
% brew tap aws/tap
% brew install aws-sam-cli
% sam --version
SAM CLI, version 1.37.0
获取aws-sam的官方示例。
% docker --version
Docker version 20.10.12, build e91ed57
可以使用以下命令获取AWS官方的示例文件集。
只需简单地运行%sam init命令,即可以交互方式进行各种设置。
% mkdir lambda_go_test
% cd lambda_go_test
% sam init --package-type Image --base-image amazon/go1.x-base --name golang-sam-sample
在本地环境中启动 Lambda
进入生成的样本文件组的根目录,并烧录DockerImage。
% cd golang-sam-sample
% sam build
等待图像完成后,尝试运行Lambda和APIGateway。
% sam local start-api
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2022-01-30 18:31:58 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
如果使用curl命令发送请求并获得了问候,那就是成功了。
% curl http://127.0.0.1:3000/hello
Hello, xxx.xxx.xxx.xxx
随后可以适当编辑main.go文件,改变Lambda的处理内容,也可以编辑template.yaml文件以增加Lambda的数量,并进行一些实验。
故障排除
无论重试多少次,Arm版的Golang仍然无法下载。
你是不是通过Rosetta 2启动了Terminal吗? (是的,我是这样做的)。