Implantação externa - Serviço Amazon Elastic Container

Implantação externa

O tipo de implantação externa permite que você use qualquer controlador de implantação de terceiros para o controle total do processo de implantação para um serviço do Amazon ECS. Os detalhes do seu serviço são gerenciados por ações da API de gerenciamento de serviços (CreateService, UpdateService e DeleteService) ou ações da API de gerenciamento de conjuntos de tarefas (CreateTaskSet, UpdateTaskSet, UpdateServicePrimaryTaskSet e DeleteTaskSet). Cada ação de API tem um subconjunto dos parâmetros de definição de serviço que ela pode gerenciar.

A ação de API UpdateService atualiza os parâmetros de contagem desejada e período de carência da verificação de integridade para um serviço. Se o tipo de inicialização, a versão da plataforma, os detalhes do load balancer, a configuração de rede ou definição de tarefa precisarem ser atualizados, você deverá criar um novo conjunto de tarefas.

A ação de API UpdateTaskSet atualiza apenas o parâmetro de escala para um conjunto de tarefas.

A ação de API UpdateServicePrimaryTaskSet modifica qual conjunto de tarefas em um serviço é o conjunto de tarefas principal. Quando você chama a ação de API DescribeServices, ela retorna todos os campos especificados para um conjunto de tarefas principal. Se o conjunto de tarefas principal de um serviço for atualizado, qualquer valor de parâmetro de conjunto de tarefas existente no novo conjunto de tarefas principal que for diferente do conjunto de tarefas principal antigo em um serviço será atualizado para o novo valor quando um novo conjunto de tarefas principal for definido. Se nenhum conjunto de tarefas principal for definido para um serviço, durante a descrição do serviço, os campos do conjunto de tarefas serão nulos.

Considerações sobre a implantação externa

Considere o seguinte ao usar o tipo de implantação externa:

  • Não há suporte para a escalabilidade automática do serviço ao usar um controlador de implantação externo.

  • Se você está usando um balanceador de carga para a tarefa, os tipos de balanceadores de carga compatíveis são application load balancers ou network load balancers.

  • As tarefas que usam o tipo de inicialização do Fargate ou os tipos de controladores de implantação EXTERNAL não são compatíveis com a estratégia de programação do DAEMON.

Fluxo de trabalho de implantações externas

Veja a seguir o fluxo de trabalho básico para gerenciar uma implantação externa no Amazon ECS.

Para gerenciar um serviço do Amazon ECS usando um controlador de implantação externa

  1. Crie um serviço do Amazon ECS. O único parâmetro obrigatório é o nome do serviço. Você pode especificar os parâmetros a seguir ao criar um serviço usando um controlador de implantação externo. Todos os outros parâmetros de serviço são especificados durante a criação de um conjunto de tarefas no serviço.

    serviceName

    Tipo: string

    Obrigatório: sim

    O nome do serviço. São permitidos até 255 letras (caixa alta e baixa), números, hífens e sublinhados. Os nomes dos serviços devem ser exclusivos em um cluster, mas é possível ter serviços com nomes semelhantes em vários clusters em uma ou várias regiões.

    desiredCount

    O número de instanciações da definição de tarefa do conjunto de tarefas especificado para posicionar e manter em execução no serviço.

    deploymentConfiguration

    Parâmetros opcionais de implantação que controlam quantas tarefas são executadas durante uma implantação e a ordem de interrupção e início de tarefas. Para mais informações, consulte deploymentConfiguration.

    tags

    Tipo: matriz de objetos

    Obrigatório: não

    Os metadados que você aplica ao serviço para ajudá-lo a categorizá-los e organizá-los. Cada tag consiste em uma chave e um valor opcional, ambos definidos por você. Quando um serviço é excluído, as tags também são excluídas. Um máximo de 50 tags podem ser aplicadas ao serviço. Para mais informações, consulte Marcar recursos do Amazon ECS.

    key

    Tipo: string

    Restrições de tamanho: tamanho mínimo 1. Tamanho máximo de 128.

    Obrigatório: não

    Uma parte de um par de chave/valor que compõe uma tag. Uma chave é um rótulo geral que age como uma categoria para valores de tag mais específicos.

    value

    Tipo: string

    Restrições de comprimento: comprimento mínimo de 0. Tamanho máximo de 256.

    Obrigatório: não

    A parte opcional de um par de chave/valor que compõe uma tag. Um valor atua como um descritor dentro de uma categoria de tag (chave).

    enableECSManagedTags

    Especifica se devem ser usadas as tags gerenciadas do Amazon ECS para as tarefas no serviço. Para mais informações, consulte Marcar recursos para faturamento.

    propagateTags

    Tipo: string

    Valores válidos: TASK_DEFINITION | SERVICE

    Obrigatório: não

    Especifica se deve copiar as tags da definição de tarefa ou do serviço para as tarefas no serviço. Se nenhum valor for especificado, as tags não serão copiadas. As tags só podem ser copiadas para tarefas no serviço durante a criação do serviço. Para adicionar etiquetas a uma tarefa após a criação do serviço ou da tarefa, use a ação de API TagResource.

    healthCheckGracePeriodSeconds

    Type: inteiro

    Obrigatório: não

    O período, em segundos, em que o programador de serviço do Amazon ECS deve ignorar verificações de integridade de destino não íntegras do Elastic Load Balancing, verificações de integridade de contêiner e verificações de integridade do Route 53 depois que uma tarefa entra no estado RUNNING. Isso será válido somente se o serviço estiver configurado para usar um load balancer. Se o serviço tiver um load balancer definido e você não especificar um valor de período de tolerância de verificação de integridade, será usado o valor padrão de 0.

    Se as tarefas do seu serviço demoram para iniciar e responder às verificações de integridade, você pode especificar um período de carência de verificação de integridade de até 2.147.483.647 segundos durante o qual o programador do serviço ECS vai ignorar o status da verificação de integridade. Esse período de carência pode evitar que o programador do serviço ECS marque tarefas como não íntegras e as interrompa antes de terem tempo de surgir.

    Se você não usa um Elastic Load Balancing, recomendamos que use o startPeriod nos parâmetros de verificação de integridade da definição de tarefa. Para obter mais informações, consulte Verificações de integridade.

    schedulingStrategy

    A estratégia de programação para usar. Os serviços que usam um controlador de implantação externo oferecem suporte apenas à estratégia de programação de REPLICA. Para mais informações, consulte Conceitos do programador de serviços.

    placementConstraints

    Um array de objetos de restrição de posicionamento para usar em tarefas no serviço. É possível especificar um máximo de 10 restrições por tarefa. Esse limite inclui restrições na definição de tarefa e naquelas especificadas no tempo de execução. Se você estiver usando o tipo de inicialização do Fargate, não haverá suporte para restrições de posicionamento de tarefas.

    placementStrategy

    A estratégia de posicionamento de objetos para usar em tarefas no serviço. É possível especificar um máximo de quatro regras de estratégia por serviço.

    Veja a seguir uma definição de serviço de exemplo para a criação de um serviço usando um controlador de implantação externo.

    { "cluster": "", "serviceName": "", "desiredCount": 0, "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }
  2. Crie um conjunto de tarefas inicial. O conjunto de tarefas contém os seguintes detalhes sobre o serviço:

    taskDefinition

    A definição de tarefa para as tarefas do conjunto de tarefas usarem.

    launchType

    Tipo: string

    Valores válidos: EC2 | FARGATE | EXTERNAL

    Obrigatório: não

    O tipo de inicialização na qual executar seu serviço. Se não for especificado um tipo de inicialização, o EC2 será usado por padrão. Para mais informações, consulte Tipos de inicialização do Amazon ECS.

    Se um launchType for especificado, o parâmetro capacityProviderStrategy deverá ser omitido.

    platformVersion

    Tipo: string

    Obrigatório: não

    A versão da plataforma na qual suas tarefas no serviço estão em execução. Uma versão da plataforma é especificada apenas para tarefas que usam o tipo de inicialização do Fargate. Se não for especificada, a versão mais recente (LATEST) será usada como padrão.

    As versões da plataforma do AWS Fargate são usadas para fazer referência a um ambiente do tempo de execução específico para a infraestrutura de tarefas do Fargate. Ao especificar a versão da plataforma LATEST quando estiver executando uma tarefa ou criando um serviço, você obtém a versão de plataforma mais atual disponível para suas tarefas. Ao escalar seu serviço, essas tarefas recebem a versão de plataforma especificada na implantação atual do serviço. Para mais informações, consulte Versões da plataforma AWS Fargate.

    nota

    Versões de plataforma não são especificadas para tarefas que usam o tipo de inicialização do EC2.

    loadBalancers

    Um objeto do load balancer que representa o load balancer para uso no serviço. Quando for usado um controlador de implantação externa, somente application load balancers e network load balancers são compatíveis. Se você estiver usando um application load balancer, somente um grupo de destino do application load balancer será permitido por conjunto de tarefas.

    O trecho a seguir mostra o exemplo de um objeto loadBalancer a ser usado.

    "loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ]
    nota

    Ao especificar um objeto loadBalancer, é necessário especificar um targetGroupArn e omitir os parâmetros loadBalancerName.

    networkConfiguration

    A configuração de rede para o serviço. Esse parâmetro é necessário para definições de tarefas que usam o modo de rede awsvpc para receber sua própria interface de rede elástica, e não tem suporte para outros modos de rede. Para obter mais informações, consulte Rede de tarefas do Amazon ECS..

    serviceRegistries

    Os detalhes dos registros de descoberta de serviços a serem atribuídos ao serviço. Para mais informações, consulte Descoberta de serviço.

    scale

    Uma porcentagem de ponto flutuante do número desejado de tarefas para posicionar e manter em execução no conjunto de tarefas. O valor é especificado como uma porcentagem total de desiredCount de um serviço. Os valores aceitos são números entre 0 e 100.

    Veja a seguir um exemplo de JSON para criar um conjunto de tarefas para um controlador de implantação externo.

    { "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": "" }
  3. Quando forem necessárias alterações no serviço, use a ação de API UpdateService, CreateTaskSet ou UpdateTaskSet, dependendo de quais parâmetros você estiver atualizando. Se você tiver criado um conjunto de tarefas, use o parâmetro scale para cada tarefa em um serviço para determinar quantas tarefas devem ser mantidas em execução no serviço. Por exemplo, se você tiver um serviço que contenha tasksetA e criar um tasksetB, poderá testar a validade de tasksetB antes de querer fazer a transição do tráfego de produção para ele. Você poderia definir scale para os dois conjuntos de tarefas como 100, e quando estivesse pronto para fazer a transição de todo o tráfego de produção para tasksetB, poderia atualizar scale para tasksetA como 0 para reduzi-lo.