429 aws-sdkを使用してs3オブジェクトの署名付きURLを生成するときにリクエストが多すぎる

Hudspeth:

デジタル資産管理システムであるアプリを持っています。サムネイルを表示します。これらのサムネイルは、AWS S3の署名付きURL(https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html)で提供されるように設定されていますこのコードは、リクエストで処理されるアイテムの数を変更するまで機能します。アプリケーションには25、50、100、200の選択肢があります。100または200を選択すると、「エラー:com.amazonaws.AmazonServiceException:Too Many Requests(Service:null; Status Code:429; Error Code:null」でプロセスが失敗します。 ;リクエストID:null) "

現在、プロセスは次のとおりです。検索を実行し、そのオブジェクトの署名付きURLを返すメソッドを介して各オブジェクトキーを実行します。

このアプリケーションはElastic Container Serviceを介して実行されます。これにより、ContainerCredentialsProviderを介して認証情報を取得できます。

レビューのための関連コード:

String s3SignedUrl(String objectKeyUrl) {
    // Environment variables for S3 client.
    String clientRegion = System.getenv("REGION");
    String bucketName = System.getenv("S3_BUCKET");

    try {
        // S3 credentials get pulled in from AWS via ContainerCredentialsProvider.
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withRegion(clientRegion)
                .withCredentials(new ContainerCredentialsProvider())
                .build();

        // Set the pre-signed URL to expire after one hour.
        java.util.Date expiration = new java.util.Date();
        long expTimeMillis = expiration.getTime();
        expTimeMillis += 1000 * 60 * 60;
        expiration.setTime(expTimeMillis);

        // Generate the presigned URL.
        GeneratePresignedUrlRequest generatePresignedUrlRequest =
                new GeneratePresignedUrlRequest(bucketName, objectKeyUrl)
                        .withMethod(HttpMethod.GET)
                        .withExpiration(expiration);

        return s3Client.generatePresignedUrl(generatePresignedUrlRequest).toString();

    } catch (AmazonServiceException e) {
        throw new AssetException(FAILED_TO_GET_METADATA, "The call was transmitted successfully, but Amazon " +
                "S3 couldn't process it, so it returned an error response. Error: " + e);
    } catch (SdkClientException e) {
        throw new AssetException(FAILED_TO_GET_METADATA, "Amazon S3 couldn't be contacted for a response, or " +
                "the client couldn't parse the response from Amazon S3. Error: " + e);
    }
}

そして、これは私たちがアイテムを処理する部分です:

// Overwrite the url, it's nested deeply in maps of maps.
    for (Object anAssetList : assetList) {
        String assetId = ((Map) anAssetList).get("asset_id").toString();
        if (renditionAssetRecordMap.containsKey(assetId)) {
            String s3ObjectKey = renditionAssetRecordMap.get(assetId).getThumbObjectLocation();
            ((Map) ((Map) ((Map) anAssetList)
                    .getOrDefault("rendition_content", new HashMap<>()))
                    .getOrDefault("thumbnail_content", new HashMap<>()))
                    .put("url", s3SignedUrl(s3ObjectKey));
        }
    }

どんなガイダンスもいただければ幸いです。シンプルで、うまくいけばAWS側で設定できるソリューションを気に入っていただけると思います。そうでなければ、今私はこれをバッチでURLを生成するためのプロセスを追加することを検討しています。

マイケル-sqlbot:

この問題は、署名付きURLの生成とは無関係です。これらはサービスとの相互作用なしで行われるため、レート制限される可能性のある方法はありません。事前署名付きURLは、HMAC-SHAアルゴリズムを使用して、資格情報を所有しているエンティティが特定の要求を承認したことをサービスに証明します。HMAC-SHAの一方通行(非可逆)の性質により、これらのURLは、サービスの相互作用なしに、コードが実行されているマシン上で完全に生成できます。

ただし、認証情報を繰り返し取得することが例外の実際の原因である可能性が非常に高いようです。そのため、不必要に何度も繰り返しているようです。

これは高価な操作です。

    AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
            .withRegion(clientRegion)
            .withCredentials(new ContainerCredentialsProvider())
            .build();

これを再度呼び出すたびに、資格情報を再度フェッチする必要があります。それが実際の限界です。

s3client一度だけビルドしてs3SignedUrl()そのオブジェクトが渡されることを期待するようにリファクタリングして、再利用できるようにします。

429エラーの解決に加えて、顕著なパフォーマンスの向上が見られるはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AWS API Gateway:エラー429リクエストが多すぎます

分類Dev

AWS SDKを使用してS3オブジェクトへの事前署名されたURLを生成するには、何か費用がかかりますか?

分類Dev

429 Too many requests when generating presigned urls for s3 objects using aws-sdk

分類Dev

AWS SDK for JavaScriptを使用してS3バケットのフォルダー内のオブジェクトを一覧表示すると、空のContents配列が返されるのに、KeyCountが1より大きいのはなぜですか?

分類Dev

AngularでAWS署名付きリクエストを生成する

分類Dev

リクエストが多すぎると429秒になるAPIを調整する

分類Dev

AWS-Java SDK を介してブラウザの S3 アップロード リクエストに署名する

分類Dev

バケットポリシーを使用して、AWS S3の別のアカウントが所有するオブジェクトへのアクセスを許可できますか?

分類Dev

AWSがJAVAを使用してs3オブジェクトから新しいファイルを作成するとエラーが発生する

分類Dev

AWS CLIを使用してS3オブジェクトの場所(パブリックURL)を取得する方法はありますか?

分類Dev

AWS S3 SQL構文を使用してスペース付きの列名をクエリする方法は?

分類Dev

aws-sdk-goを使用してファイルを作成せずにオブジェクトをAWS S3にアップロードする

分類Dev

AWS S3 C ++:結果が切り捨てられたときにすべてのオブジェクトを一覧表示します

分類Dev

aws s3 apiでdelimeterとsort_byを使用してオブジェクトを一覧表示する方法は?

分類Dev

aws Java SDKを介してS3オブジェクトをどのように公開しますか?

分類Dev

JQueryのERR_ABORTED429(リクエストが多すぎます)

分類Dev

AWS LambdaはS3オブジェクトの作成によってトリガーされ、オブジェクトのコピーリクエストを発行します。これにより、無限ループが作成されます。これを回避する方法はありますか?

分類Dev

Python 3 Boto 3、AWS S3:オブジェクトURLを取得する

分類Dev

AWS SDK for PHP v3 Aws / ResultPaginator-> SearchとJMESPath式を使用してS3オブジェクトをサイズでフィルタリングするにはどうすればよいですか?

分類Dev

引き受けロールを使用して、別のAWSアカウントから自分のアカウントS3バケットにS3オブジェクトをPUTする方法は?

分類Dev

AWS Java SDKを使用して既存のS3オブジェクトのExpiresヘッダーを設定する

分類Dev

AWS SDK for Node.jsを使用して、Amazon S3のすべてのオブジェクトを1つのプレフィックスから別のプレフィックスにコピー/移動する方法

分類Dev

AWS S3は、アップロード用の事前署名URIを生成しながら、オブジェクトの有効期間を設定します

分類Dev

AWS S3が事前署名されたURLを使用してドキュメントを取得できない:日付が無効です(エポックから数秒である必要があります)

分類Dev

オブジェクトが存在するかどうかを確認する方法AWS S3 Node.JS SDK

分類Dev

AWSのJava SDK 2.0は、S3オブジェクトのpresigned URLを作成します

分類Dev

AWS S3 SDK for PHP:URLからオブジェクトキーを取得する方法は?

分類Dev

AWS C ++ SDKを使用して、リージョン、バケット、オブジェクトキーのS3 URIを解析するにはどうすればよいですか?

分類Dev

aws cliを使用してs3オブジェクトの最新バージョンを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    AWS API Gateway:エラー429リクエストが多すぎます

  2. 2

    AWS SDKを使用してS3オブジェクトへの事前署名されたURLを生成するには、何か費用がかかりますか?

  3. 3

    429 Too many requests when generating presigned urls for s3 objects using aws-sdk

  4. 4

    AWS SDK for JavaScriptを使用してS3バケットのフォルダー内のオブジェクトを一覧表示すると、空のContents配列が返されるのに、KeyCountが1より大きいのはなぜですか?

  5. 5

    AngularでAWS署名付きリクエストを生成する

  6. 6

    リクエストが多すぎると429秒になるAPIを調整する

  7. 7

    AWS-Java SDK を介してブラウザの S3 アップロード リクエストに署名する

  8. 8

    バケットポリシーを使用して、AWS S3の別のアカウントが所有するオブジェクトへのアクセスを許可できますか?

  9. 9

    AWSがJAVAを使用してs3オブジェクトから新しいファイルを作成するとエラーが発生する

  10. 10

    AWS CLIを使用してS3オブジェクトの場所(パブリックURL)を取得する方法はありますか?

  11. 11

    AWS S3 SQL構文を使用してスペース付きの列名をクエリする方法は?

  12. 12

    aws-sdk-goを使用してファイルを作成せずにオブジェクトをAWS S3にアップロードする

  13. 13

    AWS S3 C ++:結果が切り捨てられたときにすべてのオブジェクトを一覧表示します

  14. 14

    aws s3 apiでdelimeterとsort_byを使用してオブジェクトを一覧表示する方法は?

  15. 15

    aws Java SDKを介してS3オブジェクトをどのように公開しますか?

  16. 16

    JQueryのERR_ABORTED429(リクエストが多すぎます)

  17. 17

    AWS LambdaはS3オブジェクトの作成によってトリガーされ、オブジェクトのコピーリクエストを発行します。これにより、無限ループが作成されます。これを回避する方法はありますか?

  18. 18

    Python 3 Boto 3、AWS S3:オブジェクトURLを取得する

  19. 19

    AWS SDK for PHP v3 Aws / ResultPaginator-> SearchとJMESPath式を使用してS3オブジェクトをサイズでフィルタリングするにはどうすればよいですか?

  20. 20

    引き受けロールを使用して、別のAWSアカウントから自分のアカウントS3バケットにS3オブジェクトをPUTする方法は?

  21. 21

    AWS Java SDKを使用して既存のS3オブジェクトのExpiresヘッダーを設定する

  22. 22

    AWS SDK for Node.jsを使用して、Amazon S3のすべてのオブジェクトを1つのプレフィックスから別のプレフィックスにコピー/移動する方法

  23. 23

    AWS S3は、アップロード用の事前署名URIを生成しながら、オブジェクトの有効期間を設定します

  24. 24

    AWS S3が事前署名されたURLを使用してドキュメントを取得できない:日付が無効です(エポックから数秒である必要があります)

  25. 25

    オブジェクトが存在するかどうかを確認する方法AWS S3 Node.JS SDK

  26. 26

    AWSのJava SDK 2.0は、S3オブジェクトのpresigned URLを作成します

  27. 27

    AWS S3 SDK for PHP:URLからオブジェクトキーを取得する方法は?

  28. 28

    AWS C ++ SDKを使用して、リージョン、バケット、オブジェクトキーのS3 URIを解析するにはどうすればよいですか?

  29. 29

    aws cliを使用してs3オブジェクトの最新バージョンを取得するにはどうすればよいですか?

ホットタグ

アーカイブ