LANG SELRCT

コードを書く場所

2019年2月23日土曜日

API GatewayにAPI Keyの認証をつけてみる


Lambda Function とAPI Gateway を使ったことがない場合
AWS LambdaとAPI Gatewayを使ってみる



API Gateway の Security 設定を「Open」にしておくと誰でも利用できますが、「Open with API key」にすると、API Key なしでは Lambda function を実行できなくなります。

API Keyを設定する手順

STEP1:「Open with API key」を選択します


STEP2:「Add」をクリックします


STEP3:「Save」をクリックします


API Keyが発行されます



API endpointにアクセスしてみると

{"message":"Forbidden"}

と表示されると思います。


API Keyを渡さないとLambda Functionを実行できないことがわかったところで、API Keyを渡す方法を試してみます。


Google Apps ScriptでendpointにAPI Keyを渡して
Lambda functionの戻り値をログに出してみるコード

コード.gs
function run() {
  var url = 'https://API_ID.execute-api.us-east-1.amazonaws.com/default/FUNCTION_NAME';
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': get_headers()
  }
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response);
}
  
function get_headers() {
  var headers = {
    "x-api-key": getProp('apigateway_key')
  }
  return headers;
}

function getProp(key) {
  return PropertiesService.getScriptProperties().getProperty(key);
}
意訳
この機能がやること
API Gatewayのendpoint
endpointにわたすoptionsを作成する
methodはpost
contentTypeはapplication/json
headersはスクリプトのプロパティのapigateway_keyの値

urlにoptionsを渡してデータを取得して
ログに出す


この機能がやること
headersという入れ物を作って
スクリプトのプロパティのapigateway_keyをx-api-keyの値として

返す


この機能がやること
受け取ったkeyの値をスクリプトのプロパティから取得して返す



Lambda 側のコードはデフォルトのまま'Hello from Lambda!'を返すだけにしておきます

index.html
exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};
意訳
この機能がやること
コメント
responseの入れ物を作って
statusCodeの値は200
bodyの値はJSON変換したメッセージ

返す



実行結果

コード.gsのrun()を実行すると

"Hello from Lambda!"

がログに出ます。


関連記事