• Zuhause
  • Artikel
  • So richten Sie AWS DynamoDB Accelerator (DAX) mit Micronaut ein
Veröffentlicht am 20-02-2019

So richten Sie AWS DynamoDB Accelerator (DAX) mit Micronaut ein

AWS DynamoDB Accelerator (DAX) ist ein vollständig verwalteter In-Memory-Cache für DynamoDB. In Java kann die Verwendung von DAX vor dem Entwickler vollständig ausgeblendet werden, da der DAX-Java-Client dieselbe AmazonDynamoDB-Schnittstelle wie der direkte Client implementiert. Agorapulse Micronaut Libraries bietet sofortige Unterstützung mit einer einzigen Konfigurationseigenschaft, die zwischen DAX und direktem DynamoDB wechselt.

Cluster einrichten

Es gibt eine ausgezeichnete Dokumentation, die beschreibt, wie ein neuer DAX-Cluster erstellt wird. Bitte befolgen Sie zuerst die erforderlichen Schritte, um Ihren eigenen Cluster einzurichten.

DAX ist nur innerhalb von VPC verfügbar. Wenn Sie also DAX verwenden, müssen Sie Ihre Anwendungen und Funktionen automatisch in derselben VPC ausführen. Sie müssen auch ein DAX-Subnetz erstellen, das möglicherweise nur auf die privaten Subnetze Ihrer VPC zugreifen kann.

Die Zugriffskontrolle selbst basiert auf IAM-Rollen und -Richtlinien. Achten Sie auf die Rollen, die Ihre Anwendung oder Funktion einnimmt. Befolgen Sie die Anweisungen in diesem Artikel, um die Rollen richtig einzurichten:

Dies ist die Beispielrichtlinie aus dem obigen Artikel, in der der DAX-Befehl für einen bestimmten Cluster ausgeführt werden kann:

{
  "Version": "2012-10-17",
  "Aussage": [
    {
      "Aktion": [
        "dax: *"
      ]
      "Wirkung": "Zulassen",
      "Ressource": [
        "arn: aws: dax: us-west-2: 123456789012: cache / DAXCluster01"
      ]
    }
  ]
}

Micronaut-Funktion schreiben Mit DAX-Cluster arbeiten

Wir können eine Micronaut-Beispielfunktion über die Befehlszeile erstellen:

mn create-function dax-tester

Die AWS-Bibliothek von Micronaut ermöglicht den einfachen Wechsel zwischen DynamoDB und DAX mit einer einzigen Konfigurationseigenschaft aws.dax.endpoints. Zuerst müssen Sie jedoch die Datei build.gradle aktualisieren, um die erforderlichen Bibliotheken aufzunehmen:

Abhängigkeiten
    'com.agorapulse: micronaut-aws-sdk: 1.0.4.1' kompilieren
    comp.amazonaws: aws-java-sdk-dynamodb: 1.11.500
    'com.amazonaws: amazon-dax-client: 1.0.202017.0' kompilieren
}

Mit den vorhandenen Abhängigkeiten können wir eine einfache Entität erstellen:

@ DynamoDBTable (tableName = "DaxTestEntity")
öffentliche Klasse DaxTestEntity {

    @ DynamoDBHashKey
    private String hashKey;

    @ DynamoDBRangeKey
    privater Stringbereich;

    public String getHashKey () {
        return hashKey;
    }

    public void setHashKey (String hashKey) {
        this.hashKey = hashKey;
    }

    public DaxTestEntity withHashKey (String hashKey) {
        this.hashKey = hashKey;
        kehre das zurück;
    }

    public String getRange () {
        Rückholbereich;
    }

    public void setRange (String-Bereich) {
        this.range = Bereich;
    }

    public DaxTestEntity withRange (String-Bereich) {
        this.range = Bereich;
        kehre das zurück;
    }
}

Die Integration des Micronaut AWS SDK bietet DynamoDB-Datendienste, die die Arbeit mit Entitäten vereinfachen. Lassen Sie uns auch einen für DaxTestEntity erstellen:

@Service (DaxTestEntity.class)
öffentliche Schnittstelle DaxTestEntityService {

    DaxTestEntity save (Entität DaxTestEntity);
    DaxTestEntity load (String hashKey, String rangeKey);

}

Und schließlich können wir die einfache Funktion implementieren, um den Arbeitsaufbau zu testen

@FunctionBean ("Dax-Tester")
öffentliche Klasse DaxTesterFunction implementiert Supplier {

    private final DaxTestEntityService testEntityService;

    public DaxTesterFunction (DaxTestEntityService-Dienst) {
        this.testEntityService = Dienst;
    }

    @Überfahren
    public String get () {
        langer Start = System.currentTimeMillis ();


        DaxTestEntity entity = new DaxTestEntity ()
            .withHashKey ("Hash")
            .withRange ("Bereich"); {

    private final DaxTestEntityService testEntityService;

    public DaxTesterFunction (DaxTestEntityService-Dienst) {
        this.testEntityService = Dienst;
    }

    @Überfahren
    public String get () {
        langer Start = System.currentTimeMillis ();


        DaxTestEntity entity = new DaxTestEntity ()
            .withHashKey ("Hash")
            .withRange ("Bereich");
        testEntityService.save (Entität);

        für (int i = 0; i <1000; i ++) {
            requiredNonNull (testEntityService.load ("hash", "range"));
        }

        long finish = System.currentTimeMillis ();

        return "Geladenes Entity in" + (finish - start) + "ms.";
    }
}

Die Testfunktion speichert zuerst die Entität und lädt sie dann 1000 Mal. Sie sehen, dass im Beispielcode nichts DAX-spezifisch ist.

Bereitstellen der Micronaut-Funktion Arbeiten mit DAX

Um die Funktion bereitzustellen, müssen wir mindestens die Rolle in build.gradle auf eine Rolle mit den richtigen Rollen aktualisieren, um auf die VPC und den DAX zugreifen zu können:

Aufgabe implementieren (
    Typ: AWSLambdaMigrateFunctionTask,
    AbhängenOn: Schattenglas
) {
    // ...
    role = "arn: aws: iam :: $ {aws.accountId}: role / lambda_dax_vpc"
    // ...
}

Nach der Aktualisierung können Sie AWS mit einem einzigen Befehl bereitstellen (vorausgesetzt, Sie haben Ihre AWS-Berechtigungsnachweise für die Befehlszeile eingerichtet):

./gradew bereitstellen

Die Funktion würde nach der ersten Bereitstellung noch nicht funktionieren. Sie müssen sich an der AWS-Konsole anmelden und derselben VPC Lambda-Funktion hinzufügen. Um mit dem Cluster zu arbeiten, müssen Sie auch die Umgebungsvariable AWS_DAX_ENDPOINT setzen. Andernfalls wird die Funktion direkt für DynamoDB ausgeführt.

Sie können versuchen, die Funktion unter Verwendung beliebiger Test-Nutzdaten auszuführen. Sie können auch versuchen, mit und ohne AWS_DAX_ENDPOINT -Variable auszuführen, um die Auswirkungen zu sehen. Bei diesem Beispielprojekt erhielt ich etwa 5 Sekunden, wenn die Funktion direkt ausgeführt wurde, und etwa 1 Sekunde, wenn der DAX ordnungsgemäß eingerichtet wurde.

Beispielcode

Sie können das gesamte Beispielprojekt auf GitHub überprüfen:

Siehe auch

ÜberLG bringt neue Q- und K-Smartphones der Serie auf den Markt, darunter das Q60 mit DreifachkameraDVR- und NVR-VERGLEICHSTABELLECoda Story startet neuen Channel Covering "Authoritarian Tech"IoTeX General AMA - 22. Februar 2019Über Hapo