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 が発生します。 何か根本的な考え違いをしているでしょうか。

질문됨 4달 전201회 조회
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
전문가
답변함 4달 전
  • 回答ありがとうございます。 教えていただいたサンプルコードは、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() を使用せずにアクセスキーとシークレットキーを指定したクレデンシャルを生成する方法はないでしょうか。

답변함 3달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인