DEV Community

kaede
kaede

Posted on

AWS 基礎 Part 4 -- API Gateway アクセス時に Lambda 関数を発火させる。

why

CloudFront -> API Gateway -> Lambda -> ECS ...

と言う構成を作りたかった。
API Gateway には Lambda が必須なように見えた


Lambda


Lambda とは?

https://qiita.com/miyuki_samitani/items/14497a78e5c0cbbb0e37

無料で Python, Node.js, Ruby

これらの言語で処理を実行できる環境のようだ。

外部から叩かれる必要がある様に見える。

https://www.benjamin.co.jp/blog/technologies/lambda-1-create/

実行中のみの課金らしい。

https://qiita.com/suo-takefumi/items/b47922362366de897920

Slack 通知を書いたりできる。
アプリに直接書く場合と違って、サクッと編集したり、共通化できたりするメリットがあると考察した。


Lambda 関数を作る

Lambda のページに行って

Image description

https://qiita.com/miyuki_samitani/items/f01f1bd49334f97fe84c

miyuki_samitani さんの記事を参考に nodejs で
hello-lambda 関数を作り

Image description

ログとレスポンスに Hello from Lambda! と出すコードを入れた。



API Gateway


API Gateway を作成して Lambda と繋げる

https://qiita.com/miyuki_samitani/items/f01f1bd49334f97fe84c

同じく miyuki_samitani さんの記事通りに

hello-api を作成し

Image description

/ の GET で 統合タイプとして Lambda の hello-lambda をセットした。

これによって

API Gateway の hello-api にアクセスされると
Lambda の hello-lambda 関数が呼ばれる

hello-lambda のメッセージが返ってくる

このように作ることができた。

Image description

Lambda の hello-lambda を開いてみると、
API Gateway からつながっていることを見れる。


Lambda から ECS Task の nginx サーバーにリクエストできないことを確認。

これで API Gateway にアクセスされたときに、
Lambda が動いて、Lambda に書かれているレスポンスが返る様になった。

次は、Lambda が ECS のタスクとして動いている nginx を呼び、そこの返り値を返すように作りたい。

しかし、調べて見ると Lambda にできるのは ECS Task を走らせて、結果を受け取ることだけのようだ。

なのでバックエンドの Spring などを走らせて、エンドポイントごとに呼び分けることはできないように見えた。

https://www.gravitywell.co.uk/insights/using-ecs-tasks-on-aws-fargate-to-replace-lambda-functions/

この図を見ると
機能によってタスクを動かすようだ

Lambda を使う場合は機能ごとに別のタスクコンテナ、アプリケーションを作る必要が出てきてしまう。

同じタスクをよんで、エンドポイントで呼び分けることはできなそうだ。

API Gateway から直接 Public or Private の ECS タスクのサーバーを叩いて結果をもらうように変えてみる。

Top comments (0)