【Node.js】LambdaでIAMからcredentialsを取得しAPIGateway実行
試したいこと
上図のように、APIGatewayを実行するIAMポリシーがアタッチされているLambdaのIAMロールを使ってAPIGatewayの認証を行うことが今回行いたいことです。サービス間のAPI連携なんかでは、実装方針の一つになるかと思います。
APIGatewayを実行するIAMポリシーのアタッチ、Lambda関数やAPIGatewayの作成手順は割愛しています。
処理フロー
- LambdaがIAMのSTSよりCredentialsを取得する
- 取得したCredentialsを付与してAPIGatewayにRequest
- APIGatewayでは受け取ったCredentialsの検証を行い、認証認可を行う
Lambdaの実装
今回、LambdaはNode.js v10で実装しています。
まず、libフォルダを作成し、その配下にAPI実行処理コードを作成、モジュール化します。
以下のような実装です。
var AWS = require('aws-sdk');
//create a object which executes APIGateway.
const apigClientFactory = require('aws-api-gateway-client').default;
//get credentials of AWS sercvices
const apiExe = AWS.config.credentials.get(function (err) {
if (!err) {
//get required parameters from credentials and set required configurations
const apigClient = apigClientFactory.newClient({
accessKey: AWS.config.credentials.accessKeyId,
secretKey: AWS.config.credentials.secretAccessKey,
sessionToken: AWS.config.credentials.sessionToken,
region: 'xx-xxxx-x',
invokeUrl: 'https://XXXXXXXXXXXXXXXXXXXXXXX'
});
const params = {
};
//set HTTP configurations
const pathTemplate = '/xxxx';
const method = 'GET';
const additionalParams = {
queryParams: {
}
};
const body = {};
apigClient.invokeApi(params, pathTemplate, method, additionalParams, body)
.then(function (result) {
console.log(result.data);
})
.catch(function (result) {
console.log(result);
});
} else {
console.log(err);
}
});
module.exports = apiExe;
aws-sdkを使って、credentialsを取得します。
ちなみに、APIGatewayの実行にはaws-api-gateway-clientというライブラリを使用しています。
このようにして作成したAPIGateway認証&実行モジュールを下記のようなLambdaで実行します。
var apiExe = require("./lib/execute.js")
exports.handler = function(event, context) {
apiExe;
};
これで処理は完了です。
Author And Source
この問題について(【Node.js】LambdaでIAMからcredentialsを取得しAPIGateway実行), 我々は、より多くの情報をここで見つけました https://qiita.com/Shu3/items/e045d12d83a03b64c3e8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .