【AWS】Lambda ~ Python / 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/10/05/105550

のコードを AWS Lambda (ラムダ)で実行する必要ができたのだが
よくよく考えると Lambda は、Javaでしか組んだことがなく、
Python は初めてだったので、メモっておく。

後、大分、前にやったから、すっかり忘れているので、
リハビリも兼ねて、デプロイ手順とかもメモっておく。

目次

【1】AWS Lambda
【2】テンプレート
【3】プログラム実行までの流れ
 1)Lambda関数をAWS上に登録する
 2)Test Event登録およびTest 実行
 3)処理したいプログラムを実装する
【4】その他技術事項
 1)環境変数の設定・取得
 2)ログ出力

【1】AWS Lambda

https://dk521123.hatenablog.com/entry/2017/04/05/235618

より抜粋
~~~~~~~~
* サーバレスのプログラム実行環境
~~~~~~~~

【2】テンプレート

* Python の場合、以下のようになる。

Pythonコード

import json

def lambda_handler(event, context):
  # ★ここに自分の実装を書く
  return {
    'statusCode': 200,
    'body': json.dump("Hello from Lambda!")
  }

【3】プログラム実行までの流れ

1)Lambda関数をAWS上に登録する

[1] AWSマネージメントコンソールにログインし、
 「Lambda」のページにアクセスする
[2] 画面右上の「Create function」ボタン押下
[3] 以下を入力し、画面右下の「Create function」ボタン押下
~~~~~~~
 * 「Author from scratch」を選択(デフォルトで選択されている)

Base information
 * Function name : 任意(今回は「hello_world」)
 * Runtime : Python 3.9 (他にも「3.6」~「3.8」が選択可能)
 * Architecture : x86_64(デフォルトで選択されている)
~~~~~~~

※ 後は、既存のロールやVPCなどがあれば選択する

2)Test Event登録およびTest 実行

「1)-[3]」の流れのまま...

[1] 「Test」ボタン押下
[2] Test Eventの設定ページにおいて、以下を入力し、「Test」ボタン押下
 * Event template: hello_world (デフォルトで選択されている)
 * Event name : 任意(ここでは「hello_world」)

3)処理したいプログラムを実装する

* テンプレートの「# ★ここに自分の実装を書く」部分に自分の実装を書く

使用上の注意

* 修正後にTestする際は、一度、「Deploy」ボタン押下後ではないと
 修正が反映されないので注意
 => 結構、ハマった。ログ埋め込んでもでてこないので、、、

【4】その他技術事項

1)環境変数の設定・取得

* 以下の公式サイトに記載されている。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html

a) 環境変数を取得する(例:現在のRegion nameの取得)

import os

region = os.environ.get('AWS_REGION')

b) 独自の環境変数を設定する

[1] AWS マネージメントコンソールにおいて、対象のLambdaを選択する
[2] [Configuration]-[Enviroment variables]-[Edit]を選択
[3] 「Key」「Value」に環境変数名とその値を入力し、「Save」ボタン押下

 => 使い方は「a) 環境変数を取得する」のようにすればいい。

2)ログ出力

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-logging.html

に詳しく記載されている。

 上述の「使用上の注意」で述べているように
「Deploy」ボタン押下しないと修正が反映されないので注意。
 => ログ埋め込んでもログが出力されなくてハマって大変だった、、、

サンプル

import os
import logging

# print()文でもできる(簡単なツールならprint()でもいいかも)

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

def lambda_handler(event, context):
  logger.info('## ENVIRONMENT VARIABLES')
  logger.info(os.environ)

確認方法

[1] AWS マネージメントコンソールにおいて、対象のLambdaを選択する
[2] [Monitor]-[Logs](又は「View logs in CloudWatch」)を選択

参考文献

https://dev.classmethod.jp/articles/lambda-my-first-step/

関連記事

Lambda ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2017/04/05/235618
Lambda ~ Lambda で気を付ける事項 ~
https://dk521123.hatenablog.com/entry/2018/02/04/233700
Lambda ~ Lambda でハマったこと ~
https://dk521123.hatenablog.com/entry/2017/12/16/231714
Serverless Framework ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/11/02/000200
Serverless Framework ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/03/234825
機密データの管理 ~ Secrets Manager / boto3 編 ~
https://dk521123.hatenablog.com/entry/2021/10/05/105550