

 Das [AWS SDK für JavaScript V3-API-Referenzhandbuch](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) beschreibt detailliert alle API-Operationen für die AWS SDK für JavaScript Version 3 (V3). 

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.

# Erste Schritte in React Native
<a name="getting-started-react-native"></a>

Dieses Tutorial zeigt Ihnen, wie Sie mit React Native [CLI eine React Native-App](https://reactnative.dev/docs/environment-setup) erstellen können. 

![\[JavaScript code example that applies to React Native.\]](http://docs.aws.amazon.com/de_de/sdk-for-javascript/v3/developer-guide/images/browsericon.png)

**Dieses Tutorial zeigt dir:**
+ So installieren und integrieren Sie das AWS SDK für Module der JavaScript Version 3 (V3), die Ihr Projekt verwendet.
+ So schreiben Sie Code, der eine Verbindung zu Amazon Simple Storage Service (Amazon S3) herstellt, um einen Amazon S3-Bucket zu erstellen und zu löschen.

## Das Szenario
<a name="getting-started-react-scenario"></a>

Amazon S3 ist ein Cloud-Service, mit dem Sie beliebige Datenmengen zu jeder Zeit und von überall im Internet speichern und abrufen können. React Native ist ein Entwicklungsframework, mit dem Sie mobile Anwendungen erstellen können. Dieses Tutorial zeigt Ihnen, wie Sie eine React Native-App erstellen können, die eine Verbindung zu Amazon S3 herstellt, um einen Amazon S3 S3-Bucket zu erstellen und zu löschen.

Die App verwendet das folgende AWS SDK für JavaScript APIs:
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/cognito-identity/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/cognito-identity/) Konstruktor
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/s3/) Konstruktor

## Erforderliche Aufgaben
<a name="getting-started-react-setup"></a>

**Anmerkung**  
Wenn Sie bereits einen der folgenden Schritte durch andere Tutorials oder eine vorhandene Konfiguration ausgeführt haben, überspringen Sie diese Schritte.

Dieser Abschnitt enthält die minimale Einrichtung, die erforderlich ist, um dieses Tutorial abzuschließen. Sie sollten dies nicht als vollständiges Setup betrachten. Sehen Sie dazu [Richten Sie das SDK ein für JavaScript](setting-up.md).
+ Installieren Sie die folgenden Tools:
  + [npm](https://docs.npmjs.com/getting-started/)
  + [Node.js](https://nodejs.org/en/download/)
  + [Xcode](https://developer.apple.com/xcode/), wenn Sie auf iOS testen
  + [Android Studio](https://developer.android.com/studio/), wenn Sie auf Android testen
+ Richten Sie Ihre [React Native-Entwicklungsumgebung](https://reactnative.dev/docs/environment-setup) ein
+ Richten Sie die Projektumgebung ein, um diese TypeScript Node-Beispiele auszuführen, und installieren Sie das erforderliche AWS SDK für Module JavaScript und Module von Drittanbietern. Folgen Sie den Anweisungen auf [ GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/nodegetstarted/README.md).
+ Sie müssen festlegen, wie sich Ihr Code AWS bei der Entwicklung mit AWS Diensten authentifiziert. Weitere Informationen finden Sie unter [SDK-Authentifizierung mit AWS](getting-your-credentials.md).
**Anmerkung**  
Die IAM-Rolle für dieses Beispiel sollte so eingestellt sein, dass sie **FullAccessAmazonS3-Berechtigungen** verwendet.

## Schritt 1: Erstellen Sie einen Amazon Cognito Cognito-Identitätspool
<a name="getting-started-react-create-identity-pool"></a>

In dieser Übung erstellen und verwenden Sie einen Amazon Cognito Cognito-Identitätspool, um nicht authentifizierten Zugriff auf Ihre App für den Amazon S3 S3-Service bereitzustellen. Durch die Erstellung eines Identitätspools werden auch zwei AWS Identity and Access Management (IAM-) Rollen erstellt, eine zur Unterstützung von Benutzern, die von einem Identitätsanbieter authentifiziert wurden, und die andere zur Unterstützung nicht authentifizierter Gastbenutzer.

In dieser Übung arbeiten wir nur mit der Rolle für nicht authentifizierte Benutzer, um uns auf die Aufgabe zu konzentrieren. Sie können die Unterstützung für einen Identitätsanbieter und authentifizierte Benutzer zu einem späteren Zeitpunkt integrieren.

**So erstellen Sie einen Amazon Cognito Cognito-Identitätspool**

1. Melden Sie sich bei der Amazon Cognito-Konsole an AWS-Managementkonsole und öffnen Sie die Amazon Cognito Cognito-Konsole in der [Amazon Web Services Console](https://console.aws.amazon.com/cognito/).

1. Wählen Sie auf der Eröffnungsseite der Konsole **Identity Pools** aus.

1. Wählen Sie auf der nächsten Seite die Option **Create new identity pool (Neuen Identitäten-Pool erstellen)** aus.
**Anmerkung**  
Wenn es keine anderen Identitätspools gibt, überspringt die Amazon Cognito Cognito-Konsole diese Seite und öffnet stattdessen die nächste Seite.

1. Wählen Sie unter **Vertrauensstellung im Identitätspool konfigurieren** die Option **Gastzugriff** für die Benutzerauthentifizierung aus.

1. Wählen **Sie unter Berechtigungen konfigurieren** die Option **Neue IAM-Rolle erstellen** aus und geben Sie einen Namen (z. B. *getStartedReactRolle*) in den **IAM-Rollennamen** ein.

1. Geben **Sie unter Eigenschaften konfigurieren** einen Namen (z. B. *getStartedReactPool*) im Feld **Identitätspoolname ein**.

1. Bestätigen Sie unter **Überprüfen und erstellen** die Auswahl, die Sie für Ihren neuen Identitätspool getroffen haben. Wählen Sie **Bearbeiten**, um zum Assistenten zurückzukehren und Einstellungen zu ändern. Wählen Sie danach **Identitätspool erstellen** aus.

1. Notieren Sie sich die Identitätspool-ID und die Region für diesen neu erstellten Identitätspool. Sie benötigen diese Werte als Ersatz für *region* und *identityPoolId* in Ihrem Browser-Skript.

Nachdem Sie Ihren Amazon Cognito Cognito-Identitätspool erstellt haben, können Sie Berechtigungen für Amazon S3 hinzufügen, die von Ihrer React Native-App benötigt werden.

## Schritt 2: Fügen Sie der erstellten IAM-Rolle eine Richtlinie hinzu
<a name="getting-started-react-iam-role"></a>

Um den Browser-Skriptzugriff auf Amazon S3 zum Erstellen und Löschen eines Amazon S3 S3-Buckets zu aktivieren, verwenden Sie die nicht authentifizierte IAM-Rolle, die für Ihren Amazon Cognito Cognito-Identitätspool erstellt wurde. Dazu müssen Sie der Rolle eine IAM-Richtlinie hinzufügen. Weitere Informationen zu IAM-Rollen finden Sie unter [Creating a Role to Delegate Permissions to an AWS Service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) im *IAM-Benutzerhandbuch*.

**Um der IAM-Rolle, die nicht authentifizierten Benutzern zugeordnet ist, eine Amazon S3 S3-Richtlinie hinzuzufügen**

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die IAM-Konsole unter. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. Wählen Sie im linken Navigationsbereich **Roles** aus.

1. Wählen Sie den Namen der Rolle aus, die Sie ändern möchten (z. B. *getStartedRole*), und wählen Sie dann die Registerkarte **Berechtigungen**.

1. Wählen Sie **Berechtigungen hinzufügen** aus und wählen Sie dann **Richtlinien anfügen** aus.

1. Suchen Sie auf der Seite „**Berechtigungen hinzufügen**“ für diese Rolle nach dem Kontrollkästchen für **AmazonS3 und aktivieren Sie es. ReadOnlyAccess**
**Anmerkung**  
Sie können diesen Prozess verwenden, um den Zugriff auf jeden AWS Dienst zu aktivieren.

1. Wählen Sie **Add permissions** (Berechtigungen hinzufügen) aus.

Nachdem Sie Ihren Amazon Cognito Cognito-Identitätspool erstellt und Ihrer IAM-Rolle für nicht authentifizierte Benutzer Berechtigungen für Amazon S3 hinzugefügt haben, können Sie die App erstellen.

## Schritt 3: App erstellen mit create-react-native-app
<a name="react-prerequisites"></a>

Erstellen Sie eine React Native-App, indem Sie den folgenden Befehl ausführen.

```
npx react-native init ReactNativeApp --npm
```

## Schritt 4: Installieren Sie das Amazon S3 S3-Paket und andere Abhängigkeiten
<a name="getting-started-react-install-dependencies"></a>

Führen Sie im Verzeichnis des Projekts die folgenden Befehle aus, um das Amazon S3 S3-Paket zu installieren.

```
npm install @aws-sdk/client-s3
```

Mit diesem Befehl wird das Amazon S3-Paket in Ihrem Projekt installiert und aktualisiert`package.json`, sodass Amazon S3 als Projektabhängigkeit aufgeführt wird. Informationen zu diesem Paket finden Sie, indem Sie auf der [https://www.npmjs.com/](https://www.npmjs.com/) npm-Website nach "@aws -sdk“ suchen.

Diese Pakete und der zugehörige Code werden im `node_modules`-Unterverzeichnis Ihres Projekts installiert.

Weitere Informationen zur Installation von Paketen mit Node.js finden Sie unter [Pakete lokal herunterladen und installieren](https://docs.npmjs.com/downloading-and-installing-packages-locally) und [Module der Datei Node.js erstellen](https://docs.npmjs.com/creating-node-js-modules) auf der [npm-Website (Node.js package manager](https://www.npmjs.com/)). Informationen zum Herunterladen und Installieren des AWS SDK für finden Sie JavaScript unter[Installieren Sie das SDK für JavaScript](setting-up.md#installing-jssdk).

Installieren Sie andere Abhängigkeiten, die für die Authentifizierung erforderlich sind.

```
npm install @aws-sdk/client-cognito-identity @aws-sdk/credential-provider-cognito-identity
```

## Schritt 5: Schreiben Sie den React Native-Code
<a name="getting-started-react-write-native-code"></a>

Fügen Sie den folgenden Code zum hinzu`App.tsx`. Ersetzen Sie *identityPoolId* und *region* durch die Identitätspool-ID und die Region, in der Ihr Amazon S3 S3-Bucket erstellt wird.

```
import React, { useCallback, useState } from "react";
import { Button, StyleSheet, Text, TextInput, View } from "react-native";
import "react-native-get-random-values";
import "react-native-url-polyfill/auto";

import {
  S3Client,
  CreateBucketCommand,
  DeleteBucketCommand,
} from "@aws-sdk/client-s3";
import { fromCognitoIdentityPool } from "@aws-sdk/credential-providers";

const client = new S3Client({
  // The AWS Region where the Amazon Simple Storage Service (Amazon S3) bucket will be created. Replace this with your Region.
  region: "us-east-1",
  credentials: fromCognitoIdentityPool({
    // Replace the value of 'identityPoolId' with the ID of an Amazon Cognito identity pool in your Amazon Cognito Region.
    identityPoolId: "us-east-1:edbe2c04-7f5d-469b-85e5-98096bd75492",
    // Replace the value of 'region' with your Amazon Cognito Region.
    clientConfig: { region: "us-east-1" },
  }),
});

enum MessageType {
  SUCCESS = 0,
  FAILURE = 1,
  EMPTY = 2,
}

const App = () => {
  const [bucketName, setBucketName] = useState("");
  const [msg, setMsg] = useState<{ message: string; type: MessageType }>({
    message: "",
    type: MessageType.EMPTY,
  });

  const createBucket = useCallback(async () => {
    setMsg({ message: "", type: MessageType.EMPTY });

    try {
      await client.send(new CreateBucketCommand({ Bucket: bucketName }));
      setMsg({
        message: `Bucket "${bucketName}" created.`,
        type: MessageType.SUCCESS,
      });
    } catch (e) {
      console.error(e);
      setMsg({
        message: e instanceof Error ? e.message : "Unknown error",
        type: MessageType.FAILURE,
      });
    }
  }, [bucketName]);

  const deleteBucket = useCallback(async () => {
    setMsg({ message: "", type: MessageType.EMPTY });

    try {
      await client.send(new DeleteBucketCommand({ Bucket: bucketName }));
      setMsg({
        message: `Bucket "${bucketName}" deleted.`,
        type: MessageType.SUCCESS,
      });
    } catch (e) {
      setMsg({
        message: e instanceof Error ? e.message : "Unknown error",
        type: MessageType.FAILURE,
      });
    }
  }, [bucketName]);

  return (
    <View style={styles.container}>
      {msg.type !== MessageType.EMPTY && (
        <Text
          style={
            msg.type === MessageType.SUCCESS
              ? styles.successText
              : styles.failureText
          }
        >
          {msg.message}
        </Text>
      )}
      <View>
        <TextInput
          onChangeText={(text) => setBucketName(text)}
          autoCapitalize={"none"}
          value={bucketName}
          placeholder={"Enter Bucket Name"}
        />
        <Button color="#68a0cf" title="Create Bucket" onPress={createBucket} />
        <Button color="#68a0cf" title="Delete Bucket" onPress={deleteBucket} />
      </View>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center",
  },
  successText: {
    color: "green",
  },
  failureText: {
    color: "red",
  },
});

export default App;
```

Der Code importiert zunächst die erforderlichen React-, React Native- und AWS SDK-Abhängigkeiten.

In der Funktions-App:
+ Das S3Client-Objekt wird erstellt, wobei die Anmeldeinformationen mithilfe des zuvor erstellten Amazon Cognito Identity Pool angegeben werden.
+ Die Methoden `createBucket` und das `deleteBucket` Erstellen bzw. Löschen des angegebenen Buckets.
+ Die React Native-Ansicht zeigt ein Texteingabefeld an, in dem der Benutzer einen Amazon S3 S3-Bucket-Namen angeben kann, sowie Schaltflächen zum Erstellen und Löschen des angegebenen Amazon S3 S3-Buckets.

Die vollständige JavaScript Seite ist [hier verfügbar GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/reactnative/ReactNativeApp/App.tsx).

## Schritt 6: Führen Sie das Beispiel aus
<a name="getting-started-react-native-run-sample"></a>

**Anmerkung**  
Denken Sie daran, sich anzumelden\$1 Wenn Sie IAM Identity Center zur Authentifizierung verwenden, denken Sie daran, sich mit dem AWS CLI `aws sso login` folgenden Befehl anzumelden.

Um das Beispiel auszuführen, führen Sie den `android` Befehl `web``ios`, oder mit npm aus.

Hier ist ein Beispiel für die Ausgabe eines `ios` Befehls, der auf macOS ausgeführt wird.

```
$ npm run ios

> ReactNativeApp@0.0.1 ios /Users/trivikr/workspace/ReactNativeApp
> react-native run-ios

info Found Xcode workspace "ReactNativeApp.xcworkspace"
info Launching iPhone 11 (iOS 14.2)
info Building (using "xcodebuild -workspace ReactNativeApp.xcworkspace -configuration Debug -scheme ReactNativeApp -destination id=706C1A97-FA38-407D-AD77-CB4FCA9134E9")
success Successfully built the app
info Installing "/Users/trivikr/Library/Developer/Xcode/DerivedData/ReactNativeApp-cfhmsyhptwflqqejyspdqgjestra/Build/Products/Debug-iphonesimulator/ReactNativeApp.app"
info Launching "org.reactjs.native.example.ReactNativeApp"

success Successfully launched the app on the simulator
```

Hier ist ein Beispiel für die Ausgabe eines `android` Befehls, der auf macOS ausgeführt wird.

```
$ npm run android

> ReactNativeApp@0.0.1 android
> react-native run-android

info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 970 file(s) to forward-jetify. Using 12 workers...
info Starting JS server...
info Launching emulator...
info Successfully launched emulator.
info Installing the app...

> Task :app:stripDebugDebugSymbols UP-TO-DATE
Compatible side by side NDK version was not found.

> Task :app:installDebug
02:18:38 V/ddms: execute: running am get-config
02:18:38 V/ddms: execute 'am get-config' on 'emulator-5554' : EOF hit. Read: -1
02:18:38 V/ddms: execute: returning
Installing APK 'app-debug.apk' on 'Pixel_3a_API_30_x86(AVD) - 11' for app:debug
02:18:38 D/app-debug.apk: Uploading app-debug.apk onto device 'emulator-5554'
02:18:38 D/Device: Uploading file onto device 'emulator-5554'
02:18:38 D/ddms: Reading file permission of /Users/trivikr/workspace/ReactNativeApp/android/app/build/outputs/apk/debug/app-debug.apk as: rw-r--r--
02:18:40 V/ddms: execute: running pm install -r -t "/data/local/tmp/app-debug.apk"
02:18:41 V/ddms: execute 'pm install -r -t "/data/local/tmp/app-debug.apk"' on 'emulator-5554' : EOF hit. Read: -1
02:18:41 V/ddms: execute: returning
02:18:41 V/ddms: execute: running rm "/data/local/tmp/app-debug.apk"
02:18:41 V/ddms: execute 'rm "/data/local/tmp/app-debug.apk"' on 'emulator-5554' : EOF hit. Read: -1
02:18:41 V/ddms: execute: returning
Installed on 1 device.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 6s
27 actionable tasks: 2 executed, 25 up-to-date
info Connecting to the development server...
8081
info Starting the app on "emulator-5554"...
Starting: Intent { cmp=com.reactnativeapp/.MainActivity }
```

Geben Sie den Bucket-Namen ein, den Sie erstellen oder löschen möchten, und klicken Sie entweder auf **Bucket erstellen** oder **Bucket löschen**. Der entsprechende Befehl wird an Amazon S3 gesendet und eine Erfolgs- oder Fehlermeldung wird angezeigt.

![\[Bucket creation success message with options to create or delete a bucket.\]](http://docs.aws.amazon.com/de_de/sdk-for-javascript/v3/developer-guide/images/react-app-running.png)


## Mögliche Erweiterungen
<a name="getting-started-react-native-variations"></a>

Im Folgenden finden Sie Varianten dieser Anwendung, mit denen Sie die Verwendung des AWS SDK JavaScript in einer React Native-App weiter untersuchen können.
+ Fügen Sie eine Schaltfläche hinzu, um Amazon S3 S3-Buckets aufzulisten, und stellen Sie neben jedem aufgelisteten Bucket eine Schaltfläche zum Löschen bereit.
+ Fügen Sie eine Schaltfläche hinzu, um ein Textobjekt in einen Bucket einzufügen.
+ Integrieren Sie einen externen Identitätsanbieter wie Facebook oder Amazon, um ihn mit der authentifizierten IAM-Rolle zu verwenden.