とりあえず使ってみたのでメモ。
参考
リージョンの設定
API Gatewayは2015年7月11日現在はtokyoリージョンで使えないため、リージョンはUS-EAST(N.Varginia)に設定します
Lambda Functionの作成
Lambda Functionを実行するとJSONを返すものを作成します。
Lambdaのページを表示し、Create Lambda Function を選択します。(まだFucntionが一つもない場合、Getting Staredを選択)
次の画面でblueprintというテンプレートを選択できるようになったようですが、今回は使わないので Skip を選択。
次の画面で以下のように設定してきます。
- Name->SampleApiGatewayFunction
- Runtime->Node.js
- LambdaFunctionCode->下部参照
- Handler->index.handler(デフォルトのまま)
- Role->すでに作成済みであれば対象のLambda用ロールを作成。ない場合、セレクトボックスからCreate New Roleの下部にあるBasic ExecutionRoleを選択
console.log('Loading event');
exports.handler = function(event, context) {
context.done(null,
[{"id": 1, "type": "dog", "price": 249.99},
{"id": 2, "type": "cat", "price": 124.99},
{"id": 3, "type": "fish", "price": 0.99}]); // SUCCESS with message
};
レビュー後、問題なければ作成します。
次の画面で Test を選択し、呼び出されたタイミングでJSONが返却されるか確認します。(リクエスト時のJSONはなんでも良いです)
問題なければExecution resultの場所に以下が表示されるかと思います。
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
API Gatewayとの連携
次にAPI Gatewayと先ほど作成したLambda functionの紐付けを行います。
先ほど試験を行った画面の上部に API Endpoint というタブがあるのでそれを選択してください。
その後、表示される Add API endpoit というリンクがあるのでそれを選択してください。
選択すると上記の画面が表示されると思います。
以下に今回設定した内容と説明を記載します。
設定名 | 今回の設定値 | 概要 |
---|---|---|
API name | LambdaMicroservice | API Gatewayで利用するAPI名 |
Resource name | SampleApiGatewayFunction | リソース名。ここで設定した値を使ってアクセスする際のURLが決められます。例えば https://xmauic0qce.execute-api.us-east-1.amazonaws.com/test/SampleApiGatewayFunction という感じで https://{api-id}.execute-api.{region}.amazonaws.com/{stage}/{resource name} という形になります。 |
Method | Get | 利用するHTTPメソッド |
Deployment stage | test | API Gatewayでは複数の隔離された環境にAPIを配置することができ、今回どの環境に配置するかを指定します。任意の文字列が指定できますが、例えば「test」、「production」といったような値を設定することが多いとおもいます。 |
Security | Open with access key | 「AWS IAM」、「Open」、「Open with access key」の3つが選択できます。「Open」を選ぶと認証なしで、API(今回の場合、Lambda Fucntion)が叩ける状態になります。「Open with access key」を選ぶとあとで作成するAPIKey情報を知っている人だけ叩けます。「AWS IAM」を選ぶとIAMによる認証が出来ると思うのですが、まだ試していません。。。 |
作成が終わると以下のような表示がされます。なお、ここで表示されるURLは最終的にアクセスするURLでないので注意です。。(Lambdaとしてのエンドポイント?認証なしで設定しても表示されるURLからはアクセスできませんでした)
Access Keyの作成と設定
APIにアクセする際に使うAccessKeyを作成します。
先ほどの画面で test となっているリンクを選択してAPI Gatewayの画面を表示します。
表示後、上からの2つ目のバーのAPIsとなっているところを選択し、 API Keys を選択します。
遷移後、 Create API Keyを選択し、任意のNameを指定し、Enabledにチェックを入れて Save を選択します。
SaveするとどのAPIのどのステージにAPI Keyを設定するかの画面が表示されるため、以下を設定します。
- Select API->LambdaMicroservice
- Slect stage->test
Addボタンを選択すればAPI Keyに先ほど作成したAPIがひも付きます。
なお、表示されているAPI keyはあとで使うのでメモしておいてください
アクセスしてみる
準備ができたのでアクセスしてみます。
アクセスするURLを確認するため、上から2つ目のバーのAmazon API Gatewayというロゴを選択します。
すると LambdaMicroServiceという記載があると思います。(APIの一覧が確認できます。)LambdaMicroServiceの中の 1 stageとなっている部分を選択します。
次にtestステージの現在のデプロイされたリソースが確認できるので先ほど作成したSampleApiGatewwayFunctionリソースを選択します。
URLが表示され、本URLがLambda functionを実行するためのURLとなります。
試しにブラウザから上記リンクを表示してみます。
{"message": "Not able to access resource."}
認証がされていないため、上記エラーメッセージが表示されます。
認証はリクエスト時のヘッダに x-api-key: hoge-fuga-api-key という形で先ほどメモしたapi-keyを設定すればOKです。
今回はcurlでやってみます。
$curl --header "x-api-key: hoge-fuga-api-key" https://xmauic0qce.execute-api.us-east-1.amazonaws.com/test/SampleApiGatewayFunction
[{"id":1,"type":"dog","price":249.99},{"id":2,"type":"cat","price":124.99},{"id":3,"type":"fish","price":0.99}]%
認証ができた時にはLambdaFunctionで設定したJSONが返却されることが確認できました!
お掃除
API GatewayのAPIを削除します。
上から2つ目のバーのAmazon API Gatewayというロゴを選択し、LambdaMicroServiceを選択します。
次に上から2つ目のバーのResourcesを選択し、Dashbordを選択します。
そうするとログなどの情報が見える画面になるのですが、右に Delete API というボタンをあるので選択すれば削除できます。
なお、今回の手順だと発生しませんが、APIは作ったが、stageにdeployしてない場合、Dashbordリンクが表示されないっぽくて困惑しました。。
【2015/7/11追記】
リソース選択の画面でDelete API押せるようになってました!
API Gateway、Lambda Functionも不要であれば削除してください。(この2つは困惑することなく、できるかと思います)