2

S3 Cache Resolver を使用して、キャッシュされたサムネイルを S3 にアップロードしようとしていますが、LiipImagineBundle奇妙な問題が発生しています。

AWS SDK v ^3.2 を使用しています。

"aws/aws-sdk-php": "^3.2",

私は Symfony2 を使用しており、私の で、クラスをservices.yml構成し、それを使用してクライアントを作成しました。Aws\Credentials\CredentialsAws\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 にのみ適用される構成ルールがあり、キャッシュ リゾルバーを使用して「誤検知」を引き起こすようです。LiipImagineBundleaws_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 オブジェクト、「キー」、「シークレット」、およびオプションの「トークン」キーの連想配列を提供して、falsenull 資格情報を使用するか、資格情報を作成するか 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_KEYliip_imagine.resolvers.cache_thumb_purchase.aws_s3.client_config.key

4

1 に答える 1