我正在制作 AWS Lambda 函数。现在我想要isinstance(context,LambdaContext),我期待它在 AWS Lambda 中工作。但我在本地运行单元测试。
那么如何导入 LambdaContext。
最好的事物
我有一个代理到 AWS Lambda 函数的 API 网关资源。这对于传递尾随路径参数 ( /periodicals/{tail+})效果很好,但由于我希望这些参数是可选的,因此我还向ANY更高层的资源 ( /periodicals)添加了一个方法:
从 AWS 控制台中测试该方法时,这很有效。但是,直接从我的浏览器对该资源执行请求会导致以下响应:
{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)
有了这个标题:
x-amzn-errortype: MissingAuthenticationTokenException
Run Code Online (Sandbox Code Playgroud)
它还有一个x-cache带有值的标题Error from cloudfront,所以我猜它可能与 CloudFront 有关。我还没有明确设置 CloudFront,也不知道如何检查?
我想我阅读了有关此错误消息的每个线程,但它们似乎都不适用于我:

/periodicals/whatever(即{tail+}资源)时,它工作正常,但对于/periodicals.ANY.
感谢@Lakindu,一个有趣的观察是在 Stages 视图中的资源下方没有列出任何方法:
我还能做些什么来找出问题所在?
我想通过以下代码在 lambda 处理程序之外调用异步函数:
var client;
(async () => {
var result = await initSecrets("MyWebApi");
var secret = JSON.parse(result.Payload);
client= new MyWebApiClient(secret.API_KEY, secret.API_SECRET);
});
async function initSecrets(secretName) {
var input = {
"secretName" : secretName
};
var result = await lambda.invoke({
FunctionName: 'getSecrets',
InvocationType: "RequestResponse",
Payload: JSON.stringify(input)
}).promise();
return result;
}
exports.handler = async function (event, context) {
var myReq = await client('Request');
console.log(myReq);
};
Run Code Online (Sandbox Code Playgroud)
“客户端”未初始化。如果在处理程序中执行,相同的代码可以完美运行。initSecrets 包含 getSecrets() 的 lambda 调用,它调用 AWS SecretsManager 有谁知道如何在处理程序外部正确调用异步函数以进行初始化?
非常感谢您的支持。
asynchronous initialization async-await aws-lambda aws-secrets-manager
我一直在使用 AWS API Gateway、Lambda 和无服务器框架构建无服务器 REST API。我想建立一个用户注册的网站,选择一个 API 计划(免费、基本、专业)并获得相应的长期 API 密钥,他们可以使用该密钥每月查询一定次数的无服务器 API。
我知道使用 Cognito 和自托管 UI,您可以使用 CUP(Cognito 用户池)令牌轻松处理用户身份验证,这些令牌实际上是 Json Web 令牌。我想自动创建 API 密钥并将其关联到使用计划,然后关联到 Cognito 用户。
第一部分很简单:使用 AWS Javascript SDK,只需执行以下操作:
var params = {
keyId: 'whateverKeyId', /* required */
keyType: 'API_KEY', /* required */
usagePlanId: 'whateverUsagePlanId' /* required */
};
apigateway.createUsagePlanKey(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Run Code Online (Sandbox Code Playgroud)
我在第二部分苦苦挣扎......我应该将 API 密钥作为自定义属性添加到用户池中吗?但是,我真的不知道如何检索 API 密钥。该文件是不是真的清楚。注册后将用户和 API Key 添加到我自己的 DynamoDB 数据库中(这真的会浪费 Cognito)? …
我创建了一个新的 AWS Lambda .NET Core 3.1 项目,然后使用 AWS Lambda 测试工具运行它,然后我按预期得到了这个页面:
但是,如果我安装这些软件包之一:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.Data.SqlClient
当我运行时,出现此错误并且无法打开测试页面:
AWS .NET Core 3.1 Mock Lambda Test Tool (0.10.0)
Unknown error occurred causing process exit: Dependency resolution failed for component C:\Users\siri\repos\bolao-futebol\website-core\AWSLambda1\bin\Debug\netcoreapp3.1\AWSLambda1.dll with error code -2147450740. Detailed error: Error:
An assembly specified in the application dependencies manifest (AWSLambda1.deps.json) was not found:
package: 'runtime.win-x64.runtime.native.System.Data.SqlClient.sni', version: '4.4.0'
path: 'runtimes/win-x64/native/sni.dll'
at System.Runtime.Loader.AssemblyDependencyResolver..ctor(String componentAssemblyPath)
at Amazon.Lambda.TestTool.Runtime.LambdaAssemblyLoadContext..ctor(String lambdaPath) in C:\codebuild\tmp\output\src142363207\src\Tools\LambdaTestTool\src\Amazon.Lambda.TestTool\Runtime\LambdaAssemblyLoadContext.cs:line 28
at Amazon.Lambda.TestTool.Runtime.LocalLambdaRuntime.Initialize(String directory, IAWSService awsService) in C:\codebuild\tmp\output\src142363207\src\Tools\LambdaTestTool\src\Amazon.Lambda.TestTool\Runtime\LocalLambdaRuntime.cs:line 71
at Amazon.Lambda.TestTool.Runtime.LocalLambdaRuntime.Initialize(String directory) …Run Code Online (Sandbox Code Playgroud) 我正在尝试定义一个返回 Lambda 函数的 ARN 的 terraform 输出块。Lambda 在子模块中定义。根据文档,lambda 似乎应该已经有一个 ARN 属性:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/lambda_function#arn
使用它作为来源,我认为我应该能够执行以下操作:
output "lambda_arn" {
value = module.aws_lambda_function.arn
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
Error: Unsupported attribute
on main.tf line 19, in output "lambda_arn":
19: value = module.aws_lambda_function.arn
This object does not have an attribute named "arn".
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何意见,谢谢。
我正在使用 AWS Amplify 创建 Lambda 函数、REST API 和 Cognito 用户池。我想检索向端点发出请求的 Cognito 用户,以便我可以访问他们的用户属性。
我为该功能选择了无服务器 Express 模板:
应用程序.js
app.post('/do-something', async (req, res) => {
// The user pool ID is available as an environment variable.
// I want to get the user and use their user attributes here.
});
Run Code Online (Sandbox Code Playgroud)
客户端配置根据当前用户的令牌设置 Authorization 标头:
应用程序.js
Amplify.configure({
API: {
endpoints: [
{
name: "sampleCloudApi",
endpoint: "https://xyz.execute-api.us-east-1.amazonaws.com/Development",
custom_header: async () => {
return { Authorization: `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}` }
}
}
]
}
});
Run Code Online (Sandbox Code Playgroud)
事件 ( …
amazon-web-services amazon-cognito aws-lambda aws-api-gateway aws-amplify
我将改用新的 Node AWS SDK (v3),以利用其模块化和 Typescript 支持。我需要做的第一件事是编写 Lambda 函数,但我找不到支持处理函数签名的类型。中的类型@aws/client-lambda似乎都与管理Lambda 的客户端相关。
Node SDK 是否有用于在某处编写Lambda 的官方类型?尤其:
context?event论证,是否有可能来自其他 AWS 服务及其相应类型的事件列表?interface Event {
// This could be anything -- a custom structure or something
// created by another AWS service, so it makes sense that
// there isn't a discoverable type for this. There should be
// corresponding types for each service that can send events
// to Lambda functions though. Where …Run Code Online (Sandbox Code Playgroud) 目前,我在将库导入到我的 AWS Lambda 函数时遇到问题pandas。我尝试过两种场景。
使用 my 将 pandas 直接安装到一个文件夹中lambda_function并上传压缩文件。
使用上传的 zip 文件创建一个具有以下结构的图层:
- python
- lib
- python3.8
- site-packages
- all the pandas packages here
Run Code Online (Sandbox Code Playgroud)
我lambda_function的只是:
import json
import pandas as pd
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Run Code Online (Sandbox Code Playgroud)
这是我的错误:
START RequestId: 9e27641e-587b-4be2-b9be-c9be85007f9e Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'main': Unable to import required dependencies:
numpy:
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE …Run Code Online (Sandbox Code Playgroud) 我正在尝试将所有 lambda 转换为 arm64。我正在使用无服务器框架,并添加了文档中提到的架构标签。
provider:
stage: ${opt:stage}
name: aws
architecture: arm64
Run Code Online (Sandbox Code Playgroud)
但问题是它没有在 lambda 中更新。
是因为我需要更新我正在使用的无服务器软件包以便形成云吗?我找不到任何相关信息
"serverless": "^1.52.0",
"serverless-plugin-optimize": "^3.1.1-rc.1",
"serverless-plugin-split-stacks": "^1.7.0",
"serverless-plugin-typescript": "^1.1.9",
Run Code Online (Sandbox Code Playgroud)
这些是我正在使用的依赖项。不确定是否是因为我的无服务器框架版本?
aws-lambda ×10
node.js ×2
python ×2
api-key ×1
async-await ×1
asynchronous ×1
aws-amplify ×1
aws-sdk-js ×1
c# ×1
lambda ×1
numpy ×1
pandas ×1
terraform ×1
typescript ×1