【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は既にインストールしてあるものとして説明する

目录

    1. 安装Golang

 

    1. 安装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吗? (是的,我是这样做的)。

广告
将在 10 秒后关闭
bannerAds