0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】Go Lambdaのローカル開発環境を作る ( aws-sam-cli + M1mac )

Posted at

はじめに

aws-sam-cliを利用すれば、手元の端末内にLambdaの実行環境を再現して、動作検証できる。
手元でコードを修正しながらその場で動作確認できるため、ディプロイの手間とLambdaの費用を削減できる。
nodejsとpythonの導入手順は多い中、Golangのドキュメントが少ないように感じたため、ここで纏める。

やること

  • 開発用にarm版Golangをローカル環境にインストールする
  • aws-sam-cliでローカル環境にLambdaとAPIGatewayを構築する

前提

  • arm版(M1チップ)のmacOS環境をベースに説明する (goenv導入部分以外は大差ないはず)
  • Z shell (zsh) をベースに説明する (環境変数の通し方以外は大差ないはず)
  • Dockerは既にインストールしてあるものとして説明する

もくじ

  1. Golangをセットアップする
  • aws-sam-cliをセットアップする
  • ローカル環境でLambdaを起動する

1. Golangをセットアップする

1-1. goenvをインストール

brewでそのままgoenvをインストールすると、古いバージョンしか落ちてこない。
したがって、下記コマンドで強制的に最新版を取る。

macOSでgoenvをインストール.
% brew uninstall goenv && brew install --HEAD goenv
% goenv -v
goenv 2.0.0beta11

下記はarm版(M1チップ)のmacOSでarm版Goを取得するための設定。
必要なければスキップしても良い。

zshrcに環境変数設定を追記(bashを使っているなら適宜読み換え).
% 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

arm版macOSに対応しているのは1.16.0以降のみなので注意。

stableな最新版をインストール.
% 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をセットアップする

2-1. aws-sam-cliをインストール

macOSの場合、brewでaws-sam-cliをインストールできる。

↓ macOS以外の環境でセットアップする手順

macOSでaws-sam-cliをインストール.
% brew tap aws/tap
% brew install aws-sam-cli
% sam --version
SAM CLI, version 1.37.0

2-2. aws-samの公式サンプルを取得

dockerがインストールされているか確認.
% docker --version
Docker version 20.10.12, build e91ed57

下記コマンドでAWS公式のサンプルファイル群を取得できる。
単に% sam initで実行すれば、対話的に各種設定を進めることもできる。

AWS公式サンプルを取得.
% mkdir lambda_go_test
% cd lambda_go_test
% sam init --package-type Image --base-image amazon/go1.x-base --name golang-sam-sample

3. ローカル環境でLambdaを起動する

生成されたサンプルファイル群のルートディレクトリに入ってDockerImageを焼く。

Dockerfileを読んでImageを焼くコマンド.
% cd golang-sam-sample
% sam build

Imageが焼き上がったらLambdaとAPIGatewayを動かしてみる。

aws-sam-localを起動するコマンド.
% 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で叩いて、挨拶してもらえたなら成功。

もう1つターミナルを開いて疎通確認.
% curl http://127.0.0.1:3000/hello
Hello, xxx.xxx.xxx.xxx

このあとは適宜main.goを編集してLambdaの処理内容を変えたり、template.yamlを編集してLambdaの数を増やしたりして遊ぶ。

トラブルシューティング

何度やり直してもArm版Golangが落ちてこない

TerminalをRosetta2経由で起動していませんか (私はしていました)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?