标签: aws-sdk

上传到AWS S3存储桶时更改文件名

我正在尝试将 csv 文件上传到 S3 存储桶。代码运行成功,但是当我检查存储桶时,Access Key名称相同的文件被上传。我必须手动重命名该文件才能检查其内容。

有没有一种方法可以让我仅以编程方式重命名文件,或者文件名在上传时不会自动更改?

请检查下面的代码:

public class AwsFileUploader {

private static String bucketName = "mybucket";
private static String accessKey = "my-access-key";
private static String secretKey = "my-secret-key";
private static String uploadFileName = "CompressionScore/compression_score_09-04-2015.csv";

public static void main(String[] args) throws IOException {

    AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

    AmazonS3 s3client = new AmazonS3Client(credentials);

    try {
        System.out.println("Uploading a new object to S3 from a file\n");
        File file = new File(uploadFileName);
        System.out.println(file.getName());   //prints - compression_score_09-04-2015.csv
        s3client.putObject(new PutObjectRequest(bucketName, accessKey, …
Run Code Online (Sandbox Code Playgroud)

java file-upload amazon-s3 amazon-web-services aws-sdk

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

ruby 结构体数组

我需要AWS EC2使用来提取标签值AWS ruby-sdk v2来获取有关实例的信息。标签大部分是手动设置的。

当我从以下代码中获取标签时:

ec2 = Aws::EC2::Resource.new(:region => us-east-1)
ec2.instances.limit(10).each do |instance|  
  instance.tags.each do |tag|       
    puts tag   
  end
end
Run Code Online (Sandbox Code Playgroud)

我懂了:

#<struct Aws::EC2::Types::Tag key="Owner", value="the_owner">
#<struct Aws::EC2::Types::Tag key="PurchaseOrder", value="90210">
#<struct Aws::EC2::Types::Tag key="Name", value="my_rocking_instance">
#<struct Aws::EC2::Types::Tag key="environment", value="staging">

#<struct Aws::EC2::Types::Tag key="Name", value="another_instance">
#<struct Aws::EC2::Types::Tag key="environment", value="prod">
#<struct Aws::EC2::Types::Tag key="PurchaseOrder", value="90210">
#<struct Aws::EC2::Types::Tag key="Owner", value="the_owner">
Run Code Online (Sandbox Code Playgroud)

等等。为了清楚起见,我在两个实例之间留了一个空格。我尝试了一些数组、哈希等技巧,但这似乎是一个我尚未使用过的结构数组。

如何仅提取Name标签值?

ruby struct amazon-web-services aws-sdk

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

使用 NextToken 使用 javascript aws-sdk 解析下一个结果

我是 JavaScript 新手。我正在运行以下请求;

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

它返回一个 json blob;

{ SpotPriceHistory:
   [ { InstanceType: 'm3.medium',
       ProductDescription: 'Linux/UNIX',
       SpotPrice: '0.011300',
       Timestamp: Tue May 03 2016 18:35:28 GMT+0100 (BST),
       AvailabilityZone: 'eu-west-1c' }],
  NextToken: 'cVmnNotARealTokenYcXgTockBZ4lc' }
Run Code Online (Sandbox Code Playgroud)

这一切都很好。我知道我需要使用 NextToken 并循环回来才能获取接下来的 100 个结果。我怎样才能实现这个目标?

javascript amazon-web-services aws-sdk

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

mocha、sinon 和存根窗口对象

我有一个 ES6 模块,我正在尝试为其编写测试,用于前端 React/Redux 应用程序。

这是在我的测试中困扰我的模块部分:

import 'aws-sdk/dist/aws-sdk';
import Bluebird from 'bluebird';

const AWS = window.AWS;
Run Code Online (Sandbox Code Playgroud)

这是我的测试的开始:

import chai from 'chai';
import { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import sinon from 'sinon';

chai.use(chaiAsPromised);

describe("S3Gateway", () => {
  let awsStub;
  let sandbox;
  let writeObject;

  beforeEach(() => {
    sandbox = sinon.sandbox.create();
    writeObject = require('../../../app/lib/aws/s3gateway').writeObject;

    awsStub = sinon.stub().returns({
      S3: sinon.stub().returns({
        putObject: sinon.spy()
      })
    });
    sandbox.stub(window, 'AWS', awsStub);
  });
Run Code Online (Sandbox Code Playgroud)

我在终端窗口中运行 mocha 时不断出现在标准输出中的错误是:

$ mocha test/lib/aws/s3gateway.js --compilers js:babel-core/register


  S3Gateway
    1) "before each" …
Run Code Online (Sandbox Code Playgroud)

mocha.js sinon webpack aws-sdk

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

如何获取boto3中所有可用的EC2密钥对

如何获取boto3中所有可用的EC2密钥对?

import boto3

ec2 = boto3.resource('ec2')
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 aws-sdk boto3

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

为什么亚马逊多次向 SNS 发送确认请求

从 CLI 或 AWS 控制台为 http 端点创建新的 SNS 订阅后,我收到来自 Amazon 的确认订阅请求。我的代码执行确认,然后我收到 Amazon 的响应,表明订阅已通过 SubscriptionArn 成功确认。另外,在 AWS 控制台中,我看到订阅已确认。

但几秒钟后,我又收到了来自亚马逊的确认请求。脚本尝试处理它,但 Amazon 发送了一条错误消息"Subscription already confirmed"。并且这会重复多次。

为什么亚马逊在确认后仍发送确认请求?是否可以检查订阅是否已确认且未执行confirmSubscription

PS:我使用 NodeJS SDK 来确认订阅。

谢谢

amazon-web-services node.js amazon-sns aws-sdk

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

签名 URL 出现 CloudFront“MalformedPolicy”错误

我需要使用 PHP 使用自定义策略创建签名的 CloudFront URL,但无论我做什么,显然我的策略都是“格式错误”。以下是该函数中生成的策略示例:

{"Statement":{"Resource":"https://d15xojelh58w5d.cloudfront.net/memo/kwz/cvyhkfdqn5oz0z1dz5at4z4s1jsn.kwz","Condition":{"DateLessThan":{"AWS:EpochTime":1490463203},"IpAddress":{"AWS:SourceIp":"1.2.3.4/32"}}}}
Run Code Online (Sandbox Code Playgroud)

生成的网址:

https://d15xojelh58w5d.cloudfront.net/memo/kwz/cvyhkfdqn5oz0z1dz5at4z4s1jsn.kwz?Policy=eyJTdGF0ZW1lbnQiOnsiUmVzb3VyY2UiOiJodHRwczovL2QxNXhvamVsaDU4dzVkLmNsb3VkZnJvbnQubmV0L21lbW8va3d6L2N2eWhrZmRxbjVvejB6MWR6NWF0NHo0czFqc24ua3d6IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNDkwNDYzMjAzfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjEuMi4zLjQvMzIifX19fQ__&Signature=MmBPtpipFLuNwaPliGLJajG4gJ7INwD0ptFdxPFYQP9CT-luq6W0SrAs9O9CqbJPHoukXwDzG~c88Rr5I2I9KP5QwD8MHpogGh~3SM3gBYm8ao0Zm7a5C9tWnBVRCtzuGrCrFstK-qLswWmqo6tNiOynSuFpvm9uDe3C8oWE2RzSZavEXoL35D3F8y98NeM0aOJe37EeSpdz3lrZZxei2TugoO-OmnApXa2YYJR2HiQ2l0t8paxcb3xyhCK1c1AR51uOpWLm63k~d0eNZJGo3x0Y6bx0GBqafdvV6jiUv6PbhiMC1ZcTxGnZhLmsz3~ONsEvaR1jyyOPt6y9Nos8yA__&Key-Pair-Id=APKAJ6RV6ACUX5M5IAOQ
Run Code Online (Sandbox Code Playgroud)

代码:

function cloudfront_sign($url, $expiry = null, $ipLock = true) {
    $policy = array(
        'Statement' => array(
            'Resource' => $url,
            'Condition' => array(),
        ),
    );

    if(!$expiry || $expiry <= time()) $expiry = 2147483647; // CloudFront *requires* an expiry date, so set to 03:14:07 UTC on Tuesday, 19 January 2038 if one is not provided
    $policy['Statement']['Condition']['DateLessThan'] = array('AWS:EpochTime' => $expiry);
    if($ipLock) $policy['Statement']['Condition']['IpAddress'] = array('AWS:SourceIp' => $_SERVER['REMOTE_ADDR'].'/32');

    $signer = new Aws\CloudFront\UrlSigner($_config['keyID'], $_config['keyPath']);

    $jsonPolicy = json_encode($policy, …
Run Code Online (Sandbox Code Playgroud)

php amazon-cloudfront aws-sdk aws-access-policy

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

DynamoDB 字符串数组变为对象数组

我将一个字符串数组插入到 DynamoDB 中:

[13, 12, 12, 4]
Run Code Online (Sandbox Code Playgroud)

当我在 DynamoDB 中查看它时,它变成了对象数组:

[ { "S" : "13" }, { "S" : "12" }, { "S" : "12" }, { "S" : "4" }]
Run Code Online (Sandbox Code Playgroud)

合理吗?我需要做些什么才能将我的数据作为字符串数组插入吗?

以下是我将数组放入 DynamoDB 的方法:

var params = {
   TableName: "MatchDate",
   Item:{
      position: [1, 3, 4, 5]
   }
};

DynamoDBClient.put(params, function(err, data) {
   //Some other code
});
Run Code Online (Sandbox Code Playgroud)

node.js amazon-dynamodb aws-sdk

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

浏览器缓存神社s3私人附件

我刚刚在 s3 上创建了一个私有存储桶,用于包含用户个人资料图片。使用公共存储桶,所有图像都会正确缓存(之前的回形针配置具有相同的设置)。

我有以下神社初始值设定项:

s3_options = {
  access_key_id: ENV['AWS_ACCESS_KEY_ID'],
  secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  region: ENV['AWS_REGION'],
  bucket: ENV['S3_BUCKET_NAME']
}

Shrine.storages = {
  cache: Shrine::Storage::FileSystem.new('tmp', prefix: 'uploads/cache'),
  store: Shrine::Storage::S3.new(**s3_options)
}

Shrine.plugin :activerecord
Shrine.plugin :logging
Shrine.plugin :determine_mime_type
Shrine.plugin :cached_attachment_data
Shrine.plugin :restore_cached_data
Shrine.plugin :delete_promoted
Shrine.plugin :delete_raw
Shrine.plugin :remove_invalid
Run Code Online (Sandbox Code Playgroud)

以及以下上传者:

class AvatarUploader < Shrine
  plugin :pretty_location
  plugin :processing
  plugin :upload_options, store: {
    acl: 'private',
    cache_control: "max-age=604800",
  }
end
Run Code Online (Sandbox Code Playgroud)

s3 对象上的 CacheControl 已正确设置为 1 周,并且在响应中可以看到相同的情况。我注意到,在每个请求上,签名的 url 在X-Amz-Signature哈希方面都不同,这很可能导致缓存未命中(每个请求的 Etag 都相同)。我认为这就是它不起作用的原因,但我不知道如何在对象未过期的情况下使 X-Amz-Signature 相同。

ruby-on-rails amazon-s3 aws-sdk shrine aws-sdk-ruby

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

将超过 100 天的 S3 文件移动到另一个存储桶

有没有办法在一个 S3 存储桶中找到所有超过 100 天的文件并将它们移动到另一个存储桶?欢迎使用 AWS CLI 或 SDK 的解决方案。在 src 存储桶中,文件的组织方式类似于存储桶/类型/年/月/日/小时/文件
S3://my-logs-bucket/logtype/2020/04/30/16/logfile.csv
。例如, on 2020/04/302020/01/21必须移动或之前的日志文件。

amazon-s3 amazon-web-services aws-cli aws-sdk

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