在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 …
有没有办法在AWS Lambda中执行aws-cli?它似乎没有预先安装.(我通过Node.js子进程检查了"which aws",但它不存在.)
我必须将文件从 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 中所建议的。
这段代码保持不变,这里有趣的是uploadToFirstS3和uploadToSecondS3函数。在这个最小的示例中,两者使用不同的配置执行完全相同的操作,我在这里仅使用一个。
什么效果好:
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包)工作正常。我的问题是,我希望它与 …
使用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
我们可以在aws-lambda中设置环境变量,例如通过AWS SAM:
Environment:
Variables:
TABLE_NAME: !Ref Table
Run Code Online (Sandbox Code Playgroud)
如何通过Node JS AWS-SDK从当前lambda获取此变量?
使用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 将大文件上传到 s3 存储桶aws-sdk。
该方法以分段上传的V2方式upload对文件进行整体上传。
我想使用新的 V3 aws-sdk。新版本如何上传大文件?该方法PutObjectCommand似乎没有做到这一点。
我见过一些方法,CreateMultiPartUpload但我似乎找不到使用它们的完整工作示例。
提前致谢。
amazon-s3 amazon-web-services node.js aws-sdk aws-sdk-nodejs
我在调用 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)我正在尝试使用查询字符串获取S3存储桶中特定文件夹下的对象列表,该查询字符串将文件夹名称作为参数,并使用Node JS aws-sdk列出与该特定文件夹匹配的所有对象
例如:http:// localhost:3000 / listobjects?foldername = xxx
请提出如何实现此功能的建议。
我正在运行以下代码,但由于以下错误而失败。
列出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
aws-sdk-nodejs ×10
aws-sdk ×6
node.js ×6
amazon-s3 ×3
aws-lambda ×3
javascript ×2
amazon-sns ×1
aws-cli ×1
aws-kms ×1
nodes ×1
stream ×1