環境変数

LAMBDA_TASK_ROOTlambda実行ディレクトリのパス。画像などもUPLOADできるので読み込みに利用できる
PYTHON_PATH実行時のライブラリ検索パス。いじった場合はlayerが読み込めなくなるので注意

ほぼPythonだけでサーバーレスアプリをつくろう

後から入れるlibrary

request
pytz

起動イベント

CloudWatch events

1. イベントを定義(aws_cloudwatch_event_rule) 2. イベントに対して実行する関数をターゲット指定(aws_cloudwatch_event_target)

S3

SQS

terraform deploy

https://dev.classmethod.jp/articles/terraform-lambda-deployment/

https://qiita.com/ktsujichan/items/c0804f155c2cf1962ed3

VPC Lambda

AWSLambdaVPCAccessExecutionRole
The provided execution role does not have permissions to call CreateNetworkInterface on EC2

かつてはENIをコールドスタートしたり、その分ENI&サブネットのIPを消費したりのデメリットがあったが、2019年に解消された。

ローカル開発環境

Dockerで実行

https://github.com/lambci/docker-lambda

# Test a `lambda_handler` function in `lambda_function.py` with an empty event on Python 3.8
docker run --rm -v "$PWD":/var/task:ro,delegated lambci/lambda:python3.8 lambda_function.lambda_handler

CentOS7のDockerだとdelegatedオプションがサポートされてないバージョンなので外すこと!

ローカルで実行

pip install python-lambda-local
echo '{"key1": "test"}' > event.json
python-lambda-local -f lambda_handler lambda_function.py event.json

Serverless

lambda以外にも対応している

http://momota.github.io/blog/2018/11/05/serverless-framework/

デプロイ

イベントトリガーの一例

S3へのput
SESへの着信
Amazon SNS からの通知の送信

IAMロールの作成

EC2のEBS Snapshotを作成削除などを許可するポリシー

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "logs:*"
           ],
           "Resource": "arn:aws:logs:*:*:*"
       },
       {
           "Effect": "Allow",
           "Action": "ec2:Describe*",
           "Resource": "*"
       },
       {
           "Effect": "Allow",
           "Action": [
               "ec2:CreateSnapshot",
               "ec2:DeleteSnapshot",
               "ec2:CreateTags",
               "ec2:ModifySnapshotAttribute",
               "ec2:ResetSnapshotAttribute"
           ],
           "Resource": [
               "*"
           ]
       }
   ]
}

CloudWatchからElasticSearchServiceへ投入を許可するポリシー

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Action": [
       "logs:CreateLogGroup",
       "logs:CreateLogStream",
       "logs:PutLogEvents"
     ],
     "Resource": [
       "arn:aws:logs:*:*:*"
     ]
   },
   {
     "Effect": "Allow",
     "Action": "es:ESHttpPost",
     "Resource": "arn:aws:es:*:*:*"
   }
 ]
}

言語

EBSのバックアップ

https://serverlesscode.com/post/lambda-schedule-ebs-snapshot-backups/ https://serverlesscode.com/post/lambda-schedule-ebs-snapshot-backups-2/

上記ページに従い実行した。backupというキーを設定したインスタンスのEBSのSnapshotを作成する。PartIIでは削除日を指定してSnapshotを作る機能が追加されている。

まずはlambdaに対しての信頼関係を定義して、lambaで実行すると ebs-backup-worker が付与されるようにする。 ebs-backup-workerには必要なポリシーを付与する。

ログ

Counter: 3406, today: 2, yesterday: 2

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS