我正在使用 dynamoDb 来存储一些额外的信息,但我在整理数据时遇到了一些麻烦。
我有以下创建语法,其中有 astoreId和number键。我将numberas 排序键设置为排序键,但问题是数据根本没有排序。
$response = $dynamoDb->createTable([
'TableName' => 'foo',
'KeySchema' => [
[
'AttributeName' => 'storeId',
'KeyType' => 'HASH' //Partition key
],
[
'AttributeName' => 'number',
'KeyType' => 'RANGE' // sort Key
]
],
'AttributeDefinitions' => [
[
'AttributeName' => 'storeId',
'AttributeType' => 'N'
],
[
'AttributeName' => 'number',
'AttributeType' => 'N'
]
],
'ProvisionedThroughput' => [
'ReadCapacityUnits' => 20,
'WriteCapacityUnits' => 20
]
]);
Run Code Online (Sandbox Code Playgroud)
我的扫描参数:
$scanParams = [
'TableName' => …Run Code Online (Sandbox Code Playgroud) 问这个问题我觉得有点愚蠢,但是通过当前的 PHP SDK 上传一些东西到 S3 有什么特殊要求吗?我可以使用相同的凭据通过 cli 上传,但是当我尝试 SDK 时它失败了。
这里的代码:
<?php
require "awssdk_v3/aws-autoloader.php";
use Aws\S3\S3Client;
function s3_upload($file, $name) {
$s3 = S3Client::factory(
array(
'key' => getenv('AWS_ACCESS_KEY_ID'),
'secret' => getenv('AWS_SECRET_ACCESS_KEY'),
'version' => "2006-03-01",
'region' => getenv('AWS_REGION')
)
);
$result = $s3->putObject(
array(
'Bucket' => getenv('AWS_BUCKET'),
'Key' => $name,
'SourceFile' => $file,
'ContentType' => mime_content_type($file),
'ACL' => 'public-read'
)
);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼
s3_upload($_FILES['avatarfile']['tmp_name'], "avatar_2.jpg");
Run Code Online (Sandbox Code Playgroud)
我使用的用户附加了此策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1480066717000",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject", …Run Code Online (Sandbox Code Playgroud) 我正在使用AWS PHP SDK v2.x使用以下代码在S3存储桶之间复制对象:
<?php
try {
self::$aws->copyObject(array(
'Bucket' => $target_bucket,
'Key' => $target_key,
'CopySource' => $source_bucket . '/' . $source_key,
'Content-Disposition' => 'attachment',
//'Content-Disposition' => 'attachment; filename="' . basename($target_key) . '"'
//'ContentDisposition' => 'attachment'
//'ContentDisposition' => 'attachment; filename="' . basename($target_key) . '"'
));
} catch (Aws\S3\Exception\S3Exception $e) {
echo 'error';
}
Run Code Online (Sandbox Code Playgroud)
该文件被复制到S3存储桶没有任何错误,但我无法设置Content-Disposition该文件以强制浏览器下载文件而不是流式传输.我尝试了一些选项(上面已经说明),但似乎没什么用.
我甚至试图传递Metadata数组中的值,即使文档另有说明,但AWS控制台列出Content-Disposition了元数据部分.
如果我Content-Disposition在AWS控制台中手动更改,则浏览器会按预期下载文件.
那么,我该如何正确地将值传递给S3对象?我可以使用该CopyObject()方法传递它吗?
尝试创建SNSClient对象时出现以下错误。
InstanceProfileCredentialsException in InstanceMetadataClient.php line 85: Error retrieving credentials from the instance profile metadata server. When you are not running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in the "key" and "secret" options when creating a client or provide an instantiated Aws\Common\Credentials\CredentialsInterface object. (Client error response
[status code] 404
[reason phrase] Not Found
[url] http://169.254.169.254/latest/meta-data/iam/security-credentials/)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么当我aws.php在 Laravel 设置的 config 文件夹中出现此错误时。这里存储访问密钥和秘密密钥。
我不太喜欢这个,因为这会导致我的凭据存储在其他人可以通过 SFTP 访问的文件夹设置中。
我还拥有服务器根文件夹中的 aws 凭证和配置文件,路径如下:~/.aws/ …
尝试使用 copyObject 命令 (AWS S3) 时出现以下错误。我使用的是 AWS PHP SDK,代码如下:
$this->client->copyObject(array(
'Bucket' => 'lms-courses',
'Key' => 'ideasfile.zip',
'CopySource' => "lms-courses/lalala.zip",
));
Run Code Online (Sandbox Code Playgroud)
在“ https://s3-us-west-2.amazonaws.com/lms-courses/ideasfile.zip ”上执行“CopyObject”时出错;AWS HTTP 错误:客户端错误:
PUT https://s3-us-west-2.amazonaws.com/lms-courses/ideasfile.zip导致404 Not Found响应:NoSuchKey指定的密钥不存在。lalala.zipE698888(截断...) NoSuchKey(客户端):指定的密钥不存在。-NoSuchKey指定的密钥不存在。lalala.zipE698888912B810F7DfHtqN5Hls4hGdTGY/pVv36XZPzoM4mJ5fAdhJjEjDufNUArvKCrqN27SjiG06u5hnC8G8yPdzA=
一段时间以来,我一直在为这个错误而苦苦挣扎。存储桶lms-courses存在, 也存在ideasfile.zip。我什至手动将该文件添加到存储桶中,只是为了以这种方式对其进行测试 - 以防它没有正确上传或其他原因。
我不明白为什么它说密钥不存在,当它显然存在时 - 我正在查看它。
我真的是aws的新手,如果这是一个愚蠢的问题,我很抱歉。
我做了一个与在线 DynamoDB 表连接的网站,它完全在我的本地工作,但是当我在我的 Elastic Beanstalk 环境中部署网站代码时,它没有连接到 DynamoDB 表。
有什么我应该做的配置吗?
恐怕没有其他人遇到过这个问题。
我的网站是由 aws.phar 使用 aws php sdk 编写的。
我确实为 iam 用户创建了一个策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem"
],
"Effect": "Allow",
"Resource": [DynamoDB table],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
[Lists of attributes]
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services amazon-dynamodb aws-php-sdk amazon-elastic-beanstalk
从 SDK 文档(链接:https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#_createPresignedRequest)$expires中,参数应表示URL 应该过期。
因此,如果我指定 2 分钟作为过期时间,则 2 分钟后该 URL 应该无效。我的代码看起来像这样
<?php
$s3 = $this->cloudProvider->getClient(); // S3 client
$cmd = $s3->getCommand(
'GetObject',
[
'Bucket' => $this->getSdkBucket(), // Bucket name
'Key' => "$s3Name",
]
);
$urlReq = $s3->createPresignedRequest($cmd, $expirationTime); // $expirationTime is a Unix timestamp
Run Code Online (Sandbox Code Playgroud)
我得到了具有正确到期时间的网址(在我的例子中,客户端希望它是会话到期时间,而会话时间是 4 小时)
X-Amz-Content-Sha256=UNSIGNED-PAYLOAD
&X-Amz-Security-Token=long_string_goes_here
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=another_string_goes_here
&X-Amz-Date=20200907T110127Z
&X-Amz-SignedHeaders=host
&X-Amz-Expires=14400 // This decreases depending on how long the user is logged in - max 4hrs
&X-Amz-Signature=another_string_here
Run Code Online (Sandbox Code Playgroud)
问题是这个url在4小时后才有效。
根据我在这个答案中读到的有关过期时间的内容 ( /sf/answers/4045488961/),URL的有效期为 6 …
aws-php-sdk ×7
amazon-s3 ×4
php ×4
amazon-ec2 ×1
apache ×1
aws-sdk ×1
laravel ×1
php-5.5 ×1
sorting ×1