我想从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中运行
答案 0 :(得分:1)
听起来您可能尚未配置VPC以允许Lambda函数访问VPC外部存在的资源(如AWS API)。首先,是否真的有必要在VPC内运行该功能?如果不是,那么从VPC中删除它应该可以解决此问题。
如果有必要在VPC中运行该功能,则需要将Lambda函数放置在带有到NAT网关的路由的专用子网内,或为其所需的AWS服务配置VPC endpoint访问。