小编Abd*_*naf的帖子

Amazon SNS消息的预期SLA(服务级别协议)是什么?

我正在尝试评估SNS是否正在构建一个实时应用程序,并且需要在传递消息时快速转换时间<2秒.

由于我位于亚太地区,我在新加坡有一个SNS,在位于Us-east-1的Lambda有一个订户.

鉴于此设置,我运行了一个代码,试图找出调用lambda的延迟并进行零处理并记录时间.有人可能会说你在这种情况下也考虑了lambda调用延迟.这是真的.我需要调用Lambda并执行并在<2秒内回复.

我发送了23914条消息,其中我有平均653.520毫秒的传输+ lambda调用.峰值大约600995毫秒(约10分钟),这是像pubsub这样的技术的潜在延迟. 在此输入图像描述 lambda在<653毫秒内发送和接收大约20117条消息,这意味着3797个数据包或15%的消息比平均时间多.

2958条消息或12.36%消息需要1秒才能执行.调用和执行379条消息或1.59%需要超过2秒(这意味着1.6%的消息不能被视为实时且必须被忽略)超过10秒的82条消息64条消息超过20秒直到~45秒后延迟是10分钟.我有3包,延迟10分钟.

困扰我的是,我的消息中大约2%(如果你也包括处理时间)不能实时处理一小部分~24K消息.

在我试图呈现的比例计算中,要求我每月处理大约2160亿条消息.在这种规模上,我担心我将无法实时处理43亿条消息.

鉴于这种经验,我不确定SNS的扩展程度.那些#of不到实时的消息(读取> 2秒延迟)会更多吗?还是会减少?

现在可能有人质疑我的互联网连接可靠性,我在EC2上重新做了这个实验并得到了非常相似的结果.

事实上,在同一时间内匹配的时间延迟类型.

具体问题

  1. 什么是SLA到SNS的性能?
  2. 间接地:这些SLA如何转换为AWS Lambda服务?
  3. 有关这些延误可能发生在何处的任何理由?

amazon-web-services amazon-sns aws-lambda

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

使用aws iot从aws lambda将主题mqtt消息发布到主题

我需要使用aws iot从aws lambda通过mqtt协议发布数据.我用node.js代码创建了一个lambda函数.像这样

exports.handler = (event, context, callback) => {

    var awsIot = require('aws-iot-device-sdk');

    var device = awsIot.device({
        keyPath: 'samplepath/test.pem.key',
        certPath: 'samplepath/test.crt',
        caPath: 'samplepath',
        clientId: 'sampleId',
        region: 'us-east-1'
    });

    device
        .on('connect', function () {
            console.log('connected');
            device.publish('test_topic', JSON.stringify({ "test_name": "hello", "test_value": 1001 }));
            console.log('published successfully');
            callback(null, 'item added');
        });
}
Run Code Online (Sandbox Code Playgroud)

我在订阅者身上收到了mqtt消息.但是lambda产生这样的错误信息

Task timed out after 10.00 seconds 
Run Code Online (Sandbox Code Playgroud)

我使用了context.succeed()而不是回调,lambda正确退出.我无法收到订阅者的任何消息.

在这两种情况下,控制台打印成功发布消息.

与我的发布代码有关的问题是什么?

amazon-web-services node.js mqtt aws-lambda aws-iot

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

将唯一值插入postgresql

我在postgresql中使用下面的命令创建一个表.

CREATE TABLE someTable (
    id serial primary key,
    col1 int NOT NULL,
    col2 int NOT NULL,
    unique (col1, col2)
);
Run Code Online (Sandbox Code Playgroud)

然后我执行2个插入语句.

  1. insert into someTable (col1,col2) values(1,11),(1,12);

    它的工作

  2. insert into someTable (col1,col2) values(1,13),(1,14),(1,11);

    得到错误(key(col1,col2)=(1,11)已经存在.

但我需要避免重复对.怎么可能?

我试试这个

x86_64-pc-linux-gnu上的PostgreSQL 9.5.0,由gcc编译的gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2,64位和PostgreSQL 9.3,由gcc编译(Ubuntu 4.8. 2-19ubuntu1)4.8.2,64位

但我得到了错误

执行两个语句后我需要这样做.

(1,11),(1,12),(1,13),(1,14)
Run Code Online (Sandbox Code Playgroud)

sql sql-insert postgresql-9.3

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

亚马逊dynamodb fiter表达式返回错误

iam使用Web控制台在amazon dynamoDB中创建了一个表.添加一些数据后,这是我的表结构.

时间戳| userid | 文本

101 | manaf | haaaai

102 | manaf | 你好

我需要在两个res限制之间获取数据.

这是我在js中的代码.

var AWS = require("aws-sdk");

AWS.config.update({
  region: "regionName",
});

var docClient = new AWS.DynamoDB.DocumentClient()
var table = "testTable";
var params = {
    TableName: table,
    FilterExpression :['userid = :id','res >= :val1','res <= :val2'],
    ExpressionAttributeValues : {':id' : 'manaf','res':101, 'res':102} 
};

docClient.scan(params, function(err, data) {
   if (err) console.log(err);
   else console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

但我得到这样的错误.

{ [InvalidParameterType: Expected params.FilterExpression to be a string]
  message: 'Expected params.FilterExpression to be …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services amazon-dynamodb amazon-dynamodb-streams

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

使用Api Gateway连接到ElastiCache群集

我需要使用AWS API网关来传达elasticache(Redis引擎).我在同一个VPC中成功连接了lambda函数的ElastiCache.我无法从外部VPC连接.

所以我尝试创建一个API网关,并选择集成类型作为AWS Service Proxy和AWS Service作为ElastiCache.

这是创建API网关的屏幕截图

截图

但我不知道,如何测试这个创建的API来执行Redis命令.

eg: SET A FOO
Run Code Online (Sandbox Code Playgroud)

是否可以使用API​​网关传达ElastiCache

amazon-web-services amazon-elasticache aws-lambda aws-api-gateway

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

aws s3 putObject vs sync

我需要将一个大文件上传到aws s3存储桶.在每10分钟我的代码从源目录中删除旧文件并生成一个新文件.文件大小约为500 MB.现在我使用s3.putObject()方法在创建后上传每个文件.我也听说过aws s3同步.它带来了aws-cli.它用于将文件上传到s3存储桶.

我使用aws-sdk for node.js进行s3上传.node.js的aws-sdk不包含s3-sync方法.是s3-sync比s3.putObject()方法好吗?我需要更快上传.

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

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

在shell脚本中解析json数组

我需要从json字符串打印键和值.我已经解析了一个简单的json字符串

            {
              "Name": "test1",
              "CreateDate": "2016-08-30T10:52:52Z",
              "Id": "testId1",
            }
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的

 q1=$(echo $x | grep -Po '"Name":.*?[^\\]",'| perl -pe 's/"Name": //; s/^"//; s/",$//');

 q2=$(echo $x | grep -Po '"Id":.*?[^\\]",'| perl -pe 's/"Id": //; s/^"//; s/",$//');

    echo $q1 "," $q2;
Run Code Online (Sandbox Code Playgroud)

但是这段代码不适用于像这样的json字符串

x='{    "TestNames":
        [{
        "Name": "test1",
        "CreateDate": "2016-08-30T10:52:52Z",
        "Id": "testId1"
         }, 
         {
        "Name":  "test2",
        "CreateDate": "2016-08-30T10:52:13Z",
        "Id": "testId2"
    }]
}';
Run Code Online (Sandbox Code Playgroud)

我需要像这样打印

test1 , testId1
test2 , testId2
Run Code Online (Sandbox Code Playgroud)

是否可以使用grep命令获取这样的数据?

unix bash shell grep json

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

在aws lambda中获取请求参数

我需要从lambda函数读取请求参数.在我的api网关上配置Body Mapping模板得到这样的方法

{
    "val1": "$input.params('val1')",
    "val2": "$input.params('val2')"
}
Run Code Online (Sandbox Code Playgroud)

我的Lambda函数代码是

exports.handler = (event, context, callback) => {
    // TODO implement

  var val1 = require('querystring').parse(event.params.val1);
  var val2 = require('querystring').parse(event.params.val2);

    callback(null, 'Hello from Lambda' + val1 +'test'+val2);
};
Run Code Online (Sandbox Code Playgroud)

但是在测试我的api方法时,我在 日志中收到错误"在完成请求之前退出进程"

TypeError: Cannot read property 'val1' of undefined
Run Code Online (Sandbox Code Playgroud)

与此设置相关的实际问题是什么?

amazon-web-services node.js aws-lambda aws-api-gateway

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

使用aws-cli创建api-gateway lambda集成

我需要使用aws客户端创建一个api网关.我使用Web控制台成功创建并集成了我的aws-lambda函数.但我与aws-client混淆了.这些是我遵循的步骤.

  1. 创建api网关并使用Web控制台与我的示例lambda函数集成.

在此输入图像描述

  1. 部署创建的api并导出为json文件.
  2. 使用aws-cli使用导出的json文件创建新的api网关.像这样的命令.

    aws apigateway import-rest-api --body file://tmpfile.json --region us-east-1;
    
    Run Code Online (Sandbox Code Playgroud)

但它只创造了资源和方法.

  1. 用我的lambda函数集成api方法.我执行这样的命令

    aws apigateway put-integration --rest-api-id 42ku123id8u3a --resource-id core-api-dev --http-method DELETE --type AWS --integration-http-method POST --uri 'arn:aws:lambda:us-east-1:my-lambda-function-arn' --region us-east-1
    
    Run Code Online (Sandbox Code Playgroud)

    但它产生这样的错误信息

调用PutIntegration操作时发生错误(NotFoundException):指定了无效的资源标识符

是否可以使用aws客户端将api网关方法与现有的lambda函数集成?什么是资源标识符?

amazon-web-services aws-cli aws-lambda aws-api-gateway

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

从 AWS dynamoDB 中的 JSON 数组中删除元素

我需要使用 node.js 从 aws dynamo db 中的 json 数组中删除单个元素。我有下表,姓名:学生。

在此输入图像描述 我需要{name:fr4,id:104}使用分区键电子邮件和 id=104 从 dynamodb 中删除。dynamoDB 可以吗?

amazon-web-services nosql node.js amazon-dynamodb

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