[JAVA] Faisons une API simple avec EC2 + RDS + Spring boot ①

Aperçu

C'est la procédure pour déployer le projet Spring Boot sur l'instance EC2 et créer une API très simple. Dans ①, déployez d'abord le projet sur EC2 et créez une API qui renvoie POJO.

Objectif de cet article

Tout d'abord, créez une API REST très simple qui renvoie POJO sur l'instance EC2. Ce sera la prochaine fois que vous vous connectez à MySQL et récupérez les données.

Personne cible

Cet article n'explique pas en détail le démarrage à ressort ou AWS. Par conséquent, pour ceux qui veulent essayer AWS en utilisant Spring pour le moment.

Cet article est basé sur l'environnement et les connaissances suivants.

environnement

1. Créez un projet Spring Boot ~ Build REST API

Création de projet

Tout d'abord, générez un modèle pour le projet Spring Boot avec Spring initializr. Comme son nom l'indique, spring initializr facilite la création d'un modèle pour un projet de démarrage à ressort. En plus de pouvoir spécifier la version, c'est très pratique car vous pouvez créer un modèle avec la bibliothèque spécifiée, etc. inclus.

Laissons le groupe et l'artefact tels quels. L'important, ce sont les dépendances. Ajoutons ce qui suit aux dépendances.

Une fois ajouté, ce sera comme suit. screenshot-start.spring.io-2019.01.31-20-35-37.png

Appuyez sur Generate Priject pour télécharger le projet.

Construction d'API

Décompressez le projet que vous avez téléchargé précédemment et ouvrez-le avec un IDE. Cet article utilise intelliJ.

Commencez par commenter les bibliothèques JPA et MySQL dans pom.xml. Je ne l'utiliserai pas dans cet article, mais je l'utiliserai à partir de la prochaine fois. De plus, si vous ne commentez pas ici, cela provoquera une erreur plus tard.

pom.xml


...
       <dependencies>
		<!--<dependency>-->
			<!--<groupId>org.springframework.boot</groupId>-->
			<!--<artifactId>spring-boot-starter-data-jpa</artifactId>-->
		<!--</dependency>-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--<dependency>-->
			<!--<groupId>mysql</groupId>-->
			<!--<artifactId>mysql-connector-java</artifactId>-->
			<!--<scope>runtime</scope>-->
		<!--</dependency>-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
...

** Faisons la structure du paquet sous main comme suit **

main └ java   ┗ com.example.demo     ┣ controller        └ PersonController.java     ┣ service        └ PersonService.java     ┣ model        └ Person.java     └ DemoApplication.java

Ce n'est pas grave si cela ressemble à ce qui suit dans intelliJ. スクリーンショット 2019-02-05 0.21.55.png

** Puis réécrivez chaque fichier comme suit **

Person.java


@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Data
public class Person {
    private String name;
    private Integer age;
    private String gender;
}

PersonService.java


@Service
public class PersonService {
    public Person getPerson(){
        return new Person().builder()
            .name("hoge")
            .age(16)
            .gender("man")
            .build();
    }
}

PersonController.java


@RestController
@RequiredArgsConstructor
public class PersonController {
    private final PersonService personService;

    @RequestMapping(path= "person", method = RequestMethod.GET)
    public Person getPerson(){
        return personService.getPerson();
    }
}

** Faisons le **

Ce n'est pas grave si vous accédez à http: // localhost: 8080 / person et obtenez la réponse suivante. スクリーンショット 2019-02-05 0.30.33.png

Paquet

Package du projet créé cette fois pour l'exécution sur l'instance EC2.

$ mvn clean package

Cela générera un fichier jar dans target /.

2. Créez une instance EC2 ~ Essayez d'accéder à l'instance depuis le terminal

Créons maintenant une instance EC2.

Créer une instance EC2

Tout d'abord, accédons à AWS.

** ① Passez à EC2 à partir du service dans la barre d'outils. ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-02-17.png

** ② Cliquez sur Créer une instance. ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-02-50.png

** ③ Sélectionnez Amazon Linux en haut. ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-03-07.png

** ④ Accédez aux paramètres des détails de l'instance ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-03-32.png

** ⑤ Passer à la page des paramètres du groupe de sécurité ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-06-15.png

** ⑥ Ajouter des règles ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-06-54.png Cliquez sur "Confirmer et créer" lorsque vous avez terminé.

** ⑦ Instance de lancement ** Cliquez sur "Démarrer" pour démarrer l'instance. screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-07-35.png

** ⑧ Création d'une paire de clés ** Tout d'abord, entrez le nom de la paire de clés. Après le téléchargement, créez une instance. screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-08-17.png

Ceci termine la création de l'instance.

Essayez l'accès SSH à l'instance EC2

Jetons un coup d'œil aux informations d'instance créées précédemment. ** Faites une copie du DNS public. ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-12-13.png

Ssh accédons à l'instance EC2 en utilisant le fichier pem téléchargé.

$ ssh -i ~/Downloads/demo.pem ec2-user@Le DNS public que vous avez copié précédemment

//Miam miam mettre à jour juste au cas où
$ sudo yum update

** * À l'origine, placez le fichier pem dans un emplacement approprié tel que sous .ssh /. ** **

Si vous pouvez y accéder, essayez d'exécuter une jolie commande. (Ls, cd, etc.)

Placez le fichier jar sur l'instance EC2

Utilisez la commande sftp pour placer le fichier jar sous target créé localement sur l'instance ec2.

Déconnectez-vous de l'instance avec ʻexit` etc. ou déplacez-vous vers le répertoire du projet Spring Boot plus tôt dans un autre onglet.

Puis transférez le fichier avec sftp.

$ sftp -i ~/Downloads/demo.pem ec2-user@Le DNS public que vous avez copié précédemment

$ sftp> put target/demo-0.0.1-SNAPSHOT.jar
Uploading target/demo-0.0.1-SNAPSHOT.jar to /home/ec2-user/demo-0.0.1-SNAPSHOT.jar
targ 100%   18MB   1.1MB/s   00:16

Une fois le téléchargement terminé, essayez de vous connecter à nouveau à l'instance EC2.

$ ssh -i ~/Downloads/demo.pem ec2-user@Le DNS public que vous avez copié précédemment

 __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

$ ls
demo-0.0.1-SNAPSHOT.jar

Assurez-vous que le fichier jar est téléchargé avec la commande ls.

exécution de fichier jar

Exécutez maintenant le jar sur l'instance ec2.

$ $ java -jar demo-0.0.1-SNAPSHOT.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher : Unsupported major.minor version 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:808)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:443)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:65)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:349)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:348)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:430)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:323)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

Oups, une erreur s'est produite. Cette fois, j'ai développé avec Java 1.8 localement, mais une erreur se produit car la version Java incluse par défaut dans Amazon linux est 1.7.

$ java -version
java version "1.7.0_201"
OpenJDK Runtime Environment (amzn-2.6.16.0.78.amzn1-x86_64 u201-b00)
OpenJDK 64-Bit Server VM (build 24.201-b00, mixed mode)

Tout d'abord, installons Java 1.8.

$ sudo yum install -y java-1.8.0-openjdk.x86_64

Changer de version avec la commande ʻalternatives`

$ sudo alternatives --config java

Il y a 2 programmes'java'Fournir.

Sélectionnez la commande
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Appuyez sur Entrée pour sélectionner le courant[+]Ou entrez le numéro de sélection:2

$ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Après avoir confirmé que la version a été changée, réessayez.

$ java -jar demo-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.2.RELEASE)
~
2019-02-05 02:55:55.282  INFO 8556 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
~

Si vous pouvez le démarrer en toute sécurité, essayez d'y accéder à partir d'un navigateur ou avec curl.

スクリーンショット 2019-02-05 12.13.48.png
$ curl http://DNS de l'instance ec2 créée:8080/person
{"name":"hoge","age":16,"gender":"man"}

Json est renvoyé en toute sécurité.

Ce qui précède est la section pour créer facilement une API avec EC2 + spring boot. Il y a de nombreux endroits où je me suis cassé, il serait donc utile que vous commentiez les points sur lesquels vous êtes tombés.

la prochaine fois Essayez de créer une API simple avec EC2 + RDS + Spring boot ② * Écriture

Recommended Posts

Faisons une API simple avec EC2 + RDS + Spring boot ①
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
Créons une application Web de gestion de livres avec Spring Boot part1
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application Web de gestion de livres avec Spring Boot part2
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
Créez une application de recherche simple avec Spring Boot
Créer un serveur API Web avec Spring Boot
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
[Débutant] Essayez d'écrire l'API REST pour l'application Todo avec Spring Boot
Faisons une carte de Noël avec Processing!
Créez un lot à la demande simple avec Spring Batch
HTTPS avec Spring Boot et Let's Encrypt
[docker] [nginx] Créer un ALB simple avec nginx
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Faisons une fonction de recherche avec Rails (ransack)
Créer un environnement de développement Spring Boot avec docker
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
Télécharger avec Spring Boot
Mappez automatiquement DTO aux entités avec l'API Spring Boot
Hello World (API REST) avec Apache Camel + Spring Boot 2
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
[Spring Boot] Obtenez des informations utilisateur avec l'API Rest (débutant)
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
[Bases de Java] Créons un triangle avec une instruction for
Faisons un robot! "Une simple démo de Java AWT Robot"
Personnalisez la réponse aux erreurs de l'API REST avec Spring Boot (Partie 2)
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Un mémorandum lors de la création d'un service REST avec Spring Boot
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
Personnalisez la réponse aux erreurs de l'API REST avec Spring Boot (Partie 1)
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (version inachevée ②)
Écrivons une fonction Lambda qui intègre Amazon API Gateway à Spring Cloud Function.
Faisons un disjoncteur pour le service backend à l'aide de l'actionneur de Spring Boot (partie 1)
Écrivons comment créer une API avec SpringBoot + Docker à partir de 0
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Lier l'API avec Spring + Vue.js