

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan Amazon Rekognition dan Lambda untuk menandai aset di bucket Amazon S3
<a name="images-lambda-s3-tutorial"></a>

Dalam tutorial ini, Anda membuat AWS Lambda fungsi yang secara otomatis menandai aset digital yang terletak di bucket Amazon S3. Fungsi Lambda membaca semua objek dalam bucket Amazon S3 yang diberikan. Untuk setiap objek dalam bucket, itu meneruskan citra ke layanan Amazon Rekognition untuk menghasilkan serangkaian label. Setiap label digunakan untuk membuat tanda yang diterapkan pada citra. Setelah Anda menjalankan fungsi Lambda, itu secara otomatis membuat tanda berdasarkan semua citra dalam bucket Amazon S3 yang diberikan dan menerapkannya pada citra.

Sebagai contoh, asumsikan Anda menjalankan fungsi Lambda dan Anda memiliki citra ini dalam bucket Amazon S3.

![Gunung berapi meletus dengan lava cair mengalir di sisinya melawan langit berawan.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/v2-image-tutorial-picture.png)


Aplikasi kemudian secara otomatis membuat tanda dan menerapkannya pada citra.

![Tabel yang menunjukkan tag untuk melacak biaya penyimpanan, termasuk Alam, Gunung Berapi, Letusan, Lava, Gunung, dan Luar Ruangan dengan nilai numerik.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/v2-image-tutorial-results.png)


**catatan**  
Layanan yang Anda gunakan dalam tutorial ini adalah bagian dari Tingkat AWS Gratis. Ketika Anda telah menyelesaikan tutorial, kami merekomendasikan untuk mengakhiri sumber daya apa pun yang Anda buat selama tutorial sehingga Anda tidak dikenakan biaya.

Tutorial ini menggunakan AWS SDK for Java versi 2. Lihat [ GitHub repositori contoh SDK AWS Dokumentasi](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases) untuk tutorial Java V2 tambahan.

**Topics**
+ [Prasyarat](#lambda-s3-tutorial-prerequisites)
+ [Konfigurasikan peran Lambda IAM](#lambda-s3-tutorial-lambda-role)
+ [Buat proyek](#lambda-s3-tutorial-pom)
+ [Tulis kode](#lambda-s3-tutorial-code)
+ [Kemas proyek](#lambda-s3-tutorial-package)
+ [Deploy fungsi Lambda](#lambda-s3-tutorial-deploy)
+ [Uji metode Lambda](#lambda-s3-tutorial-test)

## Prasyarat
<a name="lambda-s3-tutorial-prerequisites"></a>

Sebelum memulai, Anda perlu menyelesaikan langkah-langkah dalam [Menyiapkan AWS SDK for](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html) Java. Kemudian pastikan bahwa Anda memiliki hal berikut ini:
+ Java 1.8 JDK.
+ Maven 3.6 atau lebih tinggi.
+ Bucket [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) dengan 5-7 citra alam di dalamnya. Citra ini dibaca oleh fungsi Lambda.

## Konfigurasikan peran Lambda IAM
<a name="lambda-s3-tutorial-lambda-role"></a>

Tutorial ini menggunakan layanan Amazon Rekognition dan Amazon S3. Konfigurasi peran **lambda-support** untuk memiliki kebijakan yang memungkinkannya mengaktifkan layanan ini dari fungsi Lambda.

**Untuk mengonfigurasi peran**

1. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di panel navigasi, pilih **Peran**, lalu pilih **Buat Peran**.

1. Pilih **Layanan AWS**, lalu pilih **Lambda**.

1. Pilih tab **Izin**.

1. Cari **AWSLambdaBasicExecutionRole**.

1. Pilih **Tanda selanjutnya**.

1. Pilih **Tinjau**.

1. Namai peran dengan **lambda-support**.

1. Pilih **Buat peran**.

1. Pilih **lambda-support** untuk melihat halaman gambaran umum.

1. Pilih **Pasang kebijakan**.

1. Pilih *AmazonRekognitionFullAccess*dari daftar kebijakan.

1. Pilih **Lampirkan kebijakan**.

1. **Cari **AmazonS3 FullAccess**, lalu pilih Lampirkan kebijakan.**

## Buat proyek
<a name="lambda-s3-tutorial-pom"></a>

Buat proyek Java baru, kemudian konfigurasi Maven pom.xml dengan pengaturan yang diperlukan dan dependensi. Pastikan file pom.xml Anda terlihat seperti berikut ini:

```
<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>WorkflowTagAssets</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>java-basic-function</name>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.10.54</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
   <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-core</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.10.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.13.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j18-impl</artifactId>
        <version>2.13.3</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.6.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.6.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>rekognition</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <createDependencyReducedPom>false</createDependencyReducedPom>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
  </build>
 </project>
```

## Tulis kode
<a name="lambda-s3-tutorial-code"></a>

Gunakan AWS Lambda runtime Java API untuk membuat kelas Java yang mendefinisikan fungsi Lambda. Dalam contoh ini, ada satu kelas Java untuk fungsi Lambda bernama **Handler** dan kelas tambahan yang diperlukan untuk kasus penggunaan ini. Citra berikut menunjukkan kelas Java dalam proyek. Perhatikan bahwa semua kelas Java terletak di sebuah paket bernama **com.example.tags**.

![Struktur proyek yang menunjukkan kelas Java untuk aset penandaan alur kerja seperti AnalyzePhotos,, Handler BucketItem, S3Service, dan. WorkItem](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/v2-image-tutorial-files.png)


Buat kelas Java berikut untuk kode:
+ **Handler** menggunakan Lambda Java run-time API dan melakukan kasus penggunaan yang dijelaskan dalam tutorial ini. AWS Logis aplikasi yang dijalankan terletak di metode handleRequest.
+ **S3Service** menggunakan API Amazon S3 untuk melakukan operasi S3.
+ **AnalyzePhotos**menggunakan Amazon Rekognition API untuk menganalisis gambar.
+ **BucketItem**mendefinisikan model yang menyimpan informasi bucket Amazon S3.
+ **WorkItem**mendefinisikan model yang menyimpan data Amazon Rekognition.

### Kelas handler
<a name="w2aac52b9c25c11"></a>

Kode Java ini mewakili kelas **Handler**. Kelas membaca bendera yang diteruskan ke fungsi Lambda. Layanan **S3. ListBucketObjects**metode mengembalikan objek **Daftar** di mana setiap elemen adalah nilai string yang mewakili kunci objek. Jika nilai bendera benar, maka tanda diterapkan dengan mengiterasi melalui daftar dan menerapkan tanda ke setiap objek dengan memanggil metode **s3Service.tagAssets**. Jika nilai flag adalah false, maka **S3service. deleteTagFromMetode objek** dipanggil yang menghapus tag. Juga, perhatikan bahwa Anda dapat mencatat pesan ke CloudWatch log Amazon dengan menggunakan **LambdaLogger**objek.

**catatan**  
Pastikan Anda menetapkan nama bucket ke variabel **bucketName**.

```
package com.example.tags;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Handler implements RequestHandler<Map<String,String>, String> {

@Override
public String handleRequest(Map<String, String> event, Context context) {
    LambdaLogger logger = context.getLogger();
    String delFlag = event.get("flag");
    logger.log("FLAG IS: " + delFlag);
    S3Service s3Service = new S3Service();
    AnalyzePhotos photos = new AnalyzePhotos();

    String bucketName = "<Enter your bucket name>";
    List<String> myKeys = s3Service.listBucketObjects(bucketName);
    if (delFlag.compareTo("true") == 0) {

        // Create a List to store the data.
        List<ArrayList<WorkItem>> myList = new ArrayList<>();

        // loop through each element in the List and tag the assets.
        for (String key : myKeys) {

            byte[] keyData = s3Service.getObjectBytes(bucketName, key);

            // Analyze the photo and return a list where each element is a WorkItem.
            ArrayList<WorkItem> item = photos.detectLabels(keyData, key);
            myList.add(item);
        }

        s3Service.tagAssets(myList, bucketName);
        logger.log("All Assets in the bucket are tagged!");

    } else {

        // Delete all object tags.
        for (String key : myKeys) {
            s3Service.deleteTagFromObject(bucketName, key);
            logger.log("All Assets in the bucket are deleted!");
        }
     }
    return delFlag;
  }
 }
```

### Kelas S3Service
<a name="w2aac52b9c25c13"></a>

Kelas berikut menggunakan API Amazon S3 untuk melakukan operasi S3. Misalnya, **getObjectBytes**metode mengembalikan array byte yang mewakili gambar. Demikian juga, **listBucketObjects**metode mengembalikan objek **List** di mana setiap elemen adalah nilai string yang menentukan nama kunci.

```
 package com.example.tags;

 import software.amazon.awssdk.core.ResponseBytes;
 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.services.s3.model.PutObjectTaggingRequest;
 import software.amazon.awssdk.services.s3.model.GetObjectResponse;
 import software.amazon.awssdk.services.s3.model.S3Exception;
 import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
 import software.amazon.awssdk.services.s3.model.S3Object;
 import software.amazon.awssdk.services.s3.model.GetObjectTaggingResponse;
 import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
 import java.util.ArrayList;
 import java.util.List;
 import software.amazon.awssdk.services.s3.model.Tagging;
 import software.amazon.awssdk.services.s3.model.Tag;
 import software.amazon.awssdk.services.s3.model.GetObjectTaggingRequest;
 import software.amazon.awssdk.services.s3.model.DeleteObjectTaggingRequest;

 public class S3Service {

 private S3Client getClient() {

    Region region = Region.US_WEST_2;
    return S3Client.builder()
            .region(region)
            .build();
 }

 public byte[] getObjectBytes(String bucketName, String keyName) {

    S3Client s3 = getClient();

    try {

        GetObjectRequest objectRequest = GetObjectRequest
                .builder()
                .key(keyName)
                .bucket(bucketName)
                .build();

        // Return the byte[] from this object.
        ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(objectRequest);
        return objectBytes.asByteArray();

    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return null;
 }

 // Returns the names of all images in the given bucket.
 public List<String> listBucketObjects(String bucketName) {

    S3Client s3 = getClient();
    String keyName;

    List<String> keys = new ArrayList<>();

    try {
        ListObjectsRequest listObjects = ListObjectsRequest
                .builder()
                .bucket(bucketName)
                .build();

        ListObjectsResponse res = s3.listObjects(listObjects);
        List<S3Object> objects = res.contents();

        for (S3Object myValue: objects) {
            keyName = myValue.key();
            keys.add(keyName);
        }
        return keys;

    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return null;
 }

 // Tag assets with labels in the given list.
 public void tagAssets(List myList, String bucketName) {

    try {

        S3Client s3 = getClient();
        int len = myList.size();

        String assetName = "";
        String labelName = "";
        String labelValue = "";

        // Tag all the assets in the list.
        for (Object o : myList) {

            // Need to get the WorkItem from each list.
            List innerList = (List) o;
            for (Object value : innerList) {

                WorkItem workItem = (WorkItem) value;
                assetName = workItem.getKey();
                labelName = workItem.getName();
                labelValue = workItem.getConfidence();
                tagExistingObject(s3, bucketName, assetName, labelName, labelValue);
            }
        }

    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
 }

 // This method tags an existing object.
 private void tagExistingObject(S3Client s3, String bucketName, String key, String label, String LabelValue) {

    try {

        // First need to get existing tag set; otherwise the existing tags are overwritten.
        GetObjectTaggingRequest getObjectTaggingRequest = GetObjectTaggingRequest.builder()
                .bucket(bucketName)
                .key(key)
                .build();

        GetObjectTaggingResponse response = s3.getObjectTagging(getObjectTaggingRequest);

        // Get the existing immutable list - cannot modify this list.
        List<Tag> existingList = response.tagSet();
        ArrayList<Tag> newTagList = new ArrayList(new ArrayList<>(existingList));

        // Create a new tag.
        Tag myTag = Tag.builder()
                .key(label)
                .value(LabelValue)
                .build();

        // push new tag to list.
        newTagList.add(myTag);
        Tagging tagging = Tagging.builder()
                .tagSet(newTagList)
                .build();

        PutObjectTaggingRequest taggingRequest = PutObjectTaggingRequest.builder()
                .key(key)
                .bucket(bucketName)
                .tagging(tagging)
                .build();

        s3.putObjectTagging(taggingRequest);
        System.out.println(key + " was tagged with " + label);

    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
  }

 // Delete tags from the given object.
 public void deleteTagFromObject(String bucketName, String key) {

    try {

        DeleteObjectTaggingRequest deleteObjectTaggingRequest = DeleteObjectTaggingRequest.builder()
                .key(key)
                .bucket(bucketName)
                .build();

        S3Client s3 = getClient();
        s3.deleteObjectTagging(deleteObjectTaggingRequest);

    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
  }
}
```

### AnalyzePhotos kelas
<a name="w2aac52b9c25c15"></a>

Kode Java berikut mewakili **AnalyzePhotos**kelas. Kelas ini menggunakan API Amazon Rekognition untuk menganalisis citra.

```
package com.example.tags;

import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.core.SdkBytes;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.rekognition.RekognitionClient;
import software.amazon.awssdk.services.rekognition.model.Image;
import software.amazon.awssdk.services.rekognition.model.DetectLabelsRequest;
import software.amazon.awssdk.services.rekognition.model.DetectLabelsResponse;
import software.amazon.awssdk.services.rekognition.model.Label;
import software.amazon.awssdk.services.rekognition.model.RekognitionException;
import java.util.ArrayList;
import java.util.List;

public class AnalyzePhotos {

 // Returns a list of WorkItem objects that contains labels.
 public ArrayList<WorkItem> detectLabels(byte[] bytes, String key) {

    Region region = Region.US_EAST_2;
    RekognitionClient rekClient = RekognitionClient.builder()
            .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
            .region(region)
            .build();

    try {

        SdkBytes sourceBytes = SdkBytes.fromByteArray(bytes);

        // Create an Image object for the source image.
        Image souImage = Image.builder()
                .bytes(sourceBytes)
                .build();

        DetectLabelsRequest detectLabelsRequest = DetectLabelsRequest.builder()
                .image(souImage)
                .maxLabels(10)
                .build();

        DetectLabelsResponse labelsResponse = rekClient.detectLabels(detectLabelsRequest);

        // Write the results to a WorkItem instance.
        List<Label> labels = labelsResponse.labels();
        ArrayList<WorkItem> list = new ArrayList<>();
        WorkItem item ;
        for (Label label: labels) {
            item = new WorkItem();
            item.setKey(key); // identifies the photo.
            item.setConfidence(label.confidence().toString());
            item.setName(label.name());
            list.add(item);
        }
        return list;

    } catch (RekognitionException e) {
        System.out.println(e.getMessage());
        System.exit(1);
    }
    return null ;
  }
}
```

### BucketItem kelas
<a name="w2aac52b9c25c17"></a>

Kode Java berikut mewakili **BucketItem**kelas yang menyimpan data objek Amazon S3.

```
package com.example.tags;

public class BucketItem {

 private String key;
 private String owner;
 private String date ;
 private String size ;


 public void setSize(String size) {
    this.size = size ;
 }

 public String getSize() {
    return this.size ;
 }

 public void setDate(String date) {
    this.date = date ;
 }

 public String getDate() {
    return this.date ;
 }

 public void setOwner(String owner) {
    this.owner = owner ;
 }

 public String getOwner() {
    return this.owner ;
 }

 public void setKey(String key) {
    this.key = key ;
 }

 public String getKey() {
    return this.key ;
 }
}
```

### WorkItem kelas
<a name="w2aac52b9c25c19"></a>

Kode Java berikut mewakili **WorkItem**kelas.

```
 package com.example.tags;

 public class WorkItem {

 private String key;
 private String name;
 private String confidence ;

public void setKey (String key) {
    this.key = key;
}

public String getKey() {
    return this.key;
}

public void setName (String name) {
    this.name = name;
}

public String getName() {
    return this.name;
}

public void setConfidence (String confidence) {
    this.confidence = confidence;
}

public String getConfidence() {
    return this.confidence;
}

}
```

## Kemas proyek
<a name="lambda-s3-tutorial-package"></a>

Kemas proyek ke dalam file .jar (JAR) dengan menggunakan perintah Maven berikut.

```
mvn package
```

File JAR terletak di folder **target** (yang merupakan folder anak dari folder proyek).

![Jendela file explorer menunjukkan folder target dengan file JAR seperti WorkflowTagAssets -1.0-snapshot.jar dan file dan folder proyek lainnya.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/v2-image-tutorial-folder.png)


**catatan**  
Perhatikan penggunaan **maven-shade-plugin**dalam file POM proyek. Plugin ini bertanggung jawab untuk membuat JAR yang berisi dependensi yang diperlukan. Jika Anda mencoba untuk mengemas proyek tanpa plugin ini, dependensi yang diperlukan tidak termasuk dalam file JAR dan Anda akan menemukan file. **ClassNotFoundException**

## Deploy fungsi Lambda
<a name="lambda-s3-tutorial-deploy"></a>

1. Buka [Konsol Lambda](https://console.aws.amazon.com/lambda/home).

1. Pilih **Buat Fungsi**.

1. Pilih **Penulis dari scratch**.

1. Di bagian **Informasi dasar**, masukkan **cron** sebagai nama.

1. Di **Waktu aktif**, pilih **Java 8**.

1. Pilih **Gunakan peran yang sudah ada**, lalu pilih **lambda-support** (IAM role yang telah Anda buat).

1. Pilih **Buat fungsi**.

1. Untuk **Tipe entri kode**, pilih **Unggah file .zip atau .jar**.

1. Pilih **Unggah**, lalu jelajahi ke file JAR yang telah Anda buat.

1. Untuk **Handler**, masukkan nama fungsi yang memenuhi syarat, misalnya, menentukan paket **com.example.tags.Handler:handleRequest** (**com.example.tags**, **Handler** adalah kelas yang diikuti oleh :: dan nama metode).

1. Pilih **Simpan**.

## Uji metode Lambda
<a name="lambda-s3-tutorial-test"></a>

Pada titik dalam tutorial ini, Anda dapat menguji fungsi Lambda.

1. Dalam konsol Lambda, klik tab **Uji** lalu masukkan JSON berikut.

   ```
                    {
   "flag": "true"
    }
   ```  
![Uji editor JSON acara dengan pasangan nilai kunci bendera, tombol Hapus dan Format, dan tombol Panggil.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/v2-image-tutorial-test.png)
**catatan**  
Meneruskan tanda **BETUL** aset digital dan teruskan menghapus tanda **SALAH**.

1. Pilih tombol **Panggil**. Setelah fungsi Lambda dipanggil, Anda melihat pesan berhasil.  
![Pesan hasil eksekusi yang menunjukkan operasi berhasil, dengan tombol Detail.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/v2-image-tutorial-success.png)

Selamat, Anda telah membuat AWS Lambda fungsi yang secara otomatis menerapkan tag ke aset difital yang terletak di bucket Amazon S3. Sebagaimana dinyatakan di awal tutorial ini, pastikan untuk mengakhiri semua sumber daya yang telah Anda buat saat akan melalui tutorial ini untuk memastikan Anda tidak dikenakan biaya.

Untuk contoh AWS multiservice lainnya, lihat repositori contoh [SDK AWS Dokumentasi](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases). GitHub 