今回からは参考書の内容を参考にするわけではないので途中でぐだるかもしれません。
とりあえず真似でいいから形にしてみよう→少しオリジナリティを加えてみよう→便利なものをつくってみよう
のうちの「とりあえず真似でいいから形にしてみよう」回です。
今回目指す構成
まぁ今回は基本的です。呼び出しはブラウザだし、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 を作成できます。
▼12か月無料枠
・100 万回の API コール受信/月
AWS Lambda側の実装
関数の作成
サービスから「Lambda」を検索し表示します。
一応東京リージョンが選択されていることを確認して、さて早速関数の作成を行っていきますか。
何も分からないので、今回は基本的なもの(?)として「一から作成」を選択するものとします。
関数名は完全に任意です。
言語は即効性が高そうな「Node.js」を選択しました。
大したことをやるわけではないので自分ができるものでなんでもいいでしょう。
権限設定は。。。他のサービスを呼び出したりするときに設定するものらしいですが、今回は即効性を重視してそのままで関数の作成に移ります。
関数の作成を押下すると、なにやら設定画面っぽいものが表示されますが、正直よくわからないので飛ばしてスクロールしコード部分を確認します。
ふむ、「Node.js」はまともに触ったこともないし今回はコード実装が目的ではないのでサンプルコードをそのまま使用させていただくとしましょう。
※叩かれたら固定文字列を返す関数みたいですね。
設定などもとりあえずそのままでよしとします。
Amazon API Gateway側の設定
APIの作成
先ほど作成した関数を呼び出すAPIの作成を行います。
サービスからAPI Gatewayを検索して表示します。
今すぐ始めましょう!
プロトコルはREST(RESTAPIのREST)
新しいAPI
API名は任意
エンドポイントタイプはデフォルトのリージョン
としました。
APIの作成を押下。
作成自体はこれでできているようです。
APIの設定
呼び出すためのエンドポイントの設定を行います。
アクションからリソースの作成を選択します。
リソース名を任意で入力して
ブラウザから呼び出せるようにするためにAPI Gateway CORS を有効にするにチェックが必要があるようです。
ここまで入力したらリソースの作成を押下。
次にメソッドの作成を行います。(HTTPだからか!いまさら)
とりあえず一方的に取得できればいいので「GET」メソッドを選択します。
設定したらチェックマークみたいな部分を押下します。
うん、なんかいろいろできそう。
いろいろ試してみたい気持ちを抑えてまずはお試しAPIの完成を急ぎます。
統合タイプはLambda 関数
Lambda プロキシ統合の使用は今回の方法だとチェックを付けないとだめみたいです。※すいません詳細は勉強しておきます。
Lambda 関数はもちろん先ほど作成した関数でここまで入力したら保存します。
権限うんぬんのポップアップはそのままハイでこれでAPIが完成!
Lambda側の設定確認
一旦Lambdaを再表示します。
関数一覧から先ほど作成した関数を選択します。
API Gatewayがトリガーとして設定されていることを確認します。
※特にやることはないみたいです。
APIのデプロイと動作確認
APIのデプロイ
すいません、API Gatewayを開きなおしましょう。
URIはどれなのかなぁと思ってたらここで設定するようですね。
対象のAPIを開き、アクションからAPIのデプロイを選択します。
新しいステージだけ選択したら後は任意の入力を行ってデプロイを押下します。
デプロイしたらすぐにURIが表示されました。
が騙されないでください。(一度喜んでだまされました。)
これはどうやらルートリソースのURIのようなので、今必要なのはGetメソッドのURIです。
なのでGetメソッドの方を確認する必要があります。
こっちです。
動作確認
なんかガチャガチャやってますが、上記には正しい手順を追記しているので手順通りにやっていれば多分大丈夫です。
なんてことはないです。
先ほど表示されたURIをコピーしてブラウザから直接叩きます。
えええ、なんてことはありましたなんかうまくいってないみたいにです。
※先ほど騙されたので一度失敗してます。
{"message":"Missing Authentication Token"}
ほぼ目的は達成されましたがさすがに気持ち悪いので少し調査してGetメソッドのURIで再チャレンジ。
はい!大丈夫そうですね。
APIの骨格はできたので今回はここまで、できそうなら次回以降で工夫を加えていきたいと思います。