

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

# Mengelola model Label Kustom Rekognition Amazon
<a name="managing-model"></a>

Model Amazon Rekognition Custom Labels adalah model matematika yang memprediksi keberadaan objek, adegan, dan konsep dalam gambar baru. Ini dilakukan dengan menemukan pola dalam gambar yang digunakan untuk melatih model. Bagian ini menunjukkan cara melatih model, mengevaluasi kinerjanya, dan melakukan perbaikan. Ini juga menunjukkan kepada Anda bagaimana membuat model tersedia untuk digunakan dan cara menghapus model saat Anda tidak lagi membutuhkannya. 

**Topics**
+ [Menghapus model Label Kustom Rekognition Amazon](tm-delete-model.md)
+ [Menandai model](tm-tagging-model.md)
+ [Menjelaskan model (SDK)](md-describing-model-sdk.md)
+ [Menyalin model Amazon Rekognition Custom Labels (SDK)](md-copy-model-overview.md)

# Menghapus model Label Kustom Rekognition Amazon
<a name="tm-delete-model"></a>

Anda dapat menghapus model dengan menggunakan konsol Amazon Rekognition Custom Labels atau dengan menggunakan API. [DeleteProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectVersion) Anda tidak dapat menghapus model jika model sedang berjalan atau jika model sedang dalam pelatihan. Untuk menghentikan model yang sedang berjalan, gunakan [StopProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StopProjectVersion)API. Untuk informasi selengkapnya, lihat [Menghentikan model Label Kustom Rekognition Amazon (SDK)](rm-stop.md#rm-stop-sdk). Jika model sedang dilatih, tunggu hingga selesai sebelum Anda menghapus model.

Model yang dihapus tidak dapat dihapus.

**Topics**
+ [Menghapus model Label Kustom Rekognition Amazon (Konsol)](#tm-delete-model-console)
+ [Menghapus model Label Kustom Rekognition Amazon (SDK)](#tm-delete-model-sdk)

## Menghapus model Label Kustom Rekognition Amazon (Konsol)
<a name="tm-delete-model-console"></a>

Prosedur berikut menunjukkan cara menghapus model dari halaman detail proyek. Anda juga dapat menghapus model dari halaman detail model. 

**Untuk menghapus model (konsol)**

1. Buka konsol Amazon Rekognition di. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)

1. Pilih **Gunakan Label Kustom**.

1. Pilih **Mulai**. 

1. Di panel navigasi kiri, pilih **Proyek**.

1. Pilih proyek yang berisi model yang ingin Anda hapus. Halaman detail proyek terbuka.

1. Di bagian **Model**, pilih model yang ingin Anda hapus.
**catatan**  
Jika model tidak dapat dipilih, model sedang berjalan atau sedang dilatih, dan tidak dapat dihapus. Periksa bidang **Status** dan coba lagi setelah menghentikan model yang sedang berjalan, atau tunggu hingga pelatihan selesai. 

1. Pilih **Hapus model** dan **kotak dialog Delete model ditampilkan**.

1. Masukkan **hapus** untuk mengonfirmasi penghapusan. 

1. Pilih **Hapus** untuk menghapus model. Menghapus model mungkin perlu beberapa saat untuk diselesaikan.
**catatan**  
Jika Anda **Menutup** kotak dialog selama penghapusan model, model masih dihapus.

## Menghapus model Label Kustom Rekognition Amazon (SDK)
<a name="tm-delete-model-sdk"></a>

Anda menghapus model Label Kustom Rekognition Amazon dengan [DeleteProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectVersion)memanggil dan memasok Nama Sumber Daya Amazon (ARN) model yang ingin Anda hapus. Anda bisa mendapatkan ARN model dari bagian **Use your model pada halaman detail model** di konsol Amazon Rekognition Custom Labels. Atau, hubungi [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)dan berikan yang berikut ini.
+ ARN proyek (`ProjectArn`) yang terkait dengan model tersebut.
+ Nama versi (`VersionNames`) dari model. 

Model ARN adalah `ProjectVersionArn` bidang dalam [ProjectVersionDescription](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ProjectVersionDescription)objek, dari respons. `DescribeProjectVersions`

Anda tidak dapat menghapus model jika sedang berjalan atau sedang dilatih. Untuk menentukan apakah model sedang berjalan atau pelatihan, panggil [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DescribeProjectVersions)dan periksa `Status` bidang [ProjectVersionDescription](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ProjectVersionDescription)objek model. Untuk menghentikan model yang sedang berjalan, gunakan [StopProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StopProjectVersion)API. Untuk informasi selengkapnya, lihat [Menghentikan model Label Kustom Rekognition Amazon (SDK)](rm-stop.md#rm-stop-sdk). Anda harus menunggu model untuk menyelesaikan pelatihan sebelum Anda dapat menghapusnya. 

**Untuk menghapus model (SDK)**

1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDKs. Untuk informasi selengkapnya, lihat [Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

1. Gunakan kode berikut untuk menghapus model. 

------
#### [ AWS CLI ]

   Ubah nilai `project-version-arn` menjadi nama proyek yang ingin Anda hapus.

   ```
   aws rekognition delete-project-version --project-version-arn model_arn \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Menyediakan parameter baris perintah berikut
   + `project_arn`— ARN dari proyek yang berisi model yang ingin Anda hapus.
   + `model_arn`— ARN dari versi model yang ingin Anda hapus.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Shows how to delete an existing Amazon Rekognition Custom Labels model.
   """
   
   
   import argparse
   import logging
   import time
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def find_forward_slash(input_string, n):
       """
       Returns the location of '/' after n number of occurences. 
       :param input_string: The string you want to search
       : n: the occurence that you want to find.
       """
       position = input_string.find('/')
       while position >= 0 and n > 1:
           position = input_string.find('/', position + 1)
           n -= 1
       return position
   
   
   def delete_model(rek_client, project_arn, model_arn):
       """
       Deletes an Amazon Rekognition Custom Labels model.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param model_arn: The ARN of the model version that you want to delete.
       """
   
       try:
           # Delete the model
           logger.info("Deleting dataset: {%s}", model_arn)
   
           rek_client.delete_project_version(ProjectVersionArn=model_arn)
   
           # Get the model version name
           start = find_forward_slash(model_arn, 3) + 1
           end = find_forward_slash(model_arn, 4)
           version_name = model_arn[start:end]
   
           deleted = False
   
           # model might not be deleted yet, so wait deletion finishes.
           while deleted is False:
               describe_response = rek_client.describe_project_versions(ProjectArn=project_arn,
                                                                        VersionNames=[version_name])
               if len(describe_response['ProjectVersionDescriptions']) == 0:
                   deleted = True
               else:
                   logger.info("Waiting for model deletion %s", model_arn)
                   time.sleep(5)
   
           logger.info("model deleted: %s", model_arn)
   
           return True
   
       except ClientError as err:
           logger.exception("Couldn't delete model - %s: %s",
                            model_arn, err.response['Error']['Message'])
           raise
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project that contains the model that you want to delete."
       )
   
       parser.add_argument(
           "model_arn", help="The ARN of the model version that you want to delete."
       )
   
   
   def confirm_model_deletion(model_arn):
       """
       Confirms deletion of the model. Returns True if delete entered.
       :param model_arn: The ARN of the model that you want to delete.
       """
       print(f"Are you sure you wany to delete model {model_arn} ?\n", model_arn)
   
       start = input("Enter delete to delete your model: ")
       if start == "delete":
           return True
       else:
           return False
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           if confirm_model_deletion(args.model_arn) is True:
               print(f"Deleting model: {args.model_arn}")
   
               # Delete the model.
               session = boto3.Session(profile_name='custom-labels-access')
               rekognition_client = session.client("rekognition")
   
               delete_model(rekognition_client,
                            args.project_arn,
                            args.model_arn)
   
               print(f"Finished deleting model: {args.model_arn}")
           else:
               print(f"Not deleting model {args.model_arn}")
   
       except ClientError as err:
           print(f"Problem deleting model: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]
   + `project_arn`— ARN dari proyek yang berisi model yang ingin Anda hapus.
   + `model_arn`— ARN dari versi model yang ingin Anda hapus.

   ```
   //Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   import java.net.URI;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   
   import software.amazon.awssdk.services.rekognition.model.DeleteProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.DeleteProjectVersionResponse;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class DeleteModel {
   
       public static final Logger logger = Logger.getLogger(DeleteModel.class.getName());
   
       public static int findForwardSlash(String modelArn, int n) {
   
           int start = modelArn.indexOf('/');
           while (start >= 0 && n > 1) {
               start = modelArn.indexOf('/', start + 1);
               n -= 1;
           }
           return start;
   
       }
   
       public static void deleteMyModel(RekognitionClient rekClient, String projectArn, String modelArn)
               throws InterruptedException {
   
           try {
   
               logger.log(Level.INFO, "Deleting model: {0}", projectArn);
   
               // Delete the model
   
               DeleteProjectVersionRequest deleteProjectVersionRequest = DeleteProjectVersionRequest.builder()
                       .projectVersionArn(modelArn).build();
   
               DeleteProjectVersionResponse response =
                       rekClient.deleteProjectVersion(deleteProjectVersionRequest);
   
               logger.log(Level.INFO, "Status: {0}", response.status());
   
               // Get the model version
   
               int start = findForwardSlash(modelArn, 3) + 1;
               int end = findForwardSlash(modelArn, 4);
   
               String versionName = modelArn.substring(start, end);
   
               Boolean deleted = false;
   
               DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                       .projectArn(projectArn).versionNames(versionName).build();
   
               // Wait until model is deleted.
   
               do {
   
                   DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient
                           .describeProjectVersions(describeProjectVersionsRequest);
   
                   if (describeProjectVersionsResponse.projectVersionDescriptions().size()==0) {
                       logger.log(Level.INFO, "Waiting for model deletion: {0}", modelArn);
                       Thread.sleep(5000);
                   } else {
                       deleted = true;
                       logger.log(Level.INFO, "Model deleted: {0}", modelArn);
                   }
                   
               } while (Boolean.FALSE.equals(deleted));
   
               logger.log(Level.INFO, "Model deleted: {0}", modelArn);
   
           } catch (
   
           RekognitionException e) {
               logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <model_arn>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that contains the model that you want to delete.\n\n"
                   + "   model_version - The ARN of the model that you want to delete.\n\n";
   
           if (args.length != 2) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectArn = args[0];
           String modelVersion = args[1];
   
           try {
   
               RekognitionClient rekClient = RekognitionClient.builder().build();
   
               // Delete the model
               deleteMyModel(rekClient, projectArn, modelVersion);
   
               System.out.println(String.format("model deleted: %s", modelVersion));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
           catch (InterruptedException intError) {
               logger.log(Level.SEVERE, "Exception while sleeping: {0}", intError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

# Menandai model
<a name="tm-tagging-model"></a>

Anda dapat mengidentifikasi, mengatur, mencari, dan memfilter model Rekognition Amazon Anda dengan menggunakan tag. Setiap tag adalah label yang terdiri dari kunci dan nilai yang ditentukan pengguna. Misalnya, untuk membantu menentukan penagihan untuk model Anda, beri tag model Anda dengan `Cost center` kunci dan tambahkan nomor pusat biaya yang sesuai sebagai nilai. Untuk informasi selengkapnya, lihat [Menandai sumber daya AWS](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).

Gunakan tag untuk:
+ Lacak penagihan untuk model dengan menggunakan tag alokasi biaya. Untuk informasi selengkapnya, lihat [Menggunakan Tag Alokasi Biaya](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html).
+ Kontrol akses ke model dengan menggunakan Identity and Access Management (IAM) Untuk informasi selengkapnya, lihat [Mengontrol akses ke sumber daya AWS menggunakan tanda sumber daya](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html).
+ Mengotomatiskan manajemen model. Misalnya, Anda dapat menjalankan skrip start atau stop otomatis yang mematikan model pengembangan selama jam non-bisnis untuk mengurangi biaya. Untuk informasi selengkapnya, lihat [Menjalankan model Label Kustom Rekognition Amazon yang terlatih](running-model.md). 

Anda dapat menandai model dengan menggunakan konsol Amazon Rekognition atau dengan menggunakan. AWS SDKs 

**Topics**
+ [Model penandaan (konsol)](#tm-tagging-model-console)
+ [Melihat tag model](#tm-tagging-model-viewing-console)
+ [Model penandaan (SDK)](#tm-tagging-model-sdk)

## Model penandaan (konsol)
<a name="tm-tagging-model-console"></a>

Anda dapat menggunakan konsol Rekognition untuk menambahkan tag ke model, melihat tag yang dilampirkan ke model, dan menghapus tag. 

### Menambah atau menghapus tag
<a name="tm-tagging-model-add-remove-console"></a>

Prosedur ini menjelaskan cara menambahkan tag ke, atau menghapus tag dari, model yang ada. Anda juga dapat menambahkan tag ke model baru saat dilatih. Untuk informasi selengkapnya, lihat [Melatih model Label Kustom Rekognition Amazon](training-model.md). 

**Untuk menambahkan tag ke, atau menghapus tag dari, model yang ada menggunakan konsol**

1. Buka konsol Amazon Rekognition di. [ https://console.aws.amazon.com/rekognition/]( https://console.aws.amazon.com/rekognition/)

1. Pilih **Mulai**. 

1. Di panel navigasi, pilih **Proyek**.

1. Pada halaman Sumber daya **proyek**, pilih proyek yang berisi model yang ingin Anda tag.

1. Di panel navigasi, di bawah proyek yang Anda pilih sebelumnya, pilih **Model**.

1. Di bagian **Model**, pilih model yang ingin Anda tambahkan tag. 

1. Pada halaman detail model, pilih tab **Tag**. 

1. Di bagian **Tag**, pilih **Kelola tag**.

1. Pada halaman **Kelola tag**, pilih **Tambahkan tag baru**.

1. Masukkan kunci dan nilai.

   1. Untuk **Key**, masukkan nama untuk kunci tersebut.

   1. Untuk **Nilai**, masukkan nilai.

1. Untuk menambahkan lebih banyak tag, ulangi langkah 9 dan 10.

1. (Opsional) Untuk menghapus tag, pilih **Hapus** di samping tag yang ingin Anda hapus. Jika Anda menghapus tag yang disimpan sebelumnya, tag tersebut akan dihapus saat Anda menyimpan perubahan. 

1. Pilih **Simpan perubahan** untuk menyimpan perubahan Anda.

## Melihat tag model
<a name="tm-tagging-model-viewing-console"></a>

Anda dapat menggunakan konsol Amazon Rekognition untuk melihat tag yang dilampirkan ke model.

Untuk melihat tag yang dilampirkan ke *semua model dalam proyek*, Anda harus menggunakan AWS SDK. Untuk informasi selengkapnya, lihat [Daftar tag model](#listing-model-tags-sdk).

**Untuk melihat tag yang dilampirkan ke model**

1. Buka konsol Amazon Rekognition di. [ https://console.aws.amazon.com/rekognition/]( https://console.aws.amazon.com/rekognition/)

1. Pilih **Mulai**. 

1. Di panel navigasi, pilih **Proyek**.

1. Pada halaman Sumber daya **proyek**, pilih proyek yang berisi model yang tagnya ingin Anda lihat.

1. Di panel navigasi, di bawah proyek yang Anda pilih sebelumnya, pilih **Model**.

1. Di bagian **Model**, pilih model yang tagnya ingin Anda lihat. 

1. Pada halaman detail model, pilih tab **Tag**. Tag ditampilkan di bagian **Tag**.

## Model penandaan (SDK)
<a name="tm-tagging-model-sdk"></a>

Anda dapat menggunakan AWS SDK untuk:
+ Tambahkan tag ke model baru
+ Tambahkan tag ke model yang ada
+ Buat daftar tag yang dilampirkan pada model 
+ Hapus tag dari model 

Tag dalam AWS CLI contoh berikut adalah dalam format berikut.

```
--tags '{"key1":"value1","key2":"value2"}' 
```

Atau, Anda dapat menggunakan format ini.

```
--tags key1=value1,key2=value2
```

Jika Anda belum menginstal AWS CLI, lihat[Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

### Menambahkan tag ke model baru
<a name="tagging-new-model-sdk"></a>

Anda dapat menambahkan tag ke model saat Anda membuatnya menggunakan [CreateProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion.html)operasi. Tentukan satu tanda atau lebih dalam parameter input array `Tags`. 

```
aws rekognition create-project-version --project-arn project arn \
  --version-name version_name \
  --output-config '{ "S3Location": { "Bucket": "output bucket", "Prefix":  "output folder" } }' \
  --tags '{"key1":"value1","key2":"value2"}' \
  --profile custom-labels-access
```

Untuk informasi tentang membuat dan melatih model, lihat[Melatih model (SDK)](training-model.md#tm-sdk).

### Menambahkan tag ke model yang ada
<a name="tagging-new-model-sdk"></a>

Untuk menambahkan satu atau beberapa tag ke model yang ada, gunakan [TagResource](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_TagResource)operasi. Tentukan Amazon Resource Name (ARN) (`ResourceArn`) model dan tag (`Tags`) yang ingin Anda tambahkan. Contoh berikut menunjukkan cara menambahkan dua tanda.

```
aws rekognition tag-resource --resource-arn resource-arn \
  --tags '{"key1":"value1","key2":"value2"}' \
  --profile custom-labels-access
```

Anda bisa mendapatkan ARN untuk model dengan menelepon. [CreateProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateProjectVersion)

### Daftar tag model
<a name="listing-model-tags-sdk"></a>

Untuk membuat daftar tag yang dilampirkan pada model, gunakan [ListTagsForResource](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListTagsForResource)operasi dan tentukan ARN model ()`ResourceArn`. Responsnya adalah peta kunci tag dan nilai yang dilampirkan ke model yang ditentukan.

```
aws rekognition list-tags-for-resource --resource-arn resource-arn \
  --profile custom-labels-access
```

Output menampilkan daftar tag yang dilampirkan pada model.

```
{
    "Tags": {
        "Dept": "Engineering",
        "Name": "Ana Silva Carolina",
        "Role": "Developer"
    }
}
```

Untuk melihat model mana dalam proyek yang memiliki tag tertentu, hubungi `DescribeProjectVersions` untuk mendapatkan daftar model. Kemudian panggil `ListTagsForResource` setiap model dalam tanggapan dari`DescribeProjectVersions`. Periksa respons dari `ListTagsForResource` untuk melihat apakah tag yang diperlukan ada. 

Contoh Python 3 berikut menunjukkan kepada Anda bagaimana mencari semua proyek Anda untuk kunci dan nilai tag tertentu. Outputnya mencakup proyek ARN dan model ARN di mana kunci yang cocok ditemukan.

**Untuk mencari nilai tag**

1. Simpan kode berikut ke file bernama`find_tag.py`.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   """
   Purpose
   Shows how to find a tag value that's associated with models within
   your Amazon Rekognition Custom Labels projects.
   """
   import logging
   import argparse
   import boto3
   
   from botocore.exceptions import ClientError
   
   
   logger = logging.getLogger(__name__)
   
   
   def find_tag_in_projects(rekognition_client, key, value):
       """
       Finds Amazon Rekognition Custom Label models tagged with the supplied key and key value.
       :param rekognition_client: An Amazon Rekognition boto3 client.
       :param key: The tag key to find.
       :param value: The value of the tag that you want to find.
       return: A list of matching model versions (and model projects) that were found.
       """
       try:
   
           found_tags = []
           found = False
   
           projects = rekognition_client.describe_projects()
           # Iterate through each project and models within a project.
           for project in projects["ProjectDescriptions"]:
               logger.info("Searching project: %s ...", project["ProjectArn"])
   
               models = rekognition_client.describe_project_versions(
                   ProjectArn=(project["ProjectArn"])
               )
   
               for model in models["ProjectVersionDescriptions"]:
                   logger.info("Searching model %s", model["ProjectVersionArn"])
   
                   tags = rekognition_client.list_tags_for_resource(
                       ResourceArn=model["ProjectVersionArn"]
                   )
   
                   logger.info(
                       "\tSearching model: %s for tag: %s value: %s.",
                       model["ProjectVersionArn"],
                       key,
                       value,
                   )
                   # Check if tag exists.
   
                   if key in tags["Tags"]:
                       if tags["Tags"][key] == value:
                           found = True
                           logger.info(
                               "\t\tMATCH: Project: %s: model version %s",
                               project["ProjectArn"],
                               model["ProjectVersionArn"],
                           )
                           found_tags.append(
                               {
                                   "Project": project["ProjectArn"],
                                   "ModelVersion": model["ProjectVersionArn"],
                               }
                           )
   
           if found is False:
               logger.info("No match for Tag %s with value %s.", key, value)
           return found_tags
       except ClientError as err:
           logger.info("Problem finding tags: %s. ", format(err))
           raise
   
   
   def main():
       """
       Entry point for example.
       """
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       # Set up command line arguments.
       parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
   
       parser.add_argument("tag", help="The tag that you want to find.")
       parser.add_argument("value", help="The tag value that you want to find.")
   
       args = parser.parse_args()
       key = args.tag
       value = args.value
   
       print(f"Searching your models for tag: {key} with value: {value}.")
   
   
       session = boto3.Session(profile_name='custom-labels-access')
       rekognition_client = session.client("rekognition")
   
       # Get tagged models for all projects.
       tagged_models = find_tag_in_projects(rekognition_client, key, value)
   
       print("Matched models\n--------------")
       if len(tagged_models) > 0:
           for model in tagged_models:
               print(
                   "Project: {project}\nModel version: {version}\n".format(
                       project=model["Project"], version=model["ModelVersion"]
                   )
               )
   
       else:
           print("No matches found.")
   
       print("Done.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. Di prompt perintah, masukkan perintah berikut. Ganti *key* dan *value* dengan nama kunci dan nilai kunci yang ingin Anda temukan.

   ```
   python find_tag.py key value
   ```

### Menghapus tag dari model
<a name="tm-removing-a-tag-sdk"></a>

Untuk menghapus satu atau lebih tag dari model, gunakan [UntagResource](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_UntagResource)operasi. Tentukan ARN dari model (`ResourceArn`) dan tombol tanda (`Tag-Keys`) yang ingin Anda hapus. 

```
aws rekognition untag-resource --resource-arn resource-arn \
  --tag-keys '["key1","key2"]' \
  --profile custom-labels-access
```

Atau, Anda dapat menentukan `tag-keys` dalam format ini.

```
--tag-keys key1,key2 
```

# Menjelaskan model (SDK)
<a name="md-describing-model-sdk"></a>

Anda dapat menggunakan `DescribeProjectVersions` API untuk mendapatkan informasi tentang versi model. Jika Anda tidak menentukan`VersionName`, `DescribeProjectVersions` mengembalikan deskripsi untuk semua versi model dalam proyek.

**Untuk menggambarkan model (SDK)**

1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDKs. Untuk informasi selengkapnya, lihat [Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

1. Gunakan kode contoh berikut untuk menggambarkan versi model.

------
#### [ AWS CLI ]

   Ubah nilai `project-arn` ke ARN proyek yang ingin Anda gambarkan. Ubah nilai `version-name` ke versi model yang ingin Anda gambarkan.

   ```
   aws rekognition describe-project-versions --project-arn project_arn \
     --version-names version_name \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + project\$1arn — ARN dari model yang ingin Anda gambarkan. 
   + model\$1version — versi model yang ingin Anda gambarkan. 

   Misalnya: `python describe_model.py project_arn model_version `

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Shows how to describe an Amazon Rekognition Custom Labels model.
   """
   import argparse
   import logging
   import boto3
   
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def describe_model(rek_client, project_arn, version_name):
       """
       Describes an Amazon Rekognition Custom Labels model.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The ARN of the prject that contains the model.
       :param version_name: The version name of the model that you want to describe.
       """
   
       try:
           # Describe the model
           logger.info("Describing model: %s for project %s",
                       version_name, project_arn)
   
           describe_response = rek_client.describe_project_versions(ProjectArn=project_arn,
                                                                    VersionNames=[version_name])
           for model in describe_response['ProjectVersionDescriptions']:
               print(f"Created: {str(model['CreationTimestamp'])} ")
               print(f"ARN: {str(model['ProjectVersionArn'])} ")
               if 'BillableTrainingTimeInSeconds' in model:
                   print(
                       f"Billing training time (minutes): {str(model['BillableTrainingTimeInSeconds']/60)} ")
               print("Evaluation results: ")
               if 'EvaluationResult' in model:
                   evaluation_results = model['EvaluationResult']
                   print(f"\tF1 score: {str(evaluation_results['F1Score'])}")
                   print(
                       f"\tSummary location: s3://{evaluation_results['Summary']['S3Object']['Bucket']}/{evaluation_results['Summary']['S3Object']['Name']}")
   
               if 'ManifestSummary' in model:
                   print(
                       f"Manifest summary location: s3://{model['ManifestSummary']['S3Object']['Bucket']}/{model['ManifestSummary']['S3Object']['Name']}")
               if 'OutputConfig' in model:
                   print(
                       f"Training output location: s3://{model['OutputConfig']['S3Bucket']}/{model['OutputConfig']['S3KeyPrefix']}")
               if 'MinInferenceUnits' in model:
                   print(
                       f"Minimum inference units: {str(model['MinInferenceUnits'])}")
               if 'MaxInferenceUnits' in model:
                   print(
                       f"Maximum Inference units: {str(model['MaxInferenceUnits'])}")
   
               print("Status: " + model['Status'])
               print("Message: " + model['StatusMessage'])
   
       except ClientError as err:
           logger.exception(
               "Couldn't describe model: %s", err.response['Error']['Message'])
           raise
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project in which the model resides."
       )
       parser.add_argument(
           "version_name", help="The version of the model that you want to describe."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(
               f"Describing model: {args.version_name} for project {args.project_arn}.")
   
           # Describe the model.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           describe_model(rekognition_client, args.project_arn,
                          args.version_name)
   
           print(
               f"Finished describing model: {args.version_name} for project {args.project_arn}.")
   
       except ClientError as err:
           error_message = f"Problem describing model: {err}"
           logger.exception(error_message)
           print(error_message)
       except Exception as err:
           error_message = f"Problem describing model: {err}"
           logger.exception(error_message)
           print(error_message)
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + project\$1arn — ARN dari model yang ingin Anda gambarkan. 
   + model\$1version — versi model yang ingin Anda gambarkan. 

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.EvaluationResult;
   import software.amazon.awssdk.services.rekognition.model.GroundTruthManifest;
   import software.amazon.awssdk.services.rekognition.model.OutputConfig;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class DescribeModel {
   
       public static final Logger logger = Logger.getLogger(DescribeModel.class.getName());
   
       public static void describeMyModel(RekognitionClient rekClient, String projectArn, String versionName) {
   
           try {
   
               // If a single version name is supplied, build request argument
   
               DescribeProjectVersionsRequest describeProjectVersionsRequest = null;
   
               if (versionName == null) {
                   describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder().projectArn(projectArn)
                           .build();
               } else {
                   describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder().projectArn(projectArn)
                           .versionNames(versionName).build();
               }
   
               DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient
                       .describeProjectVersions(describeProjectVersionsRequest);
   
               for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse
                       .projectVersionDescriptions()) {
   
                   System.out.println("ARN: " + projectVersionDescription.projectVersionArn());
                   System.out.println("Status: " + projectVersionDescription.statusAsString());
                   System.out.println("Message: " + projectVersionDescription.statusMessage());
   
                   if (projectVersionDescription.billableTrainingTimeInSeconds() != null) {
                       System.out.println(
                               "Billable minutes: " + (projectVersionDescription.billableTrainingTimeInSeconds() / 60));
                   }
   
                   if (projectVersionDescription.evaluationResult() != null) {
                       EvaluationResult evaluationResult = projectVersionDescription.evaluationResult();
   
                       System.out.println("F1 Score: " + evaluationResult.f1Score());
                       System.out.println("Summary location: s3://" + evaluationResult.summary().s3Object().bucket() + "/"
                               + evaluationResult.summary().s3Object().name());
                   }
   
                   if (projectVersionDescription.manifestSummary() != null) {
                       GroundTruthManifest manifestSummary = projectVersionDescription.manifestSummary();
                       System.out.println("Manifest summary location: s3://" + manifestSummary.s3Object().bucket() + "/"
                               + manifestSummary.s3Object().name());
   
                   }
   
                   if (projectVersionDescription.outputConfig() != null) {
                       OutputConfig outputConfig = projectVersionDescription.outputConfig();
                       System.out.println(
                               "Training output: s3://" + outputConfig.s3Bucket() + "/" + outputConfig.s3KeyPrefix());
                   }
   
                   if (projectVersionDescription.minInferenceUnits() != null) {
                       System.out.println("Min inference units: " + projectVersionDescription.minInferenceUnits());
                   }
   
                   System.out.println();
   
               }
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               throw rekError;
           }
   
       }
   
       public static void main(String args[]) {
   
           String projectArn = null;
           String versionName = null;
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <version_name>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that contains the models you want to describe.\n\n"
                   + "   version_name - (optional) The version name of the model that you want to describe. \n\n"
                   + "                  If you don't specify a value, all model versions are described.\n\n";
   
           if (args.length > 2 || args.length == 0) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
   
           if (args.length == 2) {
               versionName = args[1];
           }
   
           try {
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
                // Describe the model
               describeMyModel(rekClient, projectArn, versionName);
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

# Menyalin model Amazon Rekognition Custom Labels (SDK)
<a name="md-copy-model-overview"></a>

Anda dapat menggunakan [CopyProjectVersion](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CopyProjectVersion)operasi untuk menyalin versi model Label Kustom Rekognition Amazon dari sumber proyek Amazon Rekognition Custom Labels ke proyek tujuan. Proyek tujuan dapat berada di AWS akun yang berbeda, atau di AWS akun yang sama. Skenario tipikal adalah menyalin model yang diuji dari AWS akun pengembangan ke AWS akun produksi. 



Atau, Anda dapat melatih model di akun tujuan dengan kumpulan data sumber. Menggunakan `CopyProjectVersion` operasi memiliki keuntungan sebagai berikut.
+ Perilaku model konsisten. Pelatihan model bersifat non-deterministik dan dua model yang dilatih dengan kumpulan data yang sama tidak dijamin untuk membuat prediksi yang sama. Menyalin model dengan `CopyProjectVersion` membantu memastikan bahwa perilaku model yang disalin konsisten dengan model sumber dan Anda tidak perlu menguji ulang model. 
+ Pelatihan model tidak diperlukan. Ini menghemat uang Anda karena Anda dikenakan biaya untuk setiap pelatihan model yang berhasil. 

Untuk menyalin model ke AWS akun lain, Anda harus memiliki proyek Label Kustom Rekognition Amazon di akun tujuan. AWS Untuk informasi tentang membuat proyek, lihat[Membuat proyek](mp-create-project.md). Pastikan untuk membuat proyek di AWS akun tujuan.

[Kebijakan proyek adalah kebijakan](md-create-project-policy-document.md) berbasis sumber daya yang menetapkan izin penyalinan untuk versi model yang ingin Anda salin. Anda perlu menggunakan [kebijakan proyek](md-create-project-policy-document.md) ketika proyek tujuan berada di AWS akun yang berbeda dari proyek sumber.

Anda tidak perlu menggunakan [kebijakan proyek](md-create-project-policy-document.md), saat menyalin versi model dalam akun yang sama. Namun, Anda dapat memilih untuk menggunakan [kebijakan proyek](md-create-project-policy-document.md) pada proyek antar-akun jika Anda ingin lebih banyak kontrol atas sumber daya ini.

Anda melampirkan kebijakan proyek ke proyek sumber dengan memanggil [PutProjectPolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_PutProjectPolicy)operasi.

Anda tidak dapat menggunakan `CopyProjectVersion` untuk menyalin model ke proyek di AWS Wilayah yang berbeda. Selain itu, Anda tidak dapat menyalin model dengan konsol Label Kustom Rekognition Amazon. Dalam kasus ini, Anda dapat melatih model dalam proyek tujuan dengan kumpulan data yang digunakan untuk melatih model sumber. Untuk informasi selengkapnya, lihat [Melatih model Label Kustom Rekognition Amazon](training-model.md). 

Untuk menyalin model dari proyek sumber ke proyek tujuan, lakukan hal berikut:

**Untuk menyalin model**

1. [Buat dokumen kebijakan proyek](md-create-project-policy-document.md).

1. [Lampirkan kebijakan proyek ke proyek sumber](md-attach-project-policy.md).

1. [Salin model dengan `CopyProjectVersion` operasi](md-copy-model-sdk.md).

Untuk menghapus kebijakan proyek dari proyek, hubungi [DeleteProjectPolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectPolicy). Untuk mendapatkan daftar kebijakan proyek yang dilampirkan pada proyek, hubungi [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies). 

**Topics**
+ [Membuat dokumen kebijakan proyek](md-create-project-policy-document.md)
+ [Melampirkan kebijakan proyek (SDK)](md-attach-project-policy.md)
+ [Menyalin model (SDK)](md-copy-model-sdk.md)
+ [Daftar kebijakan proyek (SDK)](md-list-project-policies.md)
+ [Menghapus kebijakan proyek (SDK)](md-delete-project-policy.title.md)

# Membuat dokumen kebijakan proyek
<a name="md-create-project-policy-document"></a>

Rekognition Custom Labels menggunakan kebijakan berbasis sumber daya, yang dikenal *sebagai kebijakan proyek*, untuk mengelola izin penyalinan untuk versi model. Kebijakan proyek adalah dokumen format JSON.

Kebijakan proyek mengizinkan atau menolak izin [utama](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) untuk menyalin versi model dari proyek sumber ke proyek tujuan. Anda memerlukan kebijakan proyek jika proyek tujuan berada di AWS akun yang berbeda. Itu juga benar jika proyek tujuan berada di AWS akun yang sama dengan proyek sumber dan Anda ingin membatasi akses ke versi model tertentu. Misalnya, Anda mungkin ingin menolak izin salin ke peran IAM tertentu dalam akun AWS .

Contoh berikut memungkinkan kepala sekolah `arn:aws:iam::111111111111:role/Admin` untuk menyalin versi model`arn:aws:rekognition:us-east-1:123456789012:project/my_project/version/test_1/1627045542080`. 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect":"Allow",
      "Principal":{
        "AWS":"arn:aws:iam::111111111111:role/Admin"
      },
      "Action":"rekognition:CopyProjectVersion",
      "Resource":"arn:aws:rekognition:us-east-1:111111111111:project/my_project/version/test_1/1627045542080"
    }
  ]
}
```

------

**catatan**  
`Action`,`Resource`,`Principal`, dan `Effect` merupakan bidang wajib dalam dokumen kebijakan proyek.  
Satu-satunya yang didukung `action` adalah`rekognition:CopyProjectVersion`.  
`NotAction`,`NotResource`, dan `NotPrincipal` merupakan bidang yang dilarang dan tidak boleh ada dalam dokumen kebijakan proyek.

Jika Anda tidak menentukan kebijakan proyek, prinsipal di AWS akun yang sama dengan proyek sumber masih dapat menyalin model, jika prinsipal memiliki kebijakan berbasis Identitas, seperti` AmazonRekognitionCustomLabelsFullAccess`, yang memberikan izin untuk menelepon. `CopyProjectVersion`

Prosedur berikut membuat file dokumen kebijakan proyek yang dapat Anda gunakan dengan contoh Python di. [Melampirkan kebijakan proyek (SDK)](md-attach-project-policy.md) Jika Anda menggunakan `put-project-policy` AWS CLI perintah, Anda menyediakan kebijakan proyek sebagai string JSON. 

**Untuk membuat dokumen kebijakan proyek**

1. Dalam editor teks, buat dokumen berikut. Ubah nilai berikut:
   + Efek - Tentukan `ALLOW` untuk memberikan izin salinan. Tentukan `DENY` untuk menolak izin penyalinan. 
   + Principal — Untuk prinsipal yang ingin Anda izinkan atau tolak akses ke versi model yang Anda tentukan`Resource`. Misalnya, Anda dapat menentukan [pokok akun AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts) untuk AWS akun yang berbeda. Kami tidak membatasi prinsip yang dapat Anda gunakan. Untuk informasi selengkapnya, lihat [Menentukan prinsipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying).
   + Sumber Daya - Nama Sumber Daya Amazon (ARN) dari versi model yang ingin Anda tentukan izin salin. Jika Anda ingin memberikan izin ke semua versi model dalam proyek sumber, gunakan format berikut `arn:aws:rekognition:region:account:project/source project/version/* `

1. Simpan kebijakan proyek ke komputer Anda.

1. Lampirkan kebijakan proyek ke proyek sumber dengan mengikuti instruksi di[Melampirkan kebijakan proyek (SDK)](md-attach-project-policy.md).

# Melampirkan kebijakan proyek (SDK)
<a name="md-attach-project-policy"></a>

Anda melampirkan kebijakan proyek ke proyek Label Kustom Rekognition Amazon dengan memanggil operasi. [PutProjectpolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_PutProjectPolicy) 

Lampirkan beberapa kebijakan proyek ke proyek dengan memanggil `PutProjectPolicy` setiap kebijakan proyek yang ingin Anda tambahkan. Anda dapat melampirkan hingga lima kebijakan proyek proyek ke proyek. Jika Anda perlu melampirkan lebih banyak kebijakan proyek, Anda dapat meminta kenaikan [batas](limits.md).

Saat pertama kali melampirkan kebijakan proyek unik ke proyek, jangan tentukan ID revisi dalam parameter `PolicyRevisionId` input. Tanggapan dari `PutProjectPolicy` adalah ID revisi untuk kebijakan proyek yang dibuat Label Kustom Rekognition Amazon untuk Anda. Anda dapat menggunakan ID revisi untuk memperbarui atau menghapus revisi terbaru dari kebijakan proyek. Amazon Rekognition Custom Labels hanya menyimpan revisi terbaru dari kebijakan proyek. Jika Anda mencoba memperbarui atau menghapus revisi kebijakan proyek sebelumnya, Anda mendapatkan `InvalidPolicyRevisionIdException` kesalahan.

Untuk memperbarui kebijakan proyek yang ada, tentukan ID revisi kebijakan proyek dalam parameter `PolicyRevisionId` input. Anda bisa mendapatkan revisi IDs untuk kebijakan proyek dalam proyek dengan menelepon [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies).

Setelah Anda melampirkan kebijakan proyek ke proyek sumber, Anda dapat menyalin model dari proyek sumber ke proyek tujuan. Untuk informasi selengkapnya, lihat [Menyalin model (SDK)](md-copy-model-sdk.md). 

Untuk menghapus kebijakan proyek dari proyek, hubungi [DeleteProjectPolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectPolicy). Untuk mendapatkan daftar kebijakan proyek yang dilampirkan pada proyek, hubungi [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies). 

**Untuk melampirkan kebijakan proyek ke proyek (SDK)**

1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDKs. Untuk informasi selengkapnya, lihat [Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

1. [Buat dokumen kebijakan proyek](md-create-project-policy-document.md).

1. Gunakan kode berikut untuk melampirkan kebijakan proyek ke proyek, di AWS akun kepercayaan, yang berisi versi model yang ingin Anda salin. Untuk mendapatkan proyek ARN, hubungi. [DescribeProjects](https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-describing-project-sdk.html) Untuk mendapatkan versi model panggilan ARN. [DescribeProjectVersions](https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-describing-model-sdk.html) 

------
#### [ AWS CLI ]

   Ubah nilai berikut:
   + `project-arn`ke ARN proyek sumber di AWS akun kepercayaan yang berisi versi model yang ingin Anda salin. 
   + `policy-name`untuk nama kebijakan yang Anda pilih. 
   + `principal`Untuk prinsipal yang ingin Anda izinkan atau tolak akses ke versi model yang Anda tentukan`Model version ARN`. 
   + `project-version-arn`ke ARN dari versi model yang ingin Anda salin.

   Jika Anda ingin memperbarui kebijakan proyek yang ada, tentukan `policy-revision-id` parameter dan berikan ID revisi dari kebijakan proyek yang diinginkan. 

   ```
   aws rekognition put-project-policy \
     --project-arn project-arn \
     --policy-name policy-name \
     --policy-document '{ "Version": "2012-10-17",		 	 	  "Statement":[{ "Effect":"ALLOW or DENY", "Principal":{ "AWS":"principal" }, "Action":"rekognition:CopyProjectVersion", "Resource":"project-version-arn" }]}' \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + `project_arn`— ARN dari proyek sumber yang ingin Anda lampirkan kebijakan proyek. 
   + `policy_name`— Nama kebijakan yang Anda pilih. 
   + `project_policy`— File yang berisi dokumen kebijakan proyek,.
   + `policy_revision_id`— (Opsional). Jika Anda ingin memperbarui revisi kebijakan proyek yang ada, tentukan ID revisi kebijakan proyek.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation:
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-copy-model-sdk.html
   Shows how to attach a project policy to an Amazon Rekognition Custom Labels project.
   """
   
   import boto3
   import argparse
   import logging
   import json
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def put_project_policy(rek_client, project_arn, policy_name, policy_document_file, policy_revision_id=None):
       """
       Attaches a project policy to an Amazon Rekognition Custom Labels project.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param policy_name: A name for the project policy.
       :param project_arn: The Amazon Resource Name (ARN) of the source project
       that you want to attach the project policy to.
       :param policy_document_file: The JSON project policy document to
       attach to the source project.
       :param policy_revision_id: (Optional) The revision of an existing policy to update.
       Pass None to attach new policy.
       :return The revision ID for the project policy.
       """
   
       try:
   
           policy_document_json = ""
           response = None
   
           with open(policy_document_file, 'r') as policy_document:
               policy_document_json = json.dumps(json.load(policy_document))
   
           logger.info(
               "Attaching %s project_policy to project %s.", 
               policy_name, project_arn)
   
           if policy_revision_id is None:
               response = rek_client.put_project_policy(ProjectArn=project_arn,
                                                        PolicyName=policy_name,
                                                        PolicyDocument=policy_document_json)
   
           else:
               response = rek_client.put_project_policy(ProjectArn=project_arn,
                                                        PolicyName=policy_name,
                                                        PolicyDocument=policy_document_json,
                                                        PolicyRevisionId=policy_revision_id)
   
           new_revision_id = response['PolicyRevisionId']
   
           logger.info(
               "Finished creating project policy %s. Revision ID: %s",
               policy_name, new_revision_id)
   
           return new_revision_id
   
       except ClientError as err:
           logger.exception(
               "Couldn't attach %s project policy to project %s: %s }",
               policy_name, project_arn, err.response['Error']['Message'] )
           raise
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn",  help="The Amazon Resource Name (ARN) of the project "
           "that you want to attach the project policy to."
       )
       parser.add_argument(
           "policy_name",  help="A name for the project policy."
   
       )
   
       parser.add_argument(
           "project_policy",  help="The file containing the project policy JSON"
       )
   
       parser.add_argument(
           "--policy_revision_id",  help="The revision of an existing policy to update. "
           "If you don't supply a value, a new project policy is created.",
           required=False
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
   
           args = parser.parse_args()
   
           print(f"Attaching policy to {args.project_arn}")
   
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
   
           # Attach a new policy or update an existing policy.
   
           response = put_project_policy(rekognition_client,
                                         args.project_arn,
                                         args.policy_name,
                                         args.project_policy,
                                         args.policy_revision_id)
   
           print(
               f"project policy {args.policy_name} attached to project {args.project_arn}")
           print(f"Revision ID: {response}")
   
       except ClientError as err:
           print("Problem attaching project policy: %s", err)
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + `project_arn`— ARN dari proyek sumber yang ingin Anda lampirkan kebijakan proyek. 
   + `project_policy_name`— Nama kebijakan yang Anda pilih. 
   + `project_policy_document`— File yang berisi dokumen kebijakan proyek.
   + `project_policy_revision_id`— (Opsional). Jika Anda ingin memperbarui revisi kebijakan proyek yang ada, tentukan ID revisi kebijakan proyek.

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import java.io.IOException;
   import java.nio.file.Files;
   import java.nio.file.Path;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.PutProjectPolicyRequest;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class PutProjectPolicy {
   
       public static final Logger logger = Logger.getLogger(PutProjectPolicy.class.getName());
   
       public static void putMyProjectPolicy(RekognitionClient rekClient, String projectArn, String projectPolicyName,
                String projectPolicyFileName, String projectPolicyRevisionId) throws IOException {
   
           try {
   
               Path filePath = Path.of(projectPolicyFileName);
   
               
   
               String policyDocument = Files.readString(filePath);
   
               String[] logArguments = new String[] { projectPolicyFileName, projectPolicyName };
   
               PutProjectPolicyRequest putProjectPolicyRequest = null;
   
               logger.log(Level.INFO, "Attaching Project policy: {0} to project: {1}", logArguments);
   
               // Attach the project policy.
   
               if (projectPolicyRevisionId == null) {
                   putProjectPolicyRequest = PutProjectPolicyRequest.builder().projectArn(projectArn)
                           .policyName(projectPolicyName).policyDocument(policyDocument).build();
               } else {
                   putProjectPolicyRequest = PutProjectPolicyRequest.builder().projectArn(projectArn)
                           .policyName(projectPolicyName).policyRevisionId(projectPolicyRevisionId)
                           .policyDocument(policyDocument)
   
                           .build();
               }
   
               rekClient.putProjectPolicy(putProjectPolicyRequest);
   
               logger.log(Level.INFO, "Attached Project policy: {0} to project: {1}", logArguments);
   
           } catch (
   
           RekognitionException e) {
               logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           final String USAGE = "\n" + "Usage: "
                   + "<project_arn> <project_policy_name> <policy_document> <project_policy_revision_id>\n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project that you want to attach the project policy to.\n\n"
                   + "   project_policy_name - A name for the project policy.\n\n"
                   + "   project_policy_document - The file name of the project policy.\n\n"
                   + "   project_policy_revision_id - (Optional) The revision ID of the project policy that you want to update.\n\n";
   
           if (args.length < 3 || args.length > 4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectArn = args[0];
           String projectPolicyName = args[1];
           String projectPolicyDocument = args[2];
           String projectPolicyRevisionId = null;
   
           if (args.length == 4) {
               projectPolicyRevisionId = args[3];
           }
   
           try {
   
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
           
               // Attach the project policy.
               putMyProjectPolicy(rekClient, projectArn, projectPolicyName, projectPolicyDocument,
                       projectPolicyRevisionId);
   
               System.out.println(
                       String.format("project policy %s: attached to project: %s", projectPolicyName, projectArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
           catch (IOException intError) {
               logger.log(Level.SEVERE, "Exception while reading policy document: {0}", intError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. Salin versi model dengan mengikuti instruksi di[Menyalin model (SDK)](md-copy-model-sdk.md). 

# Menyalin model (SDK)
<a name="md-copy-model-sdk"></a>

Anda dapat menggunakan `CopyProjectVersion` API untuk menyalin versi model dari proyek sumber ke proyek tujuan. Proyek tujuan dapat berada di AWS akun yang berbeda tetapi harus AWS Wilayah yang sama. Jika proyek tujuan berada di AWS akun yang berbeda (atau jika Anda ingin memberikan izin khusus untuk versi model yang disalin dalam AWS akun), Anda harus melampirkan kebijakan proyek ke proyek sumber. Untuk informasi selengkapnya, lihat [Membuat dokumen kebijakan proyek](md-create-project-policy-document.md). `CopyProjectVersion`API memerlukan akses ke bucket Amazon S3 Anda. 

Model yang disalin mencakup hasil pelatihan untuk model sumber, tetapi tidak menyertakan kumpulan data sumber.

 AWS Akun sumber tidak memiliki kepemilikan atas model yang disalin ke akun tujuan, kecuali jika Anda menyiapkan izin yang sesuai.

**Untuk menyalin model (SDK)**

1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDKs. Untuk informasi selengkapnya, lihat [Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

1. Lampirkan kebijakan proyek ke proyek sumber dengan mengikuti instruksi di[Melampirkan kebijakan proyek (SDK)](md-attach-project-policy.md). 

1. Jika Anda menyalin model ke AWS akun lain, pastikan Anda memiliki proyek di AWS akun tujuan. 

1. Gunakan kode berikut untuk menyalin versi model ke proyek tujuan.

------
#### [ AWS CLI ]

   Ubah nilai berikut:
   + `source-project-arn`ke ARN dari proyek sumber yang berisi versi model yang ingin Anda salin. 
   + `source-project-version-arn`ke ARN dari versi model yang ingin Anda salin. 
   + `destination-project-arn`ke ARN proyek tujuan yang ingin Anda salin modelnya. 
   + `version-name`ke nama versi untuk model dalam proyek tujuan. 
   + `bucket`ke bucket S3 tempat Anda ingin hasil pelatihan untuk model sumber disalin. 
   + `folder`ke folder di `bucket` mana Anda ingin hasil pelatihan untuk model sumber disalin. 
   + (Opsional) `kms-key-id` ke ID kunci AWS Key Management Service untuk model. 
   + (Opsional) `key` ke kunci tag yang Anda pilih. 
   + (Opsional) `value` ke nilai tag yang Anda pilih. 

   ```
   aws rekognition copy-project-version \
     --source-project-arn source-project-arn \
     --source-project-version-arn source-project-version-arn \
     --destination-project-arn destination-project-arn \
     --version-name version-name \
     --output-config '{"S3Bucket":"bucket","S3KeyPrefix":"folder"}' \
     --kms-key-id arn:myKey \
     --tags '{"key":"key"}' \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + `source_project_arn`— ARN dari proyek sumber di AWS akun sumber yang berisi versi model yang ingin Anda salin. 
   + `source_project_version-arn`— ARN versi model di AWS akun sumber yang ingin Anda salin. 
   + `destination_project_arn`— ARN dari proyek tujuan yang ingin Anda salin modelnya. 
   + `destination_version_name`— nama versi untuk model dalam proyek tujuan. 
   + `training_results`— lokasi S3 tempat Anda ingin hasil pelatihan untuk versi model sumber disalin. 
   + (Opsional) `kms_key_id` ke ID kunci AWS Key Management Service untuk model. 
   + (Opsional) `tag_name` ke kunci tag yang Anda pilih. 
   + (Opsional) `tag_value` ke nilai tag yang Anda pilih. 

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   import argparse
   import logging
   import time
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def copy_model(
       rekognition_client, source_project_arn, source_project_version_arn,
           destination_project_arn, training_results, destination_version_name):
       """
       Copies a version of a Amazon Rekognition Custom Labels model.
   
       :param rekognition_client: A Boto3 Amazon Rekognition Custom Labels client.
       :param source_project_arn: The ARN of the source project that contains the
       model that you want to copy.
       :param source_project_version_arn: The ARN of the model version that you want
       to copy.
       :param destination_project_Arn: The ARN of the project that you want to copy the model
       to.
       :param training_results: The Amazon S3 location where training results for the model
       should be stored.
       return: The model status and version.
       """
       try:
           logger.info("Copying model...%s from %s to %s ", source_project_version_arn,
                       source_project_arn,
                       destination_project_arn)
   
           output_bucket, output_folder = training_results.replace(
               "s3://", "").split("/", 1)
           output_config = {"S3Bucket": output_bucket,
                            "S3KeyPrefix": output_folder}
   
           response = rekognition_client.copy_project_version(
               DestinationProjectArn=destination_project_arn,
               OutputConfig=output_config,
               SourceProjectArn=source_project_arn,
               SourceProjectVersionArn=source_project_version_arn,
               VersionName=destination_version_name
           )
   
           destination_model_arn = response["ProjectVersionArn"]
   
           logger.info("Destination model ARN: %s", destination_model_arn)
   
           # Wait until training completes.
           finished = False
           status = "UNKNOWN"
           while finished is False:
               model_description = rekognition_client.describe_project_versions(ProjectArn=destination_project_arn,
                       VersionNames=[destination_version_name])
               status = model_description["ProjectVersionDescriptions"][0]["Status"]
   
               if status == "COPYING_IN_PROGRESS":
                   logger.info("Model copying in progress...")
                   time.sleep(60)
                   continue
   
               if status == "COPYING_COMPLETED":
                   logger.info("Model was successfully copied.")
   
               if status == "COPYING_FAILED":
                   logger.info(
                       "Model copy failed: %s ",
                       model_description["ProjectVersionDescriptions"][0]["StatusMessage"])
   
               finished = True
       except ClientError:
           logger.exception("Couldn't copy model.")
           raise
       else:
           return destination_model_arn, status
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "source_project_arn",
           help="The ARN of the project that contains the model that you want to copy."
       )
   
       parser.add_argument(
           "source_project_version_arn",
           help="The ARN of the model version that you want to copy."
       )
   
       parser.add_argument(
           "destination_project_arn",
           help="The ARN of the project which receives the copied model."
       )
   
       parser.add_argument(
           "destination_version_name",
           help="The version name for the model in the destination project."
       )
   
       parser.add_argument(
           "training_results",
           help="The S3 location in the destination account that receives the training results for the copied model."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(
               f"Copying model version {args.source_project_version_arn} to project {args.destination_project_arn}")
   
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           # Copy the model.
   
           model_arn, status = copy_model(rekognition_client,
                                          args.source_project_arn,
                                          args.source_project_version_arn,
                                          args.destination_project_arn,
                                          args.training_results,
                                          args.destination_version_name,
                                          )
   
           print(f"Finished copying model: {model_arn}")
           print(f"Status: {status}")
   
       except ClientError as err:
           print(f"Problem copying model: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + `source_project_arn`— ARN dari proyek sumber di AWS akun sumber yang berisi versi model yang ingin Anda salin. 
   + `source_project_version-arn`— ARN versi model di AWS akun sumber yang ingin Anda salin. 
   + `destination_project_arn`— ARN dari proyek tujuan yang ingin Anda salin modelnya. 
   + `destination_version_name`— nama versi untuk model dalam proyek tujuan. 
   + `output_bucket`— bucket S3 yang Anda inginkan hasil pelatihan untuk versi model sumber disalin. 
   + `output_folder`— folder di S3 tempat Anda ingin hasil pelatihan untuk versi model sumber disalin. 

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.CopyProjectVersionRequest;
   import software.amazon.awssdk.services.rekognition.model.CopyProjectVersionResponse;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse;
   import software.amazon.awssdk.services.rekognition.model.OutputConfig;
   import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription;
   
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CopyModel {
   
       public static final Logger logger = Logger.getLogger(CopyModel.class.getName());
   
       public static ProjectVersionDescription copyMyModel(RekognitionClient rekClient,
               String sourceProjectArn,
               String sourceProjectVersionArn,
               String destinationProjectArn,
               String versionName,
               String outputBucket,
               String outputFolder) throws InterruptedException {
   
           try {
   
               OutputConfig outputConfig = OutputConfig.builder().s3Bucket(outputBucket).s3KeyPrefix(outputFolder).build();
   
               String[] logArguments = new String[] { versionName, sourceProjectArn, destinationProjectArn };
   
               logger.log(Level.INFO, "Copying model {0} for from project {1} to project {2}", logArguments);
   
               CopyProjectVersionRequest copyProjectVersionRequest = CopyProjectVersionRequest.builder()
                       .sourceProjectArn(sourceProjectArn)
                       .sourceProjectVersionArn(sourceProjectVersionArn)
                       .versionName(versionName)
                       .destinationProjectArn(destinationProjectArn)
                       .outputConfig(outputConfig)
                       .build();
   
               CopyProjectVersionResponse response = rekClient.copyProjectVersion(copyProjectVersionRequest);
   
               logger.log(Level.INFO, "Destination model ARN: {0}", response.projectVersionArn());
               logger.log(Level.INFO, "Copying model...");
   
               // wait until copying completes.
   
               boolean finished = false;
   
               ProjectVersionDescription copiedModel = null;
   
               while (Boolean.FALSE.equals(finished)) {
                   DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder()
                           .versionNames(versionName)
                           .projectArn(destinationProjectArn)
                           .build();
   
                   DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient
                           .describeProjectVersions(describeProjectVersionsRequest);
   
                   for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse
                           .projectVersionDescriptions()) {
   
                       copiedModel = projectVersionDescription;
   
                       switch (projectVersionDescription.status()) {
   
                           case COPYING_IN_PROGRESS:
                               logger.log(Level.INFO, "Copying model...");
                               Thread.sleep(5000);
                               continue;
   
                           case COPYING_COMPLETED:
                               finished = true;
                               logger.log(Level.INFO, "Copying completed");
                               break;
   
                           case COPYING_FAILED:
                               finished = true;
                               logger.log(Level.INFO, "Copying failed...");
                               break;
   
                           default:
                               finished = true;
                               logger.log(Level.INFO, "Unexpected copy status %s",
                                       projectVersionDescription.statusAsString());
                               break;
   
                       }
   
                   }
   
               }
   
               logger.log(Level.INFO, "Finished copying model {0} for from project {1} to project {2}", logArguments);
   
               return copiedModel;
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not train model: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           String sourceProjectArn = null;
           String sourceProjectVersionArn = null;
           String destinationProjectArn = null;
           String versionName = null;
           String bucket = null;
           String location = null;
   
           final String USAGE = "\n" + "Usage: "
                   + "<source_project_arn> <source_project_version_arn> <destination_project_arn> <version_name> <output_bucket> <output_folder>\n\n"
                   + "Where:\n"
                   + "   source_project_arn - The ARN of the project that contains the model that you want to copy. \n\n"
                   + "   source_project_version_arn - The ARN of the project that contains the model that you want to copy. \n\n"
                   + "   destination_project_arn - The ARN of the destination project that you want to copy the model to. \n\n"
                   + "   version_name - A version name for the copied model.\n\n"
                   + "   output_bucket - The S3 bucket in which to place the training output. \n\n"
                   + "   output_folder - The folder within the bucket that the training output is stored in. \n\n";
   
           if (args.length != 6) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           sourceProjectArn = args[0];
           sourceProjectVersionArn = args[1];
           destinationProjectArn = args[2];
           versionName = args[3];
           bucket = args[4];
           location = args[5];
   
           try {
   
               // Get the Rekognition client.
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
               // Copy the model.
               ProjectVersionDescription copiedModel = copyMyModel(rekClient,
                       sourceProjectArn,
                       sourceProjectVersionArn,
                       destinationProjectArn,
                       versionName,
                       bucket,
                       location);
   
               System.out.println(String.format("Model copied: %s Status: %s",
                       copiedModel.projectVersionArn(),
                       copiedModel.statusMessage()));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           } catch (InterruptedException intError) {
               logger.log(Level.SEVERE, "Exception while sleeping: {0}", intError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

# Daftar kebijakan proyek (SDK)
<a name="md-list-project-policies"></a>

Anda dapat menggunakan [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies)operasi untuk mencantumkan kebijakan proyek yang dilampirkan ke proyek Label Kustom Rekognition Amazon.

**Untuk mencantumkan kebijakan proyek yang dilampirkan ke proyek (SDK)**

1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDKs. Untuk informasi selengkapnya, lihat [Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

1. Gunakan kode berikut untuk membuat daftar kebijakan proyek.

------
#### [ AWS CLI ]

   Ubah `project-arn` ke Nama Sumber Daya Amazon dari proyek yang ingin Anda cantumkan kebijakan proyek terlampir.

   ```
   aws rekognition list-project-policies \
     --project-arn project-arn \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + project\$1arn — Nama Sumber Daya Amazon dari proyek yang ingin Anda cantumkan kebijakan proyek terlampir. 

   Misalnya: `python list_project_policies.py project_arn `

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation:
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-copy-model-sdk.html
   Shows how to list the project policies in an Amazon Rekogntion Custom Labels project.
   """
   
   
   import argparse
   import logging
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def display_project_policy(project_policy):
       """
       Displays information about a Custom Labels project policy.
       :param project_policy: The project policy (ProjectPolicy)
       that you want to display information about.
       """
       print(f"Policy name: {(project_policy['PolicyName'])}")
       print(f"Project Arn: {project_policy['ProjectArn']}")
       print(f"Document: {(project_policy['PolicyDocument'])}")
       print(f"Revision ID: {(project_policy['PolicyRevisionId'])}")
       print()
   
   
   
   def list_project_policies(rek_client, project_arn):
       """
       Describes an Amazon Rekognition Custom Labels project, or all projects.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The Amazon Resource Name of the project you want to use.
       """
   
       try:
   
           max_results = 5
           pagination_token = ''
           finished = False
   
           logger.info("Listing project policies in: %s.", project_arn)
           print('Projects\n--------')
           while not finished:
   
               response = rek_client.list_project_policies(
                   ProjectArn=project_arn, MaxResults=max_results, NextToken=pagination_token)
   
               for project in response['ProjectPolicies']:
                   display_project_policy(project)
   
               if 'NextToken' in response:
                   pagination_token = response['NextToken']
               else:
                   finished = True
   
           logger.info("Finished listing project policies.")
   
       except ClientError as err:
           logger.exception(
               "Couldn't list policies for - %s: %s",
               project_arn,err.response['Error']['Message'])
           raise
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn",  help="The Amazon Resource Name of the project for which you want to list project policies."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(f"Listing project policies in: {args.project_arn}")
   
           # List the project policies.
   
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           list_project_policies(rekognition_client,
                                 args.project_arn)
   
       except ClientError as err:
           print(f"Problem list project_policies: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + project\$1arn — ARN proyek yang memiliki kebijakan proyek yang ingin Anda daftarkan.

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.ListProjectPoliciesRequest;
   import software.amazon.awssdk.services.rekognition.model.ListProjectPoliciesResponse;
   import software.amazon.awssdk.services.rekognition.model.ProjectPolicy;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class ListProjectPolicies {
   
       public static final Logger logger = Logger.getLogger(ListProjectPolicies.class.getName());
   
       public static void listMyProjectPolicies(RekognitionClient rekClient, String projectArn) {
   
           try {
   
               logger.log(Level.INFO, "Listing project policies for project: {0}", projectArn);
   
               // List the project policies.
   
               Boolean finished = false;
               String nextToken = null;
   
               while (Boolean.FALSE.equals(finished)) {
   
                   ListProjectPoliciesRequest listProjectPoliciesRequest = ListProjectPoliciesRequest.builder()
                           .maxResults(5)
                           .projectArn(projectArn)
                           .nextToken(nextToken)
                           .build();
   
                   ListProjectPoliciesResponse response = rekClient.listProjectPolicies(listProjectPoliciesRequest);
   
                   for (ProjectPolicy projectPolicy : response.projectPolicies()) {
   
                       System.out.println(String.format("Name: %s", projectPolicy.policyName()));
                       System.out.println(String.format("Revision ID: %s\n", projectPolicy.policyRevisionId()));
   
                   }
   
                   nextToken = response.nextToken();
   
                   if (nextToken == null) {
                       finished = true;
   
                   }
   
               }
   
               logger.log(Level.INFO, "Finished listing project policies for project: {0}", projectArn);
   
           } catch (
   
           RekognitionException e) {
               logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> \n\n" + "Where:\n"
                   + "   project_arn - The ARN of the project with the project policies that you want to list.\n\n";
           ;
   
           if (args.length != 1) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectArn = args[0];
   
           try {
   
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
         
               // List the project policies.
               listMyProjectPolicies(rekClient, projectArn);
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

# Menghapus kebijakan proyek (SDK)
<a name="md-delete-project-policy.title"></a>

Anda dapat menggunakan [DeleteProjectPolicy](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DeleteProjectPolicy)operasi untuk menghapus revisi kebijakan proyek yang ada dari proyek Label Kustom Rekognition Amazon. Jika Anda ingin menghapus semua revisi kebijakan proyek yang dilampirkan ke proyek, gunakan [ListProjectPolicies](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ListProjectPolicies)untuk mendapatkan revisi setiap kebijakan proyek IDs yang dilampirkan ke proyek. Kemudian panggil `DeletePolicy` untuk setiap nama kebijakan. 

**Untuk menghapus revisi kebijakan proyek (SDK)**

1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDKs. Untuk informasi selengkapnya, lihat [Langkah 4: Mengatur AWS CLI dan AWS SDKs](su-awscli-sdk.md).

1. Gunakan kode berikut untuk menghapus kebijakan proyek.

   DeletePolicy mengambil`ProjectARN`, `PolicyName` dan`PolicyRevisionId`. `ProjectARN`dan `PolicyName` diperlukan untuk API ini. `PolicyRevisionId`bersifat opsional, tetapi dapat dimasukkan untuk keperluan pembaruan atom.

------
#### [ AWS CLI ]

   Ubah nilai berikut:
   + `policy-name`dengan nama kebijakan proyek yang ingin Anda hapus. 
   + `policy-revision-id`ke ID revisi kebijakan proyek yang ingin Anda hapus. 
   + `project-arn`ke Nama Sumber Daya Amazon dari proyek yang berisi revisi kebijakan proyek yang ingin Anda hapus.

   ```
   aws rekognition delete-project-policy \
       --policy-name policy-name \
       --policy-revision-id policy-revision-id \
       --project-arn project-arn \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + `policy-name`— Nama kebijakan proyek yang ingin Anda hapus. 
   + `project-arn`— Nama Sumber Daya Amazon dari proyek yang berisi kebijakan proyek yang ingin Anda hapus.
   + `policy-revision-id`— ID revisi kebijakan proyek yang ingin Anda hapus. 

   Sebagai contoh: `python delete_project_policy.py policy_name project_arn` *policy\$1revision\$1id* 

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation:
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-copy-model-sdk.html
   Shows how to delete a revision of a project policy.
   """
   
   import argparse
   import logging
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   
   def delete_project_policy(rekognition_client, policy_name,  project_arn, policy_revision_id=None):
       """
       Deletes a project policy.
   
       :param rekognition_client: A Boto3 Amazon Rekognition client.
       :param policy_name: The name of the project policy that you want to delete.
       :param policy_revision_id: The revsion ID for the project policy that you want to delete.
       :param project_arn: The Amazon Resource Name of the project that contains the project policy
       that you want to delete.
       """
       try:
           logger.info("Deleting project policy: %s", policy_name)
   
           if policy_revision_id is None:
               rekognition_client.delete_project_policy(
                   PolicyName=policy_name,
                   ProjectArn=project_arn)
   
           else:
               rekognition_client.delete_project_policy(
                   PolicyName=policy_name,
                   PolicyRevisionId=policy_revision_id,
                   ProjectArn=project_arn)
   
           logger.info("Deleted project policy: %s", policy_name)
       except ClientError:
           logger.exception("Couldn't delete project policy.")
           raise
   
   
   def confirm_project_policy_deletion(policy_name):
       """
       Confirms deletion of the project policy. Returns True if delete entered.
       :param model_arn: The ARN of the model that you want to delete.
       """
       print(
           f"Are you sure you wany to delete project policy {policy_name} ?\n", policy_name)
   
       delete = input("Enter delete to delete your project policy: ")
       if delete == "delete":
           return True
       else:
           return False
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "policy_name", help="The ARN of the project that contains the project policy that you want to delete."
       )
   
       parser.add_argument(
           "project_arn", help="The ARN of the project project policy you want to delete."
       )
   
       parser.add_argument(
           "--policy_revision_id", help="(Optional) The revision ID of the project policy that you want to delete.",
           required=False
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           if confirm_project_policy_deletion(args.policy_name) is True:
               print(f"Deleting project_policy: {args.policy_name}")
   
               session = boto3.Session(profile_name='custom-labels-access')
               rekognition_client = session.client("rekognition")
   
               # Delete the project policy.
   
               delete_project_policy(rekognition_client,
                                     args.policy_name,
                                     args.project_arn,
                                     args.policy_revision_id)
   
               print(f"Finished deleting project policy: {args.policy_name}")
           else:
               print(f"Not deleting project policy {args.policy_name}")
       except ClientError as err:
           print(f"Couldn't delete project policy in {args.policy_name}: {err}")
   
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Gunakan kode berikut. Sediakan parameter baris perintah berikut:
   + `policy-name`— Nama kebijakan proyek yang ingin Anda hapus. 
   + `project-arn`— Nama Sumber Daya Amazon dari proyek yang berisi kebijakan proyek yang ingin Anda hapus.
   + `policy-revision-id`— ID revisi kebijakan proyek yang ingin Anda hapus. 

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.DeleteProjectPolicyRequest;
   
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class DeleteProjectPolicy {
   
       public static final Logger logger = Logger.getLogger(DeleteProjectPolicy.class.getName());
   
       public static void deleteMyProjectPolicy(RekognitionClient rekClient, String projectArn,
               String projectPolicyName,
               String projectPolicyRevisionId)
               throws InterruptedException {
   
           try {
               String[] logArguments = new String[] { projectPolicyName, projectPolicyRevisionId };
   
               logger.log(Level.INFO, "Deleting: Project policy: {0} revision: {1}", logArguments);
   
               // Delete the project policy.
   
               DeleteProjectPolicyRequest deleteProjectPolicyRequest = DeleteProjectPolicyRequest.builder()
                       .policyName(projectPolicyName)
                       .policyRevisionId(projectPolicyRevisionId)
                       .projectArn(projectArn).build();
   
               rekClient.deleteProjectPolicy(deleteProjectPolicyRequest);
   
               logger.log(Level.INFO, "Deleted: Project policy: {0} revision: {1}", logArguments);
   
           } catch (
   
           RekognitionException e) {
               logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String args[]) {
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <project_policy_name> <project_policy_revision_id>\n\n"
                   + "Where:\n"
                   + "   project_arn - The ARN of the project that has the project policy that you want to delete.\n\n"
                   + "   project_policy_name - The name of the project policy that you want to delete.\n\n"
                   + "   project_policy_revision_id - The revision of the project policy that you want to delete.\n\n";
   
           if (args.length != 3) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           String projectArn = args[0];
           String projectPolicyName = args[1];
           String projectPolicyRevisionId = args[2];
   
           try {
   
               RekognitionClient rekClient = RekognitionClient.builder()
               .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
               .region(Region.US_WEST_2)
               .build();
   
               // Delete the project policy.
               deleteMyProjectPolicy(rekClient, projectArn, projectPolicyName, projectPolicyRevisionId);
   
               System.out.println(String.format("project policy deleted: %s revision: %s", projectPolicyName,
                       projectPolicyRevisionId));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
           catch (InterruptedException intError) {
               logger.log(Level.SEVERE, "Exception while sleeping: {0}", intError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------