我正在尝试使用 S3 Cache ResolverLiipImagineBundle
将我的缓存缩略图上传到 S3,但我遇到了一些奇怪的问题。
我正在使用 AWS SDK v ^3.2:
"aws/aws-sdk-php": "^3.2",
我正在使用 Symfony2 并且在我的 中services.yml
,我已经配置了Aws\Credentials\Credentials
类和Aws\S3\S3Client
使用它来创建客户端的类:
shq.amazon.s3Credentials:
class: Aws\Credentials\Credentials
arguments: ["%amazon.s3.key%", "%amazon.s3.secret%"]
shq.amazon.s3:
class: Aws\S3\S3Client
arguments:
- version: %amazon.s3.version%
region: %amazon.s3.region%
credentials: "@shq.amazon.s3Credentials"
一切正常,我可以将文件上传到 S3。
现在,LiipImagineBundle
:的配置似乎具有仅适用于 AWS SDK 2 的配置规则,并且使用缓存解析器LiipImagineBundle
会导致“误报” 。aws_s3
我已经尝试了至少三种不同的配置。
配置 1:适用于 AWS 开发工具包 2
liip_imagine:
resolvers:
default:
web_path: ~
cache_s3:
aws_s3:
client_config:
key: %amazon.s3.key%
secret: %amazon.s3.secret%
region: %amazon.s3.region%
version: %amazon.s3.version%
bucket: %amazon.s3.bucket%
get_options:
Scheme: 'https'
put_options:
CacheControl: 'max-age=86400'
cache: cache_s3
filter_sets:
thumb_purchase:
filters:
thumbnail: { size: [250, 250], mode: outbound }
interlace:
mode: line
这会引发异常:
在呈现模板期间抛出异常(“从实例配置文件元数据服务器检索凭据时出错。(cURL 错误 28:连接在 1006 毫秒后超时(参见http://curl.haxx.se/libcurl/c/ libcurl-errors.html ))") 在 src/AppBundle/Resources/views/Store/show.html.twig 第 135 行。
这是由正在搜索凭证但未找到它们的 AWS 开发工具包引发的。
因此,这种方法似乎行不通。
配置 2:使用Aws\Credentials
(AWS 开发工具包 3)
传递凭据的方法S3Client
是传递Aws\Credentials
. 我通过一个服务来做到这一点,这样我就可以在其他服务中重复使用相同的凭据(这在我使用它将文件上传到 S3 时起作用!):
shq.amazon.s3Credentials:
class: Aws\Credentials\Credentials
arguments: ["%amazon.s3.key%", "%amazon.s3.secret%"]
并在config.yml
:
liip_imagine:
resolvers:
cache_thumb_purchase:
aws_s3:
client_config:
version: %amazon.s3.version%
region: %amazon.s3.region%
credentials: "@shq.amazon.s3Credentials"
bucket: %amazon.s3.bucket%
get_options:
Scheme: 'https'
put_options:
CacheControl: 'max-age=86400'
filter_sets:
thumb_purchase:
cache: cache_thumb_purchase
filters:
thumbnail: { size: [250, 250], mode: outbound } # Transforms 50x40 to 32x26, no cropping
interlace:
# mode can be one of none,line,plane,partition
mode: line
如您所见,我将Credentials
服务传递给LiipImagineBundle
但我收到此错误 FROM Aws\ClientResolver
:
ClientResolver.php 第 296 行中的 InvalidArgumentException:为“凭据”提供的配置值无效。预期 Aws\Credentials\CredentialsInterface|array|bool|callable,但得到字符串“@shq.amazon.s3Credentials” (长度=25)
凭据:(Aws\Credentials\CredentialsInterface|array|bool|callable)
指定用于签署请求的凭据。提供 Aws\Credentials\CredentialsInterface 对象、“key”、“secret”和可选“token”键的关联数组,
false
以使用 null 凭证,或用于创建凭证或返回 null 的可调用凭证提供程序。有关内置凭证提供程序的列表,请参阅 Aws\Credentials\CredentialProvider。如果未提供凭据,SDK 将尝试从环境中加载它们。
似乎,它没有传递Credentials
引用的类@shq.amazon.s3Credentials
,而是简单地传递了 string @shq.amazon.s3Credentials
,因此ClientResolver
正确地报告传递的参数不正确。
因此,此配置也不起作用。
配置 3:将数组传递给S3Client
(AWS SDK 3)
实例化 a 的第三种方法S3Client
是将关联数组传递给硬编码凭据。
所以我尝试了这个配置:
liip_imagine:
resolvers:
cache_thumb_purchase:
aws_s3:
client_config:
version: %amazon.s3.version%
region: %amazon.s3.region%
#credentials: "@shq.amazon.s3Credentials"
credentials:
key: %amazon.s3.key%
secret: %amazon.s3.secret%
...
但是这次我收到一个错误LiipImagineBundle
,似乎不接受数组作为参数:
ScalarNode.php 第 36 行中的 InvalidTypeException:路径“liip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.HERE_THERE_IS_DIRECTLY_MY_AWS_KEY”的类型无效。 预期的标量,但得到了数组。
我认为必须更新捆绑包的配置规则,但我不知道该怎么做,因为我对这类事情还没有那么自信。
那么,我怎样才能让LiipImagineBundle
/ Symfony 传递类而不是引用Credentials
类的字符串呢?是我的错还是有什么东西坏了LiipImagineBundle
?
(另外,我不明白的奇怪的事情,而不是在路径中使用术语“key”,而是使用“key”的值,即HERE_THERE_IS_DIRECTLY_MY_AWS_KEY
. 所以它报告这样的路径liip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.HERE_THERE_IS_DIRECTLY_MY_AWS_KEY
而不是像这样的路径liip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.key
-我似乎更正确,不是吗?)。