AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

AWS SDK for Java 2.x AwsBasicCredentials .create の ClassCastException

0

AWS SDK for Java 2.21.29 を利用して、S3 の 署名付きURLの取得を行おうとしています。 (Java の実行環境としては Javaインタプリタエンジン BeanShell を使用しています。) アクセスキーとシークレットキーを指定したクレデンシャルを取得するのに import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentials;

AwsCredentials awsCreds = AwsBasicCredentials.create(accessKeyId, secretAccessKey); としていますが、ここで

java.lang.ClassCastException: Cannot cast software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity to software.amazon.awssdk.auth.credentials.AwsCredentials が発生します。 何か根本的な考え違いをしているでしょうか。

質問済み 2ヶ月前182ビュー
2回答
0
承認された回答

あまりJava SDKには詳しくないのですが、以下のブログで紹介されているコードを見る限りだと「import software.amazon.awssdk.auth.credentials.AwsCredentials;」ではなく「import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;」を使用して作成しているように見受けられます。
https://qiita.com/tamorieeeen/items/051eb30f278e03f4ceff

profile picture
エキスパート
回答済み 2ヶ月前
  • 回答ありがとうございます。 教えていただいたサンプルコードは、S3Clientを使用する手順ですが、コードの StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKey, secretKey)); の部分とお見受けします。 確かに StaticCredentialsProvider は使用するのですが、その create の引数に渡すための AwsBasicCredentials.create の戻り値が、API Reference - 2.28.11 https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.html#create(java.lang.String,java.lang.String) の記載通りにならず、 software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity になってしまうようなのです。 なので、サンプルコードを実行すると同様に Static method create( software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity ) not found in class'software.amazon.awssdk.auth.credentials.StaticCredentialsProvider' と言われてしまうのです。 環境が壊れているということなんでしょうか・・・

0

https://github.com/aws/aws-sdk-java-v2/issues/4696 で、2.21.21 で同様の現象の報告があり回避策が示されていますが、2.21.29 の制限か BeanShell の問題かわわかりませんが、 No static field or inner class: ANONYMOUS_CREDENTIALS of class software.amazon.awssdk.auth.credentials.AwsBasicCredentials という結果でした。 AwsBasicCredentials.builder() を使用せずにアクセスキーとシークレットキーを指定したクレデンシャルを生成する方法はないでしょうか。

回答済み 2ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ