3
2

More than 3 years have passed since last update.

Go lambda のデフォルト環境変数

Posted at

はじめに

AWS SDK for GoをLambdaで使用する際に特に設定無しで使用できるので
多分アクセスキーとか環境変数にセットされているんだろうなーと思いつつも
実際に試したわけではないので検証してみました。

検証

検証コード

package main

import (
    "context"
    "fmt"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-lambda-go/lambdacontext"
    "log"
    "os"
)

func init() {
    log.Print("init start")
    showAllEnv()
    log.Print("init end")
}

func Handler(ctx context.Context) (string, error) {
    log.Print("handler start")
    if lambdaCtx, ok := lambdacontext.FromContext(ctx); ok {
        log.Print(fmt.Sprintf("Context AwsRequestID: %v",lambdaCtx.AwsRequestID))
        log.Print(fmt.Sprintf("Context Identity: %v",lambdaCtx.Identity))
        log.Print(fmt.Sprintf("Context InvokedFunctionArn: %v",lambdaCtx.InvokedFunctionArn))
        log.Print(fmt.Sprintf("Context Custom: %v",lambdaCtx.ClientContext.Custom))
        log.Print(fmt.Sprintf("Context Env: %v",lambdaCtx.ClientContext.Env))
        log.Print(fmt.Sprintf("Context Client: %v",lambdaCtx.ClientContext.Client))
    }
    showAllEnv()
    log.Print("handler end")
    return "success", nil
}

func main() {
    log.Print("main start")
    showAllEnv()
    lambda.Start(Handler)
    log.Print("main end")
}

func showAllEnv() {
    log.Print("-showAllEnv start-----------------------------")
    for _, e := range os.Environ() {
        log.Println(e)
    }
    log.Print("-showAllEnv end--------------------------------")
}

実行ログ(長いので折りたたみ)
2020/01/27 06:41:34 init start
2020/01/27 06:41:34 -showAllEnv start-----------------------------
2020/01/27 06:41:34 PATH=/usr/local/bin:/usr/bin/:/bin:/opt/bin
2020/01/27 06:41:34 LD_LIBRARY_PATH=/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib
2020/01/27 06:41:34 LANG=en_US.UTF-8
2020/01/27 06:41:34 TZ=:UTC
2020/01/27 06:41:34 _LAMBDA_CONTROL_SOCKET=18
2020/01/27 06:41:34 _LAMBDA_CONSOLE_SOCKET=20
2020/01/27 06:41:34 LAMBDA_TASK_ROOT=/var/task
2020/01/27 06:41:34 LAMBDA_RUNTIME_DIR=/var/runtime
2020/01/27 06:41:34 _LAMBDA_LOG_FD=27
2020/01/27 06:41:34 _LAMBDA_SB_ID=0
2020/01/27 06:41:34 _LAMBDA_SHARED_MEM_FD=15
2020/01/27 06:41:34 AWS_REGION=ap-northeast-1
2020/01/27 06:41:34 AWS_DEFAULT_REGION=ap-northeast-1
2020/01/27 06:41:34 AWS_LAMBDA_LOG_GROUP_NAME=/aws/lambda/<functionName>
2020/01/27 06:41:34 AWS_LAMBDA_LOG_STREAM_NAME=2020/01/27/[$LATEST]ebf3ce00674e4576a679be48a4655a2f
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_NAME=<functionName>
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_MEMORY_SIZE=512
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_VERSION=$LATEST
2020/01/27 06:41:34 _AWS_XRAY_DAEMON_ADDRESS=169.254.79.2
2020/01/27 06:41:34 _AWS_XRAY_DAEMON_PORT=2000
2020/01/27 06:41:34 AWS_XRAY_DAEMON_ADDRESS=169.254.79.2:2000
2020/01/27 06:41:34 AWS_XRAY_CONTEXT_MISSING=LOG_ERROR
2020/01/27 06:41:34 _X_AMZN_TRACE_ID=Parent=01314153196111bc
2020/01/27 06:41:34 AWS_EXECUTION_ENV=AWS_Lambda_go1.x
2020/01/27 06:41:34 _HANDLER=main
2020/01/27 06:41:34 _LAMBDA_RUNTIME_LOAD_TIME=1234056831378
2020/01/27 06:41:34 _LAMBDA_SERVER_PORT=33395
2020/01/27 06:41:34 AWS_ACCESS_KEY=<AWS AccessKey>
2020/01/27 06:41:34 AWS_ACCESS_KEY_ID=<AWS AccessKey>
2020/01/27 06:41:34 AWS_SECRET_KEY=<AWS SecretAccessKey>
2020/01/27 06:41:34 AWS_SECRET_ACCESS_KEY=<AWS SecretAccessKey>
2020/01/27 06:41:34 AWS_SESSION_TOKEN=<AWS SessionToken>
2020/01/27 06:41:34 AWS_SECURITY_TOKEN=<AWS SessionToken>
2020/01/27 06:41:34 -showAllEnv end--------------------------------
2020/01/27 06:41:34 init end
2020/01/27 06:41:34 main start
2020/01/27 06:41:34 -showAllEnv start-----------------------------
2020/01/27 06:41:34 PATH=/usr/local/bin:/usr/bin/:/bin:/opt/bin
2020/01/27 06:41:34 LD_LIBRARY_PATH=/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib
2020/01/27 06:41:34 LANG=en_US.UTF-8
2020/01/27 06:41:34 TZ=:UTC
2020/01/27 06:41:34 _LAMBDA_CONTROL_SOCKET=18
2020/01/27 06:41:34 _LAMBDA_CONSOLE_SOCKET=20
2020/01/27 06:41:34 LAMBDA_TASK_ROOT=/var/task
2020/01/27 06:41:34 LAMBDA_RUNTIME_DIR=/var/runtime
2020/01/27 06:41:34 _LAMBDA_LOG_FD=27
2020/01/27 06:41:34 _LAMBDA_SB_ID=0
2020/01/27 06:41:34 _LAMBDA_SHARED_MEM_FD=15
2020/01/27 06:41:34 AWS_REGION=ap-northeast-1
2020/01/27 06:41:34 AWS_DEFAULT_REGION=ap-northeast-1
2020/01/27 06:41:34 AWS_LAMBDA_LOG_GROUP_NAME=/aws/lambda/<functionName>
2020/01/27 06:41:34 AWS_LAMBDA_LOG_STREAM_NAME=2020/01/27/[$LATEST]ebf3ce00674e4576a679be48a4655a2f
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_NAME=<functionName>
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_MEMORY_SIZE=512
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_VERSION=$LATEST
2020/01/27 06:41:34 _AWS_XRAY_DAEMON_ADDRESS=169.254.79.2
2020/01/27 06:41:34 _AWS_XRAY_DAEMON_PORT=2000
2020/01/27 06:41:34 AWS_XRAY_DAEMON_ADDRESS=169.254.79.2:2000
2020/01/27 06:41:34 AWS_XRAY_CONTEXT_MISSING=LOG_ERROR
2020/01/27 06:41:34 _X_AMZN_TRACE_ID=Parent=01314153196111bc
2020/01/27 06:41:34 AWS_EXECUTION_ENV=AWS_Lambda_go1.x
2020/01/27 06:41:34 _HANDLER=main
2020/01/27 06:41:34 _LAMBDA_RUNTIME_LOAD_TIME=1234056831378
2020/01/27 06:41:34 _LAMBDA_SERVER_PORT=33395
2020/01/27 06:41:34 AWS_ACCESS_KEY=<AWS AccessKey>
2020/01/27 06:41:34 AWS_ACCESS_KEY_ID=<AWS AccessKey>
2020/01/27 06:41:34 AWS_SECRET_KEY=<AWS SecretAccessKey>
2020/01/27 06:41:34 AWS_SECRET_ACCESS_KEY=<AWS SecretAccessKey>
2020/01/27 06:41:34 AWS_SESSION_TOKEN=<AWS SessionToken>
2020/01/27 06:41:34 AWS_SECURITY_TOKEN=<AWS SessionToken>
2020/01/27 06:41:34 -showAllEnv end--------------------------------
START RequestId: 3fec0fa8-4f1b-41a0-a24a-83300a468c5b Version: $LATEST
2020/01/27 06:41:34 handler start
2020/01/27 06:41:34 Context AwsRequestID: 3fec0fa8-4f1b-41a0-a24a-83300a468c5b
2020/01/27 06:41:34 Context Identity: 
{}

2020/01/27 06:41:34 Context InvokedFunctionArn: arn:aws:lambda:ap-northeast-1:<AccountId>:function:<functionName>
2020/01/27 06:41:34 Context Custom: map[]
2020/01/27 06:41:34 Context Env: map[]
2020/01/27 06:41:34 Context Client: 
{}

2020/01/27 06:41:34 -showAllEnv start-----------------------------
2020/01/27 06:41:34 PATH=/usr/local/bin:/usr/bin/:/bin:/opt/bin
2020/01/27 06:41:34 LD_LIBRARY_PATH=/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib
2020/01/27 06:41:34 LANG=en_US.UTF-8
2020/01/27 06:41:34 TZ=:UTC
2020/01/27 06:41:34 _LAMBDA_CONTROL_SOCKET=18
2020/01/27 06:41:34 _LAMBDA_CONSOLE_SOCKET=20
2020/01/27 06:41:34 LAMBDA_TASK_ROOT=/var/task
2020/01/27 06:41:34 LAMBDA_RUNTIME_DIR=/var/runtime
2020/01/27 06:41:34 _LAMBDA_LOG_FD=27
2020/01/27 06:41:34 _LAMBDA_SB_ID=0
2020/01/27 06:41:34 _LAMBDA_SHARED_MEM_FD=15
2020/01/27 06:41:34 AWS_REGION=ap-northeast-1
2020/01/27 06:41:34 AWS_DEFAULT_REGION=ap-northeast-1
2020/01/27 06:41:34 AWS_LAMBDA_LOG_GROUP_NAME=/aws/lambda/<functionName>
2020/01/27 06:41:34 AWS_LAMBDA_LOG_STREAM_NAME=2020/01/27/[$LATEST]ebf3ce00674e4576a679be48a4655a2f
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_NAME=<functionName>
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_MEMORY_SIZE=512
2020/01/27 06:41:34 AWS_LAMBDA_FUNCTION_VERSION=$LATEST
2020/01/27 06:41:34 _AWS_XRAY_DAEMON_ADDRESS=169.254.79.2
2020/01/27 06:41:34 _AWS_XRAY_DAEMON_PORT=2000
2020/01/27 06:41:34 AWS_XRAY_DAEMON_ADDRESS=169.254.79.2:2000
2020/01/27 06:41:34 AWS_XRAY_CONTEXT_MISSING=LOG_ERROR
2020/01/27 06:41:34 _X_AMZN_TRACE_ID=Parent=01314153196111bc
2020/01/27 06:41:34 AWS_EXECUTION_ENV=AWS_Lambda_go1.x
2020/01/27 06:41:34 _HANDLER=main
2020/01/27 06:41:34 _LAMBDA_RUNTIME_LOAD_TIME=1234056831378
2020/01/27 06:41:34 _LAMBDA_SERVER_PORT=33395
2020/01/27 06:41:34 AWS_ACCESS_KEY=<AWS AccessKey>
2020/01/27 06:41:34 AWS_ACCESS_KEY_ID=<AWS AccessKey>
2020/01/27 06:41:34 AWS_SECRET_KEY=<AWS SecretAccessKey>
2020/01/27 06:41:34 AWS_SECRET_ACCESS_KEY=<AWS SecretAccessKey>
2020/01/27 06:41:34 AWS_SESSION_TOKEN=<AWS SessionToken>
2020/01/27 06:41:34 AWS_SECURITY_TOKEN=<AWS SessionToken>
2020/01/27 06:41:34 -showAllEnv end--------------------------------
2020/01/27 06:41:34 handler end
END RequestId: 3fec0fa8-4f1b-41a0-a24a-83300a468c5b
REPORT RequestId: 3fec0fa8-4f1b-41a0-a24a-83300a468c5b  Duration: 0.91 ms   Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 32 MB  Init Duration: 5.75 ms

検証結果

AWS_ACCESS_KEY AWS_SECRET_KEY AWS_DEFAULT_REGION 等が環境変数に設定されているのは想定通り。
init(), main(), handler() で取得できる環境変数は(当然ながら)全て同一でした。

AWS公式リファレンスにあるものとほぼ同じですが多少違うものも取れています。

環境変数

Key Value Description
AWS_REGION ap-northeast-1 Lambda 関数が実行される AWS リージョン
AWS_DEFAULT_REGION ap-northeast-1 Lambda 関数が実行される AWS リージョン
AWS_ACCESS_KEY [AWS AccessKey] 関数の実行ロールから取得されたアクセスキー
AWS_ACCESS_KEY_ID [AWS AccessKey] 関数の実行ロールから取得されたアクセスキー
AWS_SECRET_ACCESS_KEY [AWS SecretAccessKey] 関数の実行ロールから取得されたシークレットアクセスキー
AWS_SECRET_KEY [AWS SecretAccessKey] 関数の実行ロールから取得されたシークレットアクセスキー
AWS_SECURITY_TOKEN [AWS SessionToken] 関数の実行ロールから取得されたセッショントークン
AWS_SESSION_TOKEN [AWS SessionToken] 関数の実行ロールから取得されたセッショントークン
AWS_EXECUTION_ENV AWS_Lambda_go1.x ランタイム識別子 プレフィックス AWS_Lambda_
AWS_LAMBDA_FUNCTION_MEMORY_SIZE 512 関数で使用できるメモリの量 (MB 単位)
AWS_LAMBDA_FUNCTION_NAME [functionName] function名
AWS_LAMBDA_FUNCTION_VERSION $LATEST 実行される関数のバージョン
AWS_LAMBDA_LOG_GROUP_NAME /aws/lambda/[functionName] CloudWatchのロググループ
AWS_LAMBDA_LOG_STREAM_NAME 2020/01/27/[$LATEST]ebf3ce00674e4576a679be48a4655a2f CloudWatchのログストリーム名
LAMBDA_RUNTIME_DIR /var/runtime ランタイムライブラリへのパス
LAMBDA_TASK_ROOT /var/task Lambda 関数コードのパス
LANG en_US.UTF-8 ランタイムのロケール
LD_LIBRARY_PATH /lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib
PATH /usr/local/bin:/usr/bin/:/bin:/opt/bin
TZ :UTC 環境のタイムゾーン (UTC)
_HANDLER main ハンドラー名
_AWS_XRAY_DAEMON_ADDRESS 169.254.79.2
_AWS_XRAY_DAEMON_PORT 2000
AWS_XRAY_CONTEXT_MISSING LOG_ERROR
AWS_XRAY_DAEMON_ADDRESS 169.254.79.2:2000
_X_AMZN_TRACE_ID Parent
_LAMBDA_CONSOLE_SOCKET 20
_LAMBDA_CONTROL_SOCKET 18
_LAMBDA_LOG_FD 27
_LAMBDA_RUNTIME_LOAD_TIME 1.23406E+12
_LAMBDA_SB_ID 0
_LAMBDA_SERVER_PORT 33395
_LAMBDA_SHARED_MEM_FD 15
3
2
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
3
2