1. 目的
- たまには新機能のキャッチアップもしないといけないと思い、ちょっと便利そうなAWS Lambda Function URLs(関数URL) を使ってみることにした。
2. やったこと
- 「PokeAPI」(ポケモンデータの検索ができる公開API)にアクセスしてデータを取得するLambda関数を作成し、関数URLの機能を有効にして、インターネットからアクセス可能なURL(関数URL)を設定する。
- 上記のURLに対してブラウザからアクセスする。Lambda関数が実行されて、ポケモンデータの取得が行われ、結果が表示できることを確認する。
3. AWS Lambda Functions URLs とは(自分の理解)
- インターネット上にエンドポイント(関数URL)を作成し、そこをたたくことでインターネット経由(https経由)でLambda関数の実行が可能な仕組み。
- 従来は同様のことをやりたい場合、API Gatewayが必要だったが、場合によっては省略することができる。
4. 構成図
5. 手順
関数の作成
- マネージメントコンソールから、新規にLambda関数の作成を行う。
- 「関数URLを有効化」にチェックを入れる。また、認証タイプは「NONE」を選択する(インターネット上から制限なしにアクセス可能になる)。
- このLambda関数を呼び出すための「関数URL」が作成されていることを確認する。
- 関数の内容は以下。requestsライブラリを使用するため、別途Layerを用いて追加している。
mksamba-qiita-pokemonapi.py
import json
import requests
def lambda_handler(event, context):
#ポケモンの番号をパラメータでもらう
param = event.get('queryStringParameters')
number = param['number']
#該当の番号のポケモンをpokeapiで検索する
baseurl = "https://pokeapi.co/api/v2/pokemon/"
targeturl = baseurl + str(number)
r = requests.get(targeturl)
r = r.json()
#JSONのデータ内から、名前と画像だけ使用する
name = r['name']
image = r['sprites']['front_default']
#名前と画像を返すhtmlを作成し、ブラウザに返却する
html = "<html><body>" + name + "<br><img src=" + image + "></body></html>"
return {
'statusCode': 200,
'headers': {
'Content-Type': 'text/html',
},
'body': html,
}
ブラウザからアクセス
- ポケモンの番号を指定するパラメータを付けて、関数URLにアクセスする。該当のポケモンの名前と画像が表示されることを確認する。
6. 所感
- ちょっとした機能を作るのには便利なのかなと思ったが、今回の設定だとURLを知られた場合に誰でもアクセスできてしまうため、アクセス制限なども試してみたい。
7. 参考URL
-
【AWS】LambdaにrequestsライブラリをLayerで追加する
- requestsライブラリをLayer化する手順あり。
-
- PokeAPIでのデータ取得手順あり。ポケモンの名前と画像を取得するPythonコードはこちらを参照。
-
[アップデート]LambdaがHTTPSエンドポイントから実行可能になる、AWS Lambda Function URLsの機能が追加されました!
- cookie, CORSなど、細かい機能まで実機確認されており、公式マニュアルより機能の内容が理解しやすい。
-
AWS LambdaのqueryStringParametersとmultiValueQueryStringParametersの違いについて
- queryStringParameters の使い方を参考にさせていただいた。リクエストのURL例とデータの取得方法がセットになっており理解しやすい。