Wie im folgenden Artikel beschrieben, wird in JavaOne 2017 Keynote die FaaS-Plattform "[fn project], die Java auch von Oracle aus ausführt ](Http://fnproject.io/) "wurde veröffentlicht.
Das Hauptmerkmal ist
Ich kann nicht messen, wie ernst ich es vorhabe, es zu vergrößern, aber soweit ich die Präsentation sah, schien es ziemlich interessant zu sein, also habe ich es versucht. Die Umgebung, die ich ausprobiert habe, ist Windows 10 + Docker Toolbox + WSL (Ubuntu). Bitte lesen Sie sie in Ihrer eigenen Umgebung.
Installieren Sie zuerst den Befehl fn
% curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
[sudo] password for koduki:
fn version 0.4.6
% fn -v
fn version 0.4.6
Lassen Sie uns das Beispielprogramm so ausführen, wie es ist.
% fn start
mount: permission denied (are you root?)
Could not mount /sys/kernel/security.
AppArmor detection and --privileged mode might break.
mount: permission denied (are you root?)
time="2017-10-03T12:25:53Z" level=info msg="datastore dialed" datastore=sqlite3 max_idle_connections=256
time="2017-10-03T12:25:53Z" level=info msg="no docker auths from config files found (this is fine)" error="open /root/.dockercfg: no such file or directory"
time="2017-10-03T12:25:53Z" level=info msg="available memory" ram=593510400
time="2017-10-03T12:25:53Z" level=info msg="Serving Functions API on address `:8080`"
______
/ ____/___
/ /_ / __ \
/ __/ / / / /
/_/ /_/ /_/
v0.3.135
^C2017/10/03 21:56:12 interrupt caught, exiting
Das Image von Docker wird hinter den Kulissen abgelegt und der Server wird auf Port 8080 von localhost gestartet. Überprüfen Sie unten, ob es funktioniert. Übrigens, da ich die Docker-Toolbox verwende, werde ich anstelle von localhost die IP verwenden, die mit "Docker-Maschine IP Standard" erhalten wurde.
% curl http://192.168.99.100:8080
{"goto":"https://github.com/fnproject/fn","hello":"world!"}
Ich konnte bestätigen, dass der Server gestartet wurde.
Ich werde weiterhin Hello World-ähnliche Apps erstellen.
Erstellen Sie zunächst ein Verzeichnis, um die App zu erstellen.
% mkdir example-fn
% cd example-fn
Erstellen Sie dann die Anwendung. Dieses Mal habe ich beschlossen, es mit Java zu versuchen.
% fn init --runtime java
______
/ ____/___
/ /_ / __ \
/ __/ / / / /
/_/ /_/ /_/
Runtime: java
Function boilerplate generated.
func.yaml created.
% find . -type f
./func.yaml
./pom.xml
./src/main/java/com/example/fn/HelloFunction.java
./src/test/java/com/example/fn/HelloFunctionTest.java
Die Vorlage der Einstellungsdatei func.yaml und Maven wird erstellt. Der Inhalt ist so.
% cat ./src/main/java/com/example/fn/HelloFunction.java
package com.example.fn;
public class HelloFunction {
public String handleRequest(String input) {
String name = (input == null || input.isEmpty()) ? "world" : input;
return "Hello, " + name + "!";
}
}%
Es ist ziemlich einfach. Nun, die empfohlene Art, es zu schreiben, ist die Verwendung des in der Demo eingeführten Java-FDK, aber ich werde diesen Teil später versuchen.
Lassen Sie uns den erstellten Code erstellen.
% fn run
Building image koduki/example-fn:0.0.1
Sending build context to Docker daemon 13.82kB
Step 1/11 : FROM fnproject/fn-java-fdk-build:jdk9-latest as build-stage
.
.
.
Step 11/11 : CMD com.example.fn.HelloFunction::handleRequest
---> Running in 0cd0c81caa5a
---> c6e00fb47d8d
Removing intermediate container 0cd0c81caa5a
Successfully built c6e00fb47d8d
Successfully tagged koduki/example-fn:0.0.1
Hello, world!%
Nach dem Ausführen verschiedener Builds durch Docker wurde das Ausführungsergebnis ausgegeben. Soweit ich aus dem Protokoll ersehen kann, scheint der Test zu diesem Zeitpunkt ausgeführt zu werden. Genial.
Stellen Sie schließlich bereit.
Als Vorsichtsmaßnahme für die Bereitstellung wird Push to Docker Hub automatisch eingefügt, wenn keine Option vorhanden ist. Sie müssen sich daher bei Docker Hub anmelden und im Voraus ein Projekt erstellen.
Bitte beachten Sie, dass der Projektname der Name des Stammverzeichnisses ist, wenn in func.yaml
nichts beschrieben ist.
Die Anmeldung bei Docker Hub lautet wie folgt.
% #Die Magie der Verwendung von Docker von WSL
% alias docker="docker -H tcp://192.168.99.100:2376 --tlsverify --tlscacert /mnt/c/Users/$USER/.docker/machine/machines/default/ca.pem --tlscert /mnt/c/Users/$USER/.docker/machine/machines/default/cert.pem --tlskey /mnt/c/Users/$USER/.docker/machine/machines/default/key.pem"
% docker login
Login Succeeded
Dann ist es das wesentliche Login. Führen Sie "fn start" in einem anderen Terminal usw. aus, um den Bereitstellungszielserver zu starten.
% API_URL=http://192.168.99.100:8080 fn deploy --app myapp
Deploying example-fn to app: myapp at path: /example-fn
Bumped to version 0.0.2
Building image koduki/example-fn:0.0.2
.
.
.
Successfully tagged koduki/example-fn:0.0.2
Updating route /example-fn using image koduki/example-fn:0.0.2...
Beachten Sie, dass der Standardwert "http: // localhost: 8080" lautet, wenn Sie "API_URL" nicht angeben. Daher funktioniert dies nicht mit Docker Toolbox. Sie können das Pushing zu Docker Hub auch überspringen, indem Sie die Option "--local" hinzufügen.
Lassen Sie uns überprüfen, ob es bereitgestellt wurde. Überprüfen Sie zunächst das Routing
% API_URL=http://192.168.99.100:8080 fn routes list myapp
path image endpoint
/example-fn koduki/example-fn:0.0.3 192.168.99.100:8080/r/myapp/example-fn
Es ist sehr praktisch zu sehen, welche Version zugeordnet ist. Versuchen Sie, auf die aufgelisteten Endpunkte zuzugreifen.
% curl http://192.168.99.100:8080/r/myapp/example-fn
Hello, world!%
Es wurde richtig ausgegeben!
Da es sich um ein Docker Native FaaS handelt, scheint es, dass es mit k8s usw. kombiniert werden kann und verschiedene Dinge getan werden können. Nächstes Mal möchte ich Fn Flow und FDK ausprobieren.
Da es sich nicht um einen rein verwalteten Dienst von AWS Lambda usw. handelt, kann es einige Unterschiede geben. Kann er jedoch als Grundlage für ein System verwendet werden, das in einer On-Premise- oder Cloud-Umgebung einfach zu skalieren ist? Ich erwarte es.
Im Moment fehlt es an Dokumentation, daher hoffe ich, dass die Entwicklung in Zukunft fortgesetzt wird.
Dann viel Spaß beim Hacken!
Recommended Posts