标签: aws-sdk-nodejs

如何从Node.js中的S3 getObject获得响应?

在Node.js项目中,我试图从S3获取数据.

当我使用时getSignedURL,一切正常:

aws.getSignedUrl('getObject', params, function(err, url){
    console.log(url); 
}); 
Run Code Online (Sandbox Code Playgroud)

我的参数是:

var params = {
              Bucket: "test-aws-imagery", 
              Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Run Code Online (Sandbox Code Playgroud)

如果我将URL输出带到控制台并将其粘贴到Web浏览器中,它会下载我需要的文件.

但是,如果我尝试使用,getObject我会得到各种奇怪的行为.我相信我只是错误地使用它.这就是我尝试过的:

aws.getObject(params, function(err, data){
    console.log(data); 
    console.log(err); 
}); 
Run Code Online (Sandbox Code Playgroud)

输出:

{ 
  AcceptRanges: 'bytes',
  LastModified: 'Wed, 06 Apr 2016 20:04:02 GMT',
  ContentLength: '1602862',
  ETag: '9826l1e5725fbd52l88ge3f5v0c123a4"',
  ContentType: 'application/octet-stream',
  Metadata: {},
  Body: <Buffer 01 00 00 00  ... > }

  null
Run Code Online (Sandbox Code Playgroud)

所以它似乎正常运作.但是,当我在其中一个console.logs 上放置断点时,我的IDE(NetBeans)会抛出错误并拒绝显示数据的值.虽然这可能只是IDE,但我决定尝试其他方式使用getObject.

aws.getObject(params).on('httpData', function(chunk){
    console.log(chunk); 
}).on('httpDone', function(data){
    console.log(data); 
});
Run Code Online (Sandbox Code Playgroud)

这不输出任何东西.在断点处显示代码永远不会到达任何一个console.logs.我也尝试过:

aws.getObject(params).on('success', function(data){
    console.log(data); 
});
Run Code Online (Sandbox Code Playgroud)

但是,这也没有输出任何东西,并且放置一个断点表明console.log …

javascript amazon-s3 node.js aws-sdk aws-sdk-nodejs

58
推荐指数
8
解决办法
9万
查看次数

从AWS Lambda调用aws-cli

有没有办法在AWS Lambda中执行aws-cli?它似乎没有预先安装.(我通过Node.js子进程检查了"which aws",但它不存在.)

amazon-web-services aws-cli aws-lambda aws-sdk-nodejs

35
推荐指数
5
解决办法
1万
查看次数

如何使用 AWS SDK v3 将流上传到 S3

我必须将文件从 API 端点传输到两个不同的存储桶。原始上传是使用:

curl -X PUT -F "data=@sample" "http://localhost:3000/upload/1/1"
Run Code Online (Sandbox Code Playgroud)

文件上传的端点:

curl -X PUT -F "data=@sample" "http://localhost:3000/upload/1/1"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用两个PassThrough流,以便将请求流复制为两个可读流,如该 SO thread 中所建议的。

这段代码保持不变,这里有趣的是uploadToFirstS3uploadToSecondS3函数。在这个最小的示例中,两者使用不同的配置执行完全相同的操作,我在这里仅使用一个。

什么效果好:

const PassThrough = require('stream').PassThrough;

async function uploadFile (req, res) {
  try {
    const firstS3Stream = new PassThrough();
    const secondS3Stream = new PassThrough();
    req.pipe(firstS3Stream);
    req.pipe(secondS3Stream);

    await Promise.all([
      uploadToFirstS3(firstS3Stream),
      uploadToSecondS3(secondS3Stream),
    ]);
    return res.end();
  } catch (err) {
    console.log(err)
    return res.status(500).send({ error: 'Unexpected error during file upload' });
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码(基于aws-sdk包)工作正常。我的问题是,我希望它与 …

stream node.js aws-sdk-nodejs aws-sdk-js-v3

35
推荐指数
2
解决办法
4万
查看次数

尝试使用KMS解密Lambda函数中的密文会导致超时

使用AWS CLI从命令行解密密文时,密文会被解密而不会出现问题:

$ aws kms decrypt --ciphertext-blob fileb://encrypted-secrets --output text --query Plaintext --region us-east-1 | base64 --decode > decryped-secrets
Run Code Online (Sandbox Code Playgroud)

当尝试从js脚本执行此操作时,此解密操作也在本地工作:

#!/usr/local/bin/node

const fs = require('fs');
const AWS = require('aws-sdk');
const kms = new AWS.KMS({region:'us-east-1'});

const secretPath = './encrypted-secrets';
const encryptedSecret = fs.readFileSync(secretPath);

const params = {
      CiphertextBlob: encryptedSecret
};

kms.decrypt(params, function(err, data) {
  if (err) {
    console.log(err, err.stack);
  } else {
    const decryptedScret = data['Plaintext'].toString();
    console.log('decrypted secret', decryptedScret);
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,当在AWS Lambda函数的上下文中尝试使用与上述几乎完全相同的代码时,调用该函数会导致超时:

'use strict';

const zlib = require('zlib');
const mysql …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-sdk aws-lambda aws-kms aws-sdk-nodejs

23
推荐指数
2
解决办法
7168
查看次数

如何从lambda获取环境变量(nodejs aws-sdk)

我们可以在aws-lambda中设置环境变量,例如通过AWS SAM:

Environment:
    Variables:
      TABLE_NAME: !Ref Table
Run Code Online (Sandbox Code Playgroud)

如何通过Node JS AWS-SDK从当前lambda获取此变量?

nodes amazon-web-services aws-lambda aws-sdk-nodejs

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

使用在aws-sdk中扮演角色的配置文件(AWS JavaScript SDK)

使用AWS SDK for JavaScript,我想使用一个承担角色的默认配置文件.这与AWS CLI完美配合.将node.js与SDK一起使用不承担该角色,而只使用访问密钥所属的AWS账户的凭据.我找到了这个文档,但它没有涉及假设一个角色:http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html

有小费吗?

这是我的配置文件:

[default]
role_arn = arn:aws:iam::123456789:role/Developer
source_profile = default
output = json
region = us-east-1
Run Code Online (Sandbox Code Playgroud)

node.js aws-sdk aws-sdk-nodejs

18
推荐指数
4
解决办法
1万
查看次数

aws sdk 使用node.js分段上传到s3

我正在尝试使用 node.js 将大文件上传到 s3 存储桶aws-sdk

该方法以分段上传的V2方式upload对文件进行整体上传。

我想使用新的 V3 aws-sdk。新版本如何上传大文件?该方法PutObjectCommand似乎没有做到这一点。

我见过一些方法,CreateMultiPartUpload但我似乎找不到使用它们的完整工作示例。

提前致谢。

amazon-s3 amazon-web-services node.js aws-sdk aws-sdk-nodejs

14
推荐指数
2
解决办法
1万
查看次数

错误:找不到模块“@aws-sdk/client-sns”

我在调用 lambda 时收到此错误。

"errorType": "Runtime.ImportModuleError", "errorMessage": "错误: 找不到模块 '@aws-sdk/client-sns'\n需要堆栈:\n- /var/task/handler.js\n- /var /runtime/UserFunction.js\n- /var/runtime/index.js", "trace": [ "Runtime.ImportModuleError: 错误: 找不到模块 '@aws-sdk/client-sns'",

import * as AWS from '@aws-sdk/client-sns';
import { JamaSnsMessage } from './models/jama';
import { region, snsTopicArn } from './utils/constants';
import { log } from './utils/logger';

const client = new AWS.SNS({ region });

/**
 * Publishes given SNS formatted Jama items to SNS topic
 *
 * @param {JamaSnsMessage[]} items
 */
export const publishItems = async (items: JamaSnsMessage[]): Promise<void> => {
  if (!items …
Run Code Online (Sandbox Code Playgroud)

amazon-sns aws-sdk aws-sdk-nodejs

12
推荐指数
1
解决办法
4万
查看次数

获取位于特定S3文件夹下的对象的列表

我正在尝试使用查询字符串获取S3存储桶中特定文件夹下的对象列表,该查询字符串将文件夹名称作为参数,并使用Node JS aws-sdk列出与该特定文件夹匹配的所有对象

例如:http:// localhost:3000 / listobjects?foldername = xxx

请提出如何实现此功能的建议。

amazon-s3 node.js aws-sdk aws-sdk-nodejs

9
推荐指数
4
解决办法
1万
查看次数

“chunk”参数必须是字符串类型或 Buffer 的实例

我正在运行以下代码,但由于以下错误而失败。

列出bucker内所有对象的AWS代码

const http = require('http');
const host = '127.0.0.1';
const port = 5000;
const path = require('path')
const url = require('url')
const fs = require('fs')
var AWS = require('aws-sdk');



const laptopDate = JSON.parse(fs.readFileSync(`${__dirname}/data/data.json`, `utf-8`))

AWS.config.update({accessKeyId: '***', secretAccessKey: '***', region: 'ap-south-1'});
s3 = new AWS.S3({apiVersion: '2006-03-01'});

var params = { 
    Bucket: 'bucket-name'
}

const server = http.createServer(function(req, res){
    const path = url.parse(req.url, true).pathname
    const id = url.parse(req.url, true).query.id

    if (path === 'bucket' || path === '/')
      s3.listObjects(params, function (err, data) …
Run Code Online (Sandbox Code Playgroud)

javascript node.js aws-sdk-nodejs nodejs-stream nodejs-server

9
推荐指数
2
解决办法
2万
查看次数