S3 Cache Resolver を使用して、キャッシュされたサムネイルを S3 にアップロードしようとしていますが、LiipImagineBundle
奇妙な問題が発生しています。
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
少なくとも 3 つの異なる構成を試しました。
構成 1: AWS SDK 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 SDK によってスローされ、それらが見つかりません。
したがって、このアプローチは機能していないようです。
構成 2: 使用Aws\Credentials
(AWS SDK 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 オブジェクト、「キー」、「シークレット」、およびオプションの「トークン」キーの連想配列を提供して、
false
null 資格情報を使用するか、資格情報を作成するか null を返すために使用される呼び出し可能な資格情報プロバイダーを提供します。組み込みの認証情報プロバイダーのリストについては、Aws\Credentials\CredentialProvider を参照してください。認証情報が提供されていない場合、SDK は環境から認証情報をロードしようとします。
Credentials
によって参照されるクラスを渡す代わりに、@shq.amazon.s3Credentials
単純に文字列を渡すように見える@shq.amazon.s3Credentials
ためClientResolver
、渡されたパラメーターが正しくないことを正しく報告します。
したがって、この構成も機能しません。
設定 3: 配列を渡すS3Client
(AWS SDK 3)
をインスタンス化する 3 番目の方法は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
ますか?
(また、パスで「キー」という用語を使用する代わりに、私が理解できない奇妙なことは、「キー」の値、つまりを使用します。そのため、次のようなパスではなく、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