AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant

AWS Lambda avec Java pour démarrer maintenant

Nous présenterons un exemple étape par étape d'écriture d'une fonction AWS Lambda dans Java8, de sa téléchargement en tant que fonction Lambda sur AWS et de son appel à partir d'un client Java.

Lecteur supposé

Structure de l'article

TL; DR J'écrirai dans la première partie et la deuxième partie

Qu'est-ce qu'AWS Lambda?

――C'est un service formidable qui peut traiter diverses demandes (événements) simplement en donnant le code à AWS Lambda sans avoir à créer et gérer le serveur par vous-même.

http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html  https://aws.amazon.com/jp/lambda/faqs/

Java et AWS Lambda

--Il est possible d'écrire le traitement AWS Lambda (fonction Lambda) en Java --Il est également possible d'appeler des fonctions Lambda directement depuis un client Java

table des matières

Nous réaliserons les étapes suivantes une par une.

  1. Coder les fonctions AWS Lambda en Java
  2. Créez un fichier JAR à télécharger
  3. Enregistrez le fichier jar auprès d'AWS Lambda pour le rendre exécutable (appelable)
  4. Test sur la console AWS
  5. Appel des fonctions AWS Lambda à partir de Java local

1. Codez la fonction AWS Lambda

Charger la bibliothèque Java

aws-lambda-java-core Ajoutez la bibliothèque. Lorsque vous utilisez maven, ajoutez la description suivante

maven


<dependency>
	<groupId>com.amazonaws</groupId>
	<artifactId>aws-lambda-java-core</artifactId>
	<version>1.1.0</version>
</dependency>

Coder le contenu de la fonction Lambda

Ici, nous allons créer une fonction Lambda de type demande de réponse (Request Response) qui renvoie un résultat lorsque la fonction est appelée.

Cette fois aws-lambda-java-core ** RequestHandler ** interface fournie par la bibliothèque Pour implémenter une fonction Lambda qui peut entrer et sortir POJO.

Vous trouverez ci-dessous un exemple de fonction Lambda qui imprime le nom complet lorsque vous entrez le nom et le prénom.

MyLambda.java


package lambda.cloud;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import lambda.cloud.MyLambda.Input;
import lambda.cloud.MyLambda.Output;

public class MyLambda implements RequestHandler<Input, Output> {

  @Override
  public Output handleRequest(Input in, Context context) {

    final Output out = new Output();
    out.in = in;
    out.fullName = in.firstName + "_" + in.lastName;

    return out;
  }

  public static class Input {
    public String firstName;
    public String lastName;
  }

  public static class Output {
    public Input in;
    public String fullName;

  }

}

Implémentez simplement la méthode ** handleRequest ** comme indiqué ci-dessous. L'argument ** Input ** est la requête et la valeur de retour ** Output ** est la réponse.

 public Output handleRequest(Input in, Context context) {

2. Créez un fichier JAR à télécharger

Ensuite, pour pouvoir l'utiliser avec AWS Lambda en tant que fonction Lambda, vous devez regrouper le code dans un fichier jar (ou zip) et le télécharger sur AWS Lambda.

En plus du code que vous venez de créer, ce fichier jar doit intégrer les bibliothèques dépendantes et ainsi de suite.

Ajoutez ** maven-shadow-plugin ** sous les plugins dans maven pom.xml pour créer un fichier jar unifié (c'est-à-dire, fat jar).

	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-shade-plugin</artifactId>
		<version>3.1.0</version>
		<configuration>
			<createDependencyReducedPom>false</createDependencyReducedPom>
		</configuration>
		<executions>
			<execution>
				<phase>package</phase>
				<goals>
					<goal>shade</goal>
				</goals>
			</execution>
		</executions>
	</plugin>

pom.xml

L'ensemble du pom.xml ressemble à ceci

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>lambda.cloud</groupId>
	<artifactId>mylambda</artifactId>
	<version>1.0.0</version>
	<packaging>jar</packaging>
	<name>AWS lambda example</name>
	<description>example of AWS lambda
	</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>com.amazonaws</groupId>
			<artifactId>aws-lambda-java-core</artifactId>
			<version>1.1.0</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>3.1.0</version>
				<configuration>
					<createDependencyReducedPom>false</createDependencyReducedPom>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>

</project>

Téléchargement du code source

Le code source complet de l'exemple ci-dessus est ci-dessous https://github.com/riversun/aws_lambda_example_basic_client.git

** Lors du clonage avec Eclipse **

Maintenant que vous avez un ** projet Maven ** sur Eclipse, il sera plus facile à gérer.

Créez un fichier jar à télécharger à l'aide de maven

Exécutez la commande suivante dans le répertoire contenant pom.xml

mvn packgage

Étape 1. Sélectionnez ** Exécuter en tant que> Maven build ** dans le menu contextuel  

Étape 2. Dans la boîte de dialogue ** Modifier les configurations **, entrez ** package teinte: ombre ** dans ** Objectifs ** et ** Exécuter **  

Dans les deux cas (1) (2), ** mylambda-1.0.0.jar ** contenant toutes les bibliothèques de code dépendantes sera généré sous ** / target **.

Ce sera le fichier jar pour votre téléchargement AWS Lambda.

3. Téléchargez le fichier JAR et enregistrez-le auprès d'AWS Lambda

Jetons un coup d'œil aux étapes pour enregistrer une fonction Lambda à partir de la console AWS

** (1) Ouvrez AWS Lambda ** Ouvrez le service Lambda. img01.png

** (2) Créer une nouvelle fonction Lambda ** Si vous n'avez pas encore créé la fonction Lambda, l'écran ressemblera à celui ci-dessous.

Cliquez sur ** Créer une fonction **.

img02.png

** (3) [Créer à partir de zéro] Fonction Lambda **

L'écran de sélection dans la liste d'impression bleue apparaîtra comme indiqué ci-dessous. Sélectionnez ** Auteur à partir de zéro **.

img03.png

** (4) Définissez le nom et le rôle sur l'écran d'informations de base **

Ici, nous allons créer une fonction Lambda nommée ** myFunction **.

--Le nom est "** maFonction **"

Cliquez sur ** Créer une fonction ** lorsque vous avez terminé

img04.png

** (5) Téléchargez le fichier jar **

img06.png

STEP 1 Tout d'abord, vérifiez l'ARN en haut de l'écran Notez la partie ** arn: aws: lambda: ap-northeast-1: 000000000000: function: myFunction ** affichée à l'écran.

Comme vous le savez, * ARN (Amazon Resource Name) sert à identifier de manière unique les ressources AWS et est utilisé pour les identifier lors de l'exécution des fonctions Lambda. *

STEP 2 Sélectionnez ** Java 8 ** à partir de l'exécution

STEP 3 Entrez ** lambda.cloud.MyLambda ** dans le gestionnaire Décrivez le nom du gestionnaire au format ** nom du package.nom de la classe :: nom de la méthode **. Selon le code créé précédemment, le nom du package est ** lambda.cloud **, le nom de la classe est ** MyLambda ** et ** lambda.cloud.MyLambda ** est entré. Dans cet exemple, le nom de la méthode peut être omis.

STEP 4 Cliquez sur ** upload ** pour télécharger le ** mylambda-1.0.0.jar ** que vous venez de créer.

Oui, jusqu'à présent, la fonction Lambda que vous avez créée précédemment a été enregistrée dans AWS Lambda.

4. Test sur la console AWS

Après le téléchargement, essayez de tester depuis la console.

** (1) Préparation à l'événement test **

Il y a une idée que la fonction Lambda est ** déclenchée par un événement. Par exemple, vous pouvez l'utiliser pour déclencher la fonction Lambda déclenchée par l'événement ** Un objet est créé dans le compartiment S3 **.

Par conséquent, l'entrée permettant d'exécuter la fonction Lambda est appelée ** événement **.

Ici, déclenchez ** événement ** depuis la console et vérifiez le fonctionnement de la fonction Lambda.

Sélectionnez ** Configurer les événements de test ** en haut de l'écran.

img07.png

Ensuite, l'écran ** Configurer les événements de test ** s'ouvrira comme indiqué ci-dessous. Créez un événement de test ici.

image08b.jpg

Soit ** Nom de l'événement ** ** MyEvent **, et la zone d'édition en dessous est le corps lors de la demande de la fonction Lambda.

Dans la fonction Lambda qui est entrée / sortie avec le POJO créé précédemment, le POJO est automatiquement mappé à JSON dans l'appel réel, et l'entrée / sortie est effectuée dans JSON.

Par conséquent, entrez le corps de l'événement au format JSON comme indiqué ci-dessous.

{
  "firstName": "john",
  "lastName": "doe"
}

Après avoir entré, appuyez sur ** Créer ** au bas de l'écran.

** (2) Exécution de l'événement de test **

Exécutez immédiatement le ** MyEvent ** que vous venez de créer. Appuyez sur ** Test ** en haut à droite de l'écran.

img09.png

À propos, ** "La fonction Lambda" myFunction "ne peut pas être modifiée en ligne car le nom de fichier spécifié dans le gestionnaire ne correspond pas au nom de fichier du package de déploiement. Ne vous inquiétez pas si le message «**» s'affiche, c'est OK. La console Lambda ne fournit pas d'éditeurs en ligne pour les langages précompilés tels que Java et C #.

** (3) Vérifiez le résultat de l'exécution **

Après avoir appuyé sur ** Test ** pendant un moment, l'écran de résultat s'affiche.

En cas de succès, ** Résultat de l'exécution: réussi ** s'affiche. Vous pouvez voir les détails du résultat en appuyant sur ** ▼ Détails ** en dessous pour le développer.

img10.png

La sortie de la fonction Lambda est également convertie de la classe POJO ** Output ** au JSON suivant.

POJO pour entrée / sortie


public static class Input {
    public String firstName;
    public String lastName;
  }

  public static class Output {
    public Input in;
    public String fullName;

  }

Résultat d'exécution


{
  "in": {
    "firstName": "john",
    "lastName": "doe"
  },
  "fullName": "john_doe"
}

5. Appel des fonctions AWS Lambda à partir de Java local

Appelez la fonction Lambda ** myFunction ** créée précédemment à partir d'un programme Java.

Chargez la bibliothèque

Si vous souhaitez accéder à la fonction AWS Lambda à partir de Java, ajoutez la bibliothèque aws-java-sdk-lambda. Si vous utilisez maven, ajoutez ce qui suit

maven


<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-lambda</artifactId>
    <version>1.11.210</version>
</dependency>

Client Java

Le code ressemble à ceci: (Diverses valeurs de réglage sont factices)

Client Java


public class ExampleLambdaClient {

  public static void main(String[] args) {
    ExampleLambdaClient client = new ExampleLambdaClient();
    client.invokeLambdaFunction();

  }

  private void invokeLambdaFunction() {

    final String AWS_ACCESS_KEY_ID = "ANMNRR35KPTR7PLB3C7D";
    final String AWS_SECRET_ACCESS_KEY = "UKA6EsKY25LJQBEpUvXyYkj8aWKEDnynEZigVPhz";

    AWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);

    // ARN
    String functionName = "arn:aws:lambda:ap-northeast-1:000000000000:function:myFunction";

    String inputJSON = "{\"firstName\":\"john\",\"lastName\": \"doe\"}";

    InvokeRequest lmbRequest = new InvokeRequest()
        .withFunctionName(functionName)
        .withPayload(inputJSON);

    lmbRequest.setInvocationType(InvocationType.RequestResponse);

    AWSLambda lambda = AWSLambdaClientBuilder.standard()
        .withRegion(Regions.AP_NORTHEAST_1)
        .withCredentials(new AWSStaticCredentialsProvider(credentials)).build();

    InvokeResult lmbResult = lambda.invoke(lmbRequest);

    String resultJSON = new String(lmbResult.getPayload().array(), Charset.forName("UTF-8"));

    System.out.println(resultJSON);

  }
}

AWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);

--Créez les informations d'identification à l'aide de l'ID de clé d'accès (AWS_ACCESS_KEY_ID) et de la clé d'accès secrète (AWS_SECRET_ACCESS_KEY).


InvokeRequest lmbRequest = new InvokeRequest()
        .withFunctionName(functionName)
        .withPayload(inputJSON);

-Spécifiez le corps (JSON) de la requête avec ** # withPayload **. Ici, la chaîne de caractères JSON ** "{" firstName \ ": " john \ ", " lastName \ ": " doe \ "}"; ** est spécifiée.


lmbRequest.setInvocationType(InvocationType.RequestResponse);

InvokeResult lmbResult = lambda.invoke(lmbRequest);
String resultJSON = new String(lmbResult.getPayload().array(), Charset.forName("UTF-8"));

Code source du client Java

Le code source complet côté client est ci-dessous https://github.com/riversun/aws_lambda_example_basic_client.git

Résumé

L'exemple a été créé avec Eclipse (Oxygen), mais aucun plug-in spécial n'est requis. (Vous n'avez même pas besoin du plug-in AWS SDK pour Eclipse, ce qui facilite les choses)

prime

――C'était vers 2009, mais j'ai été choqué lorsque le service d'origine "** Google App Engine (GAE) **", qui dit ** Je n'écris que le code et je le laisse à moi, et ne paie que ce que j'utilise **, apparaît. Bien qu'il y ait eu de nombreuses restrictions particulières, cela a été très utile.

«Cette fois, ** l'ancêtre !? ** a introduit ** Google Cloud Functions **. À l'heure actuelle, je pense que β est l'avenir, mais il semble que ce sera une option dans le futur.

Recommended Posts

AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Introduction à Java à partir de 0 Partie 1
Comment utiliser le framework Java avec AWS Lambda! ??
Utiliser des couches Lambda avec Java
Comment déployer Java sur AWS Lambda avec Serverless Framework
Créez AWS Lambda avec Quarkus
Publiez régulièrement des images de tweets sur Twitter avec AWS Lambda + Java
Créer un SlackBot avec AWS lambda et API Gateway en Java
Expression lambda Java apprise avec Comparator
Java pour apprendre avec les ramen [Partie 1]
Java sur AWS Lambda est-il lent?
Hello World avec AWS Lambda + Java
Utilisation de Java avec AWS Lambda-Eclipse Préparation
Traitement serveur avec Java (Introduction partie 1)
Jusqu'à INSERT S3 objet dans EC2 DB avec Lambda @ java: AWS
Utilisation de Java avec des arguments CloudWatch AWS Lambda-Implementation-Check
Récapitulons maintenant l'expression lambda Java
Utilisation de Java avec AWS Lambda-Implementation-Stop / Launch EC2
Essayez de gérer les bibliothèques Java avec AWS CodeArtifact
Gérez d'énormes JSON avec Java Lambda
Interagir avec l'API de message LINE à l'aide de Lambda (Java)
Jusqu'à ce que l'objet S3 soit INSERT dans EC2 DB avec Lambda @ java: Java [Partie 2]
JSON avec Java et Jackson Part 2 XSS mesures
java pratique partie 1
Comment utiliser l'API Java avec des expressions lambda
Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
Bonjour Java Lambda
[Java] Expression Lambda
Pour les ingénieurs Java qui démarrent Kotlin à partir de maintenant
Java commençant par JShell-Un aperçu du monde Java
Expression lambda Java
Jusqu'à INSERT S3 objet dans EC2 DB avec Lambda @ java: Java [Partie 1]
[Java] Trouvez le nombre premier avec le tamis Eratostenes (Partie 2)
Soumettre une tâche à AWS Batch avec Java (Eclipse)
[Java] [Spring Boot] Spécifier le profil d'exécution --Spring Boot à partir de NetBeans
Premiers pas avec les anciens ingénieurs Java (Stream + Lambda)
[Java] Plates-formes parmi lesquelles choisir pour le développement Java à partir de maintenant (2020)
Remplacez seulement une partie de l'hôte URL par java
Java EE sans serveur à partir de Quarkus et Cloud Run
Installez java avec Homebrew
SaveAsBinaryFile avec Spark (partie 2)
Changer de siège avec Java
Installez Java avec Ansible
Changement de fuseau horaire AWS Lambda
expression 1 de la table lambda neutre java
Comprendre les expressions lambda Java 8
Variations d'expressions lambda Java
Changer java avec direnv
Data Nucleus commençant par Gradle
Fonctionnalité d'expression lambda Java 8
mémo d'expression java lambda
Consultez les annotations Java maintenant
Téléchargement Java avec Ansible
À propos des expressions Java lambda
Étudier Java ~ Partie 8 ~ Cast
expression lambda java [écriture de notes]
Expliquer les expressions lambda Java 8
Raclons avec Java! !!
Etudier Java 8 (expression lambda)
À partir de Swift Swift UI