Help us understand the problem. What is going on with this article?

API Gatewayを使ってアクセスキー認証でLambdaを実行する

More than 5 years have passed since last update.

とりあえず使ってみたのでメモ。

参考

リージョンの設定

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 というリンクがあるのでそれを選択してください。

Screen Shot 2015-07-11 at 9.01.53 AM.png

選択すると上記の画面が表示されると思います。
以下に今回設定した内容と説明を記載します。

設定名 今回の設定値 概要
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からはアクセスできませんでした)

Screen Shot 2015-07-11 at 9.21.48 AM.png

Access Keyの作成と設定

APIにアクセする際に使うAccessKeyを作成します。

先ほどの画面で test となっているリンクを選択してAPI Gatewayの画面を表示します。

表示後、上からの2つ目のバーのAPIsとなっているところを選択し、 API Keys を選択します。

Screen Shot 2015-07-11 at 9.31.39 AM.png

遷移後、 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となっている部分を選択します。

Screen Shot 2015-07-11 at 9.53.31 AM.png

次にtestステージの現在のデプロイされたリソースが確認できるので先ほど作成したSampleApiGatewwayFunctionリソースを選択します。

Screen Shot 2015-07-11 at 9.55.50 AM.png

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つは困惑することなく、できるかと思います)

toshihirock
こちらは個人の意見で会社とは関係ありません。お約束です。
http://toshihirock.blogspot.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away