View a markdown version of this page

Herstellung AWS-Service Anfragen mit dem 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.

Herstellung AWS-Service Anfragen mit dem AWS SDK for Java 2.x

Verwenden von Service-Clients zum Stellen von Anfragen

Nachdem Sie die Schritte unter SDK einrichten abgeschlossen und verstanden haben, wie Service-Clients konfiguriert werden, sind Sie bereit, Anfragen an AWS Dienste wie Amazon S3, Amazon DynamoDB AWS Identity and Access Management, Amazon EC2 und mehr zu stellen.

Erstellen Sie einen Service-Client

Um eine Anfrage an einen zu stellen AWS-Service, müssen Sie zunächst einen Service-Client für diesen Dienst instanziieren, indem Sie die statische Factory-Methode verwenden. builder() Die builder() Methode gibt ein builder Objekt zurück, mit dem Sie den Service-Client anpassen können. Die praktischen Setter-Methoden geben das builder-Objekt zurück. So können Sie die Methodenaufrufe in Reihe schalten, was nicht nur einfacher ist, sondern auch für besser lesbaren Code sorgt. Nachdem Sie die gewünschten Eigenschaften konfiguriert haben, rufen Sie die build() Methode auf, um den Client zu erstellen.

Als Beispiel instanziiert der folgende Codeausschnitt ein Ec2Client Objekt als Service-Client für Amazon EC2.

Region region = Region.US_WEST_2; Ec2Client ec2Client = Ec2Client.builder() .region(region) .build();
Anmerkung

Service-Clients im SDK sind threadsicher. Um eine optimale Leistung zu erzielen, behandeln Sie sie wie langlebige Objekte. Jeder Client verfügt über seine eigene Verbindungspool-Ressource, die freigegeben wird, wenn der Client von der Speicherbereinigung entfernt wird.

Ein Service-Client-Objekt ist unveränderlich. Sie müssen also für jeden Service, an den Sie Anfragen stellen, einen neuen Client erstellen, oder wenn Sie eine andere Konfiguration für Anfragen an denselben Service verwenden möchten.

Die Angabe von Region im Service Client Builder ist nicht für alle AWS Dienste erforderlich. Es empfiehlt sich jedoch, die Region für die API-Aufrufe festzulegen, die Sie in Ihren Anwendungen tätigen. Weitere Informationen finden Sie unter AWS Regionsauswahl.

Standard-Client-Konfiguration

Die Client-Generatoren haben eine weitere Factory-Methode mit dem Namen create(). Diese Methode erstellt einen Service-Client mit der Standard-Konfiguration. Es verwendet die Standardanbieterkette zum Laden von Anmeldeinformationen und die AWS-Region Standardanbieterkette. Wenn die Anmeldeinformationen oder die Region nicht anhand der Umgebung ermittelt werden können, in der die Anwendung ausgeführt wird, schlägt der Aufruf von create fehl. Weitere Informationen dazu, wie das SDK die zu verwendenden Anmeldeinformationen und die zu verwendende Region bestimmt, finden Sie unter Verwenden von Anmeldeinformationen und Regionsauswahl.

Der folgende Codeausschnitt instanziiert beispielsweise ein DynamoDbClient Objekt als Service-Client für Amazon DynamoDB:

DynamoDbClient dynamoDbClient = DynamoDbClient.create();

Konfigurieren Sie Service-Clients

Einzelheiten zur Konfiguration von Service-Clients finden Sie unter Client-Konfiguration extern undClient-Konfiguration im Code.

Schließen Sie den Service-Client

Es hat sich bewährt, einen Service-Client für mehrere API-Dienstaufrufe während der Lebensdauer einer Anwendung zu verwenden. Wenn Sie jedoch einen Service-Client für eine einmalige Verwendung benötigen oder den Service-Client nicht mehr benötigen, schließen Sie ihn.

Rufen Sie die close() Methode auf, wenn der Service Client nicht mehr benötigt wird, um Ressourcen freizugeben.

ec2Client.close();

Wenn Sie einen Service-Client zur einmaligen Verwendung benötigen, können Sie den Service-Client in einer try -with-resources-Anweisung als Ressource instanziieren. Service-Clients implementieren die Autoclosable Schnittstelle, sodass das JDK die close() Methode automatisch am Ende der Anweisung aufruft.

Das folgende Beispiel zeigt, wie ein Service-Client für einen einmaligen Anruf verwendet wird. DerStsClient, der den aufruft, AWS -Security-Token-Service wird geschlossen, nachdem er die Konto-ID zurückgegeben hat.

import software.amazon.awssdk.services.sts.StsClient; String getAccountID() { try (StsClient stsClient = StsClient.create()) { return stsClient.getCallerIdentity().account(); } }

Anfragen stellen

Verwenden Sie den Service-Client, um Anfragen an die entsprechenden Stellen zu stellen AWS-Service.

Dieser Codeausschnitt zeigt beispielsweise, wie Sie ein RunInstancesRequest Objekt erstellen, um eine neue Amazon EC2-Instance zu erstellen:

// Create the request by using the fluid setter methods of the request builder. RunInstancesRequest runInstancesRequest = RunInstancesRequest.builder() .imageId(amiId) .instanceType(InstanceType.T1_MICRO) .maxCount(1) .minCount(1) .build(); // Use the configured request with the service client. RunInstancesResponse response = ec2Client.runInstances(runInstancesRequest);

Anstatt eine Anfrage zu erstellen und die Instance weiterzuleiten, bietet das SDK eine fließende API, mit der Sie eine Anfrage erstellen können. Mit der Fluent-API können Sie Java-Lambda-Ausdrücke verwenden, um die Anfrage „inline“ zu erstellen.

Das folgende Beispiel schreibt das vorherige Beispiel um, indem es die Version der runInstances Methode verwendet, die einen Builder verwendet, um die Anfrage zu erstellen.

// Create the request by using a lambda expression. RunInstancesResponse response = ec2.runInstances(r -> r .imageId(amiId) .instanceType(InstanceType.T1_MICRO) .maxCount(1) .minCount(1));

Verwenden Sie Anfragen, um die Client-Konfiguration zu überschreiben

Obwohl ein Service-Client unveränderlich ist, können Sie viele seiner Einstellungen auf Anforderungsebene überschreiben. Wenn Sie eine Anfrage erstellen, können Sie eine AwsRequestOverrideConfiguration Instanz bereitstellen, die die überschriebenen Einstellungen bereitstellt. Einige der Methoden, die Sie verwenden können, um Client-Einstellungen zu überschreiben, sind:

  • apiCallAttemptTimeout

  • apiCallTimeout

  • credentialProvider

  • compressionConfiguration

  • putHeader

Nehmen Sie als Beispiel für das Überschreiben einer Client-Einstellung mit einer Anfrage an, dass Sie den folgenden S3-Client haben, der Standardeinstellungen verwendet.

S3Client s3Client = S3Client.create();

Sie möchten eine große Datei herunterladen und sicherstellen, dass bei der Anforderung kein Timeout auftritt, bevor der Download abgeschlossen ist. Um dies zu erreichen, erhöhen Sie die Timeout-Werte nur für eine einzelne GetObject Anforderung, wie im folgenden Code gezeigt.

Standard API
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() .apiCallTimeout(Duration.ofSeconds(100L)) .apiCallAttemptTimeout(Duration.ofSeconds(25L)) .build(); GetObjectRequest request = GetObjectRequest.builder() .bucket("amzn-s3-demo-bucket") .key("demo-key") .overrideConfiguration(overrideConfiguration) .build(); s3Client.getObject(request, myPath);
Fluent API
s3Client.getObject(b -> b .bucket("amzn-s3-demo-bucket") .key("demo-key") .overrideConfiguration(c -> c .apiCallTimeout(Duration.ofSeconds(100L)) .apiCallAttemptTimeout(Duration.ofSeconds(25L))), myPath);

Umgang mit Antworten

Das SDK gibt für die meisten Dienstvorgänge ein Antwortobjekt zurück. Ihr Code kann die Informationen im Antwortobjekt gemäß Ihren Anforderungen verarbeiten.

Der folgende Codeausschnitt druckt beispielsweise die erste Instanz-ID aus, die zusammen mit dem RunInstancesResponse Objekt aus der vorherigen Anfrage zurückgegeben wurde.

RunInstancesResponse runInstancesResponse = ec2Client.runInstances(runInstancesRequest); System.out.println(runInstancesResponse.instances().get(0).instanceId());

Nicht alle Operationen geben jedoch ein Antwortobjekt mit dienstspezifischen Daten zurück. In diesen Situationen können Sie den HTTP-Antwortstatus abfragen, um zu erfahren, ob der Vorgang erfolgreich war.

Beispielsweise überprüft der Code im folgenden Codeausschnitt die HTTP-Antwort, um festzustellen, ob der DeleteContactList Betrieb von Amazon Simple Email Service erfolgreich war.

SesV2Client sesv2Client = SesV2Client.create(); DeleteContactListRequest request = DeleteContactListRequest.builder() .contactListName("ExampleContactListName") .build(); DeleteContactListResponse response = sesv2Client.deleteContactList(request); if (response.sdkHttpResponse().isSuccessful()) { System.out.println("Contact list deleted successfully"); } else { System.out.println("Failed to delete contact list. Status code: " + response.sdkHttpResponse().statusCode()); }