

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

# Implementare i servizi Amazon ECS utilizzando un controller di terze parti
<a name="deployment-type-external"></a>

Il tipo di implementazione *esterna* consente di usare qualsiasi controller di implementazione di terze parti per il controllo completo sul processo di implementazione per un servizio Amazon ECS. I dettagli del servizio vengono gestiti tramite le operazioni API del servizio di gestione (`CreateService`, `UpdateService` e `DeleteService`) o della gestione dei set di attività (`CreateTaskSet`, `UpdateTaskSet`, `UpdateServicePrimaryTaskSet` e `DeleteTaskSet`). Ciascuna operazione API gestisce un sottoinsieme di parametri di definizione del servizio.

L'operazione API `UpdateService` aggiorna i parametri del periodo di tolleranza per il conteggio desiderato e il controllo dell'integrità di un servizio. Se è necessario aggiornare l'opzione di calcolo, la versione della piattaforma, i dettagli del bilanciatore del carico, la configurazione di rete o la definizione di attività, è necessario creare un nuovo set di attività.

L'operazione API `UpdateTaskSet` aggiorna solo il parametro di dimensionamento per un set di attività.

L'operazione API `UpdateServicePrimaryTaskSet` modifica il set di attività impostato come principale in un servizio. Chiamando l'operazione API `DescribeServices`, vengono restituiti tutti i campi specificati per un set di attività principale. Se viene aggiornato il set di attività principale per un servizio, quando viene definito il nuovo set principale eventuali valori del parametro esistenti sul nuovo ma diversi da quelli impostati sul precedente set di attività in un servizio verranno aggiornati ai nuovi valori. Se non viene definito un set di attività principale per un servizio, i relativi campi nella descrizione del servizio sono nulli.

## Considerazioni sull'implementazione esterna
<a name="deployment-type-external-considerations"></a>

Quando si utilizza il tipo di implementazione esterna, tenere conto di quanto segue:
+ I tipi di load balancer supportati sono un Application Load Balancer o un Network Load Balancer.
+ Fargate oppure i tipi di controller di implementazione `EXTERNAL` non supportano la strategia di pianificazione `DAEMON`.
+ L' AutoScaling integrazione delle applicazioni con Amazon ECS supporta solo il servizio Amazon ECS come destinazione. La dimensione scalabile supportata per Amazon ECS è `ecs:service:DesiredCount`: il numero di attività di un servizio Amazon ECS. Non esiste un'integrazione diretta tra i set di attività Application AutoScaling e Amazon ECS. I set di attività di Amazon ECS calcolano il `ComputedDesiredCount` base al `DesiredCount` di servizio di Amazon ECS.

## Flusso di lavoro dell'implementazione esterna
<a name="deployment-type-external-workflow"></a>

Di seguito è riportato il flusso di lavoro di base per la gestione di un'implementazione esterna su Amazon ECS.

**Come gestire un servizio Amazon ECS tramite un controller di implementazione esterno**

1. Crea un servizio Amazon ECS. L'unico parametro obbligatorio è il nome del servizio. Durante la creazione di un servizio tramite un controller di implementazione esterno, è possibile specificare i parametri indicati di seguito. Tutti gli altri, invece, vengono specificati al momento della creazione di un set di attività nel servizio.  
`serviceName`  
Tipo: stringa  
Obbligatorio: sì  
Il nome del servizio. Sono consentite fino a 255 lettere (maiuscole e minuscole), numeri, trattini e caratteri di sottolineatura. I nomi dei servizi devono essere univoci all'interno di un cluster, ma puoi avere servizi dai nomi simili in più cluster all'interno di una Regione o in più Regioni.  
`desiredCount`  
Il numero di istanze della definizione di attività per il set specificato, da posizionare e mantenere in esecuzione nel servizio.  
`deploymentConfiguration`  
I parametri di implementazione opzionali che determinano quante attività vengono eseguite durante un'implementazione e l'ordine di arresto e di avvio delle attività.   
`tags`  
Tipo: matrice di oggetti   
Obbligatorio: no  
I metadati applicati al servizio per aiutarti a catalogarli e organizzarli. Ogni tag è composto da una chiave e da un valore opzionale, entrambi personalizzabili. Quando un servizio viene eliminato, vengono eliminati anche i tag. Al servizio è possibile applicare un massimo di 50 tag. Per ulteriori informazioni, consultare [Aggiunta di tag alle risorse Amazon ECS](ecs-using-tags.md).  
Quando si aggiorna un servizio, questo parametro non innesca una nuova implementazione del servizio.    
`key`  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 128 caratteri.  
Obbligatorio: no  
Una parte di una coppia chiave-valore che costituisce un tag. Una chiave è un'etichetta generale che funge da categoria per più valori di tag specifici.  
`value`  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 0. La lunghezza massima è 256 caratteri.  
Obbligatorio: no  
La parte facoltativa di una coppia chiave-valore che costituisce un tag. Un valore agisce come descrittore all'interno di una categoria di tag (chiave).  
`enableECSManagedTags`  
Specifica se usare i tag gestiti di Amazon ECS per i processi all'interno del servizio. Per ulteriori informazioni, consultare [Uso dei tag per la risoluzione dei problemi](ecs-using-tags.md#tag-resources-for-billing).  
`propagateTags`  
Tipo: String  
Valori validi: `TASK_DEFINITION` \$1 `SERVICE`  
Obbligatorio: no  
Specifica se copiare i tag dalla definizione di attività o dal servizio nelle attività del servizio. Se non viene specificato alcun valore, i tag non vengono copiati. I tag possono essere copiati solo nelle attività all'interno del servizio durante la creazione del servizio. Per aggiungere tag a un processo dopo la creazione di un servizio o di un processo, utilizza l'operazione API `TagResource`.  
Quando si aggiorna un servizio, questo parametro non innesca una nuova implementazione del servizio.  
`schedulingStrategy`  
La strategia di pianificazione da utilizzare. I servizi che utilizzano un controller di implementazione esterno supportano solo la strategia di pianificazione `REPLICA`.  
`placementConstraints`  
Serie di oggetti vincolo di posizionamento da utilizzare per le attività del servizio. Puoi specificare un massimo di 10 vincoli per attività (questo limite include i vincoli nella definizione di attività e quelli specificati in fase di runtime). Se si utilizza Fargate, i vincoli di posizionamento dei processi non sono supportati.  
`placementStrategy`  
Gli oggetti strategia di posizionamento da utilizzare per le attività del servizio. Puoi specificare un massimo di quattro regole di strategia per ogni servizio.

   Di seguito è illustrato un esempio di definizione per la creazione di un servizio che utilizza un controller di implementazione esterno.

   ```
   {
       "cluster": "",
       "serviceName": "",
       "desiredCount": 0,
       "role": "",
       "deploymentConfiguration": {
           "maximumPercent": 0,
           "minimumHealthyPercent": 0
       },
       "placementConstraints": [
           {
               "type": "distinctInstance",
               "expression": ""
           }
       ],
       "placementStrategy": [
           {
               "type": "binpack",
               "field": ""
           }
       ],
       "schedulingStrategy": "REPLICA",
       "deploymentController": {
           "type": "EXTERNAL"
       },
       "tags": [
           {
               "key": "",
               "value": ""
           }
       ],
       "enableECSManagedTags": true,
       "propagateTags": "TASK_DEFINITION"
   }
   ```

1. Creare un set di attività iniziali. Il set di attività contiene i seguenti i dettagli sul servizio:  
`taskDefinition`  
La definizione delle attività nel set da utilizzare.  
`launchType`  
Tipo: String  
Valori validi: `EC2` \$1 `FARGATE` \$1 `EXTERNAL`  
Obbligatorio: no  
Il tipo di avvio con cui eseguire il servizio. Se non viene specificato un tipo di avvio, per impostazione predefinita viene utilizzato il `capacityProviderStrategy` di default.  
Quando si aggiorna un servizio, questo parametro innesca una nuova implementazione del servizio.  
Se viene specificato un `launchType`, il parametro `capacityProviderStrategy` deve essere omesso.  
`platformVersion`  
▬Tipo: stringa  
Obbligatorio: no  
La versione della piattaforma su cui sono in esecuzione le attività nel servizio. Viene specificata una versione della piattaforma solo per le attività con tipo di avvio Fargate. Se non è specificata, la versione più recente (`LATEST`) viene utilizzata di default.  
Quando si aggiorna un servizio, questo parametro innesca una nuova implementazione del servizio.  
AWS Le versioni della piattaforma Fargate vengono utilizzate per fare riferimento a un ambiente di runtime specifico per l'infrastruttura di attività Fargate. Quando specifichi la versione della piattaforma `LATEST` durante l'esecuzione di un'attività o la creazione di un servizio, ottieni la versione di piattaforma più aggiornata disponibile per le tue attività. Quando incrementi il servizio, tali attività riceveranno la versione della piattaforma specificata nell'implementazione corrente del servizio. Per ulteriori informazioni, consultare [Versioni della piattaforma Fargate per Amazon ECS](platform-fargate.md).  
Le versioni della piattaforma non sono specificate per i processi che utilizzano il tipo di avvio EC2.  
`loadBalancers`  
Un oggetto che rappresenta il load balancer da utilizzare con il tuo servizio. Quando si utilizza un controller di implementazione esterno, sono supportati solo Application Load Balancer e il Network Load Balancer. Se si utilizza un Application Load Balancer, è consentito un solo gruppo di destinazione di Application Load Balancer per ogni set di processi.  
Il frammento di codice seguente mostra un oggetto `loadBalancer` di esempio da utilizzare.  

   ```
   "loadBalancers": [
           {
               "targetGroupArn": "",
               "containerName": "",
               "containerPort": 0
           }
   ]
   ```
Quando si specifica un oggetto `loadBalancer`, è necessario specificare `targetGroupArn` e omettere i parametri `loadBalancerName`.  
`networkConfiguration`  
La configurazione di rete per il servizio. Questo parametro è obbligatorio per le definizioni di attività che utilizzano la modalità di rete `awsvpc` per ricevere la propria interfaccia di rete elastica e non è supportato per altre modalità. Per ulteriori informazioni sul networking per Fargate, consultare [Opzioni di rete di attività di Amazon ECS per Fargate](fargate-task-networking.md).  
`serviceRegistries`  
I dettagli dei registri del servizio di individuazione da assegnare a questo servizio. Per ulteriori informazioni, consultare [Usare il rilevamento servizi per connettere i servizi Amazon ECS con nomi DNS](service-discovery.md).  
`scale`  
Percentuale a virgola mobile del numero desiderato di attività da posizionare e mantenere in esecuzione nel seti di attività. Il valore è specificato come percentuale totale del conteggio desiderato (`desiredCount`) di un servizio. Come valori sono accettati i numeri da 0 a 100.

   Di seguito è riportato un esempio JSON per la creazione di un set di attività per un controller di implementazione esterno.

   ```
   {
       "service": "",
       "cluster": "",
       "externalId": "",
       "taskDefinition": "",
       "networkConfiguration": {
           "awsvpcConfiguration": {
               "subnets": [
                   ""
               ],
               "securityGroups": [
                   ""
               ],
               "assignPublicIp": "DISABLED"
           }
       },
       "loadBalancers": [
           {
               "targetGroupArn": "",
               "containerName": "",
               "containerPort": 0
           }
       ],
       "serviceRegistries": [
           {
               "registryArn": "",
               "port": 0,
               "containerName": "",
               "containerPort": 0
           }
       ],
       "launchType": "EC2",
       "capacityProviderStrategy": [
           {
               "capacityProvider": "",
               "weight": 0,
               "base": 0
           }
       ],
       "platformVersion": "",
       "scale": {
           "value": null,
           "unit": "PERCENT"
       },
       "clientToken": ""
   }
   ```

1. Quando è necessario modificare il servizio, utilizzare l'operazione API `CreateTaskSet`, `UpdateService` o `UpdateTaskSet`, a seconda dei parametri da aggiornare. Se è stato creato un set di attività, utilizzare il parametro `scale` per ogni set di attività in un servizio, per determinare il numero di attività da mantenere in esecuzione nel servizio. Ad esempio, se si dispone di un servizio che contiene un `tasksetA` e si crea un `tasksetB`, è consigliabile testare la validità del `tasksetB` prima di trasferire a esso il traffico di produzione. È possibile impostare il parametro `scale` per entrambi i set di attività su `100`e, una volta pronti a spostare tutto il traffico di produzione nel `tasksetB`, è possibile aggiornare `scale` per `tasksetA` su `0` per ridurlo.