我有一个受IAM授权保护的API,它是一个资源策略,允许IAM用户integ用户
调用API。
现在我想写一个lambda函数来调用同一个API。假设我可以访问IAM访问密钥和密码(通过环境变量或AWS Secret Manager),我如何对用户进行IAM授权,以便它可以成功地调用API?
用于调用相同API的示例代码(未经IAM授权):
var https = require('https');
exports.handler = (event, context, callback) => {
const options = {
host: process.env.VPCE_DNS_NAME,
port: 443,
path: "/status",
method: 'GET',
headers: {
'Host':process.env.API_GW_ENDPOINT
}
};
https.request(options, (res) => {
let data = '';
res.on('data', (d) => {
data += d;
process.stdout.write(d);
});
res.on('end', () => {
callback(null, JSON.parse(data));
});
}).on('error', (e) => {
callback(null, e);
}).end();
};
我们需要构建带有三个附加参数的常规nodejs请求选项
服务:Api Gateway 的“execute-api”
< code >地区:“美国东部-1” AWS地区。
body: postData
,通常我们传递bodyreq.write
,我们在选项中也需要它,因为签名需要它。
最后是< code>aws4.sign(...)传递给< code>request。
所有. ign
方法所做的就是添加4个额外的标头X-Amz-Content-Sha256
,X-Amz-Security-Token
,X-Amz-Date
和Authoration
var aws4 = require("aws4");
var https = require("https");
const requestBody = { name: "test" };
var postData = JSON.stringify(requestBody);
var options = {
method: "GET",
hostname: "abcdefgh.execute-api.us-east-1.amazonaws.com",
path: "/status",
headers: {
"Content-Type": "application/json",
},
service: "execute-api",
region: "us-east-1",
body: postData,
maxRedirects: 20,
};
const signedRequest = aws4.sign(options, {
secretAccessKey: "abcadefghijknlmnopstabcadefghijknlmnopst",
accessKeyId: "ABCDEFGHIJKLMNOPQRST",
sessionToken: "this is optional ==",
});
console.log(signedRequest);
var req = https.request(signedRequest, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.write(postData);
req.end();
由于此调用是从 lambda 整个对象进行的,因此可以跳过键,只需调用 aws4.sign(options)
,它应使用来自环境变量。
我们正在尝试将我们的 zip 微服务从节点js Express 中的常规应用程序迁移到与 AWS Lambda 集成的 AWS API 网关。 我们当前的应用程序向我们的API发送请求,获取附件列表,然后访问这些附件并将其内容以zip存档的形式传回给用户。它看起来像这样: 除了必须将内容从Lambda函数中流出来的部分,我已经设法完成了所有的工作。< br >我认为可能的解决方案之一是使用aws-
我在帐户a中有一个lambda函数,试图从帐户B访问资源。创建了一个新的lambda角色,该角色具有基本执行功能,可以将日志上载到cloud watch。 以下是我在Python 3.7中的函数代码: 还修改了账户B中假定角色的信托政策,如文件中所述:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-ass
在过去的几个小时里,我一直在调试、配置和命名它,我似乎不明白为什么会发生这种情况。 我正在尝试调用一个 lambda 函数,该函数只是从 ec2 中检索基本信息。当我在aws控制台中测试此lambda函数时,它似乎工作正常。但是,使用以下代码在另一个lambda中调用它; 它只是超时了。没有任何反应…两个Lambda都连接到VPC和所有子网 我认为是我的新VPC导致了这个问题。我的VPC包括: 1
我在AWS Lambda函数中查询MySQL数据库(从AWS远程托管)时遇到问题。 这是我的代码,除了Lambda函数的其余部分(为Alexa技能调用)所需的部分: 当我在命令提示符下用node运行它时,它工作得很好: 我正在使用通过npm安装在index.js目录中的“mysql”模块,并将其压缩和上传到我的Lambda函数中。 同样,这在我的开发机器上有效,但在测试我的Lambda函数时没有说
有时您可能只需要在程序中的一个位置使用一个函数,并且该函数非常简单,您可能不会给它命名,或者可能不想将它存储在符号表中,而宁愿编写一个未命名或匿名的函数。 LISP允许您编写仅在程序中遇到它们时才计算的匿名函数。 这些函数称为Lambda functions. 您可以使用lambda表达式创建此类函数。 lambda表达式的语法如下 - (lambda (parameters) body) 无法
我是AWS web服务新手,我正在AWSCOgnitoRedentialsProvider类的登录字典中使用OpenIdentity发送DeveloperAuthProviderName和令牌,然后在viecontroller中调用lambda函数,其错误如下。我使用过CognitoSyncDemo应用程序,也尝试过通过pod导入所有框架,但结果是一样的。请帮我解决这个问题。 AWSiOSSDKv