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 のページに行って
https://qiita.com/miyuki_samitani/items/f01f1bd49334f97fe84c
miyuki_samitani さんの記事を参考に nodejs で
hello-lambda 関数を作り
ログとレスポンスに Hello from Lambda! と出すコードを入れた。
API Gateway
API Gateway を作成して Lambda と繋げる
https://qiita.com/miyuki_samitani/items/f01f1bd49334f97fe84c
同じく miyuki_samitani さんの記事通りに
hello-api を作成し
/
の GET で 統合タイプとして Lambda の hello-lambda をセットした。
これによって
API Gateway の hello-api にアクセスされると
Lambda の hello-lambda 関数が呼ばれる
hello-lambda のメッセージが返ってくる
このように作ることができた。
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)