ハンズオン(簡易版): Lambda基礎 レイヤー

5.1. Python関数コードファイルの更新 (handson-cli-lambda-basic-layer-function)

手順の目的 [why]

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

設定値の指定

設定値の指定

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

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

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

変数の設定:

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

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

変数の設定:

LAMBDA_FUNCTION_CODE_NAME='handson-cli-lambda-basic-layer-function.py'

変数の設定:

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

結果(例):

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

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

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

変数の設定:

DIR_LAMBDA_FUNCTION_ZIP="${HOME}/environment/artifact-handson-cli-lambda"

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

コマンド:

ls -d ${DIR_LAMBDA_FUNCTION_ZIP}

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

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

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

コマンド:

mkdir -p ${DIR_LAMBDA_FUNCTION_ZIP}

結果(例):

(出力なし)

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

Lambda関数名を指定します。

変数の設定:

LAMBDA_FUNCTION_NAME='handson-cli-lambda-basic-layer-function'

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

変数の設定:

FILE_LAMBDA_FUNCTION_ZIP="${DIR_LAMBDA_FUNCTION_ZIP}/${LAMBDA_FUNCTION_NAME}.zip" \
  && echo ${FILE_LAMBDA_FUNCTION_ZIP}

結果(例):

${HOME}/environment/artifact-handson-cli-lambda/handson-cli-lambda-basic-layer-function.zip

設定値の確認

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

変数の確認:

cat << END

  # 1. FILE_LAMBDA_FUNCTION_CODE:"${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-basic-layer-function.py"
       FILE_LAMBDA_FUNCTION_CODE="${FILE_LAMBDA_FUNCTION_CODE}"
  # 2. DIR_LAMBDA_FUNCTION_ZIP:"${HOME}/environment/artifact-handson-cli-lambda"
       DIR_LAMBDA_FUNCTION_ZIP="${DIR_LAMBDA_FUNCTION_ZIP}"
  # 3. FILE_LAMBDA_FUNCTION_ZIP:"${HOME}/environment/artifact-handson-cli-lambda/handson-cli-lambda-basic-layer-function.zip"
       FILE_LAMBDA_FUNCTION_ZIP="${FILE_LAMBDA_FUNCTION_ZIP}"

END

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

処理の実行

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

変数の確認:

cat << END

  # FILE_LAMBDA_FUNCTION_CODE:"${HOME}/environment/conf-handson-cli-lambda/handson-cli-lambda-basic-layer-function.py"
    FILE_LAMBDA_FUNCTION_CODE="${FILE_LAMBDA_FUNCTION_CODE}"

END

コマンド:

cat << EOF > ${FILE_LAMBDA_FUNCTION_CODE}
from datetime import datetime
import world

def lambda_handler(event, context):
    url = 'https://aws.amazon.com/jp/'

    print('Checking {} at {}...'.format(url, str(datetime.now())))
    try:
        statusCode = world.get(url)
    except:
        print('Check failed!')
        raise
    else:
        print('Check done!')
        print('statusCode:' + str(statusCode))
        return {
          "statusCode": statusCode,
        }
    finally:
        print('Check complete at {}'.format(str(datetime.now())))
EOF

cat ${FILE_LAMBDA_FUNCTION_CODE}

結果(例):

from datetime import datetime
import world

def lambda_handler(event, context):
    url = 'https://aws.amazon.com/jp/'

    print('Checking {} at {}...'.format(url, str(datetime.now())))
    try:
        statusCode = world.get(url)
    except:
        print('Check failed!')
        raise
    else:
        print('Check done!')
        print('statusCode:' + str(statusCode))
        return {
          "statusCode": statusCode,
        }
    finally:
        print('Check complete at {}'.format(str(datetime.now())))

ZIPファイルを作成します。

コマンド:

zip -j -X ${FILE_LAMBDA_FUNCTION_ZIP} ${FILE_LAMBDA_FUNCTION_CODE}

結果(例):

updating: handson-cli-lambda-layer-function.py (deflated 14%

完了確認

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

コマンド:

ls ${FILE_LAMBDA_FUNCTION_ZIP}

結果(例):

${HOME}/environment/artifact-handson-cli-lambda/handson-cli-lambda-basic-layer-function.zip

手順の完了