我目前正在开发一个使用Symfony2开发的网站,我需要在Amazon SQS中发送消息.为了做到这一点,我加入了我的composer.json:
"aws/aws-sdk-php": "2.4.*"
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试创建队列或列表队列时,我遇到403错误说:
编辑: 添加完整的错误消息
AWS错误代码:AccessDenied,状态代码:403,AWS请求ID:2fe34c11-7af8-5445-a768-070159a0953e,AWS错误类型:客户端,AWS错误消息:访问资源 https://sqs.us-west-2 .amazonaws.com /被拒绝.,User-Agent:aws-sdk-php2/2.4.11 Guzzle/3.7.4 curl/7.25.0 PHP/5.4.3
以下是我所做的示例代码:
$aws = Aws::factory(array(
'key' => 'my-key',
'secret' => 'my-secret',
'region' => 'us-west-2'
));
$sqs = $aws->get('sqs');
return new Response(var_dump($sqs->listQueues()));
Run Code Online (Sandbox Code Playgroud)
如果出现此错误,我该怎么办?
我正在通过Rspec测试代码在mTurk创建点击,但同时我需要测试必须从mTurk发回的结果.为了节省每次测试的复杂性测试,我使用VCR在盒式磁带中记录HTTP请求.我该如何实现这个测试?
我的应用程序使用了近10个线程,每个线程每分钟可能会产生7,000个Put请求到S3.(我在一个功能强大的EC2盒子上运行它可以很好地处理负载.)它可以运行近一个小时,但是,一小时后,得到Unable to execute HTTP request: Socket Closed例外:
http.AmazonHttpClient: Unable to execute HTTP request: Socket Closed
java.net.SocketException: Socket Closed
at java.net.AbstractPlainSocketImpl.setOption(AbstractPlainSocketImpl.java:206)
at java.net.Socket.setSoTimeout(Socket.java:1105)
at sun.security.ssl.SSLSocketImpl.setSoTimeout(SSLSocketImpl.java:2414)
at org.apache.http.impl.io.SocketInputBuffer.isDataAvailable(SocketInputBuffer.java:106)
at org.apache.http.impl.AbstractHttpClientConnection.isResponseAvailable(AbstractHttpClientConnection.java:246)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.isResponseAvailable(ManagedClientConnectionImpl.java:180)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:238)
at com.amazonaws.http.protocol.SdkHttpRequestExecutor.doSendRequest(SdkHttpRequestExecutor.java:47)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:713)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:518)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:446)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:256)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3641)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1438)
at com.amazonaws.services.s3.transfer.internal.UploadCallable.uploadInOneChunk(UploadCallable.java:128)
at com.amazonaws.services.s3.transfer.internal.UploadCallable.call(UploadCallable.java:120)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.upload(UploadMonitor.java:176)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.call(UploadMonitor.java:134)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.call(UploadMonitor.java:50)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
Run Code Online (Sandbox Code Playgroud)
Put Requests使用AWS SDK TransferManager异步完成.我想,在一个put请求完全完成所需的时间内,大约有10个是异步进行的.
谷歌搜索该异常,我发现了两个可能的原因:
UploadTransferManager返回的对象的引用(在并发队列中),并且再次没有帮助.我怎样才能解决这个问题?再次,该应用程序运行良好近一个小时,但一直在大约一个小时后撞到这堵墙.(我在EC2上的Amazon …
在AWS SDK for Java入门教程之后,运行AwsConsoleApp示例:
java -cp .:/Users/marius/Dev/aws-java-sdk-1.3.8/lib/aws-java-sdk-1.3.8.jar AwsConsoleApp
Run Code Online (Sandbox Code Playgroud)
我得到以下问题:
===========================================
Welcome to the AWS Java SDK!
===========================================
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.java:41)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:31)
at com.amazonaws.services.ec2.AmazonEC2Client.<init>(AmazonEC2Client.java:95)
at AwsConsoleApp.init(AwsConsoleApp.java:93)
at AwsConsoleApp.main(AwsConsoleApp.java:105)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 5 more
Run Code Online (Sandbox Code Playgroud)
编译时在类路径中加载的相同完整SDK也在运行时期间给出,因此我无法弄清楚缺少什么.
我通过PEAR安装AWS SDK时遇到此错误.我以前从来没有这样做过.
$ sudo pear channel-discover pear.amazonwebservices.com
Adding Channel "pear.amazonwebservices.com" succeeded
Discovery of channel "pear.amazonwebservices.com" succeeded
$ sudo pear install aws/sdk
Unknown remote channel: guzzlephp.org/pear
aws/sdk requires package "channel://guzzlephp.org/pear/Guzzle" (version >= 3.0.2)
No valid packages found
install failed
Run Code Online (Sandbox Code Playgroud)
有人可以帮我一把
当为nods.js使用aws-sdk npm插件时,我可以使用以下代码(到AWS s3)上传50kb的pdf:
var params = {
Bucket: BUCKET,
Key: pdf_key,
Body: file,
ContentType: 'application/pdf'
};
var s3 = new AWS.S3();
s3.putObject(params, function(error, data) {
console.log(data);
console.log(error);
if (error) {
console.log(error);
callback(error, null);
} else {
callback(null, pdf_key);
}
});
Run Code Online (Sandbox Code Playgroud)
但是当上传一个11mb pdf时,即使指定了ContentLength,即使超时为2分钟,上传也会永远持续下去.
问题是如何让aws s3接受大型pdf文件?
UPDATE
我还没有找到任何关于这个问题的文档或文章.
更新2
我将接受答案,这些答案显示了这个或另一个可以做到这一点的框架.我将需要该框架,以便能够允许对象的auth读取.
更新3 我现在让它工作,但我没有找到它不应该工作的原因.
提前致谢!
我正在为我的应用创建一个S3插件.在app/Plugin/S3/Controller/Component/S3Component.php我有这些:
<?php
App::import('Vendor', 'aws/aws-autoloader');
use Aws\S3\S3Client;
class S3Component extends Component {
public function loadS3 () {
$s3 = S3Client::factory(array(
'key' => '',
'secret' => ''
));
return $s3;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的控制器中,我称之为使用 $s3 = $this->S3->loadS3();
它抛出错误 Error: Class 'Aws\S3\S3Client' not found
我尝试将行添加App::uses('Vendor', 'aws/Aws/S3/S3Client');到组件类中,然后删除use Aws\S3\S3Client;.表明Error: Class 'S3Client' not found
AWS SDK位于文件夹中 app/Plugin/S3/Vendor/aws
我正在加载S3对象,参考:http://docs.aws.amazon.com/aws-sdk-php/guide/latest/quick-start.html#factory-method
解:
这是我的组件现在在@akirk的帮助下的样子.
<?php
ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path'). PATH_SEPARATOR . ROOT .DS . 'app/Plugin/S3/Vendor/aws'); …Run Code Online (Sandbox Code Playgroud) 我们有一个非常大的MongoDB实例,带有分片集合.它已经达到了这样的程度,即依靠MongoDB查询功能(包括聚合框架)来洞察数据变得过于昂贵.
我四处寻找可以使数据可用且更容易使用的选项,并且已经找到了两个有希望的选择:
我们希望能够使用类似SQL的语法来分析我们的数据,并且我们希望接近实时访问数据(几分钟的延迟很好,我们只是不想等待整个MongoDB一夜之间同步).
据我所知,对于选项2,可以使用此https://github.com/mongodb/mongo-hadoop将数据从MongoDB移动到Hadoop集群.
我看起来很高,但我很难找到类似的解决方案,让MongoDB进入AWS Redshift.从亚马逊的文章来看,似乎正确的方法是使用AWS Kinesis将数据导入Redshift.也就是说,我找不到任何类似的东西的例子,我找不到任何库或连接器来将数据从MongoDB移动到Kinesis流中.至少没有什么看起来很有希望.
有没有人做过这样的事情?
我想通过GoogleScript中的代码与Google Sheet中的Amazon Web Services DynamoDB进行交互。但是,我无法弄清楚如何集成AWS开发工具包。我希望避免编写一个库来通过AWS HTTP API处理集成,因为该SDK有JavaScript和Java SDK。救命?
(我已经做了一些相当广泛的Google和Stack Overflow搜索。 这是我找到的最接近答案的东西,但这就是Google App Engine,而不是Google Apps脚本。)
谢谢!
amazon-web-services google-apps-script amazon-dynamodb aws-sdk
Google云端存储(与Google云端硬盘不同)似乎与S3 API兼容:
https://developers.google.com/storage/docs/migrating#migration-simple
有谁知道我是否可以使用AWS/AWS-SDK-PHP(https://packagist.org/packages/aws/aws-sdk-php)封装,并配置它连接到我的谷歌云存储,而不是AWS S3?
我试过以下代码:
<?php
use Aws\S3\S3Client;
use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\AwsS3 as Adapter;
require_once 'vendor/autoload.php';
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 1);
$client = S3Client::factory(array(
'key' => 'MY_GCS_KEY',
'secret' => 'MY_GCS_SECRET',
'endpoint' => 'storage.googleapis.com'
));
$filesystem = new Filesystem(new Adapter($client, 'MY_GCS_BUCKET'));
$filesystem->write('filename.txt', 'contents');
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误:
致命错误:未捕获的AWS\S3 \异常\ InvalidAccessKeyIdException:AWS错误代码:InvalidAccessKeyId,状态代码:403,AWS请求ID:BF7C1317719A4C67,AWS错误类型:客户,AWS错误消息:您提供的AWS访问密钥ID不存在我们的记录,用户代理:AWS-SDK-PHP2/2.6.15狂饮/ 3.9.2卷曲/ 7.32.0 PHP/5.5.4-1 + debphp.org〜铆足了劲+ 1扔在/ var/WWW/prudhub第91行/dev/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php
任何人都知道如何或者我是否可以正确设置aws/aws-sdk-php包以连接到Google云端存储?
编辑
以下是使其工作的代码:
<?php
use Aws\S3\S3Client;
use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\AwsS3 as Adapter;
require_once 'vendor/autoload.php';
$client = S3Client::factory(array(
'key' => 'MY_GCS_KEY',
'secret' => 'MY_GCS_SECRET',
'base_url' …Run Code Online (Sandbox Code Playgroud) php amazon-s3 amazon-web-services google-cloud-storage aws-sdk