ハンズオン(簡易版): Lambda基礎 関数(Python)

1.1. Python関数コードファイルの作成 (handson-cli-lambda-function_basic-function)

手順の目的 [why]

Lambda関数"handson-cli-lambda-function_basic-function"のソースコードファイルを作成します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

1. Python関数名

Python関数名を指定します。

変数の設定:

PYTHON_FUNCTION_NAME='lambda_handler'

2. Lambda関数コードファイル用ディレクトリ

Lambda関数コードファイル用ディレクトリを指定します。

変数の設定:

DIR_LAMBDA_FUNCTION_CODE="${HOME}/environment/conf-handson-cli-lambda"

ディレクトリが存在することを確認します。

コマンド:

ls -d ${HOME}/environment/conf-handson-cli-lambda

結果(例:存在する場合):

${HOME}/environment/conf-handson-cli-lambda

存在しない場合は作成します。

コマンド:

mkdir -p ${HOME}/environment/conf-handson-cli-lambda

結果(例):

(出力なし)

3. Lambda関数コードファイル名

Lambda関数コードファイル名を指定します。

変数の設定:

LAMBDA_FUNCTION_CODE_NAME='handson-cli-lambda-function_basic-function.py'

変数の設定:

FILE_CODE_FUNCTION="${DIR_LAMBDA_FUNCTION_CODE}/${LAMBDA_FUNCTION_CODE_NAME}" \
  && echo ${FILE_CODE_FUNCTION}

結果(例):

${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-function_basic-function.py

設定値の確認

各変数に正しい設定値が格納されていることを確認しながら保存します。

変数の確認:

cat << END

  # 1. PYTHON_FUNCTION_NAME:"lambda_handler"
       PYTHON_FUNCTION_NAME="${PYTHON_FUNCTION_NAME}"
  # 2. DIR_LAMBDA_FUNCTION_CODE:"${HOME}/environment/conf-handson-cli-lambda"
       DIR_LAMBDA_FUNCTION_CODE="${DIR_LAMBDA_FUNCTION_CODE}"
  # 3. FILE_CODE_FUNCTION:"${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-function_basic-function.py"
       FILE_CODE_FUNCTION="${FILE_CODE_FUNCTION}"

END

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

関数コードファイルの作成します。

変数の確認:

cat << ETX

  # FILE_CODE_FUNCTION:"${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-function_basic-function.py"
    FILE_CODE_FUNCTION="${FILE_CODE_FUNCTION}"

ETX

コマンド:

cat << EOF > ${FILE_CODE_FUNCTION}
import os
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

  logger.info('## ENVIRONMENT VARIABLES')
  logger.info(os.environ)
  logger.info('## EVENT')
  logger.info(event)
  logger.info('## CONTEXT')
  logger.info(vars(context))

  if event.get('key1'):
    logger.info('## PAYLOAD(key1)')
    logger.info(event['key1'])

  logger.info('## ENV')
  env = os.environ.get('ENV')
  if env == 'product':
    logger.info('product environment')
  else:
    logger.info('develop environment')

  logger.info('## REMAINING TIME (ms)')
  logger.info(context.get_remaining_time_in_millis())
  return {
      "statusCode": 200
  }
EOF

cat ${FILE_CODE_FUNCTION}

結果(例):

import os
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

  logger.info('## ENVIRONMENT VARIABLES')
  logger.info(os.environ)
  logger.info('## EVENT')
  logger.info(event)
  logger.info('## CONTEXT')
  logger.info(vars(context))

  if event.get('key1'):
    logger.info('## PAYLOAD(key1)')
    logger.info(event['key1'])

  logger.info('## ENV')
  env = os.environ.get('ENV')
  if env == 'product':
    logger.info('product environment')
  else:
    logger.info('develop environment')

  logger.info('## REMAINING TIME (ms)')
  logger.info(context.get_remaining_time_in_millis())
  return {
      "statusCode": 200
  }

完了確認

「Lambda関数コードファイル"${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-function_basic-function.py"が存在する。」ことを確認します。

コマンド:

ls ${FILE_CODE_FUNCTION}

結果(例):

${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-function_basic-function.py

手順の完了