如何在 AWS API Getaway 中将 API 密钥添加到使用计划

How to Add API Key to Usage Plan in AWS API Getaway

我在 AWS API Getaway 中创建与 使用计划 关联的 API 密钥 时遇到问题(使用 node.js 的 AWS SDK)。

在 AWS 控制台中,您可以通过此按钮将 API 密钥附加到使用计划:

但是我在AWS SDK documentation

中找不到类似的功能

这段代码很神奇:

var params = {
  keyId: 'STRING_VALUE', /* required */
  keyType: 'STRING_VALUE', /* required */
  usagePlanId: 'STRING_VALUE' /* required */
};
apigateway.createUsagePlanKey(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

我缺少的是 keyType 必须是 "API_KEY"

这是创建 API 密钥并将其分配给使用计划的完整示例。

async function createApiKey(apikey_name, usage_plan="free") {

    const usage_plans = {
        free: "kotc0f", // usage plan IDs
        basic: "ju5fea"
    };

    if (!usage_plan || !(usage_plan in usage_plans)) {
        console.log(usage_plan + " usage plan does not exist");
        return false;
    }

    var params = {
        name: apikey_name,
        description: "Created via API on " + (new Date).toISOString(),
        enabled: true,
        generateDistinctId: true
    };
    
    let api_key = await new Promise((resolve) => { 
        apigateway.createApiKey(params, function (err, data) {
            if (err) {
                console.log("ERROR", err, err.stack); // an error occurred
                resolve(false);
            }
            else {
                resolve(data);
            }
        });
    });

    if (!api_key) return false;

    params = {
        keyId: api_key.id,
        keyType: "API_KEY",
        usagePlanId: usage_plans[usage_plan]
    };

    await new Promise((resolve) => {
        apigateway.createUsagePlanKey(params, function(err, data) {
            if (err) {
                console.log(err, err.stack); // an error occurred
                resolve(false);
            }
            else {
                resolve(data);
            }
        });
    });

    return api_key;
}