概要
触る機会があったので、知ったことをまとめていく。
Lambdaとは
AWSサービスのイベントをトリガーに自身がアップロードしたコードを動作させることができるというサービス
料金
料金は月額であり、「lambdaへのリクエスト数」と「lambdaを動かすときに消費したメモリサイズ(時間計算)」で計算される。
料金表はあらかじめ確保するメモリサイズに依存する
言語
コーディングできる言語は多岐にわたるが、「継続的なアクセスがなくCPUもそんなに使わない」のであれば「python」がいいらしい
ライブラリ
Python3でAWS環境を操作するには、boto3と呼ばれるライブラリが必要。
一時ディレクトリ
/tmpという一時ディレクトリがある。ファイルの受け渡しをしたいときとかに使う。
なお、同じファイル名を使うと、前の実行時のものが残っていてなおかつユーザー名が違っていてパーミッションエラーというのが起こりうるらしいので、毎回使い終わったらファイルを削除するのがいいらしい。
環境変数
lamdaに設定できる。
pythonだと、import os
を宣言した上で、os.envion['<環境変数名>']
で呼び出せる。
タイムアウト
処理のタイムアウトはMAX15分。
python3.8だとデフォルトで3秒らしい。
ロール
lambda関数にはIAMロールを設定する必要があるが、トリガーとなるAWSサービスへのアクセス権限は不要。イベントを受けてコード上でアクセスするAWSサービスへのアクセス権限が必要。
使い方
参考:https://dev.classmethod.jp/articles/lambda-my-first-step/
Lambda関数の新規作成
空の関数作成
Lamdaのコンソールへアクセス > 「関数の作成」ボタンを押下
→「関数の作成」ページが表示される
「一から作成」を選択 > 「基本的な情報」セクションで「関数名」(=目的)を入力し、「ランタイム」(=言語)を選択 > 「アクセス権限 - 実行ロール」で「AWSポリシーテンプレートから新しいロールを作成」を選択 > 「ロール名」に任意のロール名を設定 > ポリシーテンプレートは未選択で「関数の作成」ボタンを押下
→「Lamda関数設定」ページが表示される
Lambda関数に設定を追加
「Lambda関数設定ページ」でそれぞれ実施。
トリガーの設定
「トリガーを追加」を押下
→「トリガーを追加」ページが表示される
Lambda関数を起動するトリガーとなるAWSサービスを選択し、トリガーとなる条件を設定して「追加」ボタンを押下
実行するコードの設定
Lambda関数名を押下 > 下のコード編集領域へ実行するコードを記述し、画面右上の「保存」を押下
ロール
新規作成時に空っぽ(CloudWatch Logへの書き込み権限があるポリシーのみアタッチされている)のロールを作って当該Lambda関数へアタッチしている。
なので、IAMコンソールから空っぽのロールに対してlambda関数が操作する対象のAWSサービスへのアクセス権限を持つポリシーをアタッチしてやる。
「アクセス権限」タブを選択 > ロール名のリンクを押下 > 「ポリシーをアタッチします」ボタンを押下 > lambda関数を実行するために必要なポリシーを選択 > 「ポリシーのアタッチ」を押下
付与されたアクセス権限の確認はlambdaコンソールの「アクセス権限」タブを選択 > リソースの概要のドロップダウンで操作対象のAWSサービスが選択できるようになっており、選択すると操作可能なsリソース、アクションが確認できる。
環境変数
環境変数セクションの「編集」から設定できる。
メモリ上限、タイムアウト値
基本設定セクションの「編集」から設定できる。
テスト
テストイベントの作成
画面右上の「テスト」ボタンを押下 > 新しいテストイベントの作成を選択 > イベントテンプレートから任意のイベントを選択 > イベント名を任意で設定して「保存」を押下
テストの実行
画面右上の「テスト」ボタンの横にあるドロップダウンで作成したテストイベントを選択し、「テスト」ボタンを押下
実行確認
ちゃんとトリガーに引っかかってlambda関数が反応していればCloudWatchで確認できる。
- ロググループ名:/aws/lambda/
# 参考
https://qiita.com/leomaro7/items/5b56ae9710d236545497
http://acro-engineer.hatenablog.com/entry/2016/08/02/120000