

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Crea una pipeline di elaborazione video utilizzando Amazon Kinesis Video Streams e AWS Fargate
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate"></a>

*Piotr Chotkowski e Pushparaju Thangavel, Amazon Web Services*

## Riepilogo
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-summary"></a>

Questo modello dimostra come utilizzare [Amazon Kinesis Video Streams e](https://aws.amazon.com/kinesis/video-streams/) [AWS Fargate](https://aws.amazon.com/fargate) per estrarre fotogrammi da un flusso video e archiviarli come file di immagine per un'ulteriore elaborazione in [Amazon Simple Storage Service (Amazon](https://aws.amazon.com/s3/) S3). 

Il pattern fornisce un'applicazione di esempio sotto forma di progetto Java Maven. Questa applicazione definisce l'infrastruttura AWS utilizzando l'[AWS Cloud Development Kit](https://aws.amazon.com/cdk/) (AWS CDK). Sia la logica di elaborazione dei frame che le definizioni dell'infrastruttura sono scritte nel linguaggio di programmazione Java. È possibile utilizzare questa applicazione di esempio come base per sviluppare la propria pipeline di elaborazione video in tempo reale o per creare la fase di preelaborazione video di una pipeline di apprendimento automatico. 

## Prerequisiti e limitazioni
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Java SE Development Kit (JDK) 11, installato
+ [Apache Maven](https://maven.apache.org/), installato
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html), installato
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)) versione 2, installata
+ [Docker](https://docs.docker.com/get-docker/) (necessario per creare immagini Docker da utilizzare nelle definizioni delle attività di AWS Fargate), installato

**Limitazioni**

Questo modello è inteso come dimostrazione di concetto o come base per un ulteriore sviluppo. Non dovrebbe essere utilizzato nella sua forma attuale nelle installazioni di produzione.

**Versioni del prodotto**
+ Questo modello è stato testato con la versione CDK AWS 1.77.0 (vedi versioni [AWS](https://docs.aws.amazon.com/cdk/api/latest/versions.html) CDK)
+ JDK 11
+ AWS CLI versione 2

## Architecture
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-architecture"></a>

**Stack tecnologico Target**
+ Amazon Kinesis Video Streams
+ Attività AWS Fargate
+ Coda Amazon Simple Queue Service (Amazon SQS)
+ Bucket Amazon S3

**Architettura Target**

![Architettura per l'utilizzo di Kinesis Video Streams e Fargate per creare una pipeline di elaborazione video.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/images/a60e585f-27be-4dd6-897b-c38adf1d283f.png)


L'utente crea un flusso video Kinesis, carica un video e invia un messaggio JSON contenente dettagli sul flusso video Kinesis in ingresso e sul bucket S3 di uscita in una coda SQS. AWS Fargate, che esegue l'applicazione principale in un contenitore, estrae il messaggio dalla coda SQS e inizia a estrarre i frame. Ogni frame viene salvato in un file di immagine e archiviato nel bucket S3 di destinazione.

**Automazione e scalabilità**

L'applicazione di esempio può essere scalata sia orizzontalmente che verticalmente all'interno di una singola regione AWS. La scalabilità orizzontale può essere ottenuta aumentando il numero di attività AWS Fargate distribuite che leggono dalla coda SQS. La scalabilità verticale può essere ottenuta aumentando il numero di thread di suddivisione dei frame e di pubblicazione di immagini nell'applicazione. Queste impostazioni vengono passate come variabili di ambiente all'applicazione nella definizione della [QueueProcessingFargateService](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ecs-patterns.QueueProcessingFargateService.html)risorsa nell'AWS CDK. A causa della natura della distribuzione dello stack AWS CDK, puoi distribuire questa applicazione in più regioni e account AWS senza sforzi aggiuntivi.

## Tools (Strumenti)
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-tools"></a>

**Strumenti**
+ [AWS CDK](https://aws.amazon.com/cdk/) è un framework di sviluppo software per definire l'infrastruttura e le risorse cloud utilizzando linguaggi di programmazione come Python TypeScript JavaScript, Java e C\#/.Net.
+ [Amazon Kinesis Video](https://aws.amazon.com/kinesis/video-streams/) Streams è un servizio AWS completamente gestito che puoi utilizzare per lo streaming di video in diretta dai dispositivi al cloud AWS o creare applicazioni per l'elaborazione video in tempo reale o l'analisi video orientata ai batch.
+ [AWS Fargate](https://aws.amazon.com/fargate) è un motore di elaborazione serverless per container. Fargate elimina la necessità di effettuare il provisioning e la gestione dei server e consente di concentrarsi sullo sviluppo delle applicazioni.
+ [Amazon S3](https://aws.amazon.com/s3/) è un servizio di storage di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni.
+ [Amazon SQS](https://aws.amazon.com/sqs/) è un servizio di accodamento dei messaggi completamente gestito che consente di disaccoppiare e scalare microservizi, sistemi distribuiti e applicazioni serverless.

**Codice**
+ È allegato un file.zip del progetto applicativo di esempio (). `frame-splitter-code.zip`

## Epiche
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-epics"></a>

### Implementa l'infrastruttura
<a name="deploy-the-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia il daemon Docker. | Avvia il demone Docker sul tuo sistema locale. L'AWS CDK utilizza Docker per creare l'immagine utilizzata nel task AWS Fargate. È necessario eseguire Docker prima di procedere al passaggio successivo. | Sviluppatore, DevOps ingegnere | 
| Compilare il progetto. | Scaricate l'applicazione di `frame-splitter-code` esempio (allegata) ed estraetene il contenuto in una cartella sul computer locale. Prima di poter implementare l'infrastruttura, è necessario creare il progetto [Java Maven](https://maven.apache.org/). Al prompt dei comandi, accedete alla directory principale del progetto e create il progetto eseguendo il comando: <pre>mvn clean install</pre> | Sviluppatore, DevOps ingegnere | 
| Avvia il CDK AWS. | (Solo utenti First-time AWS CDK) Se è la prima volta che utilizzi il CDK AWS, potresti dover avviare l'ambiente eseguendo il comando AWS CLI:<pre>cdk bootstrap --profile "$AWS_PROFILE_NAME" </pre><br />where `$AWS_PROFILE_NAME` contiene il nome del profilo AWS contenuto nelle tue credenziali AWS. In alternativa, puoi rimuovere questo parametro per utilizzare il profilo predefinito. Per ulteriori informazioni, consulta la [documentazione di AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html). | Sviluppatore, DevOps ingegnere | 
| Implementa lo stack CDK AWS. | In questa fase, crei le risorse di infrastruttura richieste (coda SQS, bucket S3, definizione di attività AWS Fargate) nel tuo account AWS, crei l'immagine Docker necessaria per il task AWS Fargate e distribuisci l'applicazione. Al prompt dei comandi, accedi alla directory principale del progetto ed esegui il comando:<pre>cdk deploy --profile "$AWS_PROFILE_NAME" --all </pre><br />where `$AWS_PROFILE_NAME` contiene il nome del profilo AWS contenuto nelle tue credenziali AWS. In alternativa, puoi rimuovere questo parametro per utilizzare il profilo predefinito. Conferma la distribuzione. Annota i valori **QueueUrl**e **Bucket** dall'output della distribuzione CDK; ti serviranno nei passaggi successivi. L'AWS CDK crea gli asset, li carica sul tuo account AWS e crea tutte le risorse dell'infrastruttura. Puoi osservare il processo di creazione delle risorse nella [ CloudFormation console AWS](https://console.aws.amazon.com/cloudformation/). Per ulteriori informazioni, consulta la documentazione di [AWS e la CloudFormation documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) di [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#hello_world_tutorial_deploy). | Sviluppatore, DevOps ingegnere | 
| Crea un flusso video. | In questo passaggio, crei un flusso video Kinesis che fungerà da flusso di input per l'elaborazione video. Assicurati di avere la CLI AWS installata e configurata. Nella CLI di AWS, esegui:<pre>aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24" </pre><br />where `$AWS_PROFILE_NAME` contiene il nome del profilo AWS dalle tue credenziali AWS (o rimuovi questo parametro per utilizzare il profilo predefinito) ed `$STREAM_NAME` è qualsiasi nome di stream valido. <br />In alternativa, puoi creare un flusso video utilizzando la console Kinesis seguendo i passaggi nella documentazione di [Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html#gs-createstream-console). Prendi nota dell'AWS Resource Name (ARN) dello stream creato; ti servirà in seguito. | Sviluppatore, DevOps ingegnere | 

### Esegui un esempio
<a name="run-an-example"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Carica il video nello stream. | Nella cartella del progetto dell'`frame-splitter-code`applicazione di esempio, aprite il `ProcessingTaskTest.java` file contenuto nella `src/test/java/amazon/awscdk/examples/splitter` cartella. Sostituite le `streamName`**** variabili `profileName`**** and con i valori utilizzati nei passaggi precedenti. Per caricare il video di esempio nello stream video Kinesis creato nel passaggio precedente, esegui:  <pre>amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test</pre><br />In alternativa, puoi caricare il tuo video utilizzando uno dei metodi descritti nella documentazione di [Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html). | Sviluppatore, ingegnere DevOps  | 
| Avvia l'elaborazione video. | Ora che hai caricato un video nello stream video di Kinesis, puoi iniziare a elaborarlo. Per avviare la logica di elaborazione, devi inviare un messaggio con i dettagli alla coda SQS creata dal CDK AWS durante la distribuzione. Per inviare un messaggio utilizzando la CLI di AWS, esegui:<pre>aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE </pre><br />where `$AWS_PROFILE_NAME` contiene il nome del profilo AWS dalle tue credenziali AWS (rimuovi questo parametro per utilizzare il profilo predefinito), `QUEUE_URL` è il **QueueUrl**valore dell'output di AWS CDK ed `MESSAGE` è una stringa JSON nel seguente formato: <pre>{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }</pre><br />dove `STREAM_ARN` è l'ARN del flusso video creato in un passaggio precedente ed `BUCKET_NAME` è il valore **Bucket** dall'output di AWS CDK. <br />L'invio di questo messaggio avvia l'elaborazione video. In alternativa, puoi inviare un messaggio utilizzando la console Amazon SQS, come descritto nella documentazione di [Amazon SQS.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-send-messages.html) | Sviluppatore, ingegnere DevOps  | 
| Visualizza le immagini dei fotogrammi video. | Puoi vedere le immagini risultanti nel bucket di output S3 `s3://BUCKET_NAME/test-output` dove si `BUCKET_NAME` trova il valore del **bucket** dall'output di AWS CDK. | Sviluppatore, ingegnere DevOps  | 

## Risorse correlate
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-resources"></a>
+ [Documentazione CDK AWS](https://docs.aws.amazon.com/cdk/latest/guide/home.html)
+ [Riferimento all'API CDK AWS](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html)
+ [Workshop introduttivo su AWS CDK](https://cdkworkshop.com/)
+ [Documentazione di Amazon Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html)
+ [Esempio: identificazione di oggetti nei flussi video mediante SageMaker](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-sagemaker.html)
+ [Esempio: analisi e rendering dei frammenti di Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-renderer.html)
+ [Analizza video live su larga scala in tempo reale utilizzando Amazon Kinesis Video Streams SageMaker](https://aws.amazon.com/blogs/machine-learning/analyze-live-video-at-scale-in-real-time-using-amazon-kinesis-video-streams-and-amazon-sagemaker/) e Amazon (post sul blog di AWS Machine Learning)
+ [Nozioni di base su AWS Fargate](https://aws.amazon.com/fargate/getting-started/)

## Informazioni aggiuntive
<a name="build-a-video-processing-pipeline-by-using-amazon-kinesis-video-streams-and-aws-fargate-additional"></a>

**Scelta di un IDE**

Ti consigliamo di utilizzare il tuo IDE Java preferito per creare ed esplorare questo progetto.  

**Pulizia**

Al termine dell'esecuzione di questo esempio, rimuovi tutte le risorse distribuite per evitare costi aggiuntivi dell'infrastruttura AWS. 

Per rimuovere l'infrastruttura e il flusso video, usa questi due comandi nella CLI di AWS:

```
cdk destroy --profile "$AWS_PROFILE_NAME" --all
```

```
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"
```

In alternativa, puoi rimuovere le risorse manualmente utilizzando la CloudFormation console AWS per rimuovere lo CloudFormation stack AWS e la console Kinesis per rimuovere il flusso video Kinesis. Tieni presente che `cdk destroy` non rimuove il bucket S3 di output o le immagini nei repository Amazon Elastic Container Registry (Amazon ECR) (). `aws-cdk/assets` È necessario rimuoverli manualmente.

## Allegati
<a name="attachments-9d1442c2-f3ee-47fd-8cce-90d9206ce4d4"></a>

[Per accedere a contenuti aggiuntivi associati a questo documento, scaricate e decomprimete il seguente file: attachment.zip](samples/p-attach/9d1442c2-f3ee-47fd-8cce-90d9206ce4d4/attachments/attachment.zip)