俺のアウトプット

調べたこと、試したことを書きます

AWS Cloud9上で作成したLambda関数でPython3外部モジュールを利用する

Lambda関数でPythonの外部モジュールを利用する場合、Lambda関数デプロイパッケージに含める必要があります。

ローカルの場合は、zipにまとめてAWS Lambdaへアップロードする必要がありますが、AWS Cloud9上からデプロイする場合(つまりSAM)は簡単です。

Lambda関数を作成・デプロイ・実行の仕方は、下記のエントリを参照してください。

ローカル上にLambda関数を作成

ローカル上にLambda関数を作成します。

右側サイドバーにある、[AWS Resources] を選択して [AWSリソース] ウィンドウを開き、[λ+] ボタンをクリックします。

  • 関数名
    • getLastDayOfNextMonth
  • アプリケーション名
    • GetLastDayOfNextMonth
  • ランタイム
    • Python 3.6
  • 設計図
    • empty-python
  • 関数トリガー
    • none
  • メモリ
    • 128MB
  • ロール
    • 自動生成(Automatically generate role)

AWS Cloud9上に、GetLastDayOfNextMonthディレクトリが作成されます。

年月を指定して翌月末日を取得するLambda関数

lambda_function.pyを下記コードに差し替えて、保存 (Command+S) します。

lambda_function.py

import datetime
from dateutil import relativedelta

def lambda_handler(event, context):
    today = datetime.date.today()
    first_day = datetime.date(event.get('year', today.year), event.get('month', today.month), 1)
    last_day = first_day + relativedelta.relativedelta(months=+1, day=99)

    return { 
        'year' : last_day.year,
        'month': last_day.month,
        'day': last_day.day
    }

今回は、日付操作用のdateutilsモジュールを利用します。

  • 入力に年月を指定
  • 省略した場合は当日の年月をデフォルト値に設定
  • 戻り値に翌月末日の年月日を返却
    • 2018年12月なら、2019年1月31日

外部モジュールのインストール

dateutilsモジュールをインストールします。

ターミナルから、GetLastDayOfNextMonthディレクトリに移動してインストールします。

$ cd GetLastDayOfNextMonth/
$ pip-3.6 install dateutils -t .

-tはどこにインストールするかのターゲットを、.はカレントディレクトリを意味します。

必要なモジュールがインストールされました。

f:id:kitsugi:20180929171723p:plain

ローカル上のLambda関数を実行

正しく動作するか、ローカル上で確認をします。

  1. [Local Functions] 内のLambda関数getLastDayOfNextMonthを右クリックしてメニュー表示
  2. [Run] - [Run Local] を選択
  3. [Payload] ペインに入力値を設定して [Run] ボタンをクリック

Payload

{
  "year": 2018,
  "month": 12
}

Response

{
    "year": 2019,
    "month": 1,
    "day": 31
}

正しく表示されました。

AWS上でLambda関数を実行

ローカル上のLambda関数をAWS上にデプロイして実行します。

デプロイ

  1. [Local Functions] 内のLambda関数getLastDayOfNextMonthを右クリックしてメニュー表示
  2. [Deploy] を選択

Lambda関数のリモート実行

  1. [Local Functions] 内のLambda関数getLastDayOfNextMonthを右クリックしてメニュー表示
  2. [Run] - [Run Remote] を選択

AWS Lambdaコンソール画面上で、モジュールがデプロイされていることが確認できます。

f:id:kitsugi:20180929171742p:plain

参考