标签: aws-lambda

错误:使用 html-to-pdf 包在 AWS Lambda 上生成 EACCES

我正在使用html-pdf并尝试使用节点 js 在 AWS Lambda 上将 html 转换为 pdf,但出现错误Error: spawn EACCES" message:

START RequestId: 8bc188e7-8249-41d7-b8f7-8a2585ea8e46 Version: $LATEST
2019-06-07T20:44:44.824Z    8bc188e7-8249-41d7-b8f7-8a2585ea8e46    ************** start
2019-06-07T20:44:45.025Z    8bc188e7-8249-41d7-b8f7-8a2585ea8e46    Error: spawn EACCES
    at _errnoException (util.js:1022:11)
    at ChildProcess.spawn (internal/child_process.js:323:11)
    at Object.exports.spawn (child_process.js:502:9)
    at PDF.PdfExec [as exec] (/var/task/node_modules/html-pdf/lib/pdf.js:87:28)
    at PDF.PdfToBuffer [as toBuffer] (/var/task/node_modules/html-pdf/lib/pdf.js:44:8)
    at exports.handler (/var/task/index.js:17:35)
END RequestId: 8bc188e7-8249-41d7-b8f7-8a2585ea8e46
REPORT RequestId: 8bc188e7-8249-41d7-b8f7-8a2585ea8e46  Duration: 345.46 ms Billed Duration: 400 ms     Memory Size: 128 MB Max Memory Used: 39 MB  
RequestId: 8bc188e7-8249-41d7-b8f7-8a2585ea8e46 Process exited before completing …
Run Code Online (Sandbox Code Playgroud)

node.js aws-lambda

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

如何引用 SAM 模板中定义的角色?

我是 AWS SAM 模板的新手,希望能够使用一系列策略创建角色,然后为 Lambda 函数引用该角色。但是,当我尝试部署时出现以下错误:

'role' 处的值 'MyRole' 未能满足约束:成员必须满足正则表达式模式:arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a -zA-Z_0-9+=,.@-_/]+

这个答案提到我可以将策略直接添加到函数中,但我会有很多需要相同策略的函数,所以这不是一个非常 DRY 的方法 IAM 模板中的 IAM 角色

是!GetAtt新创建的角色无法使用的问题吗?

这是我的template.yml样子:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  OMW Backend Services

Globals:
  Function:
    Timeout: 3

Resources:

  MyRole:
    Type: AWS::IAM::Role
    Properties:
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/service-role/AmazonRDSFullAccess'
        - 'arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - 'lambda.amazonaws.com'
            Action:
              - 'sts:AssumeRole'
      Policies:       
          PolicyName: 'ParameterStoreDevParameterAccess'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'ssm:GetParameter*'
                Resource: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/dev/*'
        -
          PolicyName: 'ParameterStoreDevLambdaBasicExecution' …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-lambda aws-sam

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

为什么这个 JSON 属性被记录为未定义?

我有一个 nodejs lambda,它有一个 SQS 队列作为事件,它订阅了一个 SNS 主题。

lambda 看起来像这样:

'use strict';

import { Handler } from 'aws-lambda';

const myLambda: Handler = async (event: any = {}) => {
  let incomingMessage = JSON.stringify(event.Records[0].body);
  console.log('Received event:', incomingMessage); # log1
  console.log('parsed event',JSON.parse(incomingMessage)); # log2
  var type = JSON.parse(JSON.stringify(incomingMessage)).Type;
  console.log('Message received from SNS:', type); # log3
  return { };
};

export { myLambda }
Run Code Online (Sandbox Code Playgroud)

我已经注释了三个日志行,因为它会使讨论更容易一些。

log1:这显示了事件的纯文本。 log2:这显示了一个很好的 JSON 格式(谢谢 cloudwatch)的消息:

{
    "Type": "Notification",
    "MessageId": "9245d801-2fe5-58ed-b667-8d9b73b2ff85",
    "TopicArn": "arn:aws:sns:eu-west-1:0123456:TopicName",
    "Subject": "Amazon SES Email Receipt …
Run Code Online (Sandbox Code Playgroud)

amazon-sns typescript aws-lambda

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

内联部署 lambda 函数

我有一个可以通过 S3 存储桶部署的 python 函数。但是可以“内联”部署一个函数......

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html

但我没有看到有关如何执行此操作的任何明确说明。我不想使用 S3 存储桶。

aws-cloudformation aws-lambda

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

AWS SES send email lambda not sending every time

I want to send emails using the ses from aws from lambda. The problem is that the email is only sent some times using the same code. We don't get errors.

Here's the code:

const AWS = require('aws-sdk');
var ses = new AWS.SES();

exports.handler = async (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;

    await new Promise((resolve, reject) => {

      var params = {
        Destination: {
            ToAddresses: [myEmail]
        },
        Message: {
            Body: {
                Text: { Data: "Test"

                }

            },

            Subject: …
Run Code Online (Sandbox Code Playgroud)

sendmail amazon-web-services amazon-ses aws-lambda

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

为什么我的 Lambda 无法访问互联网?

我有一个可以从 API 网关或 ALB 请求触发的 Lambda 函数。我还有一个 RDS Aurora PostgreSQL 实例,它们都在 VPC 中运行。

我能够从 Lambda 连接到 RDS 实例就好了,但是我无法访问互联网,例如尝试向https://jsonplaceholder.typicode.com/todos/1发出请求将导致超时.

我也无法使用 DBeaver 等 SQL 客户端连接到远程数据库。

下面是一些详细信息,但如果您需要其他任何东西,请告诉我。我难住了。

Lambda 入站规则

Security group ID       Ports   Source
sg-0f2c4426c8fc85235    80      0.0.0.0/0
sg-0f2c4426c8fc85235    5432    0.0.0.0/0
sg-0f2c4426c8fc85235    All     sg-0f2c4426c8fc85235
sg-0f2c4426c8fc85235    22      0.0.0.0/0
sg-0f2c4426c8fc85235    443     0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

Lambda 出站规则

Security group ID       Ports   Destination
sg-0f2c4426c8fc85235    All     0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

RDS 连接

目录

专有网络 虚拟主机

公共子网 发布订阅

私有子网 优先级

编辑

Nat 网关(与公共子网关联) 纳特

路由表 rtables

路由表路由 路由表A

路由表B

路由表C

编辑 2

Lambda 子网

兰苏

amazon-web-services aws-lambda serverless-framework

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

试图从 sqs 触发我的 lambda 函数,它正在触发 lambda 但队列中没有消息

我试图从 SQS 延迟队列触发我的 lambda 函数,它正在触发 lambda 但队列中没有消息。即使当我检查 aws 控制台时,也会出现消息延迟,并且延迟时间结束时。它触发了我的 lambda 函数,但是当我的 lambda 尝试获取消息列表时,它显示为空列表。另一件事是,当我在此之后删除 lambda 触发器时,每当我将消息发送到队列时,它都会显示延迟时间后可用的消息。所以它按预期工作,没有向 lambda 添加触发器,但是当我添加触发器时,我的 lambda 没有收到任何要处理的消息。

我尝试了各种方法,但没有任何效果。我的默认可见性超时:30 秒和接收消息等待时间:0 秒和传递延迟:10 秒。

使用下面的代码从 sqs 获取消息,它总是返回空列表:

final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(SQS_URL);
        final List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
Run Code Online (Sandbox Code Playgroud)

我是 aws 的新手,不知道该怎么做,因为这个问题陷入了僵局。请帮忙。

amazon-sqs amazon-web-services aws-lambda

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

从 DynamoDB 查询多个项目

我正在 AWS 中设计一个简单的无服务器应用程序:API Gateway-> Lambda (node.js) -> DynamoDB。

我想将客户数量保留在同一张桌子和相应的项目中,例如

Client_id,编号,项目,价格

0001, 1, 盒子, 10

0001, 2, 表, 100

0002, 1, 椅子, 20

0003, 1, 灯, 15

我选择 Primary Key = Client_id 和 Sort Key = no,目前我可以使用“dynamodb.get”函数获取单个项目,但在获取一个客户端的所有项目时遇到问题。我尝试使用“dynomodb.batchget”,但我需要知道表中有多少项目并可能进行一些循环。也许有不同的方式可以从单个客户那里获取所有项目?


const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports.get2 = (event, context, callback) => {

    var params = {
        "RequestItems": {
            "items": {
                "Keys": [{
                        id: Number(event.pathParameters.id),
                        no: 1
                    },
                    {
                        id: Number(event.pathParameters.id),
                        no: 2
                    }
                ]
            }
        },
        "ReturnConsumedCapacity": "TOTAL"
    };

    dynamoDb.batchGet(params, …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-dynamodb aws-lambda

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

Promise 如何在 Node.js 和 AWS lambda 函数中工作

总的来说,我对 Javascript 和 Node.js 很陌生。因此,我试图了解 Node.js 中异步编程的概念以及如何在 AWS lambda 中使用它。

我在亚马逊博客上看到了这篇博文,它解释了 Node.js lambda 函数中对 async/await 的支持:https : //aws.amazon.com/blogs/compute/node-js-8-10-runtime-now-在 aws-lambda/ 中可用

据我所知,生成承诺的函数的概念如下面的代码片段所示:

const func1 = () => {
    console.log("Starting with execution of func1...")
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("First promise ended after 3 secs")
        }, 3000)
    })
}
Run Code Online (Sandbox Code Playgroud)

所以在这里函数显式地生成一个 Promise 并返回相同的。

但是在上面的 AWS 博客文章中,我看到了一个函数定义:

let AWS = require('aws-sdk');
let lambda = new AWS.Lambda();

exports.handler = async (event) => {
    return await lambda.getAccountSettings().promise() ;
};
Run Code Online (Sandbox Code Playgroud)

现在我已经检查了 Node.js …

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

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

多个触发的 AWS Lambda 日志显示在单个 Cloudwatch 日志流中

我们创建了一个 Lambda 函数,它必须在每分钟后触发。它按预期工作并显示正确的结果。但是通过 Cloudwatch 事件获取的日志流在单个 Cloudwatch 日志流中包含多个 Lambda 触发器日志。

活动规则:- 在此处输入图片说明

是否可以为 1 个 Lambda 触发器创建 1 个 cloudwatch 日志?

amazon-web-services aws-lambda amazon-cloudwatchlogs

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