我正在尝试将 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) 我需要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标签值?
我是 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 个结果。我怎样才能实现这个目标?
我有一个 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) 如何获取boto3中所有可用的EC2密钥对?
import boto3
ec2 = boto3.resource('ec2')
Run Code Online (Sandbox Code Playgroud) 从 CLI 或 AWS 控制台为 http 端点创建新的 SNS 订阅后,我收到来自 Amazon 的确认订阅请求。我的代码执行确认,然后我收到 Amazon 的响应,表明订阅已通过 SubscriptionArn 成功确认。另外,在 AWS 控制台中,我看到订阅已确认。
但几秒钟后,我又收到了来自亚马逊的确认请求。脚本尝试处理它,但 Amazon 发送了一条错误消息"Subscription already confirmed"。并且这会重复多次。
为什么亚马逊在确认后仍发送确认请求?是否可以检查订阅是否已确认且未执行confirmSubscription?
PS:我使用 NodeJS SDK 来确认订阅。
谢谢
我需要使用 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) 我将一个字符串数组插入到 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) 我刚刚在 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 相同。
有没有办法在一个 S3 存储桶中找到所有超过 100 天的文件并将它们移动到另一个存储桶?欢迎使用 AWS CLI 或 SDK 的解决方案。在 src 存储桶中,文件的组织方式类似于存储桶/类型/年/月/日/小时/文件
S3://my-logs-bucket/logtype/2020/04/30/16/logfile.csv
。例如, on 2020/04/30,2020/01/21必须移动或之前的日志文件。
aws-sdk ×10
amazon-s3 ×3
node.js ×2
amazon-ec2 ×1
amazon-sns ×1
aws-cli ×1
aws-sdk-ruby ×1
boto3 ×1
file-upload ×1
java ×1
javascript ×1
mocha.js ×1
php ×1
ruby ×1
shrine ×1
sinon ×1
struct ×1
webpack ×1