[JAVA] Informationen zu SIGNING_REGION: NoSuchFieldError

Fehler, der aufgetreten ist

Das vom Maven-Build generierte JAR wurde in S3 platziert und als Ausführungsquelle für Lambda-Funktionen verwendet. Jede Funktionsklasse wurde als Definition in der Zustandsmaschine von StepFunctions beschrieben, und die Zustandsmaschine wurde über CloudWatchEvent aufgerufen. Jede Klasse implementierte RequestHandler, aber unter ihnen verursachte nur der Prozess, der auf S3 ** verweist, den Fehler als Titel.

java.lang.NoSuchFieldError: SIGNING_REGION
        at com.amazonaws.services.s3.AmazonS3Client.createRequest(AmazonS3Client.java:4660)
        at com.amazonaws.services.s3.AmazonS3Client.createRequest(AmazonS3Client.java:4636)
        at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1433)
        at com.sompo_swt.integraph.common.S3StorageManager.getS3Object(S3StorageManager.java:58)
        <Unterlassung>
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)

Zum Zeitpunkt der Untersuchung

In der Quelle für den Zugriff auf S3 wurden die Anmeldeinformationen und die Region wie folgt festgelegt.

Implementierungsteil für den Zugriff auf S3


S3StorageManager() {
	client = AmazonS3ClientBuilder
		.standard()
		.withRegion(Regions.AP_NORTHEAST_1)
		.withCredentials(new AWSStaticCredentialsProvider(getCredentials()))
		.build();
}
private AWSCredentials getCredentials() {
	return new BasicAWSCredentials(
		rb.getString("accessKey")
		, rb.getString("secretKey"));
}

Regionsinformationen werden durch Schreiben in eine Eigenschaftendatei verwaltet, und Zugriffsschlüssel und geheime Schlüssel werden durch Schreiben in eine Eigenschaftendatei verwaltet.

Ich habe den Teil ".withRegion (Regions.AP_NORTHEAST_1)" als Test auskommentiert, aber er wurde nicht gelöst. .. .. Es war in einem Zustand der Überforderung.

Wie soll man antworten

Als ich ** NoSuchFieldError: SIGNING_REGION ** überprüft habe, scheint dieser Fehler zu sein Es wird gesagt, dass es durch "** SDK-Kerne verschiedener Versionen werden gemischt **" verursacht wird.

In diesem Fall unterschied sich die Version von ** aws-java-sdk-core **, auf die beim Ausführen der entsprechenden Lambda-Funktion über die Zustandsmaschine verwiesen wurde, von der Version, auf die beim Aufrufen über das CloudWatch-Ereignis verwiesen wurde. Ich dachte, es sei die Ursache (?).

Als ich auf pom.xml verwies, war die Version des Teils, der zu sein scheint, wie erwartet alt Nachdem Sie die ** aws-java-sdk-core ** -Version dieses Teils mit der neuesten Version in pom.xml abgeglichen haben, können Sie jetzt sicher auf S3 zugreifen.

qiita_20190619.png

Es scheint ein Muster zu geben, dass ".withRegion (Regions.AP_NORTHEAST_1)" schlecht ist, aber diesmal lag es daran, dass verschiedene Versionen von sdk-core gemischt wurden.

Die pom.xml wurde wie folgt geändert.

Vor der Korrektur


<dependency>                                             
  <groupId>com.amazonaws</groupId>                       
  <artifactId>aws-java-sdk-stepfunctions</artifactId>    
  <version>1.11.274</version>                            
</dependency>                                            

Überarbeitet


<dependency>                                             
  <groupId>com.amazonaws</groupId>                       
  <artifactId>aws-java-sdk-stepfunctions</artifactId>    
  <version>1.11.572</version>                            
</dependency>                                            

(* Die meisten von ihnen wurden zum Zeitpunkt der Aufnahme auf 1.11.574 aktualisiert, aber die geänderte Version 1.11.572 ist zum Zeitpunkt der Änderung die neueste Version.)

In Bezug auf dieses Ereignis war die Bewältigungsmethode, die ich angewendet habe, ein Hit, daher bleibt mein Verständnis zweideutig. .. ..

Wenn Sie ähnliche Probleme mit Java unter Lambda haben, wenn verschiedene SDK-Versionen gemischt werden Wenn Sie die Details besser verstehen, kommentieren Sie bitte, warum dies geschieht. m (_ _) m

Referenz

[Für Super-Anfänger] Maven Super-Einführung Unterschiede zwischen SDK für Java 1.11.x und 2.x

Recommended Posts

Informationen zu SIGNING_REGION: NoSuchFieldError
Über =
Über method.invoke
Über attr_accessor
Über Hinemos
Über die Vererbung
Über Docker
Über Schienen 6
Über den Frühling ③
Über Aufzählung
Über Polymorphismus
Über Optional
Über Hash
Darüber ()
Über die Kapselung
Über JAVA_HOME
Über statische
Über Ausnahmen
Über den Umfang
[Maven] Über Maven