23. Dezember 2015

Oracle Cloud: Mehr Kontrolle durch eine einfache Anwendung auf Basis APEX

Meine ersten Cloud Workshops mit Kunden zeigten immer ähnliche Fragen. Eine davon war: "Wie kontrolliere ich den Verbrauch meiner Services und wie kann ich garantieren, dass der Service nach 8 Stunden auch runter gefahren wird, damit nicht unnötig Geld verbraucht wird."
Apex App: Cloud Usage Control in der Version 1.1
Die Antwort ist ganz einfach. Die Cloud Umgebung ist eine voll dynamische Umgebung mit einem vollständigen API Katalog (REST API). Entweder ich baue eine schnelle Anwendung oder man kauft sich ein Tool, welches sicherstellt, dass man die Kontrolle behält.

Um das Prinzip der API der Cloud Services zu verstehen, empfehle ich zuerst: Erstmal bauen und dann sehen, ob es nicht besser ist, eine Anwendung wie den Enterprise Manager oder Cloudbolt für die Steuerung von Cloud Services zu verwenden.
Ich habe hierfür bereits eine kleine Anwendung gebaut, die folgendes kann
  • DB Services verwalten (Start, Stop, Restart, Status-Abfrage und Scheduling)
  • Java Services verwalten (Start, Stop, Restart, Status-Abfrage und Scheduling)
  • Nutzerverwaltung mit Zuordnung wer welche Service verwalten darf
  • Kostenkontrolle
Für Interessierte stelle ich den Code gerne zur Verfügung. Das Deployment ist super einfach und wird hier beschrieben.


Wir bauen in APEX eine Steuerungssoftware für Cloud Services

Die Oracle Cloud stellt eine komplette REST API zur Verfügung, mit der Services in der Cloud bearbeitet oder auch administriert werden können. D.h. jeder Service kann per Script verwaltet werden. Hierfür würde man das Tool "curl" nutzen. Typische Aufrufe für das Starten, Stoppen oder die Statusabfrage für z.B. einen DB Service ist wie nachfolgend dargestellt.
##START or STOP
curl --include --request POST \
--user username:password \
--header "X-ID-TENANT-NAME:identity domain \
--header "Content-Type:application/json" \
--data '{ "lifecycleState" : "Stop" }' \
https://dbaas.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/IDomain/service

## Status one Service
curl --include --request GET \
--cacert /home/oracle/cacert.pem \
--user user name:password \
--header "X-ID-TENANT-NAME:identity domain \
https://dbaas.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/idomain/service

Ok, das ist ja einfach. In Apex kann man beliebige Service-Aufrufe leicht verwenden. Hierzu nutzt man typischer Weise das Apex Package APEX_WEB_SERVICE. Ein Aufruf in PL/SQL würde dann wie folgt aussehen:
##START or STOP
apex_web_service.g_request_headers(1).name := 'X-ID-TENANT-NAME';
apex_web_service.g_request_headers(1).value := p_idomain_name;
--header "Content-Type:application/json" \
apex_web_service.g_request_headers(2).name := 'Content-Type';
apex_web_service.g_request_headers(2).value := 'application/json';
--
l_clob := apex_web_service.make_rest_request(
       p_url => l_rest_url,
       p_http_method => 'POST',
       p_body        => to_clob('{ "lifecycleState" : "'||p_what||'" }'),
       p_wallet_path => l_wallet_path,
       p_wallet_pwd  => l_wallet_pw,
       p_username    => p_username,
       p_password    => p_password);
...
Damit Services geplant werden können, nutzt man den DB Scheduler:
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'CLOUDUSAGE.'||L_JOB_NAME,
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'declare
                           l_ret varchar2(1000);
                           begin
                            updateServiceProc ('''||:P24_IDENTITY_DOMAIN||''', '''||:P24_SERVICE_NAME||''', '''||:P24_USER_NAME||''', '''||:P24_PASSWORD||''',''Start'', l_ret);
                          end;',
   start_date           => to_date(:P24_START_DATE,'DD-MON-YYYY HH24:MI:SS'),
   enabled              =>  TRUE,
   comments             => 'Send START Request to Cloud Service');

Also, brauchen wir nur noch eine kleine Admin-Umgebung in APEX aufzubauen und führen dann dynamisch REST API Calls aus und steuern so die Cloud Umgebung.
Ich habe eine vollständige Apex-Anwendung  gebaut, die sich auf das Starten und Stoppen von Services konzentriert. Services werden gescheduled und stehen zur Verfügung, wenn das Projekt es braucht. Eine automatisierte Stoppung des Services ist auch inkludiert.


Apex Anwendung zur Steuerung der Cloud Services
Vorteil dieser Anwendung:
  • Sie kann on-premise oder in der Cloud installiert werden.
  • Endbenutzer bekommen Zugriff auf die Services ohne im Cloud Portal registriert zu sein
  • D.h. volle Separation of Duties. Jeder bekommt den Zugriff auf den Service, den er braucht
  • Kontrolle über die Kosten und Bereitstellung der Services durch Scheduling Process

Tipps für die Implementierung

  • Mindestens Apex 5.0.2 auswählen. In Version 5.0.0 funktioniert der Aufruf eines REST Services mit der Methode POST nicht
  • Laden Sie die Zertifikate der Cloud Service URL (SSL) in ein Oracle Wallet. Es sind insgesamt 3 Zertifikate, die Sie speichern müssen. Hierfür rufen Sie mit dem Browser die REST API URL auf und exportieren die Zertifikate in eine Datei. Danach erstellen Sie ein neues Oracle Wallet und importieren die Zertifikate. Das Wallet müssen Sie beim PL/SQL Aufruf angeben
$ orapki wallet create -wallet path -pwd password -auto_login
$ orapki wallet add -wallet path -trusted_cert -cert 
  "path/certifcate_filename" -pwd password

Wie funktioniert die Apex Anwendung?

Nach dem Deployment meldet man sich in der Anwendung an. In der Cloud (Compute Console) die SSL Firewall Rule anpassen (aktivieren und Whitelist hinterlegen) und dann anmelden. Folgende Schritte ausführen, damit das Setup passt.
REST API der Service Types prüfen und anpassen
Wallet Ablageort anpassen (eventuelle neue Zertifikate einladen bzw. neues Wallet erstellen)

Eigene Cloud Services eintragen (sollten in der Cloud angelegt sein)

Kosten pro Service in der Stunde eintragen
Hier hinterlegen Sie entsprechend Ihrer Rate Card die Servicekosten pro Stunde.
Nutzer einrichten und diesen entsprechende Services zur Verwaltung zu ordnen
Nun können Sie Ihre Services verwalten:

Status der Service prüfen
Services Starten/Stoppen/Restarten

Services vorausplanen entsprechend Projektplan
Kostenkontrolle mit einem interaktiven Report
Bitte beachten Sie hier, dass die eingetragenen Kosten rein fiktiv sind und nicht die tatsächlichen Kosten widerspiegeln. Hierzu muss wie oben erwähnt die Kostenermittlung pro Stunde und Service mit der Rate Card berechnet werden.

Fertige APEX Anwendung

Gerne stelle ich die fertige APEX Anwendung zur Verfügung. Kontaktieren Sie mich einfach.
Wer gerne professionelle Tools nutzen möchte, der findet mögliche Lösungen nachfolgend
Schönen Tag
Carsten

Keine Kommentare:

Kommentar veröffentlichen