标签: aws-sdk

如何存根节点aws-sdk的.promise()方法

自 2016 年 3 月以来,javascript/nodejs 的 aws sdk 确实在 AWS.Request链接上提供了 .promise() 方法。

现在我正在 AWS.DynamoDB.DocumentClient(...).get() 方法(它返回一个 AWS.Request 对象)上运行一些单元测试,之后我也调用 .promise() 方法来接收一个 Promise。

现在,当我存根 .get() 方法时,我已经返回了一个 Promise,所以我希望 .promise() 方法只返回我现有的 Promise(通过“返回这个”)。

我的代码就像

var docClient = AWS.DynamoDB.DocumentClient(...)
docClient.get(...).promise().then(...)
Run Code Online (Sandbox Code Playgroud)

和我的测试文件

var docClient = AWS.DynamoDB.DocumentClient(...)
var batchGetStub = sinon.stub(docClient, 'get').callsFake(function(){return Promise.resolve({id:1337})});
// now I need to also stub the .promise() method
var promiseStub = sinon.stub(docClient.get, 'promise').callsFake(functions(){return this}); // just return the promise back
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我返回以下错误

类型错误:不能存根不存在的自己的财产承诺

我想我不知何故需要在我的假函数上声明一个 .promise 方法。

我试过这个:

this.protoype.promise = function(this){return this};

在我的假函数中,但这会抛出

类型错误:无法设置未定义的属性“承诺”

node.js sinon aws-sdk

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

如何将 aws dynamodb 索引限制从 5 增加

是否可以将索引从 5 增加到 15?

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

每个表的二级索引 每个表最多可以定义 5 个本地二级索引和 5 个全局二级索引。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html

查询操作根据主键值查找项目。您可以查询具有复合主键(分区键和排序键)的任何表或二级索引。

如果我理解正确,您可以设置 1 个主哈希键、5 个辅助键和另外 5 个全局键……并且您只能查询索引。

我们正在考虑将 DynamoDB 用于 NoSQL 数据库,但我们对此完全感到困惑。在 Mongo 或 Elastic 或 Solr 中,您几乎可以通过任何您想要的文档属性进行查询。

在这个应用程序中,我们已经有 15 个我们知道要查询的属性,但 DynamoDB 只提供索引 5 的能力......除非我弄错了......除了对预设索引进行查询之外,还有另一种查询方式吗?

amazon-web-services amazon-dynamodb aws-sdk

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

使用 PHP 将对象上传到传输加速的 S3 存储桶

我是 AWS 的新手。据我了解,S3 传输加速使用 Cloudfront 边缘实现最快上传,但我找不到 PHP API 的正确文档,用于将对象上传到启用传输加速的存储桶。我的代码:

use Aws\S3\S3Client;

 $S3_Client = new S3Client([
'version'     => 'latest',
'region'    =>'ap-south-1',
  'credentials' => [
        'key'    => 'Accesskey',
        'secret' => 'Secretkey',
  ],
 'endpoint' => 'http://my_bucket_name.s3-accelerate.amazonaws.com'
]);

$bucket = 'my_bucket_name';
$key = 'EC2.pdf';
$SourceFile = '/path/to/the/file/EC2.pdf';


$put = $S3_Client->putObject([
    'Bucket' => $bucket,
    'Key' => $key,
    'SourceFile' => $SourceFile
]);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

The authorization header is malformed;
the region 'ap-south-1' is wrong; expecting 'us-east-1'
Run Code Online (Sandbox Code Playgroud)

但是我的存储桶位于 us-east-1 ,当我将区域更改为

us-east-1
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

The specified bucket does not exist
Run Code Online (Sandbox Code Playgroud)

php amazon-s3 amazon-web-services aws-sdk

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

AWS SDK - getObject 将返回的文件从 ASCII 缓冲区转换为 json/csv

我正在将 aws-sdk 用于 Nodejs,并且我正在以缓冲区的形式从 AWS 存储桶取回一个对象,如下所示:[31, 139, 8, 0, 0, 0 ....]

存储桶中的原始对象是 csv 格式,我可以将缓冲区转换为 csv 或 json 等可用格式吗?

node.js aws-sdk

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

当使用的命令为 InvalidLocationConstraint 错误时,创建 S3 存储桶

调用 CreateBucket 操作时发生错误(InvalidLocationConstraint):使用命令时指定的位置约束无效

aws s3api create-bucket --bucket my-bucket
--create-bucket-configuration LocationConstraint=region
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services aws-sdk

1
推荐指数
3
解决办法
7009
查看次数

AWS SSM 参数存储

无论如何,是否可以直接删除/删除 AWS 参数存储中的所有项目?

我找到的所有命令行都是将它一个一个地删除,或者给定一个名称列表将其删除。

我也尝试使用

aws ssm delete-parameters --cli-input-json test.json
Run Code Online (Sandbox Code Playgroud)

与 test.json 文件看起来像这样

{
    "Names": [
        "test1",
        "test2"
    ]
}
Run Code Online (Sandbox Code Playgroud)

还是不行。。

理想情况下,如果我可以使用 --query 并按原样使用它,那就太好了。

我正在使用 --query 像这样

aws ssm get-parameters-by-path --path / --max-items 2 --query 'Parameters[*].[Name]'
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cli aws-sdk aws-kms aws-ssm

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

AWS CloudWatch GetMetricsData:“Sum”在没有值的时间段丢失点数

GetMetricsData从 AWS CloudWatch查询:

                 {
                    StartTime: lastWeek ,
                    EndTime: today,
                    MetricDataQueries: [
                        {
                            Id: 'invocations',
                            Label: 'Invocations',
                            MetricStat: {
                                Metric: {
                                    Dimensions: [
                                        {
                                            Name: 'FunctionName',
                                            Value: /* FunctionName */,
                                        },
                                    ],
                                    MetricName: 'Invocations',
                                    Namespace: 'AWS/Lambda'
                                },
                                Period: 60*60*24, // day
                                Stat: 'Sum',
                                Unit: 'Count',
                            },
                        },
                    ],
                }
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

在此处输入图片说明

我没有获得 7 天(即一周)的数据,而是获得了 5 天。我错过了 2 天(如您在图表中所见)。

那些失踪的日子没有任何数据。

CloudWatch 不会返回没有数据的点。我怎样才能让Sum操作返回实际计数 ( 0) 呢?

amazon-web-services amazon-cloudwatch aws-sdk amazon-cloudwatch-metrics aws-sdk-js

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

如何从 CompletableFuture 创建 Mono

我试图包装CompletableFuture在 ReactorMono类型中以简化我的转换操作。Project Reactor 总体来说更方便!我在 AWS Lambda 函数中工作,我正在使用新的 AWS Java SDK 2.x 版本调用 AWS 服务,例如 S3、SQS 等。这个新的开发工具包允许对 AWS 服务进行异步调用并返回 CompleteableFuture 对象。

例如:

S3AsyncClient s3AsyncClient = S3AsyncClient.builder().build();    
Mono.fromFuture(s3AsyncClient.getObject(b -> 
b.bucket(bucketId).key(objectKey), AsyncResponseTransformer.toBytes()).subscribe()
System.out.println("stuff");
Run Code Online (Sandbox Code Playgroud)

问题是,当我的主代码调用 时CompletableFuture (s3AsyncClient.getObject),执行线程突然切换到 CompleteableFuture 线程并且我调用 Mono 的主方法在 CompletableFuture 完成之前返回。

基本上,从上面的例子来看,"stuff"字符串在s3AsyncClient.getObject完成之前被打印出来。

如何确保 Mono 和CompletableFuture在同一线程中执行,或者如何确保我的 lambda 在CompletableFuture完成之前不会终止?

对于那些想知道的人,只有在我将代码远程部署到 AWS Lambda 时才会出现这种行为。我在本地没有遇到这种行为......

project-reactor aws-sdk aws-lambda completable-future

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

AWS AppSync Error - AWSMobileClientStore.get(String) on null object reference

APPSYNC_ERROR: Attempt to invoke virtual method
Run Code Online (Sandbox Code Playgroud)

java.util.Map com.amazonaws.mobile.client.AWSMobileClientStore.get(java.lang.String[]) on a null object reference

I am trying to inserting data in AWS table, But i got this error. Can you help me to resolve this issue?

AWSAppSyncClient client = AWSAppSyncClient.builder()
                .context(context)
                .region(AppHelper.cognitoRegion)
                .serverUrl(AppHelper.SERVER_URL)
                .cognitoUserPoolsAuthProvider(new CognitoUserPoolsAuthProvider() {
                    @Override
                    public String getLatestAuthToken() {
                        try {
                            return AWSMobileClient.getInstance().getTokens().getIdToken().getTokenString();
                        } catch (Exception e){
                            Log.e("APPSYNC_ERROR", e.getLocalizedMessage());
                            return e.getLocalizedMessage();
                        }
                    }
                }).persistentMutationsCallback(new PersistentMutationsCallback() {
                @Override
                public void onResponse(PersistentMutationsResponse response) {
                    Log.d("NOTERROR", response.getMutationClassName());
                }

                @Override
                public void onFailure(PersistentMutationsError …
Run Code Online (Sandbox Code Playgroud)

android amazon-web-services aws-sdk aws-appsync appsync-apollo-client

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

无法从 lambda 向 aws sqs 发送消息,并且 aws-sdk 未返回任何错误

我正在尝试将消息从我的 lambda 函数发送到已创建的 sqs 队列。当我运行代码时,它实际上停止了执行并且 aws-sdk 不提供任何反馈。

当我手动插入消息时,我还有一个从队列中读取的函数,我使用相同的代码来创建会话。我相信这两种情况都可以使用。

然后我尝试使用亚马逊提供的代码,但结果是一样的。 https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/sqs-example-receive-message.html

我的代码的唯一区别是我如何创建会话。就像我上面提到的那样,这与我在将消息手动插入队列时读取消息的方式相同。在该功能上,一切似乎都很完美。

func sendToOrderQueue(rID string, c Course) error {                            
  log.Println(1)
   var err error                                                                    
   sess := session.Must(session.New(&aws.Config{
      Region: aws.String("eu-central-1"),                                                                        
   }), err)                                            
   svc := sqs.New(sess)                                                              
   log.Println(2)                                                                    

   url := "https://sqs.eu-central-1.amazonaws.com/XXXXXX/myqueue"              

   log.Println(3)                                                                         
   result, err := svc.SendMessage(&sqs.SendMessageInput{                            
     DelaySeconds: aws.Int64(10),                                                    
     MessageAttributes: map[string]*sqs.MessageAttributeValue{                      
       "Title": &sqs.MessageAttributeValue{                                          
         DataType:    aws.String("String"),                                          
         StringValue: aws.String("The Whistler"),                                    
       },                                                                            
       "Author": &sqs.MessageAttributeValue{                                        
         DataType:    aws.String("String"),                                          
         StringValue: aws.String("John Grisham"),                                    
       },                                                                            
       "WeeksOn": &sqs.MessageAttributeValue{                                        
         DataType:    aws.String("Number"),                                          
         StringValue: aws.String("6"),                                              
       },                                                                            
     },                                                                              
     MessageBody: aws.String("Information about current NY Times fiction bestseller for week of …
Run Code Online (Sandbox Code Playgroud)

go amazon-sqs amazon-web-services aws-sdk aws-sdk-go

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