Existe uma maneira de acelerar o AWS CodeDeploy

15

Estou usando o AWS CodeDeploy para implantar meus sites e notei que não é muito consistente em velocidade; às vezes é muito rápido, mas outras vezes cada etapa de uma implantação pode levar alguns minutos. Isso é bastante irritante quando uma implantação deve ser executada rapidamente, em caso de erros ou interrupções.

Porém, não consigo encontrar nenhuma documentação sobre a velocidade do CodeDeploy e também não consigo encontrar nenhuma lógica quando é lento ou rápido. Existe alguma maneira de acelerar e existe alguma maneira de saber o que está demorando tanto?

Jasper Kennis
fonte

Respostas:

10

O CodeDeploy faz muito pouco por padrão - ele pega o código do S3 ou do Github e executa seus scripts de acordo com as appspec.ymlinstruções do arquivo.

Se suas implantações estão obtendo gigabytes de dados do S3, você verá que isso leva algum tempo para a transferência de dados (particularmente em instâncias menores do EC2 com largura de banda limitada), mas, além disso, os atrasos na implantação são muito mais prováveis ​​do que você está fazendo em seus scripts de implantação.

As etapas em uma implantação do CodeDeploy são:

  • ApplicationStop - você controla esse gancho
  • DownloadBundle - CodeDeploy pega o código do S3 / Github
  • BeforeInstall - você controla este gancho
  • Instalar - o CodeDeploy copia o código de um local temporário para o destino final
  • AfterInstall - você controla esse gancho
  • ApplicationStart - você controla esse gancho
  • ValidateService - você controla esse gancho

Os em negrito dependem do CodeDeploy, os outros dependem de você. Se você estiver observando atrasos variados nos em negrito, entre em contato com o suporte da AWS, mas, caso contrário, é provável que você precise investigar seus ganchos.

ceejayoz
fonte
Sim, meus próprios scripts são simples e rápidos. É a etapa do pacote de download que geralmente leva alguns minutos para ser executada, e meu projeto não é tão grande; com a mesma frequência, leva apenas alguns segundos. Eu não tenho o plano de suporte a desenvolvedores, e não estou disposto a pagar apenas por isso, então deixarei por enquanto.
Jasper Kennis 16/02
Verificado novamente, o problema tem que ser a largura de banda; estamos usando um tipo de instância pequena para o servidor de armazenamento temporário e maior uma vez para produção, e sempre é lento o armazenamento temporário.
Jasper Kennis
@JasperKennis Sim, os tipos de instância menores podem ter uma largura de banda bastante limitada, principalmente se você estiver em um host com vizinhos barulhentos. Isso faria sentido.
precisa
21

BlockTraffic e AllowTraffic

Simplesmente ajustar as configurações de verificação de saúde do seu grupo-alvo pode reduzir alguns minutos.

Antes

insira a descrição da imagem aqui insira a descrição da imagem aqui

Depois de

insira a descrição da imagem aqui insira a descrição da imagem aqui

Explicação

Isso funciona porque BlockTraffice AllowTrafficambos espera para exames de saúde bem-sucedidos. O intervalo de verificação de integridade padrão é 1 verificação a cada 30 segundos, e uma verificação de saúde bem-sucedida precisa de 5 200 respostas consecutivas. Portanto, leva mais de 2 minutos e 30 segundos por padrão. E isso é para todas as instâncias do EC2. Diminuir o intervalo de verificação de integridade e limitar o número de verificações bem-sucedidas necessárias melhorará o tempo de implantação.

Peter Tao
fonte
Depois de fazer essa alteração, estou recebendo Script at specified location: ... failed to complete in 5 seconds. (ele é definido em appspec.yml-> hooks: -> BeforeInstall :) (por favor, diga-me o porquê)
Yevgeniy Afanasyev
Existe um tempo limite definido na configuração BeforeInstall? docs.aws.amazon.com/codedeploy/latest/userguide/…
Peter Tao
Obrigado, agora vejo que não está relacionado, mas sim uma coincidência.
Yevgeniy Afanasyev
2

Outra configuração a ser verificada é o "atraso no cancelamento de registro" do grupo-alvo. Minhas configurações de verificação de saúde já estavam baixas e esse foi o gargalo no meu caso.

Aaron
fonte