楽しいAWS - Lambda API化の巻 -
はじめに
唐突ですがAWS(Amzon Web Service:サーバのクラウドサービス)のLambda(イベントドリブンで実行するプログラム)を作ってみました
「AWS is 何」を3行でまとめてみるよ - Qiitaこの作ったLambdaですが定期的に起動するような機能であれば、それなりの仕掛けをすると後は放置プレイでよいのですが、任意のタイミングで起動させたい場合、APIとして提供するのがよろしいかと。
サーバーレス API
モバイルとウェブアプリケーションが AWS Lambda で動作するコードを通じてパブリックで利用可能な AWS のサービスを呼び出すために使用できる API Gateway を使用してREST APIを作成します。Lambda は、高可用性のコンピューティングインフラストラクチャ上でコードを実行し、あらゆるサーバーのプロビジョニング、スケーリング、または管理の必要性を排除します。
相変わらず意味不明ユニークなAWSの日本語ドキュメントなので噛み砕いて言うと、
- メンテナンスフリー
- リライアビリティ&アベイラビリティ(信頼性と可用性)
- オートスケール
- 時代の潮流(これは個人の所感)
ということのようです。
弊社でも数多くのサーバを管理してますが、AWSへ移行することにより運用に関する様々な問題から解き放たれ、作業の効率化が図られると考えております。その来るべき日に備え、AWSへの移行に伴う手順や問題点等の検証したいと思います。
設定手順
Lambdaは既に作成済で動作は確認済を前提とします。以下に手順を示します。
- サービス一覧から「ネットワーキングとコンテンツ配信」グループにある「API Gateway」を選択します
- 「APIの作成」ボタンを押下します
- 「名前と説明」の「API 名」欄に任意の名前を設定し「APIの作成」ボタンを押下します
- 新規に作成したAPIのリソースにメソッドを追加するため「アクション」のプルダウンメニューから「メソッド」を選択すると下部のペインに追加するメソッドのプルダウンメニューが表示され
そこから追加するメソッドを選択して✔を押下します。例ではGETメソッドを追加します - メソッドのセットアップ画面に変わり「Lambda 関数」欄にLambdaの関数名を入力すると文字補完されるので対象リストから選択して右下にある「保存」ボタンを押下します
- 権限に関する確認Popupで「OK」を押下してメソッドの設定画面に遷移します
パラメータを必要としないAPIの場合これで完了ですが、パラメータが有る場合、「統合リクエスト」のリンクを押下してパラメータを設定します
パラメータの設定
- 「メソッドリクエスト」を押下して「URL クエリ文字列パラメータ」を選択するとパラメータ名入力欄が表示しますので、その欄にパラメータ名を入力し、✔を押下します
- 必須パラメータの場合は「必須」のチェックボックスにチェックします
- 複数あれば1.から繰り返します
- すべての設定が終われば「←メソッドの実行」を押下して前画面に戻ります
- 「統合リクエスト」を押下すると以下の画面へ遷移します
- 「マッピングテンプレート 」を表示させて「 マッピングテンプレートの追加」を押下します
- 「Contents-Type」入力欄が表示されそこに”application/json”と入力して✔を押下します
- 「パススルー動作の変更」Popupが表示され「はい、この統合を保護します」ボタンを押下します 1. 画面下部にテキスト入力エリアが表示されるのでパラメータ名を設定して「保存」ボタンを押下します
テスト
- パラメータの設定が終われば「メソッドの実行」画面に戻り画面左側にある「テスト」を押下してテスト画面へ遷移します
- 「クエリ文字列」欄に必要とするクエリパラメータを入力して、「テスト」ボタンを押下します
- 画面右側にテスト結果が表示されます
デプロイ
- テスト結果に問題なければデプロイします
- 「デプロイされるステージ」のプルダウンメニューから「新しいステージ」を選択します
- 「ステージ名」に任意のステージ名を入力(例では
dev
とします)して「デプロイ」ボタンを押下します
- ステージエディター画面に遷移しますがデフォルトのままで問題ありません。呼び出しは画面上部にある「URLの呼び出し」に表示されているURLとパラメータをブラウザに入力するとAPIがコールされます
おわりに
設定画面がチョット多いのですが、何度かAPIを設定すると慣れると思います。この例では基本的な設定のみですが、APIキーを追加してそのキー毎に使用制限を設ける等、更にきめ細かい設定も可能です。これで煩わしいサーバ管理から開放され開発効率も向上が図れると共に、益々バッググランドのAPI化が加速することと思います
AWSによるサーバレスで快適な開発・運用はいかがですか