Immer mehr Services, Daten und Funktionen wandern in die Cloud. Damit gibt man lästige Aufgaben der Bereitstellung, der Wartung und der Administration ab. Aus der Anwendung muss dann über eine Schnittstelle über das Netzwerk auf den Service zugegriffen werden. Für Delphi Applikationen und die Amazon Cloud gibt es dazu ein neues SDK. Dieser Blog zeigt die Arbeit mit dem Appercept SDK.
Die Cloud-Dienste von Amazon sind die am häufigsten genutzten Services. Unter der Produktbezeichnung AWS findet man eine Vielfalt von Services für die unterschiedlichsten Branchen. Für Entwickler von Unternehmensapplikationen sind beispielsweise die folgenden Services für die Nutzung in eigenen Applikationen von Interesse.
- Services Simple Storage (S3): Das ist ein Objektspeicher-Service mit einfacher Skalierbarkeit, Datenverfügbarkeit, Sicherheit und hoher Leistung.
- Simple Notification Service (SNS): Ist ein Benachrichtigungsservice, welcher eine Infrastruktur für die Massenzustellung von Nachrichten, hauptsächlich an mobile Benutzer bietet.
- Amazon Simple Queue Service (SQS): Ist ein vollständig verwalteter Nachrichtenwarteschlangen-Service, welcher das Entkoppeln und Skalieren von Microservices, verteilten Systemen und serverlosen Anwendungen ermöglicht (Middleware).
Der Zugriff auf die Services von AWS erfolgt über standardisierte Schnittstellen. Genutzt wird dazu ein Software Development Kit (SDK), welches die Konnektivität von der Applikation zu AWS herstellt. Das SDK ist dabei an die Vorgehensweisen der jeweiligen Entwicklungs- und Programmierumgebung ausgerichtet und sorgt auf diese Weise für eine maximale Abstraktion und Vereinfachung.
Für Entwickler, welche mit der integrierten Entwicklungsumgebung Delphi arbeiten, wird ein neues leistungsfähiges SDK bereitgestellt. Dieses vereinfacht die Arbeit mit dem Cloud-Service in vielen Belangen. Das Appercept SDK, https://www.appercept.com/appercept-aws-sdk-for-delphi, liegt aktuell in einer Preview-Version vor und ist Bestandteil der Enterprise-Edition und kann von allen Entwicklern mit einer entsprechenden Lizenz verwendet werden. Im Folgenden wird die Arbeit mit dem SDK beschrieben. Voraussetzung für die Nutzung ist:
- Ein aktives Konto bei AWS. Dieses kann unter https://aws.amazon.com/de erstellt werden.
- Eine Installation der aktuellen Entwicklungsumgebung Delphi, Enterprise Edition, Version 10.4 oder größer.
- Die Integration des Appercept SDK in Delphi. Die Dokumentation findet man unter https://www.appercept.com/appercept-aws-sdk-for-delphi.
Im Folgenden wird davon ausgegangen, dass ein aktives Konto bei AWS besteht und die Entwicklungsumgebung Delphi installiert ist.
Installation des Appercept SDK in Delphi
Die Installation des Appercept AWS SDK erfolgt über den internen Paketmanager GetIt der Entwicklungsumgebung (Bild 1).
Bild 1: Auswahl des Apparent SDK im Paketmanager von GetIt.
Der erfolgreiche Abschluss der Installation wird danach angezeigt (Bild 2).
Bild 2: Abschluss der Installation des Appercept AWS SDK.
Sie können dann über den Menüpunkt Komponente | Packages installieren die erfolgreiche Installation des Appercept AWS SDK als Entwurfs-Package nachvollziehen (Bild 3).
Bild 3: Das installierte Package wird in der Liste der Entwurfs-Packages angezeigt.
Damit ist die Installation des Appercept AWS SDK bereits abgeschlossen. Mit der Installation der Bibliothek wird auch eine Hilfedatei zur Verfügung gestellt (Bild 4). Diese finden Sie unter …UserDocumentsEmbarcaderoStudio22.0CatalogRepositoryAWSSDKforDelphi-x.xx.0Help.
Bild 4: Hilfedatei des Appercept AWS SDK.
Hier findet man vielfältige Informationen von der Installation, über die Nutzung des API bis hin zur Integration des Appercept AWS SDK in die eigene Anwendung.
Registrierung beim Amazon Web Service (AWS)
Für die Verwendung der Cloud-Dienste von AWS wird ein Konto benötigt, welches man unter https://aws.amazon.com/de/ einrichten kann. Für das Anlegen eines Kontos wird eine E-Mail-Adresse benötigt, welche verifiziert werden muss. Für die Nutzung eines konkreten Service, zum Beispiel den Amazon Simple Storage Service (AWS S3), ist eine Kreditkarte als gültige Zahlungsmethode zu hinterlegen und zu verifizieren. Der konkrete Ablauf der Verifikation richtet sich nach den Bestimmungen der ausgebenden Bank. Mit diesen Voraussetzungen kann über die AWS Console ein neuer Service erstellt und konfiguriert werden. Beispielhaft wird der Speicherdienst AWS-S3 betrachtet.
AWS-S3
Amazon Simple Storage Service (AWS S3) ist ein Objektspeicher. Dieser ist auch für sehr große Datenmengen geeignet. AWS-S3 bietet eine Vielzahl von Speicherklassen an, die für diverse Anwendungsfälle genutzt werden können. Die Daten werden als Objekte in Buckets gespeichert. Ein Objekt wiederum ist eine Datei und alle Metadaten, die diese Datei beschreiben. Ein Bucket ist ein Container für Objekte. Um Daten in AWS S3 zu speichern, erstellt man zunächst ein Bucket und vergibt einen Bucket-Namen und wählt eine AWS-Region (geografische Region). Anschließend werden die Daten in dieses Bucket als Objekte in AWS-S3 hochgeladen. Jedes Objekt hat einen Schlüssel, welcher ein eindeutiger Bezeichner für das Objekt im Bucket ist. Buckets und die darin enthaltenen Objekte sind privat und auf diese kann nur zugegriffen werden, wenn man entsprechende Berechtigungen erteilt. Ausführliche Informationen zum Speicherdienst AWS S3 findet man unter: https://docs.aws.amazon.com/de_de/AmazonS3/latest/userguide/Welcome.html.
Für den Zugriff auf die in AWS S3 gespeicherten Objekte gibt es mehrere Optionen:
- AWS Management Console: Der Zugriff erfolgt über eine webbasierte Benutzeroberfläche.
- AWS Command Line Interface (AWS CLI): Über die Befehlszeilen-Tools von AWS können nahezu alle Aufgaben mit AWS erledigt werden, u.a. ist auch ein Zugriff auf die Objekte möglich. Ein Einstieg zur Nutzung des AWS CLI findet man unter https://docs.aws.amazon.com/de_de/cli/latest/userguide/cli-chap-welcome.html.
- AWS-SDKs: Es gibt Software Development Kits von Amazon für verschiedene Programmiersprachen und Plattformen, konkret für C++, Go, Java, JavaScript, .NET, Node.js, PHP, Python, Ruby und PHP. Über die jeweiligen SDKs werden ausgewählte Funktionen von AWS zur direkten Nutzung in der betreffenden Programmiersprache und Plattform zur Verfügung gestellt. Ein SDK für Delphi wird von Amazon leider nicht direkt bereitgestellt. Als Alternative dient das hier vorgestellte Appercept AWS SDK.
- AWS S3-REST-API: Hierbei handelt es sich um eine generische Schnittstelle, welche einen programmiersprachenneutralen Zugriff auf die Dienste über HTTS/ REST erlaubt. Mit dem REST-API können Standardanfragen durchgeführt werden, um Buckets und Objekte zu erstellen, zu laden, zu löschen usw.
Mit dem Appercept AWS SDK verwendet man eine sehr leichtgewichtige Variante zur Nutzung des Cloud-Speicherdienstes. Das konkrete Vorgehen wird nun anhand eines Beispiels beschrieben. Das Beispiel finden Sie im Quellcode zum Download als GitHub-Repository unter https://github.com/appercept/field-report-delphi.
Ein Beispiel mit AWS-S3
Laden Sie das Beispiel „field-report-delphi“ von unter https://github.com/appercept/field-report-delphi als zip-datei herunter und entpacken Sie es. Alternativ können Sie auch das Online-Repository in die lokale Dateistruktur klonen. Es handelt sich um eine FireMonkey-Applikation, welche beispielsweise auf einem iPhone ausgeführt werden kann. Öffnen Sie diese in Delphi (Bild 5).
Bild 5: Die Beispiel-Anwendung in Delphi.
Funktional wird mit Hilfe der Kamera ein Foto aufgenommen, das Bildobjekt wird transformiert und dann nach AWS-S3 hochgeladen. Anhand der einzelnen Quellcodeabschnitte sehen wir uns die grundsätzliche Vorgehensweise an. Voraussetzung ist die Installation des Appercept AWS SDK wie eben beschrieben.
Ein Client, welcher mit dem AWS-S3 Daten austauschen möchte, muss sich gegenüber diesen eindeutig identifizieren. Dazu muss das Appercept AWS-SDK konfiguriert werden. Es gibt mehrere Optionen:
- Konfiguration im Quellcode: Jede Client-Klasse akzeptiert bei dessen Erstellung eine Reihe von Optionen. Die meisten Einstellungen sind für alle Clients identisch. Über die Optionen können Sie die Anmeldeinformationen usw. konfigurieren. Für jeden Service (S3, SNS, SQS) gibt es eigenständige Klassen für den Datenzugriff und Klassen zur Konfiguration des Service.
- Konfiguration über Umgebungsvariablen: Die Konfiguration erfolgt über die Umgebungsvariablen des Systems, zum Beispiel: AWS_ACCESS_KEY_ID für eine Angabe der Zugriffs-ID oder AWS_DEFAULT_REGION für die Spezifikation der AWS-Region.
- Anmelde-Informationsdatei: Die Anmeldeinformationen werden automatisch aus der AWS-Anmelde-Informationsdatei geladen. Die Datei mit den gemeinsam genutzten Anmeldeinformationen ist eine ini-Datei, welche aus einem Standardabschnitt und Profilabschnitten für jedes konfigurierte Profil besteht.
- Konfigurationsdatei: Die Konfigurationswerte werden aus einer AWS-Konfigurationsdatei geladen. Die Konfigurationsdatei ist ebenso eine ini-Datei, welche aus einem Standardabschnitt und Profilabschnitten für jedes konfigurierte Profil besteht.
Die genannten Optionen werden der Reihe nach überprüft und angewendet, d.h. die Konfiguration im Quellcode geht den anderen Optionen voraus.
In diesem Beispiel geschieht dieses direkt im Quellcode des Projektes. Es wird also die oben beschriebene erste Variante genutzt. Dazu gibt es die Unit Settings, welche Konstanten für die so genannten App-Geheimnisse definiert:
1 2 3 4 5 6 7 8 9 |
unit Settings; interface const AccessKeyId = ''; SecretAccessKey = ''; AwsRegion = ''; InboundReportsBucketName = ''; implementation end. |
Diese App-Geheimnisse müssen dann mit den individuellen Angaben spezifiziert werden, welche man nach der Konfiguration von AWS-S3 über die AWS Management Console erhält.
Jetzt betrachten wir die Methode zum Upload des Bildes. Diese Methode findet man in der Unit Frame.ReportItem und dort mit der Bezeichnung UploadReport(…):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
procedure TReportItemFrame.UploadReport(const APicture: TBitmap; const AReport: string); var LStream: TMemoryStream; LOptions: IS3Options; LS3: IS3Client; LRequest: IS3PutObjectRequest; begin ThumbnailImage.Bitmap.Assign(APicture); NotesLabel.Text := AReport; TTask.Run( procedure begin LStream := TMemoryStream.Create; try APicture.SaveToStream(LStream); LStream.Seek(0, soBeginning); LOptions := TS3Options.Create; LOptions.AccessKeyId := AccessKeyId; LOptions.SecretAccessKey := SecretAccessKey; LOptions.Region := AwsRegion; LS3 := TS3Client.Create(LOptions); LRequest := TS3PutObjectRequest.Create(InboundReportsBucketName, ReportKey, LStream); LRequest.ContentType := 'image/png'; LRequest.Tags.AddTag('Notes', AReport); LRequest.OnSendData := procedure(const AContentLength: Int64; AWriteCount: Int64; var AAbort: Boolean) begin TThread.Queue(nil, procedure begin UploadProgressBar.Max := AContentLength; UploadProgressBar.Value := AWriteCount; end ); end; LS3.PutObject(LRequest); finally LStream.Free; end; end ); end; |
Dazu beachten Sie die folgenden Erläuterungen: Das Bild wird zunächst in einen Datei-Stream umgewandelt:
1 2 |
APicture.SaveToStream(LStream); LStream.Seek(0, soBeginning); |
Danach erfolgt die Konfiguration des AWS-SDK mit Hilfe der definierten Konstanten:
1 2 3 4 |
LOptions := TS3Options.Create; LOptions.AccessKeyId := AccessKeyId; LOptions.SecretAccessKey := SecretAccessKey; LOptions.Region := AwsRegion; |
Dann wird der Client erstellt und dabei werden die App-Geheimnisse als Optionen übergeben:
1 |
LS3 := TS3Client.Create(LOptions); |
Es folgt der Upload der Bilddatei in das betreffende Bucket von AWS-S3 in Form des Datei-Streams. Dazu muss der Dateityp angegeben werden:
1 2 3 4 |
LRequest := TS3PutObjectRequest.Create(InboundReportsBucketName, ReportKey, LStream); LRequest.ContentType := 'image/png'; LRequest.Tags.AddTag('Notes', AReport); LRequest.OnSendData := procedure(const AContentLength: Int64; AWriteCount: Int64; var AAbort: Boolean) |
Am Ende des Vorgangs muss der Upload des Objektes final abgeschlossen werden:
1 |
LS3.PutObject(LRequest); |
Der Datei-Stream ist ebenso freizugeben:
1 |
LStream.Free; |
Wenn Sie die App-Geheimnisse aus der AWS Management Console in die Unit Settings hinterlegt haben und die App auf einem mobilen Device ausführen, können Sie ein Foto mit der Kamera aufnehmen und nach AWS-S3 hochladen.
Einrichtung des Service über die AWS Management Console
Über die AWS Management Console erstellt man den Cloud-Service, kann diesen konfigurieren, die App-Geheimnisse entnehmen und die gespeicherten Daten verwalten. Zur Ausführung des Beispiels ist nur eine minimale Konfiguration notwendig. Melden Sie sich bei AWS an und gehen Sie zur AWS-Management Console über den folgenden Link: https://console.aws.amazon.com/ (Bild 6).
Bild 6: AWS Management Console.
Ausgewählt wird der Service S3 (Bild 7).
Bild 7: Auswahl und Konfiguration von S3 in AWS.
Diese ist nun noch zu konfigurieren. Das kann man entweder manuell machen (neues Projekt) oder man hat eine Datei für die automatische Konfiguration zur Verfügung. Im Beispielprojekt findet sich unter: https://github.com/appercept/field-report-delphi/tree/main/CloudFormation eine entsprechende Konfigurationsdatei, welche die Schritte zur Einrichtung von AWS-S3 vereinfacht und abkürzt. Diese wird nachfolgend verwendet (Bild 8).
Bild 8: AWS-S3 wird auf der Basis einer Vorlagendatei konfiguriert.
Erstellen Sie den Service (Stack) basierend auf der Vorlage CloudFormation/FieldReport.yml. Geben Sie einen „Stack-Namen“ an. Durchlaufen Sie die Schritte des Assistenten und akzeptieren Sie alle Standardwerte (Bild 9).
Bild 9: Konfiguration von AWS-S3 ist abgeschlossen
Übernehmen Sie danach die Einstellungen (App-Geheimisse) aus dem Web-Portal von AWS in die Settings-Konfiguration des Delphi-Quellcode der App und führen Sie diese aus (Bild 10).
Bild 10: Die Beispiel App unter iOS (aufgenommen mit QuickTime).
In der AWS-Konsole können Sie den erfolgreichen Upload der Bilddatei nachvollziehen.
Weitere Funktionen
Das Appercept AWS-SDK bietet weitere einfach zu nutzende Klassen, um Buckets in AWS-S3 zu verwalten. Man kann beispielsweise mittels:
1 2 3 4 5 6 7 8 9 |
var Bucket: IS3Bucket; begin Bucket := TS3Bucket.Create('my-bucket'); for var LObject in Bucket.Objects do begin // … end; end; |
über alle Objekte eines Buckets iterieren und mit den Objekten arbeiten. Ein Objekt kann über:
1 2 3 4 5 6 |
var LObject: IS3Object; begin LObject := TS3Object.Create('my-bucket', 'my-object'); LObject.DownloadFile('/path/to/file'); end; |
heruntergeladen werden. Dabei wird ein konkretes Bucket adressiert und die Datei im angegebenen Pfad gespeichert. Für den Upload einer Datei steht beispielsweise die Methode UploadFile(…) zur Verfügung. Dargestellt wurde die Vorgehensweise mit dem Speicherservice S3 von AWS. Das Appercept AWS-SDK kann in der vorliegenden Version auch die Dienste Simple Notification Service (SNS) und Amazon Simple Queue Service (SQS) ansprechen. Auch dazu gibt es entsprechende Klassen im SDK. Die Namespaces der Klassen sind nach den Services benannt (Bild 10).
Bild 11: Das AWS SDK organisiert die Klassen nach den Services von AWS.
Tipp: Als Unterstützung für die Arbeit dem Appercept AWS-SDK gibt hier ein Cheat Sheet zum Download, welches die wichtigsten Fakten und Schritte in kompakter Form zusammenfasst.
Fazit
Die Nutzung von Cloud-Services ermöglicht viele Optionen bei der Entwicklung von Apps, beispielsweise die Nutzung von Speicher- und Nachrichtendiensten. Der Amazon Web Service bietet eine große Anzahl von interessanten Services. In diesem Blog haben wir die Einrichtung, Konfiguration und die Nutzung des Dienstes an einem einfachen Beispiel beschrieben. Mit Hilfe des neuen Appercept AWS-SDK wird die Einbindung in das eigene Delphi Programm vereinfacht. Da mit Hilfe von Delphi und dem Grafikframework FireMonkey Anwendungen für nahezu alle relevanten Client-Plattformen, d.h. Windows, macOS, Linux, iOS und Android, erstellt werden können, ist das Appercept AWS-SDK sehr flexibel und nutzbringend für die unterschiedlichsten Use Cases zu verwenden.
Links
Dokumentation des Appercept AWS-SDK:
https://docs.appercept.com/aws-sdk/contents.html
Amazon Web Service:
https://aws.amazon.com/de/
Beispiel zu diesem Blog zur Nutzung von AWS-S3 auf GitHub:
https://github.com/appercept/field-report-delphi
Weitere Beispiele zum Appercept AWS-SDK auf GitHub:
https://github.com/appercept/aws-sdk-delphi-samples
Cheat Sheet zum Download
Click
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition