AWSlambda の基本的使い方
アドベントカレンダー2020年 23日目の記事です。
この記事は、偏見と偏った知識で構成されています。
AWSlambdaとか使うと自分のReactなどで作成したものがどこでも動く!
データベースもクラウドなので、データを持ってくる時使える
※しっかり学びたい人は、AWS のドキュメント見てください!!
AWSlambda って何?
AWSlambda は、簡単に言うとクラウドファンクションです。
サーバにプログラミングした関数を AWS に設定しておいて任意のタイミングで実行できるもの
と捉えていただいていいと思います。
- IotCore
- API
などで使用できます。
料金
AWSlambda のいいところは、使用する時だけサーバのリソースを使用していない
なので、ランニングコストは、非常に良いです。
うん十万かかるような構成にしなければ、基本的にお財布に優しいです。
使用するもの
- aws のアカウント
- ブラウザ
- プログラミング知識
上記3つが揃っていれば誰でもできます。プログラミング知識も IF 文 FOR 文 がわかっていればできます。
実装環境作成
今回、紹介するのは、API として使用できるLambda です。
また言語は、Pythonを使用します。
なんで、pythonなのか!
研究室でデータ解析とかやるのでみんなある程度読める(と思う)
cloud 9
AWS には、便利なエディターがあります。
今回は、それを使用しましょう。
cloud 9作成手順
EC2(仮想サーバ)を作成する必要があります。
- create environment を押す
- Name を設定
- 環境を設定(今回は、直接アクセス)、メモリと CPU の選択
- 環境作成
上記の手順でやれば作成できます。
ネットワークの選択は、お好みで
コーディング環境作成
- lambda のボタンを押します
- funcion name を設定します
- Next を押す
- empty-python を選択
- トリガーを選択(APIGATE しかない)
- 適当にパスを設定(今回は / )
- セキュリティ設定
- メモリ設定
- finish
これでできました
実装
今回は、簡単な API の実装です。
URL にアクセスしたら決まった文字が帰ってくるようにしましょう。
### コーディング
def lambda_handler(event, context):
data={"test":"omoti moti moti"}
return data
試しにこれで動かしましょう
コーディング環境作成 手順1のボタンの下に作成した Lambda があるのでそこから run -> run loacl で実行してみましょう
{
"test": "omoti moti moti"
}
返ってきたのが上記の内容です
では、続いて APIgateway local で試しましょう
{
"message": "Internal server error"
}
エラーです!頭をかかえたいです。
単純なエラーです。レスポンスの形式が間違ってるからです。
ドキュメントを読むと簡単に解決します。
ここよんで
リンク先を参考に下記のように改変しました。
import json
def lambda_handler(event, context):
# TODO implement
data={"test":"omoti moti moti"}
return {
"statusCode": 200,
"headers": {
"Content-type": "application/json"
},
"body": json.dumps(data)
}
エラーが消えます。
デプロイ
run の時は、関数名から実行という流れでクリックしました。
デプロイは、作成したものをサーバで実際に動かす際、行うものです。
緑色のフォルダーみたいなものを右クリックすると deploy とあるのでデプロイします。
確認
デプロイするとURLが発行されるのでそのURLに行きます。
結果が以下です。
あとがき
非常に簡単にAPIなど作成できます。とても簡単でいいです。
今回Pythonでしたが他の言語でも実装できます。
レスポンスの形式が決まっているのは、初心者が落入りやすいミスだと思ったので紹介しました。
もっと簡単に実装するのであれば、NodeJsだともっと簡単に実装できる物があ用意されています。
モジュールインストール
pythonですと、いろいろモジュールをインストールしてDBとかを扱う機会があると思います。
私が触り始めた際は、pythonでのモジュールインストールは、インストール先が違うとか、2系のだのといろいろありました。なので、設定を少し変える必要があります。