2017-01-22 9 views
3

私はすでにthisを見ましたが、私の問題を説明する答えはありませんでした。最初に提供されたhere(GetObjectクラス)のサンプルを使用し、すぐに私のデスクトップ上で動作しました。しかし、私の友人は自分のマシンで動作させることができなかったし、EC2のインスタンスでも動作しなかった。S3からオブジェクトをダウンロード中にAWSエラーが発生しました。「プロファイルファイルはnullにはできません」

資格情報ファイルを指定する必要がありますが、それは意味がありますが、これを行う必要はなく、デフォルトの権限がこのバケットにアクセスできるように設定されていることは間違いありません。

Exception in thread "main" java.lang.IllegalArgumentException: profile file cannot be null 
    at com.amazonaws.util.ValidationUtils.assertNotNull(ValidationUtils.java:37) 
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:142) 
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:133) 
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:100) 
    at com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1029) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1049) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:949) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:662) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:636) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:619) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$300(AmazonHttpClient.java:587) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:574) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:446) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4035) 
    at com.amazonaws.services.s3.AmazonS3Client.getBucketRegionViaHeadRequest(AmazonS3Client.java:4474) 
    at com.amazonaws.services.s3.AmazonS3Client.fetchRegionFromCache(AmazonS3Client.java:4448) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4020) 
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1307) 
    at GetObject.main(GetObject.java:26) 

私はbucketNameもGetObjectRequestでキーのparamsどちらがnullであることを保証することができます

はここでスタックトレースです。ここでの矛盾は何ですか?なぜ私のPCだけで成功するのだろうか?これは、aws-sdk jarがすでに持っていたはずのjarを補完しなければならないという事実に関連していますか?(jackson-databind、jackson-core、jackson-annotations、httpclient、httpcore、commons-logging、時間)?似ているように見えますが、それ以外の不可解なエラー(null以外のパラメータを与えると、aws-sdkの中には何かがあると言われます)があります。

+0

あなたがこれを見たかどうかわからない:http://stackoverflow.com/a/41670728/3770040 –

+0

私はあなたのリンクとそれからリンクされた "AWS資格情報を扱う"ページを探しているが、決して私のEclipseプロジェクトのためにこれらを設定し、私は信任状ファイルを持っていません。私はちょうどすぐに例を実行して、それは正常に動作します。私はまだ神秘的です。 – Xenalin

+0

[OK]を、私は問題を識別したと思う:私は資格がプロジェクトフォルダに格納されていると思っていたが、私は〜/ .aws /信任状ファイルを完全に忘れていた黒い白。私はちょうど私のEC2インスタンス上で実行されている私の瓶のためにこれを設定する方法を知る必要があります。 – Xenalin

答えて

10

コメントでこれを解決したようですが、私はこれを燃やしてしまい、将来の読者にはもっと明確な答えを残したいと思います。スーパークリアするには、ここでの問題は、S3のファイルとは関係ありません。このエラーメッセージには、はありませんあなたのハードドライブ上のファイルや、S3からプッシュ/プルしようとしているファイルと関係がありません。あなたはそれがプロファイルのリストのための〜/ .aws /信任状に見えることを行うと

AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); 

:問題は、あなたのようなものでS3を初期化していることです。これはお使いのコンピュータではうまくいくかもしれませんが、IAMの役割(例:Lambda、Docker、EC2インスタンスなど)を通じてAWSにアクセスする場所では動作しません。次の人を助け

AmazonS3 s3Client = new AmazonS3Client(DefaultAWSCredentialsProviderChain.getInstance()); 

願わくば:

AmazonS3 s3Client = new AmazonS3Client(); 

資格情報プロバイダのいくつかの種類を必要とするコードを使用している場合は、あなたも行うことができます:修正は、のようなAmazonS3Clientを初期化することです。私の場合、DynamoDBとSQSを使用していましたが、同じエラーがありました。私はあなたの問題がS3に関連していると思っていたので、もともとこの質問を無視していました。手首が叩かれた。

関連する問題