标签: aws-lambda

如何导入 LambdaContext?

我正在制作 AWS Lambda 函数。现在我想要isinstance(context,LambdaContext),我期待它在 AWS Lambda 中工作。但我在本地运行单元测试。

那么如何导入 LambdaContext。

最好的事物

python amazon-web-services aws-lambda

10
推荐指数
1
解决办法
3350
查看次数

如何在 AWS API Gateway 中调试“缺少身份验证令牌”?

我有一个代理到 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,也不知道如何检查?

我想我阅读了有关此错误消息的每个线程,但它们似乎都不适用于我:

  • 我的方法不需要授权:
  • 我很确定 URL 是正确的。当我在浏览器中访问/periodicals/whatever(即{tail+}资源)时,它工作正常,但对于/periodicals.
  • CORS 已启用,因为两个资源都指向处理 CORS 并适用于子路径的相同 Lambda 函数。
  • HTTP 动词应该无关紧要,因为它正在侦听 ANY.
  • 无论我是否添加斜杠,结果都是一样的。
  • API 已部署。
  • 我认为 API 资源对我的 Lambda 函数有足够的权限,因为我可以从 AWS 控制台成功执行它:

感谢@Lakindu,一个有趣的观察是在 Stages 视图中的资源下方没有列出任何方法:

我还能做些什么来找出问题所在?

amazon-web-services node.js aws-lambda aws-api-gateway

10
推荐指数
1
解决办法
7008
查看次数

AWS Lambda:处理程序外部的异步调用(初始化部分,调用 lambda)

我想通过以下代码在 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

10
推荐指数
1
解决办法
2217
查看次数

通过链接 API 密钥、使用计划和 Cognito 构建可计费的 API

我一直在使用 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)? …

api-key amazon-web-services amazon-cognito aws-lambda

10
推荐指数
1
解决办法
1157
查看次数

.NET Core 3.1 - 组件依赖解析失败 - AWS Mock Lambda 测试工具

我创建了一个新的 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)

c# aws-lambda .net-core-3.1

10
推荐指数
2
解决办法
2669
查看次数

如何使用 Terraform 获取 AWS Lambda ARN?

我正在尝试定义一个返回 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-lambda terraform

10
推荐指数
1
解决办法
8391
查看次数

在 Lambda 函数中获取 Cognito 用户属性

我正在使用 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

10
推荐指数
1
解决办法
6062
查看次数

节点 AWS SDK v3:Lambda 函数中“事件”和“上下文”参数的类型?

我将改用新的 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)

node.js typescript aws-lambda aws-sdk-js aws-sdk-js-v3

10
推荐指数
1
解决办法
6653
查看次数

使用 AWS Lambda 导入 pandas 时出现 numpy 错误

目前,我在将库导入到我的 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)

python numpy amazon-web-services pandas aws-lambda

10
推荐指数
1
解决办法
5649
查看次数

在 Serverless 框架中将 lambda 切换为 arm64

我正在尝试将所有 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)

这些是我正在使用的依赖项。不确定是否是因为我的无服务器框架版本?

lambda aws-lambda serverless-framework

10
推荐指数
1
解决办法
2456
查看次数