1
Help us understand the problem. What are the problem?

posted at

updated at

Organization

Lambdaの説明とlambdaのlayersの作り方

lambdaとは

AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。インフラストラクチャのプロビジョニングや管理をすることなくコードを実行コードを書いて、.zip ファイルやコンテナイメージとしてアップロードするだけです。

サーバーレス

サーバーではなくて、その場でコードを実行する環境です、trigger(s3,SQSなど)で実行しても良い、定期実行もCloudwatchイベントからでも出来ます、サーバーと違って使ってる分だけを支払いします。同時実行も1秒で1000件まで出来ますのでインフラが楽です。

使い方

Lambdaを作るには割と簡単です!名前と言語とアーキテクチャを選べたらもうコード修正とテストが出来ます。

名前はエンドポイントになりますので気をつけてお名乗りください。

環境としては色々の言語は出来ます。

Screen Shot 2022-05-27 at 15.54.18.png

Python、ruby、java、Goなどなどの言語が出来ます。

Screen Shot 2022-05-27 at 15.55.37.png

アーキテクチャも選べます。

自分のコードだけではなくて一般的ユースケース用のサンプルコードと設定プリセットから Lambda アプリケーションを構築します。

作成終わったら編集と設定画面が出てきます。

screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2022-05-27-16_06_13.png

そのままでコード書いて、テストが出来ます。

例えば、print('hello world')を入れると:

Screen Shot 2022-05-27 at 16.12.55.png

lambdaのresponseを見えるし、ログも見えます、さらに実行した時のメモリと実行時間。

Duration: 1.84 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 35 MB	Init Duration: 226.67 ms

1.84ミリ秒かかったので料金としては2ミリ秒でかかりました。

ライブレリとしてはデフォルトでいくつのライブレリが入ってます、ここにリストがあります(少し古いけど基本が一緒です):
https://gist.github.com/gene1wood/4a052f39490fae00e0c3

botoがAWSのフォンクションなので全部のAWSのライブレリが入ってます!

ですが、特別のライブレリは自分で入れなきゃ行けないです、それはLayersです!

layersとは

Lambda レイヤーは、Lambda 関数で使用できるライブラリとその他の依存関係をパッケージ化するための便利な方法を提供します。レイヤーを使用することで、アップロードされたデプロイメントアーカイブのサイズを削減し、コードをデプロイするスピードを速めることができます。

Architecture2.gif

作り方

lambdaでpipは実行しませんのでライブレリを入れた場合はlayersを作成するべきです、作り方としては割と簡単です、欲しいのライブレリをロカルでインストールして、zipして、s3にアップロードしてからの登録です。

ロカルの作成

例えばredisのライブラリを入れたい:
layersのフォルダを作成する。

layersの中にredisのフォルダを入れてます、その準備終わったらpip3のインストールを行います、pipの -tオプションでパスは重要です!

$ mkdir layers
$ cd layers
$ mkdir redis
$ pip3 install -U redis -t redis/python

layers/
┣ redis
  ┣ python
    ┣ packaging
    ┣ pyparsing
    ┣ redis
    ┣ redis-4.3.1.dist-info
    ┣ などなどのpip3からインストールされたファイル

それの形じゃないとlambdaから使えないです。

無事にこの形になったら残りはredisフォルダをzipします。

zip -r redis.zip ./redis/

それでs3にアップロードします、作成画面はこちら:

Screen Shot 2022-05-27 at 16.53.29.png

ここで直接にアップ出来ますが10メガまでなのでS3のほうが良いだと思いますのでさっきアップしたzipファイルのオブジェクト URLを入れる。

アーキテクチャとしては使いたいlambdaに合わせます。

ランタイムはいくつあります、使いたいlambdaに合わせます、例えばlambdaはpython 3.9でlayersは3.7と3.8だけなら入られませんので注意してください。

Screen Shot 2022-05-27 at 16.53.38.png

使い方

作成した後に次のステップとしてはLambdaに追加する。

Screen Shot 2022-05-31 at 18.07.03.png

注意点

そこそこデカいライブラリは入れません、layersは5件まで追加しかできないし、5件で250MBまでです、Mecabなどの優秀なライブラリはできませんのでご注意ください。

AWSのSDKのライブラリはデフォルトで入っていますのでlayersで追加しなくて大丈夫です、Botoのドキュメントへを確認ください。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?