[JAVA] Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①

Überblick

Dies ist das Verfahren zum Bereitstellen des Spring-Boot-Projekts auf der EC2-Instanz und zum Erstellen einer sehr einfachen API. Stellen Sie in ① zuerst das Projekt in EC2 bereit und erstellen Sie eine API, die POJO zurückgibt.

Ziel dieses Artikels

Erstellen Sie zunächst eine sehr einfache REST-API, die POJO auf der EC2-Instanz zurückgibt. Es wird das nächste Mal sein, eine Verbindung zu MySQL herzustellen und die Daten abzurufen.

Zielperson

In diesem Artikel werden Spring Boot oder AWS nicht im Detail erläutert. Daher für diejenigen, die AWS vorerst mit spring ausprobieren möchten.

Dieser Artikel basiert auf der folgenden Umgebung und dem folgenden Wissen.

Umgebung

1. Erstellen Sie ein Spring-Boot-Projekt ~ Build REST API

Projekterstellung

Generieren Sie zunächst mit Spring initializr eine Vorlage für das Spring-Boot-Projekt. Wie der Name schon sagt, erleichtert spring initializr das Erstellen einer Vorlage für ein Spring-Boot-Projekt. Zusätzlich zur Angabe der Version ist dies sehr praktisch, da Sie eine Vorlage mit der angegebenen Bibliothek usw. erstellen können.

Lassen wir Group und Artifact so wie sie sind. Das Wichtigste sind Abhängigkeiten. Fügen wir den Abhängigkeiten Folgendes hinzu.

Wenn hinzugefügt, wird es wie folgt sein. screenshot-start.spring.io-2019.01.31-20-35-37.png

Drücken Sie "Generate Priject", um das Projekt herunterzuladen.

API-Konstruktion

Entpacken Sie das zuvor heruntergeladene Projekt und öffnen Sie es mit einer IDE. Dieser Artikel verwendet IntelliJ.

Kommentieren Sie zunächst die JPA- und MySQL-Bibliotheken in pom.xml aus. Ich werde es in diesem Artikel nicht verwenden, aber ich werde es ab dem nächsten Mal verwenden. Wenn Sie hier keinen Kommentar abgeben, wird dies später zu einem Fehler führen.

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>
...

** Machen wir die Paketstruktur unter main wie folgt **

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

Es ist in Ordnung, wenn es in IntelliJ wie folgt aussieht. スクリーンショット 2019-02-05 0.21.55.png

** Dann schreibe jede Datei wie folgt um **

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();
    }
}

** Machen wir das **

Es ist in Ordnung, wenn Sie auf "http: // localhost: 8080 / person" zugreifen und die folgende Antwort erhalten. スクリーンショット 2019-02-05 0.30.33.png

Paket

Paketieren Sie das diesmal erstellte Projekt zur Ausführung auf der EC2-Instanz.

$ mvn clean package

Dies erzeugt eine JAR-Datei in target /.

2. Erstellen Sie eine EC2-Instanz ~ Versuchen Sie, über das Terminal auf die Instanz zuzugreifen

Jetzt erstellen wir eine EC2-Instanz.

Erstellen Sie eine EC2-Instanz

Lassen Sie uns zunächst auf AWS zugreifen.

** ① Wechseln Sie vom Dienst in der Symbolleiste zu EC2. ** ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-02-17.png

** ② Klicken Sie auf Instanz erstellen. ** ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-02-50.png

** ③ Wählen Sie oben Amazon Linux aus. ** ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-03-07.png

** ④ Gehen Sie zu den Einstellungen für Instanzdetails ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-03-32.png

** ⑤ Zur Einstellungsseite für Sicherheitsgruppen springen ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-06-15.png

** ⑥ Regeln hinzufügen ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-06-54.png Klicken Sie auf "Bestätigen und erstellen", wenn Sie fertig sind.

** ⑦ Instanz starten ** Klicken Sie auf "Start", um die Instanz zu starten. screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-07-35.png

** ⑧ Schlüsselpaar erstellen ** Geben Sie zuerst den Namen des Schlüsselpaars ein. Erstellen Sie nach dem Herunterladen eine Instanz. screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-08-17.png

Damit ist die Instanzerstellung abgeschlossen.

Versuchen Sie den SSH-Zugriff auf die EC2-Instanz

Werfen wir einen Blick auf die zuvor erstellten Instanzinformationen. ** Erstellen Sie eine Kopie des öffentlichen DNS. ** ** ** screenshot-us-east-2.console.aws.amazon.com-2019.02.05-11-12-13.png

Lassen Sie uns mit der heruntergeladenen PEM-Datei auf die EC2-Instanz zugreifen.

$ ssh -i ~/Downloads/demo.pem ec2-user@Das öffentliche DNS, das Sie zuvor kopiert haben

//Lassen Sie uns für alle Fälle aktualisieren
$ sudo yum update

** * Platzieren Sie die PEM-Datei ursprünglich an einem geeigneten Ort, z. B. unter ".ssh /". ** ** **

Wenn Sie darauf zugreifen können, versuchen Sie, einen netten Befehl auszuführen. (Ls, CD usw.)

Platzieren Sie die JAR-Datei auf der EC2-Instanz

Verwenden Sie den Befehl sftp, um die JAR-Datei unter "Ziel" zu platzieren, das lokal auf der ec2-Instanz erstellt wurde.

Melden Sie sich mit exit usw. von der Instanz ab oder wechseln Sie auf einer anderen Registerkarte in das Verzeichnis des Spring-Boot-Projekts.

Übertragen Sie dann die Datei mit sftp.

$ sftp -i ~/Downloads/demo.pem ec2-user@Das öffentliche DNS, das Sie zuvor kopiert haben

$ 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

Versuchen Sie nach Abschluss des Uploads erneut, sich bei der EC2-Instanz anzumelden.

$ ssh -i ~/Downloads/demo.pem ec2-user@Das öffentliche DNS, das Sie zuvor kopiert haben

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

$ ls
demo-0.0.1-SNAPSHOT.jar

Stellen Sie sicher, dass die JAR-Datei mit dem Befehl ls hochgeladen wird.

Ausführung der JAR-Datei

Führen Sie nun das Glas auf der ec2-Instanz aus.

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

Hoppla, es ist ein Fehler aufgetreten. Dieses Mal habe ich lokal mit Java 1.8 entwickelt, aber ein Fehler tritt auf, weil die in Amazon Linux standardmäßig enthaltene Java-Version 1.7 ist.

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

Lassen Sie uns zunächst Java 1.8 installieren.

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

Wechseln Sie die Versionen mit dem Befehl "Alternativen"

$ sudo alternatives --config java

Es gibt 2 Programme'java'Bereitstellen.

Befehl auswählen
-----------------------------------------------
*+ 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

Drücken Sie die Eingabetaste, um den aktuellen auszuwählen[+]Oder geben Sie die Auswahlnummer ein: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)

Versuchen Sie es erneut, nachdem Sie bestätigt haben, dass die Version gewechselt wurde.

$ 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 ''
~

Wenn Sie es sicher starten können, versuchen Sie, über einen Browser oder mit Curl darauf zuzugreifen.

スクリーンショット 2019-02-05 12.13.48.png
$ curl http://DNS der erstellten ec2-Instanz:8080/person
{"name":"hoge","age":16,"gender":"man"}

Json wird sicher zurückgegeben.

Das obige ist der Abschnitt zum einfachen Erstellen einer API mit EC2 + Spring Boot. Es gibt viele Stellen, an denen ich pleite war. Es wäre also hilfreich, wenn Sie die Punkte kommentieren könnten, auf die Sie gestoßen sind.

nächstes Mal Versuchen Sie, mit EC2 + RDS + Spring Boot eine einfache API zu erstellen ② * Schreiben

Recommended Posts

Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Implementieren Sie einen einfachen Web-REST-API-Server mit Spring Boot + MySQL
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
[Anfänger] Versuchen Sie, die REST-API für die Todo-App mit Spring Boot zu schreiben
Machen wir eine Weihnachtskarte mit Verarbeitung!
Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge
HTTPS mit Spring Boot und Let's Encrypt
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Lassen Sie uns eine Suchfunktion mit Rails (Ransack) machen
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Ich habe versucht, mit Javafx ein einfaches Spiel zu machen ① "Lass uns Glücksspiel finden" (unvollendet)
Mit Spring Boot herunterladen
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Hallo Welt (REST API) mit Apache Camel + Spring Boot 2
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
[Spring Boot] Benutzerinformationen mit Rest API abrufen (Anfänger)
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
Lass uns einen Roboter bauen! "Eine einfache Demo von Java AWT Robot"
Passen Sie die Antwort auf REST-API-Fehler mit Spring Boot an (Teil 2).
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Passen Sie die Antwort auf REST-API-Fehler mit Spring Boot an (Teil 1).
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich habe versucht, ein einfaches Spiel mit Javafx zu machen ① "Lass uns Glücksspiel finden" (unvollendete Version ②)
Schreiben wir eine Lambda-Funktion, die Amazon API Gateway in die Spring Cloud-Funktion integriert.
Lassen Sie uns einen Leistungsschalter für den Backend-Service mit Actuator of Spring Boot (Teil 1) herstellen.
Lassen Sie uns schreiben, wie API mit SpringBoot + Docker von 0 erstellt wird
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
API mit Spring + Vue.js verknüpfen