

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

# Memproses data dalam alur kerja pelabelan khusus dengan AWS Lambda
<a name="sms-custom-templates-step3"></a>

Dalam topik ini, Anda dapat mempelajari cara menerapkan [AWS Lambda](https://aws.amazon.com/lambda/)fungsi opsional saat membuat alur kerja pelabelan khusus. Anda dapat menentukan dua jenis fungsi Lambda yang akan digunakan dengan alur kerja pelabelan khusus Anda.
+ *Lambda pra-anotasi*: Fungsi ini memproses setiap objek data yang dikirim ke pekerjaan pelabelan Anda sebelum mengirimkannya ke pekerja.
+ *Lambda pasca-anotasi*: Fungsi ini memproses hasil setelah pekerja mengirimkan tugas. Jika Anda menentukan beberapa pekerja per objek data, fungsi ini mungkin menyertakan logika untuk mengkonsolidasikan anotasi.

Jika Anda adalah pengguna baru Lambda dan Ground Truth, kami sarankan Anda menggunakan halaman di bagian ini sebagai berikut:

1. Pertama, tinjau[Menggunakan fungsi Lambda pra-anotasi dan pasca-anotasiMenggunakan fungsi Lambda](sms-custom-templates-step3-lambda-requirements.md).

1. Kemudian, gunakan halaman [Tambahkan izin yang diperlukan untuk digunakan AWS Lambda dengan Ground Truth](sms-custom-templates-step3-lambda-permissions.md) untuk mempelajari tentang persyaratan keamanan dan izin untuk menggunakan fungsi Lambda pra-anotasi dan pasca-anotasi Anda dalam pekerjaan pelabelan kustom Ground Truth.

1. Selanjutnya, Anda perlu mengunjungi konsol Lambda atau menggunakan Lambda APIs untuk membuat fungsi Anda. Gunakan bagian ini [Buat fungsi Lambda menggunakan template Ground Truth](sms-custom-templates-step3-lambda-create.md) untuk mempelajari cara membuat fungsi Lambda.

1. Untuk mempelajari cara menguji fungsi Lambda Anda, lihat. [Uji fungsi Lambda pra-anotasi dan pasca-anotasi](sms-custom-templates-step3-lambda-test.md)

1. Setelah Anda membuat fungsi Lambda pra-pemrosesan dan pasca-pemrosesan, pilih fungsi Lambda dari bagian **fungsi Lambda** yang muncul setelah editor kode untuk HTML kustom Anda di konsol Ground Truth. Untuk mempelajari cara menggunakan fungsi ini dalam permintaan `CreateLabelingJob` API, lihat[Membuat Job Pelabelan (API)](sms-create-labeling-job-api.md).

Untuk tutorial alur kerja pelabelan khusus yang mencakup contoh fungsi Lambda pra-anotasi dan pasca-anotasi, lihat. [Template demo: Anotasi gambar dengan `crowd-bounding-box`](sms-custom-templates-step2-demo1.md)

**Topics**
+ [Menggunakan fungsi Lambda pra-anotasi dan pasca-anotasi](sms-custom-templates-step3-lambda-requirements.md)
+ [Tambahkan izin yang diperlukan untuk digunakan AWS Lambda dengan Ground Truth](sms-custom-templates-step3-lambda-permissions.md)
+ [Buat fungsi Lambda menggunakan template Ground Truth](sms-custom-templates-step3-lambda-create.md)
+ [Uji fungsi Lambda pra-anotasi dan pasca-anotasi](sms-custom-templates-step3-lambda-test.md)

# Menggunakan fungsi Lambda pra-anotasi dan pasca-anotasi
<a name="sms-custom-templates-step3-lambda-requirements"></a>

Gunakan topik ini untuk mempelajari sintaks permintaan yang dikirim ke fungsi Lambda pra-anotasi dan pasca-anotasi, serta sintaks respons wajib yang digunakan Ground Truth dalam alur kerja pelabelan khusus.

**Topics**
+ [Lambda pra-anotasi](#sms-custom-templates-step3-prelambda)
+ [Lambda pasca-anotasi](#sms-custom-templates-step3-postlambda)

## Lambda pra-anotasi
<a name="sms-custom-templates-step3-prelambda"></a>

Sebelum tugas pelabelan dikirim ke pekerja, fungsi Lambda pra-anotasi opsional dapat dipanggil.

Ground Truth mengirimkan fungsi Lambda Anda permintaan berformat JSON untuk memberikan detail tentang pekerjaan pelabelan dan objek data.

Berikut ini adalah 2 contoh permintaan diformat JSON.

------
#### [ Data object identified with "source-ref" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": <labelingJobArn>
    "dataObject" : {
        "source-ref": <s3Uri>
    }
}
```

------
#### [ Data object identified with "source" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": <labelingJobArn>
    "dataObject" : {
        "source": <string>
    }
}
```

------

 Daftar berikut berisi skema permintaan pra-anotasi. Setiap parameter dijelaskan di bawah ini.
+ `version`(string): Ini adalah nomor versi yang digunakan secara internal oleh Ground Truth.
+ `labelingJobArn`(string): Ini adalah Nama Sumber Daya Amazon, atau ARN, dari pekerjaan pelabelan Anda. ARN ini dapat digunakan untuk mereferensikan pekerjaan pelabelan saat menggunakan operasi Ground Truth API seperti. `DescribeLabelingJob`
+ The `dataObject` (objek JSON): Kunci berisi satu baris JSON, baik dari file manifes masukan Anda atau dikirim dari Amazon SNS. Objek garis JSON dalam manifes Anda dapat berukuran hingga 100 kilobyte dan berisi berbagai data. Untuk pekerjaan anotasi gambar yang sangat mendasar, `dataObject` JSON mungkin hanya berisi `source-ref` kunci, mengidentifikasi gambar yang akan dianotasi. Jika objek data (misalnya, baris teks) disertakan langsung dalam file manifes masukan, objek data diidentifikasi dengan`source`. Jika Anda membuat pekerjaan verifikasi atau penyesuaian, baris ini mungkin berisi data label dan metadata dari pekerjaan pelabelan sebelumnya.

Contoh tab berikut menunjukkan contoh permintaan pra-anotasi. Setiap parameter dalam contoh permintaan ini dijelaskan di bawah tabel tab.

------
#### [ Data object identified with "source-ref" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/<labeling_job_name>"
    "dataObject" : {
        "source-ref": "s3://input-data-bucket/data-object-file-name"
    }
}
```

------
#### [ Data object identified with "source" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": "arn:aws:sagemaker:<aws_region>:111122223333:labeling-job/<labeling_job_name>"
    "dataObject" : {
        "source": "Sue purchased 10 shares of the stock on April 10th, 2020"
    }
}
```

------

Sebagai imbalannya, Ground Truth membutuhkan respons yang diformat seperti berikut:

**Example dari data pengembalian yang diharapkan**  

```
{
    "taskInput": <json object>,
    "isHumanAnnotationRequired": <boolean> # Optional
}
```

Pada contoh sebelumnya, `<json object>` kebutuhan untuk memuat *semua* data yang dibutuhkan template tugas pekerja kustom Anda. Jika Anda melakukan tugas kotak pembatas di mana instruksi tetap sama sepanjang waktu, itu mungkin hanya sumber daya HTTP (S) atau Amazon S3 untuk file gambar Anda. Jika itu adalah tugas analisis sentimen dan objek yang berbeda mungkin memiliki pilihan yang berbeda, itu adalah referensi objek sebagai string dan pilihan sebagai array string.

**Implikasi dari `isHumanAnnotationRequired`**  
Nilai ini opsional karena defaultnya. `true` Kasus penggunaan utama untuk secara eksplisit menyetelnya adalah ketika Anda ingin mengecualikan objek data ini agar tidak diberi label oleh pekerja manusia. 

Jika Anda memiliki campuran objek dalam manifes Anda, dengan beberapa memerlukan anotasi manusia dan beberapa tidak membutuhkannya, Anda dapat menyertakan `isHumanAnnotationRequired` nilai di setiap objek data. Anda dapat menambahkan logika ke Lambda pra-anotasi Anda untuk menentukan secara dinamis apakah suatu objek memerlukan anotasi, dan menetapkan nilai boolean ini sesuai dengan itu.

### Contoh fungsi Lambda pra-anotasi
<a name="sms-custom-templates-step3-prelambda-example"></a>

Fungsi Lambda pra-anotasi dasar berikut mengakses objek JSON `dataObject` dari permintaan awal, dan mengembalikannya dalam parameter. `taskInput`

```
import json

def lambda_handler(event, context):
    return {
        "taskInput":  event['dataObject']
    }
```

Dengan asumsi file manifes masukan digunakan `"source-ref"` untuk mengidentifikasi objek data, template tugas pekerja yang digunakan dalam pekerjaan pelabelan yang sama dengan Lambda pra-anotasi ini harus menyertakan elemen Liquid seperti berikut untuk dicerna: `dataObject`

```
{{ task.input.source-ref | grant_read_access }}
```

Jika file manifes masukan digunakan `source` untuk mengidentifikasi objek data, template tugas kerja dapat menelan `dataObject` dengan yang berikut:

```
{{ task.input.source }}
```

Contoh Lambda pra-anotasi berikut mencakup logika untuk mengidentifikasi kunci yang digunakan dalam`dataObject`, dan untuk menunjuk ke objek data yang menggunakan dalam pernyataan pengembalian `taskObject` Lambda.

```
import json

def lambda_handler(event, context):

    # Event received
    print("Received event: " + json.dumps(event, indent=2))

    # Get source if specified
    source = event['dataObject']['source'] if "source" in event['dataObject'] else None

    # Get source-ref if specified
    source_ref = event['dataObject']['source-ref'] if "source-ref" in event['dataObject'] else None

    # if source field present, take that otherwise take source-ref
    task_object = source if source is not None else source_ref

    # Build response object
    output = {
        "taskInput": {
            "taskObject": task_object
        },
        "humanAnnotationRequired": "true"
    }

    print(output)
    # If neither source nor source-ref specified, mark the annotation failed
    if task_object is None:
        print(" Failed to pre-process {} !".format(event["labelingJobArn"]))
        output["humanAnnotationRequired"] = "false"

    return output
```

## Lambda pasca-anotasi
<a name="sms-custom-templates-step3-postlambda"></a>

Ketika semua pekerja telah membuat anotasi objek data atau kapan [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HumanLoopConfig.html#SageMaker-Type-HumanLoopConfig-TaskAvailabilityLifetimeInSeconds](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HumanLoopConfig.html#SageMaker-Type-HumanLoopConfig-TaskAvailabilityLifetimeInSeconds)telah tercapai, mana yang lebih dulu, Ground Truth mengirimkan anotasi tersebut ke Lambda pasca-anotasi Anda. Lambda ini umumnya digunakan untuk. [Konsolidasi anotasi](sms-annotation-consolidation.md)

**catatan**  
[Untuk melihat contoh fungsi Lambda pasca-konsolidasi, lihat [annotation\$1consolidation\$1lambda.py](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe/blob/master/aws_sagemaker_ground_truth_sample_lambda/annotation_consolidation_lambda.py) di repositori -recipe. aws-sagemaker-ground-truth](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe) GitHub 

Blok kode berikut berisi skema permintaan pasca-anotasi. Setiap parameter dijelaskan dalam daftar berpoin berikut.

```
{
    "version": "2018-10-16",
    "labelingJobArn": <string>,
    "labelCategories": [<string>],
    "labelAttributeName": <string>,
    "roleArn" : <string>,
    "payload": {
        "s3Uri": <string>
    }
 }
```
+ `version`(string): Nomor versi yang digunakan secara internal oleh Ground Truth.
+ `labelingJobArn`(string): Nama Sumber Daya Amazon, atau ARN, dari pekerjaan pelabelan Anda. ARN ini dapat digunakan untuk mereferensikan pekerjaan pelabelan saat menggunakan operasi Ground Truth API seperti. `DescribeLabelingJob`
+ `labelCategories`(daftar string): Termasuk kategori label dan atribut lain yang Anda tentukan di konsol, atau yang Anda sertakan dalam file konfigurasi kategori label.
+ `labelAttributeName`(string): Entah nama pekerjaan pelabelan Anda, atau nama atribut label yang Anda tentukan saat Anda membuat pekerjaan pelabelan.
+ `roleArn`(string): Nama Sumber Daya Amazon (ARN) dari peran eksekusi IAM yang Anda tentukan saat Anda membuat pekerjaan pelabelan. 
+ `payload`(Objek JSON): JSON yang menyertakan `s3Uri` kunci, yang mengidentifikasi lokasi data anotasi untuk objek data tersebut di Amazon S3. Blok kode kedua di bawah ini menunjukkan contoh file anotasi ini.

Blok kode berikut berisi contoh permintaan pasca-anotasi. Setiap parameter dalam permintaan contoh ini dijelaskan di bawah blok kode.

**Example dari permintaan Lambda pasca-anotasi**  

```
{
    "version": "2018-10-16",
    "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/labeling-job-name",
    "labelCategories": ["Ex Category1","Ex Category2", "Ex Category3"],
    "labelAttributeName": "labeling-job-attribute-name",
    "roleArn" : "arn:aws:iam::111122223333:role/role-name",
    "payload": {
        "s3Uri": "s3://amzn-s3-demo-bucket/annotations.json"
    }
 }
```

**catatan**  
Jika tidak ada pekerja yang bekerja pada objek data dan `TaskAvailabilityLifetimeInSeconds` telah tercapai, objek data ditandai sebagai gagal dan tidak disertakan sebagai bagian dari pemanggilan Lambda pasca-anotasi.

Blok kode berikut berisi skema payload. Ini adalah file yang ditunjukkan oleh `s3Uri` parameter di objek JSON permintaan Lambda pasca-anotasi. `payload` Misalnya, jika blok kode sebelumnya adalah permintaan Lambda pasca-anotasi, file anotasi berikut berada di. `s3://amzn-s3-demo-bucket/annotations.json`

Setiap parameter dijelaskan dalam daftar berpoin berikut.

**Example dari file anotasi**  

```
[
    {
        "datasetObjectId": <string>,
        "dataObject": {
            "s3Uri": <string>,
            "content": <string>
        },
        "annotations": [{
            "workerId": <string>,
            "annotationData": {
                "content": <string>,
                "s3Uri": <string>
            }
       }]
    }
]
```
+ `datasetObjectId`(string): Mengidentifikasi ID unik yang Ground Truth tetapkan ke setiap objek data yang Anda kirim ke pekerjaan pelabelan.
+ `dataObject`(Objek JSON): Objek data yang diberi label. Jika objek data disertakan dalam file manifes masukan dan diidentifikasi menggunakan `source` kunci (misalnya, string), `dataObject` termasuk `content` kunci, yang mengidentifikasi objek data. Jika tidak, lokasi objek data (misalnya, tautan atau URI S3) diidentifikasi dengan`s3Uri`.
+ `annotations`(daftar objek JSON): Daftar ini berisi objek JSON tunggal untuk setiap anotasi yang dikirimkan oleh pekerja untuk itu. `dataObject` Sebuah objek JSON tunggal berisi unik `workerId` yang dapat digunakan untuk mengidentifikasi pekerja yang mengirimkan anotasi itu. `annotationData`Kuncinya berisi salah satu dari yang berikut:
  + `content`(string): Berisi data anotasi. 
  + `s3Uri`(string): Berisi URI S3 yang mengidentifikasi lokasi data anotasi.

Tabel berikut berisi contoh konten yang mungkin Anda temukan di payload untuk berbagai jenis anotasi.

------
#### [ Named Entity Recognition Payload ]

```
[
    {
      "datasetObjectId": "1",
      "dataObject": {
        "content": "Sift 3 cups of flour into the bowl."
      },
      "annotations": [
        {
          "workerId": "private.us-west-2.ef7294f850a3d9d1",
          "annotationData": {
            "content": "{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}"
          }
        }
      ]
    }
]
```

------
#### [ Semantic Segmentation Payload ]

```
[
    {
      "datasetObjectId": "2",
      "dataObject": {
        "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird3.jpg"
      },
      "annotations": [
        {
          "workerId": "private.us-west-2.ab1234c5678a919d0",
          "annotationData": {
            "content": "{\"crowd-semantic-segmentation\":{\"inputImageProperties\":{\"height\":2000,\"width\":3020},\"labelMappings\":{\"Bird\":{\"color\":\"#2ca02c\"}},\"labeledImage\":{\"pngImageData\":\"iVBOR...\"}}}"
          }
        }
      ]
    }
  ]
```

------
#### [ Bounding Box Payload ]

```
[
    {
      "datasetObjectId": "0",
      "dataObject": {
        "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird1.jpg"
      },
      "annotations": [
        {
          "workerId": "private.us-west-2.ab1234c5678a919d0",
          "annotationData": {
            "content": "{\"boundingBox\":{\"boundingBoxes\":[{\"height\":2052,\"label\":\"Bird\",\"left\":583,\"top\":302,\"width\":1375}],\"inputImageProperties\":{\"height\":2497,\"width\":3745}}}"
          }
        }
      ]
    }
 ]
```

------

Fungsi Lambda pasca-anotasi Anda mungkin berisi logika yang mirip dengan yang berikut untuk diulang dan mengakses semua anotasi yang terdapat dalam permintaan. Untuk contoh lengkap, lihat [annotation\$1consolidation\$1lambda.py](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe/blob/master/aws_sagemaker_ground_truth_sample_lambda/annotation_consolidation_lambda.py) di GitHub repositori [aws-sagemaker-ground-truth-recipe](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe). Dalam GitHub contoh ini, Anda harus menambahkan logika konsolidasi anotasi Anda sendiri. 

```
for i in range(len(annotations)):
    worker_id = annotations[i]["workerId"]
    annotation_content = annotations[i]['annotationData'].get('content')
    annotation_s3_uri = annotations[i]['annotationData'].get('s3uri')
    annotation = annotation_content if annotation_s3_uri is None else s3_client.get_object_from_s3(
        annotation_s3_uri)
    annotation_from_single_worker = json.loads(annotation)

    print("{} Received Annotations from worker [{}] is [{}]"
            .format(log_prefix, worker_id, annotation_from_single_worker))
```

**Tip**  
Ketika Anda menjalankan algoritma konsolidasi pada data, Anda dapat menggunakan layanan AWS database untuk menyimpan hasil, atau Anda dapat meneruskan hasil yang diproses kembali ke Ground Truth. Data yang Anda kembalikan ke Ground Truth disimpan dalam manifes anotasi terkonsolidasi dalam bucket S3 yang ditentukan untuk keluaran selama konfigurasi tugas pelabelan.

Sebagai imbalannya, Ground Truth membutuhkan respons yang diformat seperti berikut:

**Example dari data pengembalian yang diharapkan**  

```
[
   {        
        "datasetObjectId": <string>,
        "consolidatedAnnotation": {
            "content": {
                "<labelattributename>": {
                    # ... label content
                }
            }
        }
    },
   {        
        "datasetObjectId": <string>,
        "consolidatedAnnotation": {
            "content": {
                "<labelattributename>": {
                    # ... label content
                }
            }
        }
    }
    .
    .
    .
]
```
Pada titik ini, semua data yang Anda kirim ke bucket S3 Anda, selain`datasetObjectId`, ada di `content` objek.

Saat Anda mengembalikan anotasi`content`, ini akan menghasilkan entri dalam manifes keluaran pekerjaan Anda seperti berikut:

**Example dari format label dalam manifes keluaran**  

```
{  "source-ref"/"source" : "<s3uri or content>", 
   "<labelAttributeName>": {
        # ... label content from you
    },   
   "<labelAttributeName>-metadata": { # This will be added by Ground Truth
        "job_name": <labelingJobName>,
        "type": "groundTruth/custom",
        "human-annotated": "yes", 
        "creation_date": <date> # Timestamp of when received from Post-labeling Lambda
    }
}
```

Karena sifat template kustom yang berpotensi kompleks dan data yang dikumpulkannya, Ground Truth tidak menawarkan pemrosesan data lebih lanjut.

# Tambahkan izin yang diperlukan untuk digunakan AWS Lambda dengan Ground Truth
<a name="sms-custom-templates-step3-lambda-permissions"></a>

Anda mungkin perlu mengonfigurasi beberapa atau semua hal berikut untuk membuat dan menggunakan AWS Lambda Ground Truth. 
+ Anda perlu memberikan peran IAM atau izin pengguna (secara kolektif, entitas IAM) untuk membuat fungsi Lambda pra-anotasi dan pasca-anotasi AWS Lambda menggunakan, dan memilihnya saat membuat pekerjaan pelabelan. 
+ Peran eksekusi IAM yang ditentukan saat pekerjaan pelabelan dikonfigurasi memerlukan izin untuk menjalankan fungsi Lambda pra-anotasi dan pasca-anotasi. 
+ Fungsi Lambda pasca-anotasi mungkin memerlukan izin untuk mengakses Amazon S3.

Gunakan bagian berikut untuk mempelajari cara membuat entitas IAM dan memberikan izin yang dijelaskan di atas.

**Topics**
+ [Berikan Izin untuk Membuat dan Memilih AWS Lambda Fungsi](#sms-custom-templates-step3-postlambda-create-perms)
+ [Berikan Izin Peran Eksekusi IAM untuk Memanggil Fungsi AWS Lambda](#sms-custom-templates-step3-postlambda-execution-role-perms)
+ [Berikan Izin Lambda Pasca-Anotasi untuk Mengakses Anotasi](#sms-custom-templates-step3-postlambda-perms)

## Berikan Izin untuk Membuat dan Memilih AWS Lambda Fungsi
<a name="sms-custom-templates-step3-postlambda-create-perms"></a>

Jika Anda tidak memerlukan izin terperinci untuk mengembangkan fungsi Lambda pra-anotasi dan pasca-anotasi, Anda dapat melampirkan kebijakan terkelola ke pengguna atau peran. AWS `AWSLambda_FullAccess` Kebijakan ini memberikan izin luas untuk menggunakan semua fitur Lambda, serta izin untuk melakukan tindakan di layanan lain yang berinteraksi AWS dengan Lambda.

Untuk membuat kebijakan yang lebih terperinci untuk kasus penggunaan yang sensitif terhadap keamanan, lihat dokumentasi Kebijakan [IAM berbasis identitas untuk Lambda di Panduan Pengembang untuk mempelajari cara AWS Lambda membuat kebijakan](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html) IAM yang sesuai dengan kasus penggunaan Anda. 

**Kebijakan untuk Menggunakan Konsol Lambda**

Jika Anda ingin memberikan izin entitas IAM untuk menggunakan konsol Lambda, [lihat Menggunakan konsol Lambda di](https://docs.aws.amazon.com/lambda/latest/dg/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-console) Panduan Pengembang. AWS Lambda 

Selain itu, jika Anda ingin pengguna dapat mengakses dan menerapkan fungsi pra-anotasi dan pasca-anotasi starter Ground Truth menggunakan di AWS Serverless Application Repository konsol Lambda, Anda harus menentukan *`<aws-region>`* tempat Anda ingin menerapkan fungsi (ini harus AWS Wilayah yang sama yang digunakan untuk membuat pekerjaan pelabelan), dan menambahkan kebijakan berikut ke peran IAM.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:ListApplicationVersions",
                "serverlessrepo:GetApplication",
                "serverlessrepo:CreateCloudFormationTemplate"
            ],
            "Resource": "arn:aws:serverlessrepo:us-east-1:838997950401:applications/aws-sagemaker-ground-truth-recipe"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "serverlessrepo:SearchApplications",
            "Resource": "*"
        }
    ]
}
```

------

**Kebijakan untuk Melihat Fungsi Lambda di Ground Truth Console**

Untuk memberikan izin entitas IAM untuk melihat fungsi Lambda di konsol Ground Truth saat pengguna membuat pekerjaan pelabelan khusus, entitas harus memiliki izin yang dijelaskan, termasuk izin yang dijelaskan [Berikan Izin IAM untuk Menggunakan Amazon SageMaker Ground Truth Console](sms-security-permission-console-access.md) di bagian. [Izin Alur Kerja Pelabelan Kustom](sms-security-permission-console-access.md#sms-security-permissions-custom-workflow)

## Berikan Izin Peran Eksekusi IAM untuk Memanggil Fungsi AWS Lambda
<a name="sms-custom-templates-step3-postlambda-execution-role-perms"></a>

Jika Anda menambahkan kebijakan terkelola IAM [AmazonSageMakerGroundTruthExecution](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerGroundTruthExecution)ke peran eksekusi IAM yang digunakan untuk membuat pekerjaan pelabelan, peran ini memiliki izin untuk mencantumkan dan memanggil fungsi Lambda dengan salah satu string berikut dalam nama fungsi:,,,, atau. `GtRecipe` `SageMaker` `Sagemaker` `sagemaker` `LabelingFunction` 

Jika nama fungsi Lambda pra-anotasi atau pasca-anotasi tidak menyertakan salah satu istilah dalam paragraf sebelumnya, atau jika Anda memerlukan izin yang lebih terperinci daripada yang ada dalam kebijakan terkelola, Anda dapat menambahkan kebijakan yang serupa dengan berikut `AmazonSageMakerGroundTruthExecution` ini untuk memberikan izin peran eksekusi untuk menjalankan fungsi pra-anotasi dan pasca-anotasi.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:us-east-1:111122223333:function:<pre-annotation-lambda-name>",
                "arn:aws:lambda:us-east-1:111122223333:function:<post-annotation-lambda-name>"
            ]
        }
    ]
}
```

------

## Berikan Izin Lambda Pasca-Anotasi untuk Mengakses Anotasi
<a name="sms-custom-templates-step3-postlambda-perms"></a>

Seperti dijelaskan dalam[Lambda pasca-anotasi](sms-custom-templates-step3-lambda-requirements.md#sms-custom-templates-step3-postlambda), permintaan Lambda pasca-anotasi menyertakan lokasi data anotasi di Amazon S3. Lokasi ini diidentifikasi oleh `s3Uri` string dalam `payload` objek. Untuk memproses anotasi saat masuk, bahkan untuk fungsi pass through sederhana, Anda perlu menetapkan izin yang diperlukan untuk [peran eksekusi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) pasca-anotasi untuk membaca file dari Amazon S3.

Ada banyak cara untuk mengonfigurasi Lambda Anda untuk mengakses data anotasi di Amazon S3. Dua cara umum adalah:
+ Izinkan peran eksekusi Lambda untuk mengambil peran eksekusi SageMaker AI yang diidentifikasi `roleArn` dalam permintaan Lambda pasca-anotasi. Peran eksekusi SageMaker AI ini adalah yang digunakan untuk membuat pekerjaan pelabelan, dan memiliki akses ke bucket keluaran Amazon S3 tempat data anotasi disimpan.
+ Berikan izin peran eksekusi Lambda untuk mengakses bucket keluaran Amazon S3 secara langsung.

Gunakan bagian berikut untuk mempelajari cara mengonfigurasi opsi ini. 

**Berikan Izin Lambda untuk Mengambil Peran Eksekusi SageMaker AI**

Untuk memungkinkan fungsi Lambda mengambil peran eksekusi SageMaker AI, Anda harus melampirkan kebijakan ke peran eksekusi fungsi Lambda, dan memodifikasi hubungan kepercayaan dari peran eksekusi SageMaker AI untuk memungkinkan Lambda mengasumsikan itu.

1. [Lampirkan kebijakan IAM berikut](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) ke peran eksekusi fungsi Lambda Anda untuk mengambil peran eksekusi AI SageMaker yang diidentifikasi. `Resource` Ganti `222222222222` dengan [ID AWS akun](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). Ganti `sm-execution-role` dengan nama peran yang diasumsikan.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::222222222222:role/sm-execution-role"
       }
   }
   ```

------

1. [Ubah kebijakan kepercayaan](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy) dari peran eksekusi SageMaker AI untuk memasukkan yang berikut ini`Statement`. Ganti `222222222222` dengan [ID AWS akun](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). Ganti `my-lambda-execution-role` dengan nama peran yang diasumsikan.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::222222222222:role/my-lambda-execution-role"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

**Berikan Izin Peran Eksekusi Lambda untuk Mengakses S3**

Anda dapat menambahkan kebijakan yang mirip dengan berikut ini ke peran eksekusi fungsi Lambda pasca-anotasi untuk memberikan izin baca S3. Ganti *amzn-s3-demo-bucket* dengan nama bucket keluaran yang Anda tentukan saat membuat pekerjaan pelabelan.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

Untuk menambahkan izin baca S3 ke peran eksekusi Lambda di konsol Lambda, gunakan prosedur berikut. 

**Tambahkan izin baca S3 ke Lambda pasca-anotasi:**

1. Buka [halaman **Fungsi**](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih nama fungsi pasca-anotasi.

1. Pilih **Konfigurasi**, lalu pilih **Izin**.

1. Pilih **nama Peran** dan halaman ringkasan untuk peran itu terbuka di konsol IAM di tab baru. 

1. Pilih **Lampirkan kebijakan**.

1. Lakukan salah satu tindakan berikut:
   + Cari dan pilih **`AmazonS3ReadOnlyAccess`**untuk memberikan izin fungsi untuk membaca semua ember dan objek di akun. 
   + Jika Anda memerlukan izin yang lebih terperinci, pilih **Buat kebijakan** dan gunakan contoh kebijakan di bagian sebelumnya untuk membuat kebijakan. Perhatikan bahwa Anda harus menavigasi kembali ke halaman ringkasan peran eksekusi setelah membuat kebijakan.

1. Jika Anda menggunakan kebijakan `AmazonS3ReadOnlyAccess` terkelola, pilih **Lampirkan kebijakan**. 

   Jika Anda membuat kebijakan baru, navigasikan kembali ke halaman ringkasan peran eksekusi Lambda dan lampirkan kebijakan yang baru saja Anda buat.

# Buat fungsi Lambda menggunakan template Ground Truth
<a name="sms-custom-templates-step3-lambda-create"></a>

Anda dapat membuat fungsi Lambda menggunakan konsol Lambda, SDK AWS CLI, atau AWS SDK dalam bahasa pemrograman yang didukung pilihan Anda. Gunakan Panduan AWS Lambda Pengembang untuk mempelajari lebih lanjut tentang masing-masing opsi ini:
+ Untuk mempelajari cara membuat fungsi Lambda menggunakan konsol, lihat [Membuat fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) dengan konsol.
+ Untuk mempelajari cara membuat fungsi Lambda menggunakan AWS CLI, lihat Menggunakan [AWS Lambda dengan Antarmuka Baris AWS Perintah](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).
+ Pilih bagian yang relevan dalam daftar isi untuk mempelajari lebih lanjut tentang bekerja dengan Lambda dalam bahasa pilihan Anda. Misalnya, pilih [Bekerja dengan Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) untuk mempelajari lebih lanjut tentang menggunakan Lambda dengan. AWS SDK untuk Python (Boto3)

*Ground Truth menyediakan templat pra-anotasi dan pasca-anotasi melalui resep AWS Serverless Application Repository (SAR).* Gunakan prosedur berikut untuk memilih resep Ground Truth di konsol Lambda.

**Gunakan resep Ground Truth SAR untuk membuat fungsi Lambda pra-anotasi dan pasca-anotasi:**

1. Buka [halaman **Fungsi**](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih **Buat fungsi**.

1. Pilih **Jelajahi repositori aplikasi tanpa server**.

1. Di kotak teks pencarian, masukkan **aws-sagemaker-ground-truth-recipe** dan pilih aplikasi itu.

1. Pilih **Terapkan**. Aplikasi ini mungkin membutuhkan waktu beberapa menit untuk digunakan. 

   Setelah aplikasi di-deploy, dua fungsi muncul di bagian **Fungsi** konsol `serverlessrepo-aws-sagema-GtRecipePreHumanTaskFunc-<id>` Lambda: dan. `serverlessrepo-aws-sagema-GtRecipeAnnotationConsol-<id>` 

1. Pilih salah satu fungsi ini dan tambahkan logika kustom Anda di bagian **Kode**.

1. Setelah Anda selesai membuat perubahan, pilih **Deploy untuk menerapkannya**.

# Uji fungsi Lambda pra-anotasi dan pasca-anotasi
<a name="sms-custom-templates-step3-lambda-test"></a>

Anda dapat menguji pra-anotasi dan memposting anotasi fungsi Lambda di konsol Lambda. Jika Anda adalah pengguna baru Lambda, Anda dapat mempelajari cara menguji, atau *memanggil*, fungsi Lambda Anda di konsol menggunakan tutorial [fungsi Buat Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html#gettingstarted-zip-function) dengan konsol di Panduan Pengembang. AWS Lambda Anda dapat menggunakan bagian di halaman ini untuk mempelajari cara menguji templat pra-anotasi dan pasca-anotasi Ground Truth yang disediakan melalui (SAR AWS Serverless Application Repository ). 

**Topics**
+ [Prasyarat](#sms-custom-templates-step3-lambda-test-pre)
+ [Uji Fungsi Lambda Pra-anotasi](#sms-custom-templates-step3-lambda-test-pre-annotation)
+ [Uji Fungsi Lambda Pasca-Anotasi](#sms-custom-templates-step3-lambda-test-post-annotation)

## Prasyarat
<a name="sms-custom-templates-step3-lambda-test-pre"></a>

Anda harus melakukan hal berikut untuk menggunakan tes yang dijelaskan di halaman ini.
+ Anda memerlukan akses ke konsol Lambda, dan Anda memerlukan izin untuk membuat dan menjalankan fungsi Lambda. Untuk mempelajari cara mengatur izin ini, lihat[Berikan Izin untuk Membuat dan Memilih AWS Lambda Fungsi](sms-custom-templates-step3-lambda-permissions.md#sms-custom-templates-step3-postlambda-create-perms).
+ Jika Anda belum menerapkan resep Ground Truth SAR, gunakan prosedur [Buat fungsi Lambda menggunakan template Ground Truth](sms-custom-templates-step3-lambda-create.md) untuk melakukannya.
+ Untuk menguji fungsi Lambda pasca-anotasi, Anda harus memiliki file data di Amazon S3 dengan data anotasi sampel. Untuk tes sederhana, Anda dapat menyalin dan menempelkan kode berikut ke dalam file dan menyimpannya sebagai `sample-annotations.json` dan [mengunggah file ini ke Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html). Perhatikan URI S3 dari file ini—Anda memerlukan informasi ini untuk mengonfigurasi pengujian Lambda pasca-anotasi.

  ```
  [{"datasetObjectId":"0","dataObject":{"content":"To train a machine learning model, you need a large, high-quality, labeled dataset. Ground Truth helps you build high-quality training datasets for your machine learning models."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":8,\"label\":\"verb\",\"startOffset\":3},{\"endOffset\":27,\"label\":\"adjective\",\"startOffset\":11},{\"endOffset\":33,\"label\":\"object\",\"startOffset\":28},{\"endOffset\":51,\"label\":\"adjective\",\"startOffset\":46},{\"endOffset\":65,\"label\":\"adjective\",\"startOffset\":53},{\"endOffset\":74,\"label\":\"adjective\",\"startOffset\":67},{\"endOffset\":82,\"label\":\"adjective\",\"startOffset\":75},{\"endOffset\":102,\"label\":\"verb\",\"startOffset\":97},{\"endOffset\":112,\"label\":\"verb\",\"startOffset\":107},{\"endOffset\":125,\"label\":\"adjective\",\"startOffset\":113},{\"endOffset\":134,\"label\":\"adjective\",\"startOffset\":126},{\"endOffset\":143,\"label\":\"object\",\"startOffset\":135},{\"endOffset\":169,\"label\":\"adjective\",\"startOffset\":153},{\"endOffset\":176,\"label\":\"object\",\"startOffset\":170}]}}"}}]},{"datasetObjectId":"1","dataObject":{"content":"Sift 3 cups of flour into the bowl."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}"}}]},{"datasetObjectId":"2","dataObject":{"content":"Jen purchased 10 shares of the stock on Janurary 1st, 2020."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":3,\"label\":\"person\",\"startOffset\":0},{\"endOffset\":13,\"label\":\"verb\",\"startOffset\":4},{\"endOffset\":16,\"label\":\"number\",\"startOffset\":14},{\"endOffset\":58,\"label\":\"date\",\"startOffset\":40}]}}"}}]},{"datasetObjectId":"3","dataObject":{"content":"The narrative was interesting, however the character development was weak."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":29,\"label\":\"adjective\",\"startOffset\":18},{\"endOffset\":73,\"label\":\"adjective\",\"startOffset\":69}]}}"}}]}]
  ```
+ Anda harus menggunakan petunjuk [Berikan Izin Lambda Pasca-Anotasi untuk Mengakses Anotasi](sms-custom-templates-step3-lambda-permissions.md#sms-custom-templates-step3-postlambda-perms) untuk memberikan izin peran eksekusi fungsi Lambda pasca-anotasi Anda untuk mengambil peran eksekusi SageMaker AI yang Anda gunakan untuk membuat pekerjaan pelabelan. Fungsi Lambda pasca-anotasi menggunakan peran eksekusi SageMaker AI untuk mengakses file data anotasi,, di S3. `sample-annotations.json`



## Uji Fungsi Lambda Pra-anotasi
<a name="sms-custom-templates-step3-lambda-test-pre-annotation"></a>

Gunakan prosedur berikut untuk menguji fungsi Lambda pra-anotasi yang dibuat saat Anda menerapkan resep Ground AWS Serverless Application Repository Truth (SAR). 

**Uji resep Ground Truth SAR pra-anotasi fungsi Lambda**

1. Buka [halaman **Fungsi**](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi pra-anotasi yang digunakan dari resep Ground Truth SAR. Nama fungsi ini mirip dengan`serverlessrepo-aws-sagema-GtRecipePreHumanTaskFunc-<id>`.

1. Di bagian **Sumber kode**, pilih panah di sebelah **Uji**.

1. Pilih **Konfigurasikan acara pengujian**.

1. Tetap pilih opsi **Create new test event**.

1. Di bawah **template Event**, pilih **SageMakerGround Truth PreHumanTask**. 

1. Berikan tes Anda **nama Acara**.

1. Pilih **Buat**.

1. Pilih panah di sebelah **Uji** lagi dan Anda akan melihat bahwa tes yang Anda buat dipilih, yang ditunjukkan dengan titik dengan nama acara. Jika tidak dipilih, pilih. 

1. Pilih **Test** untuk menjalankan tes. 

Setelah Anda menjalankan tes, Anda dapat melihat **hasil Eksekusi**. Dalam **log Fungsi**, Anda akan melihat respons yang mirip dengan yang berikut ini:

```
START RequestId: cd117d38-8365-4e1a-bffb-0dcd631a878f Version: $LATEST
Received event: {
  "version": "2018-10-16",
  "labelingJobArn": "arn:aws:sagemaker:us-east-2:123456789012:labeling-job/example-job",
  "dataObject": {
    "source-ref": "s3://sagemakerexample/object_to_annotate.jpg"
  }
}
{'taskInput': {'taskObject': 's3://sagemakerexample/object_to_annotate.jpg'}, 'isHumanAnnotationRequired': 'true'}
END RequestId: cd117d38-8365-4e1a-bffb-0dcd631a878f
REPORT RequestId: cd117d38-8365-4e1a-bffb-0dcd631a878f	Duration: 0.42 ms	Billed Duration: 1 ms	Memory Size: 128 MB	Max Memory Used: 43 MB
```

Dalam respons ini, kita dapat melihat output fungsi Lambda cocok dengan sintaks respons pra-anotasi yang diperlukan:

```
{'taskInput': {'taskObject': 's3://sagemakerexample/object_to_annotate.jpg'}, 'isHumanAnnotationRequired': 'true'}
```

## Uji Fungsi Lambda Pasca-Anotasi
<a name="sms-custom-templates-step3-lambda-test-post-annotation"></a>

Gunakan prosedur berikut untuk menguji fungsi Lambda pasca-anotasi yang dibuat saat Anda menerapkan resep Ground AWS Serverless Application Repository Truth (SAR). 

**Uji resep Ground Truth SAR pasca-anotasi Lambda**

1. Buka [halaman **Fungsi**](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi pasca-anotasi yang digunakan dari resep Ground Truth SAR. Nama fungsi ini mirip dengan`serverlessrepo-aws-sagema-GtRecipeAnnotationConsol-<id>`.

1. Di bagian **Sumber kode**, pilih panah di sebelah **Uji**.

1. Pilih **Konfigurasikan acara pengujian**.

1. Tetap pilih opsi **Create new test event**.

1. Di bawah **template Event**, pilih **SageMakerGround Truth AnnotationConsolidation**.

1. Berikan tes Anda **nama Acara**.

1. Ubah kode template yang disediakan sebagai berikut:
   + Ganti Nama Sumber Daya Amazon (ARN) `roleArn` dengan ARN dari peran eksekusi SageMaker AI yang Anda gunakan untuk membuat pekerjaan pelabelan.
   + Ganti URI S3 `s3Uri` dengan URI `sample-annotations.json` file yang Anda tambahkan ke Amazon S3.

   Setelah Anda melakukan modifikasi ini, tes Anda akan terlihat mirip dengan yang berikut:

   ```
   {
     "version": "2018-10-16",
     "labelingJobArn": "arn:aws:sagemaker:us-east-2:123456789012:labeling-job/example-job",
     "labelAttributeName": "example-attribute",
     "roleArn": "arn:aws:iam::222222222222:role/sm-execution-role",
     "payload": {
       "s3Uri": "s3://your-bucket/sample-annotations.json"
     }
   }
   ```

1. Pilih **Buat**.

1. Pilih panah di sebelah **Uji** lagi dan Anda akan melihat bahwa tes yang Anda buat dipilih, yang ditunjukkan dengan titik dengan nama acara. Jika tidak dipilih, pilih. 

1. Pilih **Test** untuk menjalankan tes. 

Setelah Anda menjalankan pengujian, Anda akan melihat `-- Consolidated Output --` bagian di **Function Logs**, yang berisi daftar semua anotasi yang disertakan di `sample-annotations.json` dalamnya.