标签: aws-lambda

AWS:如何将API网关中定义的资源传递给lambda?

我尝试构建一个简单的 Rest API。我只知道如何通过映射将查询字符串传递给我的 lambda 函数。现在我想知道是否有方法将“资源”传递给我的 lambda 函数?

例如,我的 lambda 如何获得“水果”和“蔬菜”?

在此输入图像描述

amazon-web-services aws-lambda aws-api-gateway

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

如何设置我的 HostedZone,以便将其委托给另一个 AWS 账户中的父 DNS 记录?

介绍

我有一些使用 CDK 创建 API 网关和 Lambda 的 TypeScript 代码。它可以工作并部署到标准 AWS URL。到目前为止,一切都很好。

我现在需要转移 API 网关,以便它在自定义域上运行,以便它可以在 Web 应用程序中设置 cookie。事实证明,这要困难得多,我怀疑我遇到了困难,因为我同时对 TypeScript、AWS 和 CDK 都是新手。网络上有许多文档资源,但大多数都要求我重写我拥有的宝贵的少量工作代码,但我不愿意这样做。

我已经手动创建了一个证书,因为这需要验证,因此在代码中创建它没有意义。除此之外,我希望所有其他资源都由堆栈中的 CDK 代码创建。在我看来,如果我必须手动配置,就违背了 CDK 的目的。

问题

下面的代码部署了我需要的一切gatekeeper.d.aws.example.com- HostedZone、ARecord、LambdaRestApi 和 Function (lambda)。但是它不起作用,因为新分配的 NS 记录与gatekeeper.d.aws.example.com父记录中的记录不匹配d.aws.example.com。

我认为这意味着虽然d.aws.example.com是“已知”的,但gateway子域不能委托给它。

这是我的工作代码:

// Create the lambda resource
const referrerLambda = new lambda.Function(this, 'EisReferrerLambda', {
    runtime: lambda.Runtime.NODEJS_14_X,
    handler: 'index.handler',
    code: lambda.Code.fromAsset(path.join(__dirname, '../../src/lambda')),
    environment: env
});

// Set up the domain name on which the API should …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-route53 aws-lambda aws-cdk

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

AWS Lambda /tmp 文件夹不在执行之间共享

我正在尝试临时缓存 AWS lambda 函数执行的一些数据,以省略该 lambda 现在每次执行的 HTTP 请求并优化其速度。

在“查看者请求”中,我有以下逻辑(示例是伪代码)-

exports.handler = async (event) => {
   // check /tmp folder for data
   const cachedData = await getDataFromCache();

   if (cachedData) {
     return cachedData;
   }

   const data = await getDataFromApi();
   
   // save data for 2 mins in /tmp for re-use in next executions
   await saveDataInCache(data);

   return data;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我尝试将数据保存在/tmp文件夹中几分钟,以便在下次执行中重复使用它并减少 API 请求的数量。

在“查看者请求”lambda 执行期间,当我将数据缓存在/tmp文件夹内时,我立即看到日志中提供了数据 -

async function saveDataInCache(data = {}) {
  // save data in tmp folder
  try {
    await …
Run Code Online (Sandbox Code Playgroud)

javascript caching amazon-web-services node.js aws-lambda

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

AWS Amplify SDK 在放大推送时失败([unauthRoleName、authRoleName] 缺失)

我正在为我的公司开发一个应用程序,该应用程序利用带有 lambda 函数的 API 网关 REST 端点和 cognito 用户池(带有组)进行授权。

我昨天尝试添加一个新端点,收到了角色策略太大(超过 X 字节)的错误 - 在研究此问题后,我发现较新版本的 AWS amplify CLI(即 4.50.0)通过整合来规避此问题并结合类似的内联策略来减少总大小。

我升级到此版本的 Amplify CLI,发现这个问题已得到解决,但随后我遇到了另一个问题...在尝试通过 推送任何更改时amplify push,我现在收到以下错误:

Parameters: [unauthRoleName, authRoleName] do not exist in the template

这个错误指的是什么“模板”,我该如何解决它?在谷歌搜索后,我看到了一些潜在的解决方案,但没有一个真正对我有用,而对于那些确实有用的人来说,这只是一个临时解决方案。最终,如果我需要继续做一些事情作为临时修复,那么我会接受它并且它会做,但我想知道如何永久解决这个问题,因为我认为肯定缺少一些东西无论是在我这边还是在 AWS 云上...也许是升级 CLI 之前遇到的初始错误的产物?

感谢您的帮助,非常感谢:)

amazon-web-services aws-cloudformation amazon-cognito aws-lambda aws-amplify

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

AWS Lambda 使用多版本 JAR 中的错​​误类文件?

我的 lambda 在 Java8 下运行了几年,我刚刚将其更新到 Java 11。它立即崩溃了,给了我这样的错误:

\n
Caused by: java.lang.ExceptionInInitializerError\n    at com.mycompany.rest.providers.JsonProvider.writeTo(JsonProvider.java:80)\n    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:242)\n    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227)\n    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)\n    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116)\n    at org.glassfish.jersey.client.ClientRequest.doWriteEntity(ClientRequest.java:461)\n    at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:443)\n    at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:367)\n    at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:265)\n    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:297)\n    ... 15 more\nCaused by: java.lang.UnsupportedOperationException: No class provided, and an appropriate one cannot be found.\n    at org.apache.logging.log4j.LogManager.callerClass(LogManager.java:571)\n    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:596)\n    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:583)\n    at com.mycompany.rest.util.NonClosingOutputStream.<clinit>(NonClosingOutputStream.java:11)\n    ... 25 more\n
Run Code Online (Sandbox Code Playgroud)\n

所讨论的类并不是特别令人兴奋,并且具有在我的类中常见的简单静态初始化:

\n
public class NonClosingOutputStream extends ProxyOutputStream {\n    private static final Logger log = LogManager.getLogger(); // Line 11\n\n    public NonClosingOutputStream(final OutputStream proxy) …
Run Code Online (Sandbox Code Playgroud)

java log4j2 aws-lambda multi-release-jar

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

如何在“serverless.yml”的“Resources”中使用“If”条件?

我尝试!If在部分中使用条件resources但失败了。我想控制是否设置provisionedConcurrency我的 lambda。lambda 在function节 下定义。


functions:
  getTransactionsHandler:
    ...

resources:
  Conditions:
    CommonPCNotZero: !Not [!Equals [0, '${self:custom.commonPC}']]
  Resources:
    !If 
      - CommonPCNotZero
      - getTransactionsHandler:
        Type: AWS::Lambda::Alias
          Properties:
            FunctionName: !Ref GetTransactionsHandlerLambdaFunction
            FunctionVersion: !Join ['', [!Ref GetTransactionsHandlerLambdaFunction, ':$LATEST']]
            ProvisionedConcurrencyConfig:
              ProvisionedConcurrentExecutions: '${self:custom.commonPC}'
      - !Ref AWS::NoValue
Run Code Online (Sandbox Code Playgroud)

运行时出现以下错误sls deploy:

Error: The CloudFormation template is invalid: Template format error: [/Resources/Fn::If] resource definition is malformed
Run Code Online (Sandbox Code Playgroud)

使用条件的正确方法是什么!if?

amazon-web-services aws-cloudformation aws-lambda serverless-framework

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

如何使用 boto3 和 Docker 部署 AWS-Lambda?

环境。
jupyterlab,Python 3.8。
ubuntu 20.04LTS。
(客户端:macos bigsur / google chrome)。
使用boto3。

情况。
我构建了 docker 镜像并将其成功推送到 ECR。
该图像具有 awslambdaric 并包含 aws-lambda-rie。
我可以使用 AWS Lambda 控制台部署该映像。

我想。
使用 boto3(=python 代码)将其部署到 lambda。

问题。
按照 boto3 手册,部署 lambda 如下:

import boto3
lambdac = boto3.client('lambda')
dic = {
    'FunctionName':'lambda-name',
#    'Runtime':'python3.8',
    'Role':'my-role-arn',
    'Code':{'ImageUri':uri},
}
lambdac.create_function(**dic)
Run Code Online (Sandbox Code Playgroud)

这会出错。
它需要Runtime,所以我添加了runtime(我认为docker容器版本不需要runtime)。
并运行,并返回另一个错误。

InvalidParameterValueException: An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: Runtime and Handler are mandatory parameters for functions created with deployment packages.
Run Code Online (Sandbox Code Playgroud)

这个错误让我想到“不支持 …

python amazon-web-services docker boto3 aws-lambda

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

在 React 中单击按钮时调用 Lambda 函数

首先,我只想说我对 AWS 总体来说还是个新手(1-2 周)。所以我可能从一开始就认为不正确。

我正在开发一个应用程序,我想在 JSX 中单击按钮并触发 Lambda 函数,该函数从 dynamodb 表获取数据并将其显示在 UI 中。

我正在使用 aws cdk 将基础设施编写为代码。我该怎么面对这个?您有我可以遵循的指南吗?

amazon-web-services aws-lambda serverless aws-cdk

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

使用 lambda 转换将 Kinesis Firehose 转换为 ES

我想从订阅过滤器获取日志,然后将日志放入 s3 存储桶中并将它们发送到 ES。

类似于这里的图表:

https://aws.amazon.com/solutions/implementations/centralized-logging/

当我使用这个功能时:

/*
 For processing data sent to Firehose by Cloudwatch Logs subscription filters.
 Cloudwatch Logs sends to Firehose records that look like this:
 {
   "messageType": "DATA_MESSAGE",
   "owner": "123456789012",
   "logGroup": "log_group_name",
   "logStream": "log_stream_name",
   "subscriptionFilters": [
     "subscription_filter_name"
   ],
   "logEvents": [
     {
       "id": "01234567890123456789012345678901234567890123456789012345",
       "timestamp": 1510109208016,
       "message": "log message 1"
     },
     {
       "id": "01234567890123456789012345678901234567890123456789012345",
       "timestamp": 1510109208017,
       "message": "log message 2"
     }
     ...
   ]
 }
 The data is additionally compressed with GZIP.
 The code below will:
 1) Gunzip …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services elasticsearch kibana aws-lambda amazon-kinesis-firehose

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

无法访问 Go Lambda 中的文件系统

我之前使用过 Lambda 函数,如果我没记错的话,我应该在/tmp.

然而,我的 Go lambda 函数似乎没有与 fs 正确交互:

exec.Command("ls -la /").Output()返回空

exec.Command("rm -rf /tmp/xxx").Run()回报fork/exec : no such file or directory

exec.Command("mkdir -p /tmp/xxx").Run()回报fork/exec : no such file or directory

真的很奇怪。它使用 go1.x 环境(因此,我猜 amazonlinux:2)

更新

我可以使用 Go os 函数访问 fs:

os.RemoveAll("/tmp/xxx")

if _, err := os.Stat("/tmp/xxx"); os.IsNotExist(err) {
    if err := os.Mkdir("/tmp/xxx", os.ModePerm); err != nil {
        return err
    }
}
Run Code Online (Sandbox Code Playgroud)

但我确实需要 exec 之后运行(二进制命令),并在该 tmp 文件夹中写入一个文件。这种情况下的错误是相同的(没有这样的文件或目录)。即使我刚刚使用上述命令创建了该文件夹。

go aws-lambda

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