3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

記載内容

  • AWS Lambdaで関数を構築する手順
  • AWS Lambdaで環境変数を用いて設定を外部化する手順
  • AWS Lambdaで外部ライブラリを使用する手順
  • AWS Lambdaレイヤーで共通モジュールを構築する手順

AWS Lambdaのサービス概要

image.png

  • プログラムの実行環境を提供してくれるサービスです。
  • スペックと実行時間で料金を支払えばよいため、自前でサーバを用意した場合と比べると、初期費用や運用コストが節約できます。
  • 標準で以下のラインタイムに対応しています。
    .net6(C#)、python、Node.js、Ruby、Java、Go
  • 自分で用意したカスタムランタイムを組み込むこともできます。AWSテクノロジーパートナーが提供するカスタムラインタイムもあります。

AWS Lambdaで関数を構築する手順

AWSコンソールのLambdaを選びます。トップページの関数の作成を選びます。

ここでは一から作成を選びます。任意の関数名を入力します。ランタイムはここではPython3を選択します。実行ロールはそのままで関数の作成を選択します。
image.png

関数名のフォルダに、1つのpythonファイルが格納される形で作成されます。
image.png

単純にステータスコードとメッセージのbodyを返すコードが作成されます。
lambda_handlerがエントリーポイントです。

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

作成した関数のテストが行なえます。テストタブを選択します。
リクエストパラメータを指定できますが、ここでは空のJsonオブジェクトにします。
テストを選択します。実行結果が表示されます。
image.png

実行結果トグルを展開すると以下のことがわかります。
・実行結果は成功である。
・初期所要時間 ランタイム外からこの関数がロードされ、実行できる状態にまで持っていくのに107msかかった。
・所要時間 実行時間は1.5msだった。
・課金時間 課金としてカウントされる時間は2ms。
・設定済みのリソースは Lambdaの実行メモリスペックで128MBである。スペックはメモリでのみ指定が可能だが、メモリが大きくなるとCPUの性能もあがる。
image.png

料金は スペックによる時間単価実行時間 で計算される。実行時間が短く抑えられて、なるべく低スペックが良い。なおLabmdaの実行時間は最大15分の制限がある。

AWS Lambdaで環境変数を用いて設定を外部化する手順

コードを修正することなく挙動を変えるには環境変数が使えます。
設定タブを選択肢ペインから環境変数を選択します。
編集を選択します。
image.png

環境変数の追加を選択し、キーと値を入力して保存します。
image.png

環境変数を読み込むようにコードを見直します。変更箇所はマーカー部分です。
コードを変更したらDeployをクリックして実行環境に反映させます。
image.png

Changes not deployedの表示が消えたらデプロイ完了です。
image.png

テストします。環境変数に指定した値が出力されているのがわかります。
image.png

AWS Lambdaで外部ライブラリを使用する手順

ローカルマシンで外部ライブラリをインストールしたフォルダを作成し、zip圧縮してアップロードする形でLambda関数を作成します。
以下の例はLinuxコマンドで作成する手順になります。Windows環境の場合は手作業で作成ください。
ここでは外部ライブラリとして日付操作のmomentライブラリを用います。

フォルダを作成しインストール先を指定して、pipコマンドでmomentをカレントにインストールします。

mkdir mylambda-exlib
cd mylambda-exlib/
pip install moment -t .

Lambda本体のファイルはAWSコンソールで編集するので、ここでは空のファイルだけ作成しておきます。

touch lambda_function.py
chmod 755 lambda_function.py

zipに圧縮します。

zip -r mylambda-exlib.zip ./*

Lambda関数では外部ライブラリや本体ファイルが直下に配置されるように、(つまり、サブフォルダがない)圧縮ファイルを作成する必要があります。

AWSコンソールでLambdaの新規作成を選択します。任意の名前を入力しランタイムは外部ライブラリと同じpython3を選びます。
image.png

デフォルトのスクリプトファイルが作成されますが、そのままでアップロード元からzipファイルを選択します。
image.png

アップロードファイルに作成したzipファイルを選択して保存します。
image.png

zipファイルが展開されます。外部ライブラリが直下に展開されているのがわかります。
本体のスクリプトファイルに、外部ライブラリを使ったコードを打ち込みます。
image.png

デプロイしテストします。外部ライブラリmomentを通して、システム日付が取得できているのがわかります。
image.png

AWS Lambdaレイヤーで共通機能を構築する手順

レイヤーとは頻出するコードを、共通モジュールとして登録できる機能です。
関数ではなくレイヤーとして作成し、Lambda関数からimportして使います。

レイヤーはローカルで開発し、zip圧縮してアップロードする形で作成します。

ここでもmomentを使った機能を用いて開発していきます。
フォルダをpythonの名前で作成し、momentをインストールします。

mkdir python
cd python/
pip install moment -t .

レイヤーの場合はpythonというフォルダに収まる形で作成する必要があります。

Lambda本体のコードを作成します。ファイル名は任意です。ここではmylambda_layer。pyとします。

import moment

class CalcDate():

    def getAfterDay(self, _base, addDay):
        day = moment.date(_base).add('days', addDay).format("YYYY-MM-DD")
        print(day)
        return day

何日後の日付を取得するモジュールにしました。

pythonフォルダごと圧縮します。

cd ..
zip -r mylambda_layer.zip python/

AWSコンソールでレイヤーを登録します。
レイヤーは左ペインから選択して行います。
image.png

名称はzipファイル名にします。作成したzipファイルをアップロードします。
ランタイムはpython3xを選択します。
image.png

作成されます。同じ名称で作成する度にバージョンが上がっていくので、ここではバージョン3となっていますが、初めて作成した場合はバージョン1となります。
image.png

レイヤーを呼び出すLambda関数を作成します。
任意の名前で一から作成で関数を作成し、コードタブの一番下にあるレイヤーの追加を選択します。
image.png

カスタムレイヤーを選択し、作成したレイヤーとバージョンを選択します。
image.png

Lambda関数のコードをレイヤーのメソッドを呼び出すコードにします。

import json
import mylambda_layer

def lambda_handler(event, context):
    s = mylambda_layer.CalcDate()
    result = s.getAfterDay('2023-06-08', 2)
    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

テストします。期待した通りになっています。
image.png

まとめ

AWS Lambdaで関数を作成する、外部ライブラリを使う、レイヤーを使って共通化を開発効率を上げる方法をまとめました。
AWS Lambdaは他サービスとの連携で力を発揮するサービスです。
他サービスと連携する場合は、IAMで適切なアクセス制御を行いセキュリティを高めることができます。
記事としてまとめていきたいと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?