Tag: amazon web services

从node.js中的JSON将s3桶策略转换为base64

我正在尝试在node.js中的base64中对Amazon s3存储桶策略进行编码(更具体地说是StringToSign),但似乎无法获得正确的代码。 我使用由amazon提供的默认策略进行testing,因为它们提供了正确的base64编码。 ( 亚马逊给出的例子 ) 他们的输出是eyAiZXhwaXJhdGlvbiI6ICIyMDE1…….. (保持它很短,因为它很长) 我不断收到eyJleHBpcmF0aW9uIjoiMjAxNS0xMi0zMFQx….. 我的代码来生成这个是: var policyString = JSON.stringify(policy) var policyBytes = utf8.encode(policyString) var stringToSign = base64.encode(policyBytes) 其中policy是以JSON格式保存亚马逊策略的variables,而utf8和base64是节点模块。 这可能听起来像一个新手的问​​题,但我一直盯着它一段时间,任何hlep将不胜感激!

删除dynamodb中的嵌套属性

假设我在dynamodb中获得了这个项目: { "customerId": "customer_001", "customerName: "itsme", "address": { "city": "Frankfurt", "country": "Germany", "street1": "c/o Company xxx", "street2": "Europe", "street3": "PO Box 406", "zip": "12345" } } 我需要从项目中删除嵌套的属性address.street3。 我怎么能做到这一点? 这是我的代码,它完美地删除非嵌套的属性(例如:customerName),但如果我尝试使用嵌套属性(例如:address.street3)不起作用(没有错误及没有发生) const params = { TableName: customerTable, Key: { customerId: customerId, }, AttributeUpdates: { 'address.street3': { Action: 'DELETE' } } }; dynamoDb.update(params, function (err, data) { if […]

使用AWS Lambda在NodeJS中找不到MySQL

我有下面的代码,我想要执行。 我试过要求mysql和node-mysql,它们都给我同样的错误: 码: var AWS = require("aws-sdk"); var mysql = require("mysql"); exports.handler = (event, context, callback) => { try { console.log("GOOD"); } catch (error) { context.fail(`Exception: ${error}`) } }; 错误: { "errorMessage": "Cannot find module 'mysql'", "errorType": "Error", "stackTrace": [ "Function.Module._load (module.js:417:25)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)", "Object.<anonymous> (/var/task/index.js:2:13)", "Module._compile (module.js:570:32)", "Object.Module._extensions..js (module.js:579:10)", "Module.load (module.js:487:32)", "tryModuleLoad […]

在aws上的ETagcaching

我需要将由node restify支持的API Server迁移到使用AWS提供的API Gateway + lambda函数的东西。 API服务器(GET / POST简单的东西,不涉及数据库)作为代理服务器与CMS系统交谈,为客户端提取数据。 目前, etagcaching是通过调整中间件完成的。 我想知道我需要做什么才能在新的解决scheme(API网关+ lambda)中实现同样的目标? 一个侧面说明,我想到的是 – 保存从CMS的响应到S3 / CloudFront与启用ETagcaching机制,让他们确定是否可以使用浏览器上的caching响应。 我想知道这是否是一个好的做法? 谢谢

NodeJS / Express + HTTPS:如何将密钥和证书部署到AWS EC2节点?

Node.js&Express.js是我用来编写Web API服务的新手。 要启用HTTPS,服务使用以下代码: const server = https .createServer({ key: fs.readFileSync('./cert/myservice.key'), cert: fs.readFileSync('./cert/myservice.crt') }) .listen(serverConfig.server.port, () => logger.info(`MyService is up and running`)); 很容易看出,这段代码假设.key和.crt文件在服务应用程序位置本地可用。 如果我想将服务部署到单个AWS EC2主机(为了简单起见),这些文件将不得不在那里,这似乎不是一个安全的解决scheme。 我正在考虑使用AWS IAM来保护这些秘密。 问题在于无法直接从IAM“部署”/将密码提供给EC2节点。 我不得不使用IAM的API来获取秘密,但问题是如何使EC2上的AWS凭证可用。 问题:是否有build议的安全方式将密钥(包括证书和密钥)部署到AWS EC2节点?

在AWS Lambda中实例化AWS Helper类时是否需要指定区域?

如果我想从AWS Lambda调用AWS SES,那么在实例化AWS Helper类时通常会写下列内容: var ses = new aws.SES({apiVersion: '2010-12-01', region: 'eu-west-1'}); 我想知道,我是否真的需要指定AWS区域? 或者AWS SES帮助程序类将在运行AWS Lambda函数的区域中运行。 这里最好的做法是什么? 如果我忽略这个,可能会遇到问题吗?

Lambda函数失败无法导入模块“索引”

错误: Unable to import module 'index': Error at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object.<anonymous> (/var/task/node_modules/slack-incoming-webhook/lib/index.js:3:19) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) 通过看起来这个我的代码是不是问题这是一个问题,松散的传入webhook节点模块,但是一块有问题的代码是这条线,看起来完全正常。 var SlackClient = require('./client'); 我已经尝试了4个不同的包(request,http,node-webhooks和slack-incoming-webhooks),并且它们都在节点模块中都失败了。 我非常困惑,因为我可以让代码在我自己的计算机上和Amazon Linux AMI EC2实例上运行(运行相同的节点版本) 所有的代码被压缩并使用aws-cli发送到lambda,并且我已经在lambda上部署了node.js代码,没有任何问题(alexa技能)。 我已经试过在ec2实例npm安装,我已经尝试了几个不同的包,我已经得出结论必须有某种configuration错误的lambda,但我找不到什么。 有人能指点我吗? 这里是我的代码,如果有人也好奇拉姆达触发器是aws iotbutton。 const slack = require('slack-incoming-webhook'); const send […]

将AWSconfiguration传递给导入的模块

我正在尝试通过在本地运行JS单元来testingJS AWS Lambda。 为了模拟Lambda环境,我假定Lambda与AWS.config.credentials具有相同的angular色,然后简单地调用我导入的Lambda函数。 这工作如果我复制和粘贴到testing文件的Lambda函数,但如果我导入它然后似乎函数运行一个干净的AWS.config没有我的configuration。 我可以更改Lambda模块导入AWS的方式(使其成为全局或执行其他操作),以便从testing中获取configuration,但是我更愿意将文件保存为应该上传到Lambda的文件。 在AWS Lambda中,AWS凭证以某种方式预先configuration,而模块不必执行任何操作,我想模拟该function。 这怎么能在Node中完成? 编辑:您可以在AWS Lambda中运行任何示例函数。 例如,只需在适当的AWS Lambda中运行下面的代码即可。 var AWS = require("aws-sdk"); var dynamo = new AWS.DynamoDB.DocumentClient(); dynamo.query(…) 要在本地运行,必须在此代码之前加上以下内容: AWS.config.update({region: 'us-east-1'}); AWS.config.credentials = new AWS.SharedIniFileCredentials(); AWS.config.credentials = new AWS.TemporaryCredentials({ RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials', }); 问题是,在unit testing文件中运行此configuration步骤不会使configuration可用于导入的lambda函数,因此不能正确模拟环境。

在dynamodb中使用nodejs在列表内search

我正在做一个项目,我们正在使用Dynamodb作为数据库,我有一个这样的结构的文档: { "shop_id": "hh-delightme", "shoppers": [ { "email": "hatim.haffane@gmail.com", "name": "hatim haffane" }, { "email": "xxx.zzz@gmail.com", "name": "bxdsf sdf sd f" } ] },{ "shop_id": "it-delightme", "shoppers": [ { "email": "hatim.haffane@gmail.com", "name": "hatim haffane" }, { "email": "xxx.zzz@gmail.com", "name": "bxdsf sdf sd f" } ] } 我有两个索引shop-id-index和email-index,所以我想要做的是在shop_id“hh-delightme”中得到带有“hatim.haffane@gmail.com” 我试过这个代码,但没有成功 var params = { TableName:"shopper", KeyConditionExpression:"shop_id = […]

节点JS + AWS承诺两次触发

AWS = require('aws-sdk'); AWS.config.region = 'eu-west-1'; ses = new AWS.SES(); var params = {}; return ses.sendEmail(params, function (err, data) { console.log('—–>sending email') }).promise().then((data) => { console.log('—->sending promise') }).catch((err) => { console.log('—–>am in error') console.log(err) }) 有人可以帮我上面的代码承诺触发两次。 我应该得到下面 —–>发送电子邮件 —->发送诺言 但是我得到了 —–>发送电子邮件 —->发送诺言 —–>发送电子邮件