SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【AWS】入門⑩ Amazon Lambdaでお試しAPIを作成してみる

今回からは参考書の内容を参考にするわけではないので途中でぐだるかもしれません。

とりあえず真似でいいから形にしてみよう→少しオリジナリティを加えてみよう→便利なものをつくってみよう
のうちの「とりあえず真似でいいから形にしてみよう」回です。

今回目指す構成

f:id:wantanBlog:20191018230235p:plain

まぁ今回は基本的です。呼び出しはブラウザだし、Lambdaから他に接続するようなことはしないです。
できたら今後は呼び出しをブラウザ以外にしたり他のサービスと連携させたりしていきたい。まぁまずはDBかな。

事前知識

共通の無料枠確認元以下の公式サイトです。
AWS クラウド無料利用枠 | AWS

AWS Lambda

▼サービス概要
今回はコード(関数)を実行する本体の役割になります。EC2との比較としては自身がメンテナンス等をする必要がないサーバレスであることです。
Lambdaは12か月間の無料枠ではなく一定までは永久無料らしいですね。

AWS Lambda はサーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。 AWS Lambda は必要時にのみてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。

引用元:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html


▼無期限無料枠
・1,000,000 件/月の無料リクエスト
・1 か月あたり最大 320 万秒のコンピューティング時間

Amazon API Gateway

▼サービス概要
ノンコーディングで製造、管理ができるサービス。
今回のAPIの入り口部分を担います。入口部分だけなので実際の処理を別に用意する必要があるようです。

Amazon API Gateway は、完全マネージド型サービスで、開発者はこれを利用することにより、どんな規模であっても、簡単に API の作成、配布、保守、監視、保護が行えます。AWS マネジメントコンソールで数クリックするだけで、アプリケーションがバックエンドサービス (Amazon Elastic Compute Cloud (Amazon EC2) で実行されるワークロード、AWS Lambda で実行されるコード、ウェブアプリケーション、リアルタイムのコミュニケーションアプリケーションなど) からデータ、ビジネスロジック、機能にアクセスするための「玄関」として機能する REST API および WebSocket API を作成できます。

引用元:AWS Lambda とは - AWS Lambda


▼12か月無料枠
・100 万回の API コール受信/月

AWS Lambda側の実装

関数の作成

サービスから「Lambda」を検索し表示します。

一応東京リージョンが選択されていることを確認して、さて早速関数の作成を行っていきますか。

f:id:wantanBlog:20191017232343p:plain


何も分からないので、今回は基本的なもの(?)として「一から作成」を選択するものとします。

関数名は完全に任意です。
言語は即効性が高そうな「Node.js」を選択しました。
大したことをやるわけではないので自分ができるものでなんでもいいでしょう。

f:id:wantanBlog:20191017233103p:plain

権限設定は。。。他のサービスを呼び出したりするときに設定するものらしいですが、今回は即効性を重視してそのままで関数の作成に移ります。

f:id:wantanBlog:20191017234621p:plain

関数の作成を押下すると、なにやら設定画面っぽいものが表示されますが、正直よくわからないので飛ばしてスクロールしコード部分を確認します。

f:id:wantanBlog:20191017235505p:plain


ふむ、「Node.js」はまともに触ったこともないし今回はコード実装が目的ではないのでサンプルコードをそのまま使用させていただくとしましょう。

※叩かれたら固定文字列を返す関数みたいですね。

f:id:wantanBlog:20191017235750p:plain

設定などもとりあえずそのままでよしとします。

Amazon API Gateway側の設定

APIの作成

先ほど作成した関数を呼び出すAPIの作成を行います。
サービスからAPI Gatewayを検索して表示します。

今すぐ始めましょう!

f:id:wantanBlog:20191018000244p:plain

プロトコルはREST(RESTAPIのREST)
新しいAPI
API名は任意
エンドポイントタイプはデフォルトのリージョン
としました。

APIの作成を押下。

f:id:wantanBlog:20191018000543p:plain

作成自体はこれでできているようです。

APIの設定

呼び出すためのエンドポイントの設定を行います。

アクションからリソースの作成を選択します。

f:id:wantanBlog:20191018000944p:plain

リソース名を任意で入力して
ブラウザから呼び出せるようにするためにAPI Gateway CORS を有効にするにチェックが必要があるようです。
ここまで入力したらリソースの作成を押下。

f:id:wantanBlog:20191018001341p:plain

次にメソッドの作成を行います。(HTTPだからか!いまさら)

f:id:wantanBlog:20191018001454p:plain

とりあえず一方的に取得できればいいので「GET」メソッドを選択します。
設定したらチェックマークみたいな部分を押下します。

f:id:wantanBlog:20191018001705p:plain

うん、なんかいろいろできそう。
いろいろ試してみたい気持ちを抑えてまずはお試しAPIの完成を急ぎます。

統合タイプはLambda 関数
Lambda プロキシ統合の使用は今回の方法だとチェックを付けないとだめみたいです。※すいません詳細は勉強しておきます。
Lambda 関数はもちろん先ほど作成した関数でここまで入力したら保存します。

f:id:wantanBlog:20191018002053p:plain

権限うんぬんのポップアップはそのままハイでこれでAPIが完成!

Lambda側の設定確認

一旦Lambdaを再表示します。
関数一覧から先ほど作成した関数を選択します。

API Gatewayがトリガーとして設定されていることを確認します。
※特にやることはないみたいです。

f:id:wantanBlog:20191018003248p:plain

APIのデプロイと動作確認

APIのデプロイ

すいません、API Gatewayを開きなおしましょう。
URIはどれなのかなぁと思ってたらここで設定するようですね。

対象のAPIを開き、アクションからAPIのデプロイを選択します。

f:id:wantanBlog:20191018003638p:plain

新しいステージだけ選択したら後は任意の入力を行ってデプロイを押下します。

f:id:wantanBlog:20191018003959p:plain

デプロイしたらすぐにURIが表示されました。

f:id:wantanBlog:20191018004151p:plain

が騙されないでください。(一度喜んでだまされました。)
これはどうやらルートリソースのURIのようなので、今必要なのはGetメソッドのURIです。
なのでGetメソッドの方を確認する必要があります。

こっちです。

f:id:wantanBlog:20191018005316p:plain

動作確認

なんかガチャガチャやってますが、上記には正しい手順を追記しているので手順通りにやっていれば多分大丈夫です。

なんてことはないです。
先ほど表示されたURIをコピーしてブラウザから直接叩きます。

えええ、なんてことはありましたなんかうまくいってないみたいにです。
※先ほど騙されたので一度失敗してます。

f:id:wantanBlog:20191018005606p:plain

{"message":"Missing Authentication Token"}

ほぼ目的は達成されましたがさすがに気持ち悪いので少し調査してGetメソッドのURIで再チャレンジ。

はい!大丈夫そうですね。

f:id:wantanBlog:20191018232734p:plain


APIの骨格はできたので今回はここまで、できそうなら次回以降で工夫を加えていきたいと思います。