Konfiguration von Client-Endpunkten in der AWS SDK for Java 2.x - AWS SDK for Java 2.x

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.

Konfiguration von Client-Endpunkten in der AWS SDK for Java 2.x

Das SDK for Java 2.x bietet mehrere Möglichkeiten, Dienstendpunkte zu konfigurieren. Ein Endpunkt ist die URL, die das SDK für API-Aufrufe verwendet. AWS-Services Standardmäßig bestimmt das SDK automatisch den geeigneten Endpunkt für jeden Dienst auf der Grundlage des von AWS-Region Ihnen konfigurierten. Es gibt jedoch Szenarien, in denen Sie diese Endpunkte möglicherweise anpassen oder überschreiben müssen:

  • Arbeiten mit lokalen Dienstimplementierungen oder Dienstimplementierungen von Drittanbietern (z. B. LocalStack

  • Verbindung AWS-Services über einen Proxy- oder VPC-Endpunkt herstellen

  • Testen mit Service-Endpunkten in der Beta- oder Vorabversion

Optionen für die Konfiguration von Endpunkten

Das AWS SDK for Java 2.x bietet mehrere Möglichkeiten zur Konfiguration von Endpunkten:

  • Code-interne Konfiguration mithilfe des Service Client Builders

  • Externe Konfiguration mit Umgebungsvariablen

  • Externe Konfiguration mit JVM-Systemeigenschaften

  • Externe Konfiguration mit gemeinsam genutzter AWS Konfigurationsdatei

Code-interne Endpunktkonfiguration

Verwenden von endpointOverride

Der direkteste Weg, einen Endpunkt zu konfigurieren, ist die Verwendung der endpointOverride Methode im Service Client Builder. Diese Methode akzeptiert ein URI Objekt, das die benutzerdefinierte Endpunkt-URL darstellt.

Beispiel Einen benutzerdefinierten Endpunkt für einen Amazon S3 S3-Client einrichten
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .endpointOverride(URI.create("https://my-custom-s3-endpoint.example.com")) .build();

Bei der Verwendung endpointOverride müssen Sie immer noch eine Region für den Client angeben, auch wenn der Endpunkt explizit festgelegt ist. Die Region wird zum Signieren von Anfragen verwendet.

Endpunkterkennung

Einige AWS-Services unterstützen die Endpunkterkennung, bei der das SDK automatisch den optimalen zu verwendenden Endpunkt ermitteln kann. Sie können diese Funktion mithilfe der endpointDiscoveryEnabled Methode im Service Client Builder aktivieren oder deaktivieren.

Beispiel Aktivieren der Endpunkterkennung für einen DynamoDB-Client
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; DynamoDbClient dynamoDb = DynamoDbClient.builder() .region(Region.US_WEST_2) .endpointDiscoveryEnabled(true) .build();

Endpunktkonfiguration auf Anforderungsebene

In einigen Fällen müssen Sie möglicherweise den Endpunkt für eine bestimmte Anfrage überschreiben, während Sie denselben Client für andere Anfragen mit dem Standardendpunkt verwenden. Der AWS SDK for Java 2.x unterstützt dies durch das Überschreiben von Anfragen.

Beispiel Den Endpunkt für eine bestimmte Anfrage überschreiben
import software.amazon.awssdk.core.SdkRequest; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.http.SdkHttpRequest; S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .build(); // Create a request GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("my-bucket") .key("my-key") .overrideConfiguration(c -> c.putHeader("Host", "custom-endpoint.example.com")) .build(); // Execute the request with the custom endpoint s3.getObject(getObjectRequest);

Beachten Sie, dass das Überschreiben von Endpunkten auf Anforderungsebene begrenzt ist und möglicherweise nicht für alle Dienste oder Szenarien funktioniert. In den meisten Fällen wird empfohlen, die Endpunktkonfiguration auf Client-Ebene zu verwenden.

Konfiguration externer Endgeräte

Verwenden von -Umgebungsvariablen

Sie können Endpunkte mithilfe von Umgebungsvariablen konfigurieren. Das SDK unterstützt die dienstspezifische Endpunktkonfiguration mithilfe von Umgebungsvariablen im FormatAWS_ENDPOINT_URL_[SERVICE], in dem die Service-ID in Großbuchstaben [SERVICE] steht.

Beispiel Einen S3-Endpunkt mithilfe von Umgebungsvariablen einrichten
# For Linux/macOS export AWS_ENDPOINT_URL_S3=https://my-custom-s3-endpoint.example.com # For Windows set AWS_ENDPOINT_URL_S3=https://my-custom-s3-endpoint.example.com

Sie können auch ein globales Endpunkt-URL-Präfix oder -Suffix mithilfe der folgenden Umgebungsvariablen festlegen:

  • AWS_ENDPOINT_URL- Legt einen globalen Endpunkt für alle Dienste fest

  • AWS_ENDPOINT_URL_PREFIX- Fügt allen Dienstendpunkten ein Präfix hinzu

  • AWS_ENDPOINT_URL_SUFFIX- Fügt allen Dienstendpunkten ein Suffix hinzu

Verwendung von JVM-Systemeigenschaften

Sie können Endpoints auch mithilfe der JVM-Systemeigenschaften konfigurieren. Das Format ähnelt Umgebungsvariablen, verwendet jedoch eine andere Namenskonvention.

Beispiel Einen S3-Endpunkt mithilfe der JVM-Systemeigenschaften einrichten
java -Daws.endpointUrl.s3=https://my-custom-s3-endpoint.example.com -jar your-application.jar

Die globale Endpunktkonfiguration ist auch über die Systemeigenschaften verfügbar:

  • aws.endpointUrl- Legt einen globalen Endpunkt für alle Dienste fest

  • aws.endpointUrl.prefix- Fügt allen Dienstendpunkten ein Präfix hinzu

  • aws.endpointUrl.suffix- Fügt allen Dienstendpunkten ein Suffix hinzu

Verwenden Sie die gemeinsam genutzte Konfigurationsdatei AWS

Das unterstützt AWS SDK for Java 2.x auch die Endpunktkonfiguration über die gemeinsam genutzte AWS Konfigurationsdatei, die sich normalerweise unter ~/.aws/config (Linux/macOS) oder %USERPROFILE%\.aws\config (Windows) befindet. Informationen und Beispiele finden Sie im Referenzhandbuch AWS SDKs und im Tools-Referenzhandbuch.

Vorrang bei der Konfiguration

Wenn mehrere Endpunktkonfigurationen vorhanden sind, folgt das SDK dieser Rangfolge (von der höchsten zur niedrigsten):

  1. Überschreibungen auf Anforderungsebene (falls zutreffend)

  2. Konfiguration auf Client-Ebene über endpointOverride

  3. Umgebungsvariablen

  4. JVM-Systemeigenschaften

  5. Gemeinsam genutzte AWS Konfigurationsdatei

  6. Standardendpunkte basierend auf den konfigurierten AWS-Region

Dienstspezifische Endpunktkonfiguration

Einige AWS-Services bieten zusätzliche Optionen für die Endpunktkonfiguration, die für diesen Dienst spezifisch sind. Nachfolgend sind einige Beispiele aufgeführt:

Amazon S3 S3-Endpunktkonfiguration

Amazon S3 unterstützt mehrere Endpunktkonfigurationen über die S3Configuration Klasse:

  • dualstackEnabled- Aktiviert die IPv6 Unterstützung

  • accelerateModeEnabled- Aktiviert die S3-Übertragungsbeschleunigung

  • pathStyleAccessEnabled- Verwendet den Zugriff im Pfadstil anstelle des Zugriffs im virtuell gehosteten Stil

  • useArnRegionEnabled- Verwendet die Region aus einem ARN für regionsübergreifende Anfragen

  • fipsModeEnabled- Leitet Anfragen an FIPS-konforme Endpunkte weiter

Beispiel Konfiguration von S3-spezifischen Endpunktoptionen
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.S3Configuration; S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .serviceConfiguration(S3Configuration.builder() .accelerateModeEnabled(true) .dualstackEnabled(true) .pathStyleAccessEnabled(false) .fipsModeEnabled(true) .build()) .build();

DynamoDB-Endpunktkonfiguration

Für DynamoDB möchten Sie vielleicht Endpoint Discovery verwenden oder zu Testzwecken eine lokale Verbindung zu DynamoDB herstellen:

Beispiel Lokale Verbindung zu DynamoDB herstellen
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import java.net.URI; DynamoDbClient dynamoDb = DynamoDbClient.builder() .endpointOverride(URI.create("http://localhost:8000")) // The region is meaningless for DynamoDB local but required for the client builder. .region(Region.US_WEST_2) .build();

DynamoDB unterstützt auch die Verwendung von kontobasierten Endpunkten, die Sie im Code oder mithilfe externer Einstellungen konfigurieren können. Das folgende Beispiel zeigt, wie Sie die Verwendung von kontobasierten Endpunkten im Code deaktivieren können, wenn Sie den Client erstellen (die Standardeinstellungen werden bevorzugt):

DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .region(Region.US_EAST_1) .accountIdEndpointMode(AccountIdEndpointMode.DISABLED) .build();

Bewährte Methoden

Beachten Sie bei der Konfiguration von Endpunkten im die folgenden AWS SDK for Java 2.x bewährten Methoden:

  • Externe Konfiguration für umgebungsspezifische Endpunkte verwenden — Verwenden Sie Umgebungsvariablen, Systemeigenschaften oder die AWS Konfigurationsdatei für Endpunkte, die sich je nach Umgebung unterscheiden (Entwicklung, Test, Produktion).

  • Verwenden Sie die In-Code-Konfiguration für anwendungsspezifische Endpunkte — Verwenden Sie die endpointOverride Methode des Client Builders für Endpunkte, die für das Design Ihrer Anwendung spezifisch sind.

  • Immer eine Region angeben — Geben Sie auch beim Überschreiben von Endpunkten immer eine Region an, die für das Signieren von Anfragen verwendet wird.

  • Seien Sie vorsichtig mit globalen Endpunktüberschreibungen — Die Verwendung globaler Endpunktüberschreibungen kann sich auf alle Dienste auswirken, was möglicherweise nicht Ihren Vorstellungen entspricht.

  • Bedenken Sie die Auswirkungen auf die Sicherheit — Achten Sie bei der Verwendung benutzerdefinierter Endgeräte darauf, dass diese über angemessene Sicherheitsmaßnahmen verfügen, insbesondere für Produktionsworkloads.