[JAVA] À propos de SIGNING_REGION: NoSuchFieldError

Erreur survenue

Le fichier jar généré par la compilation Maven a été placé dans S3 et utilisé comme source d'exécution pour les fonctions Lambda. Chaque classe de fonctions a été décrite comme une définition dans la machine à états de StepFunctions, et la machine à états a été appelée via CloudWatchEvent. Chaque classe a implémenté RequestHandler, mais parmi eux, seul le processus qui fait référence à S3 ** a provoqué l'erreur comme titre.

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)
        <Omission>
        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)

Au moment de l'enquête

Dans la source d'accès à S3, les informations d'identification et la région ont été définies comme suit.

Partie implémentation pour l'accès à 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"));
}

Les informations de région sont gérées en les écrivant dans un fichier de propriétés, et les clés d'accès et les clés secrètes sont gérées en les écrivant dans un fichier de propriétés.

J'ai commenté la partie .withRegion (Regions.AP_NORTHEAST_1) comme un essai, mais cela n'a pas été résolu. .. .. Il était dans un état de débordement.

Comment répondre

Lorsque j'ai vérifié ** NoSuchFieldError: SIGNING_REGION , il semble que cette erreur soit On dit qu'il est causé par " les cœurs SDK de différentes versions sont mélangés **".

Dans ce cas, la version de ** aws-java-sdk-core ** référencée lors de l'exécution de la fonction Lambda correspondante via la machine à états était différente de la version référencée lors de l'appel via l'événement CloudWatch. Je pensais que c'était la cause (?).

Quand j'ai fait référence à pom.xml, la version de la partie qui semble être était ancienne comme prévu, donc Si vous faites correspondre la version de ** aws-java-sdk-core ** dans cette partie avec la dernière version de pom.xml, vous pouvez accéder à S3 en toute sécurité.

qiita_20190619.png

Il semble y avoir un modèle selon lequel «.withRegion (Regions.AP_NORTHEAST_1)» est mauvais, mais cette fois, c'est parce que différentes versions de sdk-core ont été mélangées.

Le pom.xml a été modifié comme suit.

Avant correction


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

modifié


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

(* La plupart d'entre eux ont été mis à jour à 1.11.574 lorsque la capture d'écran a été prise, mais la version modifiée 1.11.572 est la dernière version au moment de la modification)

En ce qui concerne cet événement, la méthode d'adaptation que j'ai adoptée a frappé, donc la compréhension reste ambiguë. .. ..

Pour ceux qui ont des problèmes similaires avec Java sur Lambda lorsque différentes versions du SDK sont mélangées Si vous avez une meilleure compréhension des détails, veuillez expliquer pourquoi cela se produit. m (_ _) m

référence

[Pour les super débutants] Super introduction Maven Différences entre le SDK pour Java 1.11.x et 2.x

Recommended Posts

À propos de SIGNING_REGION: NoSuchFieldError
À propos =
À propos de method.invoke
À propos de attr_accessor
À propos de Hinemos
À propos de l'héritage
À propos de Docker
À propos des rails 6
À propos du printemps ③
À propos d'énumération
À propos du polymorphisme
À propos facultatif
À propos du hachage
À propos de ça ()
À propos de l'encapsulation
À propos de JAVA_HOME
À propos de statique
À propos des exceptions
À propos de la portée
[Maven] À propos de Maven