はじめまして、LDIで開発をしているOKです。 初投稿になります。
今回紹介するのは、Serverless Framework
を利用して、AWS Lambda
のプロジェクトの作成から、
AWS環境を利用せずに、ローカルで Lambda + API Gateway
を実行するという事をしようと思います。
- 環境
- Serverless Framework のインストール
- Serverless Framework でプロジェクトを作成
- Serverless offline Pluginインストール
- ファイルの編集
- Serverless Offline でローカル実行
- あとがき
環境
本記事は以下の環境で作成しています。
- Mac Book Pro (Intel製チップ)
- macOS Big Sur
- Go 1.17
Serverless Framework のインストール
まず、Serverless Framework
をインストールします。
次のコマンドを実行してください。
brew install serverless
インストールが完了したらバージョンを確認してみましょう。
(インストールするタイミングでバージョンは変わると思います)
sls -v Running "serverless" from node_modules Framework Core: 3.5.1 (local) 3.4.0 (global) Plugin: 6.1.2 SDK: 4.3.1
Serverless Framework でプロジェクトを作成
続いて、Serverless Framework
でプロジェクトの雛形を作成します。
次のコマンドを実行してください。(samplePJ は任意の名前で)
sls create -t aws-go-dep -p samplePJ
コマンドを実行すると、samplePJ
ディレクトリ配下に幾つかファイルが作成されています。
そのうち、Gopkg.toml
というファイルは要らないので削除し、代わりに go.mod
ファイルを作成してください。
Serverless offline Pluginインストール
続いて、Lambda と API Gateway をエミュレートしてくれる Serverless Offline
プラグインをインストールします。
次のコマンドを実行してください。
sls plugin install --name serverless-offline
ファイルの編集
今回はGoの実装自体には手を入れず、Serverless Offline
でローカル実行することに注力します。
serverless.yml 編集
まず、 serverless.yml
を編集します。
コメントは消しましたが、テンプレートで作成されものに対して plugins
と custom
を追加した以外はそのままです。
大事な事としては、Serverless Offline
で Go
のプログラムを実行する場合は、Docker を有効にしないと正しく動かないです。10〜12行目で対応しています。
全量は次の通り。
service: samplepj frameworkVersion: '3' # serverless-offline プラグイン追加 plugins: - serverless-offline # serverless offline 実行時は Docker で起動するように指定 custom: serverless-offline: useDocker: true provider: name: aws runtime: go1.x package: patterns: - '!./**' - ./bin/** functions: hello: handler: bin/hello events: - httpApi: path: /hello method: get world: handler: bin/world events: - httpApi: path: /world method: get
Makefile 編集
続いて、 Makefile
を編集します。
テンプレートの初期状態に対して、 build
を編集し、 deploy-local
を追加しています。
全量は以下となります。
.PHONY: build clean deploy deploy-local build: clean @env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/hello hello/main.go @env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/world world/main.go clean: @rm -rf ./bin deploy-local: build @sls offline deploy: clean build @sls deploy --verbose
以上で準備は完了です。
Serverless Offline でローカル実行
早速次のコマンドを実行します。
(※ 事前に Docker
を起動しておいてください)
make deploy-local
次のようなログが流れれば成功です。
ログにあるURL(http://localhost:3000/hello )をブラウザなどで入力して試してください。
次のようにレスポンスが取得できます。
あとがき
以上でAWS環境なしに、ローカルで Lambda + API Gateway
を実行する環境ができたので、
後は必要なLambda関数を作成したり編集したりして手軽に動作確認することができます。