从AWS Lambda创建使用计划的API密钥

时间:2020-05-25 12:06:30

标签: amazon-web-services aws-lambda aws-api-gateway api-key

我想从lambda创建一个新的api密钥。我的网关API有使用计划,该计划是使用CF创建的,例如:

MyApi:
    Type: AWS::Serverless::Api
    Properties:
        Auth:
            UsagePlan: 
                UsagePlanName: MyUsagePlan
                CreateUsagePlan: PER_API
                ...
        ...

以此为参考https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/APIGateway.html

我猜想lambda中的过程应该是这样的: -createApiKey -getUsagePlan -createUsagePlanKey

在lambda中,我有MyApi ID,我正在尝试获取api:

var apiGateway = new AWS.APIGateway({region: region});
const restApi = await new Promise((resolve, reject) => {
    apiGateway.getRestApi({restApiId: MYAPI_ID}, function(err, data) {
        if (err) {
            console.log('getRestApi err', err, err.stack);
            reject(err);
        } else {
            console.log('getRestApi', data);
            resolve(data);
        }
    });
});

但是我的lambda超时了。

如果我尝试手动输入值,它也会超时:

const keyParams = {
    keyId: 'xxxxxxxx',
    keyType: 'API_KEY',
    usagePlanId: 'yyyyyyyy'
  };
const apiKey = await new Promise((resolve, reject) => {
    apiGateway.createUsagePlanKey(keyParams, function (err, data) {
        if (err) {
            console.log('createUsagePlanKey err', err, err.stack);
            reject(err);
        } else {
            console.log('createUsagePlanKey', data);
            resolve(data);
        }
    });
});    

为什么对api的每个函数调用都会超时,而console.log中却什么也没打印?我的方法是否可行,或者应该如何为用户创建新的api密钥?

编辑:lambda的超时为10秒,它们在VPC中运行

1 个答案:

答案 0 :(得分:1)

听起来您可能尚未配置VPC以允许Lambda函数访问VPC外部存在的资源(如AWS API)。首先,是否真的有必要在VPC内运行该功能?如果不是,那么从VPC中删除它应该可以解决此问题。

如果有必要在VPC中运行该功能,则需要将Lambda函数放置在带有到NAT网关的路由的专用子网内,或为其所需的AWS服务配置VPC endpoint访问。