

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

# Membuat fungsi Amazon Rekognition Lambda
<a name="stored-video-lambda"></a>

Tutorial ini menunjukkan bagaimana mendapatkan hasil dari operasi analisis video untuk pendeteksi label dengan menggunakan fungsi Java Lambda. 

**catatan**  
Tutorial ini menggunakan AWS SDK for Java 1.x. Untuk tutorial menggunakan Rekognition dan SDK AWS for Java versi 2, [AWS lihat](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/video_analyzer_application) contoh repositori Documentation SDK. GitHub 

Anda dapat menggunakan fungsi Lambda dengan operasi Amazon Rekognition Video. Misalnya, diagram berikut menunjukkan situs web yang menggunakan fungsi Lambda untuk secara otomatis memulai analisis video saat diunggah ke bucket Amazon S3. Ketika fungsi Lambda dipicu, fungsi Lambda memanggil [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html) untuk mulai mendeteksi label di video yang diunggah. Untuk informasi tentang penggunaan Lambda untuk memproses notifikasi peristiwa dari bucket Amazon S3, lihat [Menggunakan AWS Lambda dengan Amazon S3 Events](https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html).

Fungsi Lambda kedua dipicu ketika status penyelesaian analisis dikirim ke topik Amazon SNS terdaftar. Fungsi Lambda kedua memanggil [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html) untuk mendapatkan hasil analisis. Hasilnya kemudian disimpan dalam basis data untuk persiapan menampilkannya pada halaman web. fokus dari tutorial ini ada pada Fungsi lambda kedua.

![Diagram yang menunjukkan worfkflow pemrosesan video untuk Amazon Rekognition Video, dari mengunggah video hingga menyimpan hasil di Amazon DynamoDB untuk ditampilkan di situs web.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/VideoRekognitionLambda.png)


Dalam tutorial ini, fungsi Lambda dipicu ketika Amazon Rekognition Video mengirimkan status penyelesaian analisis video untuk topik Amazon SNS yang terdaftar. Amazon SNS yang terdaftar mengumpulkan hasil analisis video dengan menghubungi [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html). Untuk tujuan demonstrasi, tutorial ini menulis hasil deteksi label ke CloudWatch log. Dalam fungsi Lambda aplikasi Anda, Anda harus menyimpan hasil analisis untuk digunakan nanti. Misalnya, Anda dapat menggunakan Amazon DynamoDB untuk menyimpan hasil analisis. Untuk informasi selengkapnya, lihat [Bekerja dengan DynamoDB](url-ddb-dev;WorkingWithDynamo.html). 

Prosedur berikut menunjukkan kepada Anda cara:
+ Buat topik Amazon SNS dan atur izin.
+ Buat fungsi Lambda dengan menggunakan Konsol Manajemen AWS dan berlangganan ke topik Amazon SNS.
+ Konfigurasikan fungsi Lambda dengan menggunakan Konsol Manajemen AWS.
+ Tambahkan kode sampel ke AWS Toolkit for Eclipse proyek dan unggah ke fungsi Lambda.
+ Uji fungsi Lambda dengan menggunakan AWS CLI.

**catatan**  
Gunakan AWS Wilayah yang sama di seluruh tutorial.

## Prasyarat
<a name="lambda-stored-video-prerequisites"></a>

Tutorial ini mengasumsikan bahwa Anda sudah familier dengan AWS Toolkit for Eclipse. Untuk informasi selengkapnya, lihat [AWS Toolkit for Eclipse](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/welcome.html).

## Buat topik SNS
<a name="lambda-create-sns-topic"></a>

Status penyelesaian operasi analisis Amazon Rekognition Video dikirim ke topik Amazon SNS. Prosedur ini menciptakan topik Amazon SNS dan peran layanan IAM yang memberikan akses Amazon Rekognition Video ke topik Amazon SNS Anda. Untuk informasi selengkapnya, lihat [Memanggil operasi Amazon Rekognition Video](api-video.md).

**Untuk membuat topik Amazon SNS**

1. Jika belum, buat peran layanan IAM untuk memberikan akses Amazon Rekognition Video ke topik Amazon SNS Anda. Perhatikan Amazon Resource Name (ARN). Untuk informasi selengkapnya, lihat [Memberikan akses ke beberapa topik Amazon SNS](api-video-roles.md#api-video-roles-all-topics).

1. [Buat topik Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) dengan menggunakan [Konsol Amazon SNS](https://console.aws.amazon.com/sns/v2/home) Anda hanya perlu menentukan nama topik. Tambahkan nama topik dengan. *AmazonRekognition* Perhatikan topik ARN. 

## Buat fungsi Lambda
<a name="lambda-create-function"></a>

Anda membuat fungsi Lambda dengan menggunakan Konsol Manajemen AWS. Kemudian Anda menggunakan proyek AWS Toolkit for Eclipse untuk mengunggah paket fungsi Lambda ke AWS Lambda. Hal ini juga memungkinkan untuk membuat fungsi Lambda dengan AWS Toolkit for Eclipse. Untuk informasi selengkapnya, lihat [Tutorial: Cara Membuat, Mengunggah, dan Memanggil Fungsi AWS Lambda](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html).

**Untuk membuat fungsi Lambda**

1. Masuk ke AWS Management Console, dan buka konsol AWS Lambda di. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari scratch**.

1. Di **Nama fungsi**, ketikkan nama untuk fungsi Anda. 

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

1. Pilih **Memilih atau membuat peran eksekusi**.

1. Dalam **Peran eksekusi**, pilih **Membuat peran baru dengan izin Lambda dasar**. 

1. Perhatikan nama peran baru yang ditampilkan di bagian bawah bagian **Informasi dasar**.

1. Pilih **Buat fungsi**.

## Konfigurasikan fungsi Lambda
<a name="lambda-configure-function"></a>

Setelah Anda membuat fungsi Lambda, Anda mengonfigurasi fungsi Lambda yang dipicu oleh topik Amazon SNS yang Anda buat di [Buat topik SNS](#lambda-create-sns-topic). Anda juga dapat menyesuaikan persyaratan memori dan batas waktu untuk fungsi Lambda.

**Untuk mengonfigurasi fungsi Lambda**

1. Dalam **Kode fungsi**, ketik `com.amazonaws.lambda.demo.JobCompletionHandler` untuk **Handler**.

1. Dalam **Pengaturan dasar**, pilih **Edit**. Parameter **Edit pengaturan dasar** akan ditampilkan.

   1. Pilih **1024** untuk **Memori**.

   1. Pilih **10** detik untuk **Waktu habis**.

   1. Pilih **Simpan**.

1. Di bawah **Desainer**, pilih **\+ Tambahkan pemicu**. Tambah dialog pemicu yang ditampilkan.

1. Dalam **Konfigurasi pemicu** pilih **SNS**.

   Dalam **Topik SNS**, pilih topik Amazon SNS yang Anda buat di [Buat topik SNS](#lambda-create-sns-topic).

1. Pilih **Aktifkan pemicu**.

1. Untuk menambahkan pemicu, pilih **Tambahkan**.

1. Pilih **Simpan** untuk menyimpan fungsi Lambda.

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

Untuk memanggil operasi Video Rekognition Amazon, Anda menambahkan kebijakan terkelola *AmazonRekognitionFullAccess*AWS ke peran Lambda IAM. Mulai operasi, seperti [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html), yang juga memerlukan izin peran lewat untuk peran layanan IAM yang digunakan Amazon Rekognition Video untuk mengakses topik Amazon SNS.

**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**. 

1. Dalam daftar, pilih nama peran eksekusi yang Anda buat di [Buat fungsi Lambda](#lambda-create-function).

1. Pilih tab **Izin**.

1. Pilih **Pasang kebijakan**.

1. Pilih *AmazonRekognitionFullAccess*dari daftar kebijakan.

1. Pilih **Lampirkan kebijakan**.

1. Sekali lagi, pilih peran eksekusi. 

1. Pilih **Tambahkan kebijakan inline**.

1. Pilih tab **JSON**.

1. Ganti kebijakan yang sudah ada dengan kebijakan berikut. Ganti `servicerole` dengan peran layanan IAM yang Anda buat di [Buat topik SNS](#lambda-create-sns-topic).

1. Pilih **Tinjau kebijakan**.

1. Pada **Nama\***, ketik nama kebijakan.

1. Pilih **Buat kebijakan**.

## Buat proyek AWS Toolkit for Eclipse Lambda
<a name="lambda-create-code"></a>

Ketika fungsi Lambda dipicu, kode berikut menerima status penyelesaian dari topik Amazon SNS, dan memanggil [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html) untuk mendapatkan hasil analisis. Hitungan label yang terdeteksi, dan daftar label yang terdeteksi ditulis ke CloudWatch log. Fungsi Lambda Anda perlu menyimpan hasil analisis video untuk digunakan nanti.

**Untuk membuat proyek AWS Toolkit for Eclipse Lambda**

1. [Buat proyek AWS Toolkit for EclipseAWS Lambda](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html#lambda-tutorial-create-handler-class). 
   + Untuk **Nama proyek:**, ketik nama proyek yang Anda pilih.
   + Untuk **Nama Kelas:**, masukkan *JobCompletionHandler*.
   + Untuk **tipe input:**, pilih **Peristiwa SNS**.
   + Tidak perlu mengubah bidang lain. 

1. Di **Eclipse Project** explorer, buka metode handler Lambda yang dihasilkan (JobCompletionHandler.java) dan ganti isinya dengan yang berikut:

   ```
   //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   package com.amazonaws.lambda.demo;
   
   import com.amazonaws.services.lambda.runtime.Context;
   import com.amazonaws.services.lambda.runtime.LambdaLogger;
   import com.amazonaws.services.lambda.runtime.RequestHandler;
   import com.amazonaws.services.lambda.runtime.events.SNSEvent;
   import java.util.List;
   import com.amazonaws.regions.Regions;
   import com.amazonaws.services.rekognition.AmazonRekognition;
   import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder;
   import com.amazonaws.services.rekognition.model.GetLabelDetectionRequest;
   import com.amazonaws.services.rekognition.model.GetLabelDetectionResult;
   import com.amazonaws.services.rekognition.model.LabelDetection;
   import com.amazonaws.services.rekognition.model.LabelDetectionSortBy;
   import com.amazonaws.services.rekognition.model.VideoMetadata;
   import com.fasterxml.jackson.databind.JsonNode;
   import com.fasterxml.jackson.databind.ObjectMapper;
   
   
   
   public class JobCompletionHandler implements RequestHandler<SNSEvent, String> {
   
      @Override
      public String handleRequest(SNSEvent event, Context context) {
   
         String message = event.getRecords().get(0).getSNS().getMessage();
         LambdaLogger logger = context.getLogger(); 
   
         // Parse SNS event for analysis results. Log results
         try {
            ObjectMapper operationResultMapper = new ObjectMapper();
            JsonNode jsonResultTree = operationResultMapper.readTree(message);
            logger.log("Rekognition Video Operation:=========================");
            logger.log("Job id: " + jsonResultTree.get("JobId"));
            logger.log("Status : " + jsonResultTree.get("Status"));
            logger.log("Job tag : " + jsonResultTree.get("JobTag"));
            logger.log("Operation : " + jsonResultTree.get("API"));
   
            if (jsonResultTree.get("API").asText().equals("StartLabelDetection")) {
   
               if (jsonResultTree.get("Status").asText().equals("SUCCEEDED")){
                  GetResultsLabels(jsonResultTree.get("JobId").asText(), context);
               }
               else{
                  String errorMessage = "Video analysis failed for job " 
                        + jsonResultTree.get("JobId") 
                        + "State " + jsonResultTree.get("Status");
                  throw new Exception(errorMessage); 
               }
   
            } else
               logger.log("Operation not StartLabelDetection");
   
         } catch (Exception e) {
            logger.log("Error: " + e.getMessage());
            throw new RuntimeException (e);
   
   
         }
   
         return message;
      }
   
      void GetResultsLabels(String startJobId, Context context) throws Exception {
   
         LambdaLogger logger = context.getLogger();
   
         AmazonRekognition rek = AmazonRekognitionClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
   
         int maxResults = 1000;
         String paginationToken = null;
         GetLabelDetectionResult labelDetectionResult = null;
         String labels = "";
         Integer labelsCount = 0;
         String label = "";
         String currentLabel = "";
        
         //Get label detection results and log them. 
         do {
   
            GetLabelDetectionRequest labelDetectionRequest = new GetLabelDetectionRequest().withJobId(startJobId)
                  .withSortBy(LabelDetectionSortBy.NAME).withMaxResults(maxResults).withNextToken(paginationToken);
   
            labelDetectionResult = rek.getLabelDetection(labelDetectionRequest);
            
            paginationToken = labelDetectionResult.getNextToken();
            VideoMetadata videoMetaData = labelDetectionResult.getVideoMetadata();
   
            // Add labels to log
            List<LabelDetection> detectedLabels = labelDetectionResult.getLabels();
            
            for (LabelDetection detectedLabel : detectedLabels) {
               label = detectedLabel.getLabel().getName();
               if (label.equals(currentLabel)) {
                  continue;
               }
               labels = labels + label + " / ";
               currentLabel = label;
               labelsCount++;
   
            }
         } while (labelDetectionResult != null && labelDetectionResult.getNextToken() != null);
   
         logger.log("Total number of labels : " + labelsCount);
         logger.log("labels : " + labels);
   
      }
   
   
   }
   ```

1. Namespace Rekognition belum terselesaikan. Untuk mengoreksi ini:
   + Hentikan sejenak mouse Anda di atas bagian garis `import com.amazonaws.services.rekognition.AmazonRekognition;` yang digaris bawahi. 
   + Pilih **Perbaiki pengaturan proyek...**.
   + Pilih versi terbaru dari arsip Amazon Rekognition.
   + Pilih **OKE** untuk menambahkan arsip ke proyek.

1. Simpan file.

1. Klik kanan di jendela kode Eclipse Anda, pilih **AWS Lambda**, lalu pilih **Fungsi unggah ke AWS Lambda**. 

1. Pada halaman **Pilih Target Fungsi Lambda**, pilih Wilayah AWS untuk digunakan. 

1. Pilih **Pilih fungsi lambda yang sudah ada**, dan pilih fungsi Lambda yang Anda buat di [Buat fungsi Lambda](#lambda-create-function). 

1. Pilih **Berikutnya**. Parameter kotak dialog **Konfigurasi fungsi** akan ditampilkan. 

1. Dalam **IAM Role** Pilih IAM role yang Anda buat di [Buat fungsi Lambda](#lambda-create-function).

1. Pilih **Selesai**, dan fungsi Lambda diunggah ke AWS.

## Uji fungsi Lambda
<a name="lambda-test-function"></a>

Gunakan AWS CLI perintah berikut untuk menguji fungsi Lambda dengan memulai analisis deteksi label video. Setelah analisis selesai, fungsi Lambda dipicu. Konfirmasikan bahwa analisis berhasil dengan memeriksa CloudWatch log Log.

**Untuk menguji fungsi Lambda**

1. Unggah file video format MOV atau MPEG-4 ke bucket S3 Anda. Untuk pengujian, unggah video yang panjangnya tidak lebih dari 30 detik.

   Untuk petunjuk, lihat [Mengunggah Objek ke Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UploadingObjectsintoAmazonS3.html) S3 di Panduan Pengguna *Layanan Penyimpanan Sederhana Amazon*.

1. Jalankan AWS CLI perintah berikut untuk mulai mendeteksi label dalam video.

   ```
   aws rekognition start-label-detection --video "S3Object={Bucket="{{bucketname}}",Name="{{videofile}}"}" \
   --notification-channel "SNSTopicArn={{TopicARN}},RoleArn={{RoleARN}}" \
   --region {{Region}}
   ```

   Perbarui nilai berikut:
   + Ubah `bucketname` dan `videofile` ke nama bucket Amazon S3 dan nama file video yang Anda ingin labelnya dideteksi.
   + Ubah `TopicARN` untuk ARN dari topik Amazon SNS yang Anda buat di [Buat topik SNS](#lambda-create-sns-topic).
   + Ubah `RoleARN` untuk ARN dari IAM role yang Anda buat di [Buat topik SNS](#lambda-create-sns-topic).
   + Ubah `Region` ke AWS Wilayah yang Anda gunakan. ``

1. Perhatikan nilai dari `JobId` dalam respons. Respons tersebut serupa dengan contoh JSON berikut ini.

   ```
   {
       "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn"
   }
   ```

1. Buka konsol [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/). 

1. Ketika analisis selesai, entri log untuk fungsi Lambda muncul di **Grup log**.

1. Pilih fungsi Lambda untuk melihat aliran log.

1. Pilih aliran log terbaru untuk melihat entri log yang dibuat oleh fungsi Lambda. Jika operasi berhasil, tampilannya mirip dengan output berikut, yang menunjukkan detail operasi pengenalan video, termasuk ID pekerjaan, jenis operasi "StartLabelDetection“, dan daftar kategori label yang terdeteksi seperti Botol, Pakaian, Kerumunan, dan Makanan:  
![Keluaran log yang menunjukkan detail operasi pengenalan video.](http://docs.aws.amazon.com/id_id/rekognition/latest/dg/images/log.png)

   Nilai dari **ID tugas** harus sesuai dengan nilai `JobId` yang Anda catat di langkah 3.