Utilizzo del ramo della piattaforma Amazon ECS - AWS Elastic Beanstalk

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

Utilizzo del ramo della piattaforma Amazon ECS

In questo argomento vengono illustrati entrambi i rami di piattaforma Amazon ECS su Amazon Linux 2 e il ramo della piattaforma che sostituisce, Docker multi-container su AL1 (gestito sempre da ECS). Se non diversamente indicato, tutte le informazioni contenute in questo argomento si applicano a entrambi i rami della piattaforma.

Nota

Il 18 luglio 2022 Elastic Beanstalk ha impostato lo stato di tutte le ramificazioni della piattaforma basate sull'AMI Amazon Linux (AL1) su retired (ritirato).

Migrazione da Docker multi-container su ad AL1

Se attualmente stai utilizzando la ramificazione della piattaforma Docker multi-container in esecuzione su AL1 ritirata, puoi migrare alla versione più recente della ramificazione della piattaforma ECS in esecuzione su AL2023. L'ultima versione della ramificazione della piattaforma supporta tutte le funzionalità della ramificazione fuori produzione. Non sono richieste modifiche al codice sorgente. Per ulteriori informazioni, consulta Migrazione di Docker multi-container in esecuzione su Amazon Linux a ECS su Amazon Linux 2023.

Piattaforma Docker gestita da ECS

Elastic Beanstalk utilizza Amazon Elastic Container Service (Amazon ECS) per coordinare le distribuzioni dei container in ambienti Docker multicontainer. Amazon ECS fornisce strumenti per la gestione di un cluster di istanze che eseguono container Docker. Elastic Beanstalk si occupa delle attività Amazon ECS, tra cui la creazione di cluster, la definizione delle attività e l'esecuzione. Le istanze nell'ambiente eseguono lo stesso set di container, che sono definiti in un file Dockerrun.aws.json v2. Per ottenere il massimo da Docker, Elastic Beanstalk ti consente di creare un ambiente in cui le istanze Amazon EC2 eseguono più container Docker affiancati.

Il diagramma seguente mostra un esempio di ambiente Elastic Beanstalk configurato con tre container Docker in esecuzione su ogni istanza Amazon EC2 in un gruppo Auto Scaling:

Nota

Elastic Beanstalk offre funzionalità di estensibilità per tutte le piattaforme che è possibile utilizzare per personalizzare la distribuzione e l'esecuzione delle applicazioni. Per il ramo di piattaforma ECS in esecuzione su Amazon Linux 2, l'implementazione del flusso di lavoro di distribuzione dell'istanza di queste funzionalità varia dalle altre piattaforme. Per ulteriori informazioni, consulta Flusso di lavoro di implementazione di istanze per ECS in esecuzione su Amazon Linux 2 e versioni successive.

Dockerrun.aws.json file

Le istanze di container, ovvero le istanze Amazon EC2 che eseguono Docker gestito da ECS in un ambiente Elastic Beanstalk, richiedono un file di configurazione denominato Dockerrun.aws.json. Questo file è specifico per Elastic Beanstalk e può essere utilizzato da solo o abbinato a un codice sorgente e a contenuti in un bundle di origine per creare un ambiente su una piattaforma Docker.

Nota

La versione 1 del format Dockerrun.aws.json viene utilizzata per avviare un container Docker singolo in un ambiente Elastic Beanstalk in esecuzione su AMI Amazon Linux (la versione precedente ad Amazon Linux 2). L'ambiente è basato sul ramo di piattaforma Docker in esecuzione su Amazon Linux a 64 bit, che sarà ritirato il 18 luglio 2022. Per ulteriori informazioni sul formato Dockerrun.aws.json v1, vedi Configurazione della piattaforma Docker - senza Docker Compose.

La versione 2 del formato Dockerrun.aws.json aggiunge il supporto per più container per l'istanza Amazon EC2 e può essere utilizzata solo con la piattaforma Docker gestita da ECS. Il formato differisce in modo significativo dalla versione precedente.

Consulta Dockerrun.aws.json v2 per dettagli sul formato aggiornato e per un file di esempio.

Immagini Docker

La piattaforma Docker gestita da ECS per Elastic Beanstalk richiede immagini preinstallate e memorizzate in un repository di immagini online pubblico o privato.

Nota

La creazione di immagini personalizzate durante la distribuzione con un Dockerfile non è supportata dalla piattaforma Docker gestita da ECS su Elastic Beanstalk. Crea le immagini e distribuiscile in un repository online prima di creare un ambiente Elastic Beanstalk.

Specifica le immagini per nome in Dockerrun.aws.json v2 Nota queste convenzioni:

  • Le immagini in repository ufficiali su Docker Hub utilizzano un singolo nome (ad esempio ubuntu o mongo).

  • Le immagini in altri repository su Docker Hub vengono qualificate con un nome di organizzazione (ad esempi, amazon/amazon-ecs-agent).

  • Le immagini in altri registri online vengono ulteriormente qualificate tramite un nome di dominio (ad esempi, quay.io/assemblyline/ubuntu).

Per configurare Elastic Beanstalk in modo che effettui l'autenticazione su un repository privato, includi il parametro authentication nel file Dockerrun.aws.json v2.

Ruolo dell'istanza di container

Elastic Beanstalk utilizza un'AMI ottimizzata per Amazon ECS con un agente del container Amazon ECS che viene eseguito in un container Docker. L'agente comunica con Amazon ECS per coordinare le distribuzioni dei container. Per comunicare con Amazon ECS, ogni istanza Amazon EC2 deve disporre delle autorizzazioni corrispondenti in IAM. Queste autorizzazioni sono collegate al profilo dell'istanza predefinito al momento della creazione di un ambiente nella console di gestione Elastic Beanstalk:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSAccess", "Effect": "Allow", "Action": [ "ecs:Poll", "ecs:StartTask", "ecs:StopTask", "ecs:DiscoverPollEndpoint", "ecs:StartTelemetrySession", "ecs:RegisterContainerInstance", "ecs:DeregisterContainerInstance", "ecs:DescribeContainerInstances", "ecs:Submit*" ], "Resource": "*" } ] }

Se crei il tuo profilo di istanza, puoi collegare la policy gestita AWSElasticBeanstalkMulticontainerDocker per accertarti che le autorizzazioni siano aggiornate. Per istruzioni su come creare policy e ruoli in IAM, vedi Creazione di ruoli IAM nella Guida per l'utente IAM.

Risorse Amazon ECS create da Elastic Beanstalk

Quando crei un ambiente utilizzando la piattaforma Docker gestita da ECS, Elastic Beanstalk crea e configura automaticamente diverse risorse Amazon Elastic Container Service durante la creazione dell'ambiente. In questo modo, crea i container necessari su ogni istanza di Amazon EC2.

  • Cluster Amazon ECS: le istanze di container in Amazon ECS sono organizzate in cluster. Se usato con Elastic Beanstalk, viene sempre creato un cluster per ogni ambiente Docker gestito da ECS.

  • Definizione attività Amazon ECS: Elastic Beanstalk usa il file Dockerrun.aws.json v2 nel progetto per generare la definizione delle attività Amazon ECS utilizzata per configurare le istanze di container nell'ambiente.

  • Attività Amazon ECS: Elastic Beanstalk comunica con Amazon ECS per eseguire un'attività su ogni istanza nell'ambiente e coordinare la distribuzione dei container. In un ambiente scalabile, Elastic Beanstalk avvia una nuova attività ogni volta che un'istanza viene aggiunta al cluster. In rari casi potrebbe essere necessario aumentare la quantità di spazio riservato a contenitori e immagini. Ulteriori informazioni nella sezione Configurazione degli ambienti Docker.

  • Agente container Amazon ECS: l'agente viene eseguito in un container Docker sulle istanze nell'ambiente. L'agente esegue il polling del servizio Amazon ECS e attende l'esecuzione di un'attività.

  • Volumi di dati Amazon ECS: Elastic Beanstalk inserisce definizioni di volumi in aggiunta ai volumi che definisci in Dockerrun.aws.json v2 nella definizione dell'attività per facilitare la raccolta di log.

    Elastic Beanstalk crea volumi di log sull'istanza di container, uno per ogni container Docker, in /var/log/containers/containername. Questi volumi sono denominati awseb-logs-containername e vengono forniti per il montaggio dei container. Vedi Formato della definizione del container per ulteriori informazioni su come montarli.

Utilizzo di più listener Elastic Load Balancing

È possibile configurare più ascoltatori Elastic Load Balancing su un ambiente Docker gestito da ECS per supportare il traffico in entrata per i proxy o altri servizi che non girano sulla porta HTTP predefinita.

Crea una cartella .ebextensions nel bundle di origine e aggiungi un file con un'estensione file .config. L'esempio seguente mostra un file di configurazione che crea un listener Elastic Load Balancing sulla porta 8080.

.ebextensions/elb-listener.config

option_settings: aws:elb:listener:8080: ListenerProtocol: HTTP InstanceProtocol: HTTP InstancePort: 8080

Se l'ambiente è in esecuzione in un Amazon Virtual Private Cloud (Amazon VPC) personalizzato che hai creato, Elastic Beanstalk si occupa del resto. In un VPC predefinito, è necessario configurare il gruppo di sicurezza dell'istanza per consentire l'ingresso dal load balancer. Aggiungi un secondo file di configurazione che aggiunge una regola in ingresso per il gruppo di sicurezza:

.ebextensions/elb-ingress.config

Resources: port8080SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 8080 FromPort: 8080 SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }

Per ulteriori informazioni sul formato del file di configurazione consulta Aggiunta e personalizzazione delle risorse dell'ambiente Elastic Beanstalk e Impostazioni opzioni.

Oltre ad aggiungere un ascoltatore alla configurazione di Elastic Load Balancing e ad aprire una porta nel gruppo di sicurezza, è necessario mappare la porta sull'istanza host a una porta sul container Docker nella sezione containerDefinitions del file Dockerrun.aws.json v2. Di seguito viene riportato un estratto di esempio:

"portMappings": [ { "hostPort": 8080, "containerPort": 8080 } ]

Consulta Dockerrun.aws.json v2 per dettagli sul formato del file Dockerrun.aws.json v2.

Distribuzioni di container non riuscite

Se un'attività Amazon ECS ha esito negativo, uno o più container nell'ambiente Elastic Beanstalk non verranno avviati. Elastic Beanstalk non esegue il rollback degli ambienti multicontainer a causa di un'attività Amazon ECS non riuscita. Se un container non viene avviato nell'ambiente, ridistribuisci la versione corrente o una versione funzionante precedente dalla console Elastic Beanstalk.

Per distribuire una versione esistente
  1. Apri la console Elastic Beanstalk nella regione dell'ambiente in uso.

  2. Fai clic su Actions (Operazioni) a destra del nome dell'applicazione, quindi su View application versions (Visualizza versioni dell'applicazione).

  3. Seleziona una versione dell'applicazione e fai clic su Deploy (Distribuisci).