Betten Sie ein QuickSight Amazon-Dashboard in eine lokale Angular-Anwendung ein - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Betten Sie ein QuickSight Amazon-Dashboard in eine lokale Angular-Anwendung ein

Erstellt von Sean Griffin (AWS) und Milena Godau (AWS)

Übersicht

Dieses Muster bietet Anleitungen für die Einbettung eines QuickSight Amazon-Dashboards in eine lokal gehostete Angular-Anwendung zur Entwicklung oder zum Testen. Die eingebettete Analysefunktion in unterstützt diese Funktionalität QuickSight nicht nativ. Es erfordert ein QuickSight Konto mit einem vorhandenen Dashboard und Kenntnisse von Angular.

Wenn Sie mit eingebetteten QuickSight Dashboards arbeiten, müssten Sie Ihre Anwendung normalerweise auf einem Webserver hosten, um das Dashboard anzeigen zu können. Dies erschwert die Entwicklung, da Sie Ihre Änderungen kontinuierlich auf den Webserver übertragen müssen, um sicherzustellen, dass sich alles korrekt verhält. Dieses Muster zeigt, wie Sie einen lokal gehosteten Server ausführen und QuickSight eingebettete Analysen verwenden, um den Entwicklungsprozess einfacher und effizienter zu gestalten.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Dieses Muster bietet Anleitungen zum Einbetten eines QuickSight Dashboards mithilfe des Authentifizierungstyps ANONYMOUS (öffentlich zugänglich). Wenn Sie AWS Identity and Access Management (IAM) oder die QuickSight Authentifizierung mit Ihren eingebetteten Dashboards verwenden, gilt der angegebene Code nicht. Die Schritte zum Hosten der Angular-Anwendung im Abschnitt Epics sind jedoch weiterhin gültig.

  • Für die Verwendung der GetDashboardEmbedUrlAPI mit dem ANONYMOUS Identitätstyp ist ein QuickSight Kapazitätspreisplan erforderlich.

Versionen

Architektur

Technologie-Stack

  • Eckiges Frontend

  • Backend für AWS Lambda und Amazon API Gateway

Architektur

In dieser Architektur ermöglicht das HTTP APIs im API Gateway der lokalen Angular-Anwendung, die Lambda-Funktion aufzurufen. Die Lambda-Funktion gibt die URL zum Einbetten des QuickSight Dashboards zurück.

Architektur für die Einbettung eines QuickSight Dashboards in eine lokale Angular-Anwendung

Automatisierung und Skalierung

Sie können die Backend-Bereitstellung mithilfe von AWS CloudFormation oder AWS Serverless Application Model (AWS SAM) automatisieren.

Tools

Tools

  • Angular CLI ist ein Befehlszeilenschnittstellentool, mit dem Sie Angular-Anwendungen direkt von einer Befehlsshell aus initialisieren, entwickeln, einrichten und verwalten können.

  • QuickSight Das Embedding SDK wird verwendet, um Dashboards in Ihren HTML-Code einzubetten. QuickSight

  • mkcert ist ein einfaches Tool zum Erstellen lokal vertrauenswürdiger Entwicklungszertifikate. Es erfordert keine Konfiguration. mkcert ist erforderlich, da nur HTTPS-Anfragen zum Einbetten von Dashboards QuickSight zulässig sind.

AWS-Services

  • Amazon API Gateway ist ein AWS-Service für die Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung. 

  • AWS Lambda ist ein Rechenservice, der die Ausführung von Code unterstützt, ohne Server bereitzustellen oder zu verwalten. Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch – von einigen Anforderungen pro Tag bis zu Tausenden pro Sekunde. Sie bezahlen nur für die Datenverarbeitungszeit, die Sie wirklich nutzen und es werden keine Gebühren in Rechnung gestellt, wenn Ihr Code nicht ausgeführt wird. 

  • Amazon QuickSight ist ein Geschäftsanalysedienst, mit dem Sie Visualisierungen erstellen, Ad-hoc-Analysen durchführen und Geschäftserkenntnisse aus Ihren Daten gewinnen können.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine EmbedUrl Richtlinie.

Erstellen Sie eine IAM-Richtlinie mit QuicksightGetDashboardEmbedUrldem Namen und den folgenden Eigenschaften.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "quicksight:GetDashboardEmbedUrl", "quickSight:GetAnonymousUserEmbedUrl" ], "Resource": "*" } ] }
AWS-Administrator

So erstellen Sie die Lambda-Funktion:

1. Öffnen Sie in der Lambda-Konsole die Seite Funktionen.

2. Wählen Sie Create Function.

3. Wählen Sie Von Grund auf neu schreiben aus.

4. Geben Sie für Function name (Funktionsname) get-qs-embed-url ein.

5. Wählen Sie für Runtime (Laufzeit) die Option Python 3.9 aus.

6. Wählen Sie Create Function.

7. Kopieren Sie auf der Registerkarte Code den folgenden Code in die Lambda-Funktion.

import json import boto3 from botocore.exceptions import ClientError import time from os import environ qs = boto3.client('quicksight',region_name='us-east-1') sts = boto3.client('sts') ACCOUNT_ID = boto3.client('sts').get_caller_identity().get('Account') DASHBOARD_ID = environ['DASHBOARD_ID'] def getDashboardURL(accountId, dashboardId, quicksightNamespace, resetDisabled, undoRedoDisabled): try: response = qs.get_dashboard_embed_url( AwsAccountId = accountId, DashboardId = dashboardId, Namespace = quicksightNamespace, IdentityType = 'ANONYMOUS', SessionLifetimeInMinutes = 600, UndoRedoDisabled = undoRedoDisabled, ResetDisabled = resetDisabled ) return response except ClientError as e: print(e) return "Error generating embeddedURL: " + str(e) def lambda_handler(event, context): url = getDashboardURL(ACCOUNT_ID, DASHBOARD_ID, "default", True, True)['EmbedUrl'] return { 'statusCode': 200, 'url': url }

8. Wählen Sie Bereitstellen.

App-Developer

Fügen Sie die Dashboard-ID als Umgebungsvariable hinzu.

Fügen Sie Ihrer Lambda-Funktion DASHBOARD_ID als Umgebungsvariable hinzu:

  1. Wählen Sie auf der Registerkarte Konfiguration die Optionen Umgebungsvariablen, Bearbeiten, Umgebungsvariable hinzufügen aus.

  2. Fügen Sie mit dem Schlüssel eine Umgebungsvariable hinzuDASHBOARD_ID.

  3. Um den Wert von zu DASHBOARD_ID ermitteln, navigieren Sie zu Ihrem Dashboard QuickSight und kopieren Sie die UUID am Ende der URL in Ihren Browser. Wenn die URL beispielsweise lautethttps://us-east-1.quicksight.aws.amazon.com/sn/dashboards/<dashboard-id>, geben Sie den <dashboard-id> Teil der URL als Schlüsselwert an.

  4. Wählen Sie Speichern.

App-Developer

Fügen Sie Berechtigungen für die Lambda-Funktion hinzu.

Ändern Sie die Ausführungsrolle der Lambda-Funktion und fügen Sie ihr die QuicksightGetDashboardEmbedUrlRichtlinie hinzu.

  1. Wählen Sie auf der Registerkarte Konfiguration die Option Berechtigungen und dann den Rollennamen aus.

  2. Wählen Sie Richtlinien anhängen, suchen Sie nachQuicksightGetDashboardEmbedUrl, aktivieren Sie das entsprechende Kontrollkästchen und wählen Sie dann Richtlinie anhängen aus.

App-Developer

Testen Sie die Lambda-Funktion.

Erstellen Sie ein Testereignis und führen Sie es aus. Sie können die Vorlage „Hello World“ verwenden, da die Funktion keine der Daten des Testereignisses verwendet.

  1. Wählen Sie die Registerkarte Test.

  2. Geben Sie Ihrem Testereignis einen Namen und wählen Sie dann Speichern.

  3. Um Ihre Lambda-Funktion zu testen, wählen Sie Test. Die Antwort sollte in etwa so aussehen wie die folgende.

{ "statusCode": 200, "url": "\"https://us-east-1.quicksight.aws.amazon.com/embed/f1acc0786687783b9a4543a05ba929b3a/dashboards/... }
Anmerkung

Wie im Abschnitt Voraussetzungen und Einschränkungen erwähnt, muss für Ihr QuickSight Konto ein Preisplan für Sitzungskapazität gelten. Andernfalls wird bei diesem Schritt eine Fehlermeldung angezeigt.

App-Developer

Erstellen Sie eine API in API Gateway.

  1. Wählen Sie in der API Gateway Gateway-Konsole Create API und dann REST API, Build aus.

    • Geben Sie als API-Name einqs-embed-api.

    • Wählen Sie Create API (API erstellen) aus.

  2. Wählen Sie unter Aktionen die Option Methode erstellen aus.

    • Wählen Sie GET und bestätigen Sie mit dem Häkchen.

    • Wählen Sie Lambda-Funktion als Integrationstyp.

    • Geben get-qs-embed-url Sie für Lambda-Funktion den Wert ein.

    • Wählen Sie Speichern.

    • Wählen Sie im Feld Add Permission to Lambda Function die Option OK aus.

  3. Aktivieren Sie CORS.

    • Wählen Sie unter Aktionen die Option CORS aktivieren aus.

    • Geben Sie für Access-Control-Allow-Origin ein. 'https://my-qs-app.net:4200'

    • Wählen Sie „CORS aktivieren“ und ersetzen Sie die vorhandenen CORS-Header, und bestätigen Sie.

  4. Stellen Sie die API bereit.

    • Wählen Sie für Aktionen die Option Deploy API aus.

    • Wählen Sie für Deployment stage (Bereitstellungsstufe) [New Stage] ([Neue Stufe]) aus.

    • Geben Sie für Stage name (Stufenname) dev ein.

    • Wählen Sie Deploy (Bereitstellen) aus.

    • Kopieren Sie die Aufruf-URL.

Anmerkung

my-qs-app.netkann eine beliebige Domain sein. Wenn Sie einen anderen Domainnamen verwenden möchten, stellen Sie sicher, dass Sie die Access-Control-Allow-Origin-Informationen in Schritt 3 aktualisieren und in den nachfolgenden Schritten ändern. my-qs-app.net

App-Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die Anwendung mit der Angular CLI.

  1. Erstellen Sie die Anwendung.

    ng new quicksight-app --defaults cd quicksight-app/src/app
  2. Erstellen Sie die Dashboard-Komponente.

    ng g c dashboard
  3. Navigieren Sie zu Ihrer src/environments/environment.ts Datei und fügen Sie apiUrl: '<Invoke URL from previous steps>' sie dem Umgebungsobjekt hinzu.

    export const environment = { production: false, apiUrl: '<Invoke URL from previous steps>', };
App-Developer

Fügen Sie das QuickSight Embedding SDK hinzu.

  1. Installieren Sie das QuickSight Embedding SDK, indem Sie den folgenden Befehl im Stammordner Ihres Projekts ausführen.

    npm i amazon-quicksight-embedding-sdk
  2. Erstellen Sie eine neue decl.d.ts Datei in dem src Ordner mit dem folgenden Inhalt.

    declare module 'amazon-quicksight-embedding-sdk';
App-Developer

Fügen Sie Ihrer Datei dashboard.component.ts Code hinzu.

import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import * as QuicksightEmbedding from 'amazon-quicksight-embedding-sdk'; import { environment } from "../../environments/environment"; import { take } from 'rxjs'; import { EmbeddingContext } from 'amazon-quicksight-embedding-sdk/dist/types'; import { createEmbeddingContext } from 'amazon-quicksight-embedding-sdk'; @Component({ selector: 'app-dashboard', templateUrl: './dashboard.component.html', styleUrls: ['./dashboard.component.scss'] }) export class DashboardComponent implements OnInit { constructor(private http: HttpClient) { } loadingError = false; dashboard: any; ngOnInit() { this.GetDashboardURL(); } public GetDashboardURL() { this.http.get(environment.apiUrl) .pipe( take(1), ) .subscribe((data: any) => this.Dashboard(data.url)); } public async Dashboard(embeddedURL: any) { var containerDiv = document.getElementById("dashboardContainer") || ''; const frameOptions = { url: embeddedURL, container: containerDiv, height: "850px", width: "100%", resizeHeightOnSizeChangedEvent: true, } const embeddingContext: EmbeddingContext = await createEmbeddingContext(); this.dashboard = embeddingContext.embedDashboard(frameOptions); } }
App-Developer

Fügen Sie Code zu Ihrer Datei dashboard.component.html hinzu.

Fügen Sie nun folgenden Code in die Datei src/app/dashboard/dashboard.component.html ein:

<div id="dashboardContainer"></div>
App-Developer

Ändern Sie Ihre app.component.html-Datei, um Ihre Dashboard-Komponente zu laden.

  1. Löschen Sie den Inhalt der Datei. src/app/app.component.html

  2. Fügen Sie Folgendes hinzu.

    <app-dashboard></app-dashboard>
App-Developer

Importieren Sie HttpClientModule in Ihre app.module.ts-Datei.

  1. Fügen Sie am Anfang der src/app/app.module.ts Datei Folgendes hinzu.

    import { HttpClientModule } from '@angular/common/http';
  2. Fügen Sie HttpClientModule das importsArray für Ihr hinzuAppModule.

App-Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Konfigurieren Sie mkcert.

Anmerkung

Die folgenden Befehle gelten für Unix- oder MacOS-Computer. Wenn Sie Windows verwenden, finden Sie im Abschnitt Zusätzliche Informationen den entsprechenden Befehl echo.

  1. Erstellen Sie eine lokale Zertifizierungsstelle (CA) auf Ihrem Computer.

    mkcert -install
  2. Konfigurieren my-qs-app.net Sie so, dass immer auf Ihren lokalen PC umgeleitet wird.

    echo "127.0.0.1 my-qs-app.net" | sudo tee -a /private/etc/hosts
  3. Stellen Sie sicher, dass Sie sich im src Verzeichnis des Angular-Projekts befinden.

    mkcert my-qs-app.net 127.0.0.1
App-Developer

Konfigurieren Sie QuickSight es so, dass Ihre Domain zugelassen wird.

  1. Wählen Sie in QuickSight der oberen rechten Ecke Ihren Namen aus und wählen Sie dann Manage Quicksight aus.

  2. Navigieren Sie zu Domains und Einbettung.

  3. https://my-qs-app.net:4200Als zulässige Domain hinzufügen.

AWS-Administrator

Testen Sie die Lösung.

Starten Sie einen lokalen Angular-Entwicklungsserver, indem Sie den folgenden Befehl ausführen.

ng serve --host my-qs-app.net --port 4200 --ssl --ssl-key "./src/my-qs-app.net-key.pem" --ssl-cert "./src/my-qs-app.net.pem" -o

Dadurch wird Secure Sockets Layer (SSL) mit dem benutzerdefinierten Zertifikat aktiviert, das Sie zuvor erstellt haben.

Wenn der Build abgeschlossen ist, wird ein Browserfenster geöffnet und Sie können Ihr eingebettetes QuickSight Dashboard anzeigen, das lokal in Angular gehostet wird.

App-Developer

Zugehörige Ressourcen

Zusätzliche Informationen

Wenn Sie Windows verwenden, führen Sie das Befehlszeilenfenster als Administrator aus und konfigurieren Sie mit dem folgenden Befehl, dass immer my-qs-app.net zu Ihrem lokalen PC umgeleitet wird. 

echo 127.0.0.1 my-qs-app.net >> %WINDIR%\System32\Drivers\Etc\Hosts