AWS-Fehler beim Download Objekt von S3, "Profil-Datei kann nicht null sein"
Ich habe schon gesehen,diese, aber es gab keine Antwort, um zu erklären, mein problem. Ich zum ersten mal die Probe hier (GetObject-Klasse), und es hat sofort funktioniert auf meinem desktop. Aber mein Freund konnte sich nicht auf seine Maschine, noch wird es funktionieren, die auf unsere EC2-Instanz.
Es wurde erwähnt, dass es sein Anmeldeinformationen angegebenen Dateien, die Sinn macht, aber ich hatte nie das zu tun, und bin ziemlich sicher, dass die Standard-Berechtigungen eingerichtet wurden, ermöglichen den Zugriff auf das bucket.
Hier der stacktrace:
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)
Kann ich garantieren, dass weder der bucketName noch der Schlüssel params in der GetObjectRequest null sind. Was ist die Diskrepanz hier? Warum könnte es gelingen, nur auf meinem PC? Ist dies überhaupt im Zusammenhang mit der Tatsache, dass ich hatte, um zu ergänzen, zahlreiche Gläser, die die aws-sdk-jar-soll schon (jackson-databind-Methode, jackson-Kern, jackson-annotations, httpclient, httpcore, commons-logging, und joda-time)? Es scheint ähnlich, was mit der sonst unerklärliche Fehler (die nicht-null params, etwas in der aws-sdk sagt, es ist null).
- Nicht sicher, ob du das schon gesehen: stackoverflow.com/a/41670728/3770040
- Ich bin noch auf der Suche in Ihrer Verbindung, und das "arbeiten mit AWS-Anmeldeinformationen" - Seite verlinkt, aber ich habe nie diese-für mein eclipse Projekt, und ich habe nicht eine credentials-Datei. Ich bin nur das Beispiel ausführen von out-of-the-box und es funktioniert einwandfrei. Ich bin immer noch verwirrt.
- Ok, ich denke, ich erkannte das Problem: ich dachte die Anmeldeinformationen gewesen wäre, gespeichert in dem Projekt-Ordner, aber ich habe Total vergessen, über die ~/.aws/credentials-Datei trotz Lesen in schwarz und weiß aus die Frage, die ich verlinkte. Ich muss nur wissen, wie diese einzustellen ist für meine jar läuft auf meiner EC2-Instanz.
- Als Allgemeine Regel gilt, nur im Kopf behalten, dass es immer empfehlenswert ist, in Bezug auf die Sicherheit, die Verwendung von EC2-Rollen anstelle von config-Dateien, das speichern von Benutzer-Anmeldeinformationen auf dem instance-Speicher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht, löste dies in den Kommentaren, aber ich habe gebrannt und diese verlassen wollen, um eine klarere Antwort für die zukünftigen Leser. Super klar, das problem hier hat nichts zu tun mit Dateien in S3. Diese Fehlermeldung hat nichts mit der Datei auf Ihrer Festplatte noch die Datei, die Sie versuchen zu push/pull aus dem S3. Das problem ist, dass Sie initialisieren S3 mit so etwas wie:
Wenn Sie das tun, sieht es in der ~/.aws/Anmeldeinformationen für eine Liste der profile. Das funktioniert großartig auf Ihrem computer, aber nicht überall arbeiten, dass Sie immer Zugriff auf AWS über eine IAM-Rolle (ex. Lambda, Docker, EC2 Instanz, etc). Die zu beheben, ist die Initialisierung der AmazonS3Client wie:
Wenn Sie mithilfe von code, die erfordert irgendeine Art von Anmeldeinformationen Anbieter, können Sie auch tun:
Hoffentlich hilft die nächste person. In meinem Fall war ich mit DynamoDB und SQS, aber ich hatte den gleichen Fehler. Ich ursprünglich ignoriert diese Frage, weil ich dachte, Ihr problem war S3 Verwandte und war super verwirrt. Handgelenk schlug.
Den top-stimmten Antwort von Ryan hat mich auf den richtigen Weg, aber da AmazonS3Client ist jetzt veraltet, dieser code hat das problem gelöst für mich
Dieser code scheint richtig zu Holen die aktiven IAM-Rolle, sagen in Lambda.
Der Grund ist, dass der computer von deinem Freund nicht die "Anmeldeinformationen" - Datei.
Das problem zu lösen, erstellen Sie die Datei:
für Windows, oder erstellen Sie die Datei:
für macOS, Linux oder Unix. Und dann schreiben
in der Datei.
Alternativ können Sie auch eine Umgebungsvariable von
aws_access_key_id
undaws_secret_access_key
.