Die Referenzarchitektur für mobiles Backend (Diagramm) zeigt, wie AWS Lambda gemeinsam mit anderen Services verwendet wird, um ein serverloses Backend für eine mobile Anwendung zu erstellen. Über die in diesem Repository bereitgestellte spezifische Beispielanwendung können Benutzer Fotos und Notizen mithilfe von Amazon Simple Storage Service (Amazon S3) bzw. Amazon API Gateway hochladen. Die Notizen werden in Amazon DynamoDB gespeichert und asynchron durch DynamoDB Streams und eine Lambda-Funktion verarbeitet, um sie einer Amazon CloudSearch-Domain hinzuzufügen. Zusätzlich zum Quellcode für die Lambda-Funktionen enthält dieses Repository eine iOS-Prototyp-Anwendung, die Beispiele zeigt, wie das AWS Mobile SDK für iOS mit den in der Architektur definierten Backend-Ressourcen verknüpft wird.
Um die vollständige Beispielanwendung auszuführen, müssen Sie zuerst die Backend-Ressourcen bereitstellen und dann die iOS-Beispielanwendung kompilieren und ausführen.
Die bereitgestellte AWS CloudFormation-Vorlage erstellt die meisten Backend-Ressourcen, die Sie für dieses Beispiel benötigen. Sie müssen jedoch trotzdem die Amazon CloudSearch-Domain, die REST-API in API Gateway und den Identitäts-Pool für Cognito außerhalb der AWS CloudFormation erstellen.
-
Erstellen Sie mithilfe der AWS CLI eine neue CloudSearch-Domain mit einem Domain-Namen Ihrer Wahl.
aws cloudsearch create-domain --domain-name [YOUR_DOMAIN_NAME]
-
Notieren Sie den ARN der neuen Domain aus dem Ausgabedokument. Sie müssen ihn beim Starten des CloudFormation-Stapels eingeben.
-
Definieren Sie Indizes für die Felder "headline" und "text".
aws cloudsearch define-index-field --name headline --type text --domain-name [YOUR_DOMAIN_NAME] aws cloudsearch define-index-field --name text --type text --domain-name [YOUR_DOMAIN_NAME]
-
Erstellen Sie mithilfe der AWS CLI eine neue API mit einem Namen Ihrer Wahl.
aws apigateway create-rest-api --name [YOUR_API_NAME]
-
Notieren Sie die "API ID" der neuen Domain aus dem Ausgabedokument. Sie müssen sie beim Starten des CloudFormation-Stapels eingeben.
-
Erstellen Sie mithilfe der AWS CLI einen neuen Identitäts-Pool mit einem Namen Ihrer Wahl.
aws cognito-identity create-identity-pool --allow-unauthenticated-identities --identity-pool-name [YOUR_POOL_NAME]
-
Notieren Sie die "IdentityPoolId" aus dem Ausgabedokument. Sie müssen sie beim Starten des CloudFormation-Stapels als Parameter eingeben.
Sie können das gesamte Beispiel mithilfe der CloudFormation-Vorlage und dem S3-Bucket für die Region "us-east-1" bereitstellen. Wenn Sie die Vorlage für eine andere Region bereitstellen möchten, müssen Sie einen Amazon S3-Bucket für diese Region erstellen und dann die Vorlage und die Lambda-Funktionsdefinitionen in die Region kopieren.
Wählen Sie Launch Stack, um die Vorlage für die Region "us-east-1" in Ihrem Konto zu starten:
Geben Sie nach Aufforderung die Parameterwerte für die CloudSearch-Domain, die REST-API in API Gateway und die Ressourcen des Identitäts-Pools für Amazon Cognito ein, die Sie in den vorherigen Schritten erstellt haben.
Details über die mithilfe dieser Vorlage erstellen Ressourcen finden Sie im Abschnitt Ressourcen der CloudFormation-Vorlage in diesem Dokument.
Nachdem Sie den CloudFormation-Stapel erstellt haben, müssen Sie die zuvor erstellte API aktualisieren, damit diese die neu erstellte "NotesApiFunction" verwendet.
- Wählen Sie Ihre API in der Amazon API Gateway-Konsole aus.
- Wählen Sie Create Resource aus, um eine neue, untergeordnete Ressource unter "/" zu erstellen.
- Geben Sie "notes" als Ressourcenname und "/notes" als Ressourcenpfad ein.
- Wählen Sie Create Resource aus.
- Wählen Sie die neue Ressource "/notes" und dann Create Method aus.
- Wählen Sie "POST" aus und aktivieren Sie das Kontrollkästchen.
- Wählen Sie als Integrationstyp Lambda Function und dann die Region aus, in der Sie den CloudFormation-Stapel als Lambda-Region gestartet haben.
- Geben Sie in Lambda Function die Zeichenfolge NotesApiFunction ein und wählen Sie die vom CloudFormation-Stapel erstellte Funktion aus.
- Klicken Sie auf Save und erteilen Sie API Gateway die Berechtigung zur Ausführung der Lambda-Funktion.
- Klicken Sie auf Method Request, um die Anforderungskonfiguration zu bearbeiten.
- Wählen Sie als Authorization type den Typ "AWS_IAM" aus.
- Wählen Sie bei API Key Required die Option "true" aus.
- Klicken Sie auf Deploy API.
- Wählen Sie unter Deployment stage die Option "New Stage" aus und geben Sie dann bei Stage name einen Namen ein.
- Notieren Sie die Invoke URL für die neue Stufe. Sie benötigen diesen Wert, wenn Sie die iOS-Beispielanwendung ausführen.
- Wählen Sie in der Amazon API Gateway-Konsole APIs und dann API Keys aus.
- Klicken Sie auf Create API Key.
- Geben Sie einen Namen für den Schlüssel ein und wählen Sie dann Enabled aus.
- Klicken Sie auf Save.
- Wählen Sie im Abschnitt API Stage Association Ihre API und dann die Stufe aus, die Sie im vorherigen Schritt erstellt haben.
- Klicken Sie auf Add.
- Notieren Sie den API key. Sie benötigen ihn, wenn Sie die mobile Anwendung ausführen.
- Wählen Sie in der Amazon Cognito-Konsole Ihren Identitäts-Pool aus.
- Klicken Sie auf Edit Identity Pool.
- Wählen Sie die vom CloudFormation-Stapel erstellte MobileClientRole sowohl für die Unauthenticated role als auch für die Authenticated role aus. In den Ausgaben des Stapels wird der vollständige ARN für die Rolle bereitgestellt.
- Klicken Sie auf Save Changes.
Um die bereitgestellte iOS-Beispielanwendung auszuführen, ist Mac OS X 10.10 (Yosemite) oder eine neuere Version erforderlich. Es müssen ebenfalls die neuesten Versionen von Xcode und Cocoa Pods installiert sein.
-
Sehen Sie sich den Quellcode für das ios-sample in diesem Repository an oder laden Sie ihn herunter.
-
Aktualisieren Sie "MobileBackendIOS/Constants.swift" dahingehend, dass die Werte für Ihre Backend-Bereitstellung enthalten sind. Sie finden die meisten der Werte in den Ausgaben des CloudFormation-Stapels. Der API Gateway-Schlüssel und die Werte der Endpunkt-URL stehen in der AWS Management Console in den Details Ihrer API zur Verfügung.
-
Führen Sie Cocoa Pods vom Stammverzeichnis "ios-sample" aus.
pod install
-
Öffnen Sie die generierte Datei "MobileBackendIOS.xcworkspace" in Xcode.
open -a Xcode MobileBackendIOS.xcworkspace
-
Erstellen Sie das Projekt in Xcode, indem Sie auf die Wiedergabe-Schaltfläche oben im Fenster klicken.
Die Beispielanwendung bietet zwei Funktionen: Hochladen eines Bildes und Posten einer Notiz.
- Wählen Sie in der Anwendung Upload Image aus.
- Wählen Sie das Kamerasymbol und ein Bild aus den eigenen Aufnahmen aus und klicken Sie dann auf Choose.
- Klicken Sie auf die Schaltfläche Upload.
Im Ausgabebereich von Xcode sollten Sie einen Protokolleintrag sehen, der angibt, dass das Bild zu Amazon S3 hochgeladen wurde.
Sie können ebenfalls den vom CloudFormation-Stapel erstellten Bucket mithilfe der AWS Management Console durchsuchen, um zu überprüfen, ob das Bild ordnungsgemäß hochgeladen wurde.
- Wählen Sie Post a Note aus.
- Geben Sie eine Überschrift und Text in die Notiz ein.
- Klicken Sie auf Save Note.
Im Ausgabebereich von Xcode sollten Sie einen Protokolleintrag sehen, der angibt, dass die Notiz erfolgreich gespeichert wurde.
Beim Hochladen der Notiz wird die "NotesApiFunction" von der mobilen Anwendung aufgerufen. Sie können die Protokolle für diese Funktion in Amazon CloudWatch anzeigen.
Wenn die Funktion erfolgreich aufgerufen wurde, fügt sie der im CloudFormation-Stapel erstellten DynamoDB-Tabelle einen Eintrag hinzu. Sie können überprüfen, ob die Notiz, die Sie in der Anwendung gepostet haben, in der erstellten Tabelle vorhanden ist.
Wenn die Notiz in der DynamoDB-Tabelle vorhanden ist, wird dem Stream der Tabelle abschließend ein Datensatz hinzugefügt, der wiederum von der "DynamoStreamHandlerFunction" verarbeitet wird. Sie können die Protokolle für diese Funktion in CloudWatch aufrufen und überprüfen, ob der von Ihnen erstellten CloudSearch-Domain ein neues Dokument hinzugefügt wurde.
Gehen Sie wie folgt vor, um alle in diesem Beispiel erstellten Ressourcen zu entfernen:
- Löschen Sie alle Objekte aus dem vom CloudFormation-Stapel erstellten S3-Bucket.
- Löschen Sie den CloudFormation-Stapel.
- Löschen Sie den Identitäts-Pool für Amazon Cognito, das API Gateway und die CloudSearch-Domain.
- Löschen Sie die CloudWatch-Protokollgruppen, die mit den einzelnen vom CloudFormation-Stapel erstellten Lambda-Funktionen verknüpft sind.
-
NotesApiFunction – eine Funktion, die von der mobilen Anwendung gepostete Notizen über das API Gateway verarbeitet.
-
SearchApiFunction – eine Funktion, die die CloudSearch-Domain verwendet, um indizierte Notizen basierend auf Suchbegriffen zu finden.
-
DynamoStreamHandlerFunction – eine Funktion, die der bereitgestellten CloudSearch-Domain ein indiziertes Dokument basierend auf den Datensätzen im "PhotoNotesTable"-Stream hinzufügt.
-
NotesApiRole – eine Rolle für die "NotesApiFunction". Mit dieser Rolle wird die Berechtigung zur Protokollerstellung und zur Bearbeitung von Elementen im "PhotoNotesTable" erteilt.
-
SearchApiRole – eine Rolle für die "SearchApiFunction". Mit dieser Rolle werden Berechtigungen für die Protokollerstellung und die Suche in der bereitgestellten CloudSearch-Domain erteilt.
-
DynamoStreamHandlerRole – eine Rolle für die "DynamoStreamHandlerFunction". Mit dieser Rolle werden Berechtigungen für die Protokollerstellung und zum Hinzufügen von Dokumenten in der bereitgestellten CloudSearch-Domain erteilt.
-
MobileClientRole – eine Rolle, die von Ihrem Identitäts-Pool für Amazon Cognito sowohl für nicht authentifizierte als auch für authentifizierte Benutzer verwendet wird. Diese Rolle bietet Zugriff auf die bereitgestellte REST-API in API Gateway und erteilt Berechtigungen zum Ablegen von Objekten im "MobileUploadsBucket".
-
MobileUploadsBucket – ein S3-Bucket für von Benutzern hochgeladene Fotos.
-
CloudFrontDistribution – eine CDN-Verteilung, in der "MobileUploadsBucket" als ein Ausgangspunkt konfiguriert ist.
-
PhotoNotesTable – eine DynamoDB-Tabelle, die von Benutzern über die mobile Anwendung hochgeladene Notizen speichert.
-
ConfigTable – eine DynamoDB-Tabelle, die von den verschiedenen Lambda-Funktionen ausgelesene Konfigurationswerte enthält. Der Name dieser Tabelle, "MobileRefArchConfig", ist im Code jeder einzelnen Funktion hardcodiert und kann nicht ohne Aktualisierung des Codes geändert werden.
-
ConfigHelperStack – ein untergeordneter Stapel, der eine benutzerdefinierte Ressource zum Schreiben von Einträgen in "ConfigTable" erstellt. Dieser Stapel erstellt eine Lambda-Funktion und eine Ausführungsrolle, die "UpdateItem" eine Berechtigung für "ConfigTable" erteilt.
-
NotesTableConfig – ein Konfigurationseintrag, der den Namen "PhotoNotesTable" bezeichnet.
-
SearchEndpointConfig – ein Konfigurationseintrag, der den Suchendpunkt der als Parameter übergebenen CloudSearch-Domain bezeichnet.
-
DocumentEndpointConfig – ein Konfigurationseintrag, der den Dokumentendpunkt der als Parameter übergebenen CloudSearch-Domain bezeichnet.
Dieses Beispiel einer Referenzarchitektur ist unter Apache 2.0 lizensiert.