

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建流式标注作业
<a name="sms-streaming-create-job"></a>

通过流式标注作业，您可以将各个数据对象实时发送到持续运行的流式标注作业。要创建流标注作业，您可以在发出 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html) 请求时在 `InputConfig` 参数中指定 Amazon SNS *输入主题* ARN `SnsTopicArn`。如果您想实时接收标签数据，还可以创建 Amazon SNS *输出主题*，并在 `OutputConfig` 中指定此主题。

**重要**  
如果您是 Ground Truth 流式标注作业的新用户，建议您在创建流式标注作业前先行查看[Ground Truth 流式标注作业](sms-streaming-labeling-job.md)。Ground Truth 直播标签作业只能通过 SageMaker API 支持。

使用以下部分创建您需要并可用于创建流式标注作业的资源：
+ 按照[使用 Amazon SNS 主题进行数据标注](sms-create-sns-input-topic.md)中的步骤操作，了解如何创建具有 Ground Truth 流式标注作业所需权限的 SNS 主题。您的 SNS 主题必须与您的标签任务在同一个 AWS 区域创建。
+ 请参阅[为端点订阅 Amazon SNS 输出主题](sms-create-sns-input-topic.md#sms-streaming-subscribe-output-topic)，了解如何设置一个端点，以便每次完成标注任务时都能在指定端点接收标注任务输出数据。
+ 要了解如何配置 Amazon S3 存储桶以向 Amazon SNS 输入主题发送通知，请参阅[根据在标注作业中定义的 Amazon SNS 创建基于 Amazon S3 的存储桶事件通知](sms-streaming-s3-setup.md)。
+ 可选择在输入清单中添加您希望在标注作业开始后立即标注的数据对象。有关更多信息，请参阅 [创建清单文件（可选）](sms-streaming-manifest.md)。
+ 创建标注作业还需要其他资源，例如 IAM 角色、Amazon S3 存储桶、工作人员任务模板和标签类别。这些资源在关于创建标注作业的 Ground Truth 文档中有所描述。有关更多信息，请参阅 [创建标注作业](sms-create-labeling-job.md)。
**重要**  
创建标注作业时，必须提供 IAM 执行角色。将 AWS 托管策略附加**AmazonSageMakerGroundTruthExecution**到此角色，以确保其拥有执行标签任务所需的权限。

当您提交创建流式标注作业的请求时，标注作业的状态是 `Initializing`。标注作业处于活动状态后，状态将更改为 `InProgress`。当标注作业处于 `Initializing` 状态时，不要向其发送新的数据对象，也不要试图停止标注作业。一旦状态更改为 `InProgress`，您就可以开始使用 Amazon SNS 和 Amazon S3 配置发送新的数据对象。

**Topics**
+ [使用 Amazon SNS 主题进行数据标注](sms-create-sns-input-topic.md)
+ [根据在标注作业中定义的 Amazon SNS 创建基于 Amazon S3 的存储桶事件通知](sms-streaming-s3-setup.md)
+ [创建清单文件（可选）](sms-streaming-manifest.md)
+ [使用 SageMaker API 创建流式标签 Job](sms-streaming-create-labeling-job-api.md)
+ [停止流式标注作业](sms-streaming-stop-labeling-job.md)

# 使用 Amazon SNS 主题进行数据标注
<a name="sms-create-sns-input-topic"></a>

您需要创建 Amazon SNS 输入才能创建流式标注作业。您还可以选择提供 Amazon SNS 输出主题。

创建 Amazon SNS 主题以用于流式标注作业时，请记下主题的 Amazon 资源名称 (ARN)。在创建标注作业时，ARN 将作为 `InputConfig` 和 `OutputConfig` 中的参数 `SnsTopicArn` 的输入值。

## 创建输入主题
<a name="sms-streaming-input-topic"></a>

您的输入主题用于向 Ground Truth 发送新的数据对象。要创建输入主题，请按照《Amazon Simple Notification Service 开发人员指南》中的[创建 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)说明进行操作。

记下您的输入主题 ARN，并将其用作 `InputConfig` 中的 `CreateLabelingJob` 参数 `SnsTopicArn` 的输入值。

## 创建输出主题
<a name="sms-streaming-output-topic"></a>

如果提供了输出主题，则会在数据对象被标注时用来发送通知。创建主题时，您可以选择添加加密密钥。使用此选项向您的主题添加 AWS Key Management Service 客户托管密钥，以便在标签作业的输出数据发布到输出主题之前对其进行加密。

要创建输出主题，请按照《Amazon Simple Notification Service 开发人员指南》中的[创建 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)说明进行操作。

如果添加加密，则必须为主题附加额外权限。请参阅 [向输出主题添加加密（可选）](#sms-streaming-encryption) 了解更多信息。

**重要**  
要在控制台中创建主题时向输出主题添加客户托管密钥，请不要使用**（默认）alias/aws/sns**选项。选择您创建的客户托管密钥。

记下您的输入主题 ARN，并在 `OutputConfig` 的参数 `SnsTopicArn` 中的 `CreateLabelingJob` 请求中使用此值。

### 向输出主题添加加密（可选）
<a name="sms-streaming-encryption"></a>

要加密发布到输出主题的消息，需要为主题提供 AWS KMS 客户托管密钥。修改以下策略并将其添加到客户托管密钥中，以允许 Ground Truth 在将输出数据发布到输出主题之前对其进行加密。

将 *`<account_id>`* 替换为您用来创建主题的账户 ID。要了解如何查找您的 AWS 账户 ID，请参阅[查找您的 AWS 账户 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId)。

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

****  

```
{
    "Id": "key-console-policy",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/Admin"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
        }
    ]
}
```

------

此外，必须修改以下策略，并将其添加到用于创建标注作业的执行角色（`RoleArn` 的输入值）。

将 *`<account_id>`* 替换为您用来创建主题的账户 ID。将 *`<region>`* 替换为用于创建标注作业的 AWS 区域。将 `<key_id>` 替换为客户托管密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "sid1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/your_key_id"
        }
    ]
}
```

------

有关创建和保护密钥的更多信息，请参阅《 AWS Key Management Service 开发人员指南》中的[创建密](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)[钥和使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

## 为端点订阅 Amazon SNS 输出主题
<a name="sms-streaming-subscribe-output-topic"></a>

当工作人员完成 Ground Truth 流式标注作业中的标注作业任务时，Ground Truth 使用您的输出主题将输出数据发布到您指定的一个或多个端点。要在工作人员完成标注任务时接收通知，必须为端点订阅 Amazon SNS 输出主题。

要了解如何将端点添加到输出主题，请参阅《Amazon Simple Notification Service 开发人员指南》**中的[订阅 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

要了解有关发布到这些端点的输出数据格式的更多信息，请参阅[标注作业输出数据](sms-data-output.md)。

**重要**  
如果您没有为端点订阅 Amazon SNS 输出主题，则不会在标注新数据对象时收到通知。

# 根据在标注作业中定义的 Amazon SNS 创建基于 Amazon S3 的存储桶事件通知
<a name="sms-streaming-s3-setup"></a>

对您的 Amazon S3 存储桶的更改、事件通知，可以通过 Amazon S3 控制台、API AWS SDKs、特定语言或 AWS Command Line Interface. 事件必须使用在 `InputConfig` 参数中指定的同一个 Amazon SNS 输入主题 ARN `SnsTopicArn` 作为 `CreateLabelingJob` 请求的一部分。

**Amazon S3 存储桶通知和您的输入数据不应使用同一个 Amazon S3 存储桶**  
创建事件通知时，请不要使用您在 `OutputConfig` 参数中指定为 `S3OutputPath` 的同一个 Amazon S3 位置。将这两个存储桶相关联可能导致 Ground Truth 处理不需要的数据对象来进行标注。

您可以控制要发送到 Amazon SNS 主题的事件类型。在发送[对象创建事件](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-event-notifications.html#enable-event-notifications-types)时，Ground Truth 会创建一个标注作业。

发送到 Amazon SNS 输入主题的事件结构必须是使用 [Event 消息结构](https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html)中的相同结构格式化的 JSON 消息。

要查看如何使用亚马逊 S3 控制台、适用于.NET 的软件开发工具包和 AWS 适用于 Java 的 S AWS DK 为亚马逊 S3 存储桶设置事件通知的示例，请按照*亚马逊简单*存储服务用户指南中的[演练：为通知配置存储桶（SNS 主题或 SQS 队列）中的](https://docs.aws.amazon.com/AmazonS3/latest/dev/ways-to-add-notification-config-to-bucket.html)演练。

本机不支持亚马逊 EventBridge 通知。要使用 EventBridge 基于通知的方式，必须更新输出格式，使其与[事件消息结构](https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html)中使用的 JSON 格式相匹配。

# 创建清单文件（可选）
<a name="sms-streaming-manifest"></a>

创建流式标注作业时，您可以一次性选择将对象（如图像或文本）添加到在 `CreateLabelingJob` 的 `ManifestS3Uri` 中指定的输入清单文件中。当流式标注作业开始时，这些对象将发送给工作人员，如果对象总数超过 `MaxConcurrentTaskCount`，这些对象将添加到 Amazon SQS 队列。当工作人员完成标注任务时，结果会定期添加到创建标注作业时指定的 Amazon S3 路径中。输出数据将发送到您订阅输出主题的任何端点。

如果您想提供要标注的初始对象，请创建一个清单文件来标识这些对象，并将此文件放入 Amazon S3 中。在 `InputConfig` 内的 `ManifestS3Uri` 中指定此清单文件的 S3 URI。

要了解如何格式化清单文件，请参阅[输入数据](sms-data-input.md)。要使用 SageMaker AI 控制台自动生成清单文件（3D 点云任务类型不支持），请参阅[自动设置标注作业的数据](sms-console-create-manifest-file.md)。

# 使用 SageMaker API 创建流式标签 Job
<a name="sms-streaming-create-labeling-job-api"></a>

以下是一个 [AWS Python SDK (Boto3) 请求示例](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_labeling_job)，您可以使用该请求在美国东部（弗吉尼亚州北部）区域为内置任务类型启动流式标注作业。有关以下每个参数的更多详细信息，请参阅 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html)。要了解如何使用此 API 和相关语言创建标签任务 SDKs，请参阅[创建标签作业 (API)](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-create-labeling-job-api.html)。

在此示例中，请注意以下参数：
+ `SnsDataSource` – 此参数出现在 `InputConfig` 和 `OutputConfig` 中，分别用于标识输入和输出 Amazon SNS 主题。要创建流式标注作业，您需要提供 Amazon SNS 输入主题。您还可以选择提供 Amazon SNS 输出主题。
+ `S3DataSource` – 此参数为可选参数。如果您想在标注作业开始后立即包括要标注的数据对象的输入清单文件，请使用此参数。
+ [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html#sagemaker-CreateLabelingJob-request-StoppingConditions](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html#sagemaker-CreateLabelingJob-request-StoppingConditions) – 创建流式标注作业时，将忽略此参数。要了解有关停止流式标注作业的更多信息，请参阅[停止流式标注作业](sms-streaming-stop-labeling-job.md)。
+ 流式标注作业不支持自动数据标注。不要包括 `LabelingJobAlgorithmsConfig` 参数。

```
response = client.create_labeling_job(
    LabelingJobName= 'example-labeling-job',
    LabelAttributeName='label',
    InputConfig={
        'DataSource': {
            'S3DataSource': {
                'ManifestS3Uri': 's3://bucket/path/manifest-with-input-data.json'
            },
            'SnsDataSource': {
                'SnsTopicArn': 'arn:aws:sns:us-east-1:123456789012:your-sns-input-topic'
            }
        },
        'DataAttributes': {
            'ContentClassifiers': [
                'FreeOfPersonallyIdentifiableInformation'|'FreeOfAdultContent',
            ]
        }
    },
    OutputConfig={
        'S3OutputPath': 's3://bucket/path/file-to-store-output-data',
        'KmsKeyId': 'string',
        'SnsTopicArn': 'arn:aws:sns:us-east-1:123456789012:your-sns-output-topic'
    },
    RoleArn='arn:aws:iam::*:role/*',
    LabelCategoryConfigS3Uri='s3://bucket/path/label-categories.json',
    HumanTaskConfig={
        'WorkteamArn': 'arn:aws:sagemaker:us-east-1:*:workteam/private-crowd/*',
        'UiConfig': {
            'UiTemplateS3Uri': 's3://bucket/path/custom-worker-task-template.html'
        },
        'PreHumanTaskLambdaArn': 'arn:aws:lambda:us-east-1:432418664414:function:PRE-tasktype',
        'TaskKeywords': [
            'Example key word',
        ],
        'TaskTitle': 'Multi-label image classification task',
        'TaskDescription': 'Select all labels that apply to the images shown',
        'NumberOfHumanWorkersPerDataObject': 123,
        'TaskTimeLimitInSeconds': 123,
        'TaskAvailabilityLifetimeInSeconds': 123,
        'MaxConcurrentTaskCount': 123,
        'AnnotationConsolidationConfig': {
            'AnnotationConsolidationLambdaArn': 'arn:aws:lambda:us-east-1:432418664414:function:ACS-tasktype'
            }
        },
    Tags=[
        {
            'Key': 'string',
            'Value': 'string'
        },
    ]
)
```

# 停止流式标注作业
<a name="sms-streaming-stop-labeling-job"></a>

您可以使用该操作手动停止流式标签作业[StopLabelingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopLabelingJob.html)。

如果您的标注作业闲置超过 10 天，Ground Truth 将自动停止该作业。在这种情况下，如果没有对象发送到 Amazon SNS 输入主题，并且 Amazon SQS 队列中也没有等待标注的对象，则标注作业被视为*空闲*。例如，如果没有向 Amazon SNS 输入主题提供任何数据对象，并且提供给标注作业的所有对象都已标注，则 Ground Truth 会启动计时器。计时器启动后，如果在 10 天内没有收到任何项目，则停止标注作业。

标注作业停止时，其状态为 `STOPPING`，同时 Ground Truth 清理标注作业资源，并从 Amazon SQS 队列中取消订阅 Amazon SNS 主题。Ground Truth *不会*删除 Amazon SQS，因为该队列可能包含未处理的数据对象。如果您想避免从 Amazon SQS 产生额外费用，则应手动删除该队列。要了解更多信息，请参阅 [Amazon SQS 定价](https://aws.amazon.com/sqs/pricing/)。