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

posted at

Organization

【初心者】AWS Lambda Function URLs (関数URL) を使ってみる

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. 構成図

functionurls構成図.png

5. 手順

関数の作成

  • マネージメントコンソールから、新規にLambda関数の作成を行う。
  • 「関数URLを有効化」にチェックを入れる。また、認証タイプは「NONE」を選択する(インターネット上から制限なしにアクセス可能になる)。

function01a.png
function02a.png

  • このLambda関数を呼び出すための「関数URL」が作成されていることを確認する。

function03a.png

  • 関数の内容は以下。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にアクセスする。該当のポケモンの名前と画像が表示されることを確認する。

function04a.png
function05a.png

6. 所感

  • ちょっとした機能を作るのには便利なのかなと思ったが、今回の設定だとURLを知られた場合に誰でもアクセスできてしまうため、アクセス制限なども試してみたい。

7. 参考URL

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?