Serverless Frameworkを使ってGo言語でStageと環境変数を設定する方法を解説します。
- Serverless FrameworkでStageごとにデプロイする方法
- Serverless Frameworkで環境変数を設定する方法
- Go言語で環境変数を呼び出す方法
- serverless 3.27.0
- go 1.18.2
環境を作る方法についてはこちらで解説していますのでよかったらみて見てください!
【Go】Serverless FrameworkでAPI Gateway・Lambdaを作成しAPIを構築する方法を解説
serverless
というコマンドは、sls
というエイリアスを使って置き換えることもできるので、皆さんのお好きな方を使ってください。
本記事内では、serverless
の方に統一しています。
Stageを設定する方法
ここのStageとはステージング環境や本番環境のことを指します。
Stageの設定はとてもシンプルで、下記のように--stage
オプションを指定するだけです。(省略して-s
でも可。)
$ serverless deploy --stage [stage名]
例えば、--stage staging
や--stage production
のように指定します。
デプロイするとこんな感じでAPI GatewayにStageごとのAPIが作られます。
何も指定しないとdev
というStage名になります。
参考: 公式ドキュメント
環境変数の設定
続いてStageごとに環境変数を設定する方法を解説します。
.envを使う方法
https://www.serverless.com/framework/docs/environment-variables
.env
を使って環境変数を設定できます。
.envファイルを作成
.env.[stage名]
のようにするとStageごとに環境変数を指定できます。
該当するファイルがない場合は、.env
ファイルを読んでくれます。
ENV_NAME=dev
ENV_NAME=production
Serveless.ymlを編集
serverless.yml
にuseDotenv: true
を追加します。
service: go-serverless-sample
frameworkVersion: "3"
useDotenv: true
provider:
name: aws
runtime: go1.x
region: ap-northeast-1
...
Serveless.ymlにenvoriomentを追加
service: go-serverless-sample
frameworkVersion: "3"
useDotenv: true
provider:
name: aws
runtime: go1.x
region: ap-northeast-1
environment:
ENV_NAME: ${env:ENV_NAME}
functionごとに設定することも可能です。
functions:
hello:
handler: bin/handlers/hello
events:
- httpApi:
path: /hello
method: get
environment:
ENV_NAME: ${env:ENV_NAME}
Handlerから環境変数を呼び出す
os.Getenv("環境変数KEY")
の形で呼び出すことができます。
package main
import (
"bytes"
"context"
"encoding/json"
"os"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
type Response events.APIGatewayProxyResponse
func Handler(ctx context.Context) (Response, error) {
var buf bytes.Buffer
body, err := json.Marshal(map[string]interface{}{
"message": "Hello World from " + os.Getenv("ENV_NAME"),
})
if err != nil {
return Response{StatusCode: 404}, err
}
json.HTMLEscape(&buf, body)
resp := Response{
StatusCode: 200,
IsBase64Encoded: false,
Body: buf.String(),
Headers: map[string]string{
"Content-Type": "application/json",
},
}
return resp, nil
}
func main() {
lambda.Start(Handler)
}
モグモグさん
これでLambda関数を叩くと、環境変数が取得できていることがわかります!
dev: {"message":"Hello World from dev"}
production: {"message":"Hello World from production"}
Parametersを使う方法
Parametersを使うことでStageごとに環境変数を設定できます。
service: go-serverless-sample
frameworkVersion: "3"
params:
prod:
domain: myapp.com
dev:
domain: preview.myapp.com
provider:
environment:
APP_DOMAIN: ${param:domain}
その他の方法
主要な2つ以外にもいくつか方法がありますので、公式ドキュメントを確認ください。
モグモグさん
より柔軟に、ユースケースにあった方法が見つかると思います!
まとめ
Serverless Frameworkを使ってGo言語でStageと環境変数を設定する方法を解説しました。
簡単にStageを分けたり、環境変数を指定できると思うのでぜひ使ってみてください!