尝试从Node.js中的AWS Lambda函数读取S3存储桶的内容时未获得结果

智者

将dynamodb表从另一个帐户跨帐户迁移到我们自己的AWS帐户后,我需要使用nodejs lambda来读取和处理包含json的文本文件。通过创建EMR集群来运行导入作业的源AWS Datapipeline在对象帐户中使用格式为dynamodbtablename/manifest的源密钥在源帐户(不是我们的帐户)的S3存储桶中删除了5 MB文件dynamodbtablename/2c561e6c-62ba-4eab-bf21-7f685c7c3129清单文件包含以下示例数据:

{"name":"DynamoDB-export","version":3,
"entries": [
{"url":"s3://bucket/dynamodbtablename/2c561e6c-62ba-4eab-bf21-7f685c7c3129","mandatory":true}
]}

我一直在努力阅读清单文件,这是今天的大部分时间。尽管在lambda中没有访问问题,但最初我还是不得不处理在Terraform中设置跨帐户策略和对资源的权限。我现在的问题是,调用的代码s3.getObject似乎没有被击中。

/* eslint-disable no-console, no-param-reassign */

const AWS = require('aws-sdk');

const massiveTables = [
  'dynamodbtablename'
];

function getS3Objects(params) {
  let s3 = new AWS.S3({
    apiVersion: '2012-10-29'
  });
  return new Promise((resolve, reject) => {
    s3.getObject(params, (err, data) => {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    });
  });
}

const handler = async ({ Records }) => {
  const completelyProcessedSNSPromises = Records.map(async ({ Sns: { Message: tableName } }) => {
    console.log(`tableName: ${tableName}`);
    let massiveTableItem = tableName.trim();
    console.log(`massiveTableItem: ${massiveTableItem}`);
    //#1: Validate the the right table names are coming through
    if (massiveTables.includes(massiveTableItem)) {
      //#2: Use the table name to fetch the right keys from the S3 bucket

      let params = {
        Bucket: process.env.DATA_BUCKET,
        Key: `${massiveTableItem}/manifest`,
        ResponseContentType: 'application/json'
      };

      getS3Objects(params)
        .then(result => {
          console.log(`result: ${result}`);
        })
        .catch(error => {
          console.log(`error: ${error}`);
        });
    }
  });

  await Promise.all(completelyProcessedSNSPromises)
    .then(console.log)
    .catch(console.error);
};

module.exports.handler = handler;

这就是我在Cloudwatch日志中得到的


16:13:25
2020-03-11T16:13:25.271Z    8bd74c44-c9b1-4cd9-a360-251ad4253eae    INFO    tableName: dynamodbtablename
2020-03-11T16:13:25.271Z    8bd74c44-c9b1-4cd9-a360-251ad4253eae    INFO    tableName: dynamodbtablename

16:13:25
2020-03-11T16:13:25.271Z    8bd74c44-c9b1-4cd9-a360-251ad4253eae    INFO    massiveTableItem: dynamodbtablename
2020-03-11T16:13:25.271Z    8bd74c44-c9b1-4cd9-a360-251ad4253eae    INFO    massiveTableItem: dynamodbtablename

16:13:25
2020-03-11T16:13:25.338Z    8bd74c44-c9b1-4cd9-a360-251ad4253eae    INFO    [ undefined ]
2020-03-11T16:13:25.338Z    8bd74c44-c9b1-4cd9-a360-251ad4253eae    INFO    [ undefined ]

请帮助我知道我在做什么错。

提前非常感谢您。PS:我是Nodejs / Java的新手

智者

谢谢大家的帮助。

我发现问题是我在异步lambda处理程序中调用的异步函数由于无法访问封闭的异步lambda处理程序的范围的范围问题而无法执行。这是在使用数组映射和forEach函数时发生的。

我求助于使用传统的for循环。

for (let i = 0; i < Records.length; i++) {
    const tableName = Records[i].Sns.Message;
    console.log(`DAZN tableName: ${tableName}`);
    const tableIndex = daznTables.findIndex(t => tableName.includes(t));
    const massiveTableItem = massiveTables[tableIndex];
    console.log(`massiveTableItem: ${massiveTableItem}`);
    const dataBucket = process.env.DATA_BUCKET;
}

由于实际上不需要从.map函数返回任何内容,因此我摆脱了

  await Promise.all(completelyProcessedSNSPromises)
    .then(console.log)
    .catch(console.error);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我尝试向我的S3存储桶(Node.js)发送内容时,AWS缺少凭据

来自分类Dev

对象存在于Node.JS的AWS S3存储桶中

来自分类Dev

Node.js如何从AWS S3存储桶中获取JSON而不是Buffer

来自分类Dev

将 JSON 文件从 node.js 中的 aws-sdk 上传到 aws s3 存储桶

来自分类Dev

尝试在 firebase 中 signInWithEmailAndPassword 时未获得 customToken

来自分类Dev

AWS Node.js微服务:S3存储桶中的文件更改时以迭代方式调用服务

来自分类Dev

尝试从AWS S3将文件下载到Node.js writeStream

来自分类Dev

使用Mongoose的Node.js中的MongoDB聚合未获得正确的结果

来自分类Dev

尝试使用 node.js 和 exec + aws cli 将所有文件从一个 S3 存储桶移动到另一个存储桶

来自分类Dev

当我尝试将文件复制到 aws S3 存储桶时,Jenkins 作业失败

来自分类Dev

在node.js中的AWS Lambda函数之间共享代码

来自分类Dev

在node.js中的AWS Lambda函数之间共享代码

来自分类Dev

尝试使用Node js将多个图像上传到AWS时遇到错误

来自分类Dev

在Python 3.8.1中读取文本文件时未获得所需结果

来自分类Dev

将图像从S3存储桶下载到Lambda临时文件夹(Node.js)

来自分类Dev

AWS Lambda:如何在S3存储桶中读取CSV文件,然后将其上传到另一个S3存储桶?

来自分类Dev

为什么我的lambda函数尝试访问S3存储桶时会被拒绝访问?

来自分类Dev

尝试访问Google Spreadsheets时使用Node.js

来自分类Dev

尝试从Node.js获取信息SOAP时出错

来自分类Dev

Node JS - 尝试创建 PDF 时出现标题错误

来自分类Dev

AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果

来自分类Dev

AWS Lambda中的简单node.js示例

来自分类Dev

在AWS Lambda node.js中获取机密

来自分类Dev

尝试将会话注入到Node.js中异步函数内的请求主体中

来自分类Dev

如何在 AWS lambda 函数执行期间在 AWS S3 存储桶中写入文件?

来自分类Dev

尝试使用python2.7中的boto3模块从S3存储桶和S3存储桶获取CSV文件时出现无效的时间戳记错误

来自分类Dev

无法从aws s3下载图像,尽管Node js中的所有内容都正确

来自分类Dev

如何使用 Node.js 从 AWS Lambda 中的 /tmp 文件夹将 WAV 文件上传到 S3

来自分类Dev

允许在 S3 存储桶中公开读取与允许下载存储桶的内容相同吗?

Related 相关文章

  1. 1

    当我尝试向我的S3存储桶(Node.js)发送内容时,AWS缺少凭据

  2. 2

    对象存在于Node.JS的AWS S3存储桶中

  3. 3

    Node.js如何从AWS S3存储桶中获取JSON而不是Buffer

  4. 4

    将 JSON 文件从 node.js 中的 aws-sdk 上传到 aws s3 存储桶

  5. 5

    尝试在 firebase 中 signInWithEmailAndPassword 时未获得 customToken

  6. 6

    AWS Node.js微服务:S3存储桶中的文件更改时以迭代方式调用服务

  7. 7

    尝试从AWS S3将文件下载到Node.js writeStream

  8. 8

    使用Mongoose的Node.js中的MongoDB聚合未获得正确的结果

  9. 9

    尝试使用 node.js 和 exec + aws cli 将所有文件从一个 S3 存储桶移动到另一个存储桶

  10. 10

    当我尝试将文件复制到 aws S3 存储桶时,Jenkins 作业失败

  11. 11

    在node.js中的AWS Lambda函数之间共享代码

  12. 12

    在node.js中的AWS Lambda函数之间共享代码

  13. 13

    尝试使用Node js将多个图像上传到AWS时遇到错误

  14. 14

    在Python 3.8.1中读取文本文件时未获得所需结果

  15. 15

    将图像从S3存储桶下载到Lambda临时文件夹(Node.js)

  16. 16

    AWS Lambda:如何在S3存储桶中读取CSV文件,然后将其上传到另一个S3存储桶?

  17. 17

    为什么我的lambda函数尝试访问S3存储桶时会被拒绝访问?

  18. 18

    尝试访问Google Spreadsheets时使用Node.js

  19. 19

    尝试从Node.js获取信息SOAP时出错

  20. 20

    Node JS - 尝试创建 PDF 时出现标题错误

  21. 21

    AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果

  22. 22

    AWS Lambda中的简单node.js示例

  23. 23

    在AWS Lambda node.js中获取机密

  24. 24

    尝试将会话注入到Node.js中异步函数内的请求主体中

  25. 25

    如何在 AWS lambda 函数执行期间在 AWS S3 存储桶中写入文件?

  26. 26

    尝试使用python2.7中的boto3模块从S3存储桶和S3存储桶获取CSV文件时出现无效的时间戳记错误

  27. 27

    无法从aws s3下载图像,尽管Node js中的所有内容都正确

  28. 28

    如何使用 Node.js 从 AWS Lambda 中的 /tmp 文件夹将 WAV 文件上传到 S3

  29. 29

    允许在 S3 存储桶中公开读取与允许下载存储桶的内容相同吗?

热门标签

归档