AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 867642
Accepted
Tim
Tim
Asked: 2017-08-09 18:54:17 +0800 CST2017-08-09 18:54:17 +0800 CST 2017-08-09 18:54:17 +0800 CST

Como iniciar e parar a instância do AWS EC2 com base em uma programação baseada em tempo

  • 772

Existe uma maneira fácil de iniciar e interromper instâncias do AWS EC2 em um determinado horário todos os dias? Isso poderia me economizar muito dinheiro para meus servidores de desenvolvimento e teste.

amazon-ec2
  • 3 3 respostas
  • 42959 Views

3 respostas

  • Voted
  1. Best Answer
    Tim
    2017-08-09T18:54:17+08:002017-08-09T18:54:17+08:00

    Atualizar

    A AWS lançou uma ferramenta chamada " Instance Scheduler ", incluindo um guia de configuração completo que está vinculado a essa página. Parece ser um aprimoramento do Agendador do EC2 que descrevo abaixo, com mais alguns recursos, mas é essencialmente a mesma coisa.

    O guia abaixo ainda funcionará, mas provavelmente é melhor examinar o agendador de instâncias para novas instalações.

    Postagem original

    A AWS tem uma ferramenta chamada EC2 Scheduler que oferece um controle muito flexível sobre como iniciar e interromper instâncias do EC2.

    A ferramenta permite que você defina os horários de início e término padrão ao configurar a ferramenta, que você pode alterar posteriormente. Você pode escolher quais instâncias serão controladas e especificar diferentes horários de início e término para cada instância usando tags.

    Embora seja uma ótima ferramenta, a documentação é um pouco vaga e confusa. É como se a documentação tivesse sido escrita por um engenheiro que escreveu a ferramenta e sabe tudo sobre ela, ao invés de um redator técnico.

    Nota : se você tiver comentários ou correções, comentários são apreciados. Se você tiver uma pergunta baseada nisso, comece sua própria pergunta.

    O que é o Agendador EC2

    Essa ferramenta é uma função Lambda que funciona com Cloudwatch Events e DynamoDB. Ele é implantado usando um modelo do Cloudformation, que também configura as funções e políticas do IAM necessárias. Você pode ler sobre a arquitetura aqui .

    Arquitetura do Agendador do AWS EC2

    Implantação

    Comece indo para esta página e clicando em "lançar solução". No momento, o link direto está aqui , mas pode mudar.

    Selecione a região na qual você deseja que os recursos sejam implantados na parte superior do console. O script controla instâncias do EC2 em qualquer região, mas é executado em uma região.

    Como marcar instâncias do EC2

    Isso é abordado na documentação aqui , mas não é tão simples quanto poderia ser.

    Você controla quais instâncias são iniciadas e interrompidas marcando suas instâncias.

    O caso mais simples exige que você marque cada instância do EC2 que deseja iniciar e parar de acordo com o agendamento. Para fazer isso, encontre sua instância do EC2 no console, clique em tags e crie esta tag

    Marcação de instância do EC2 para agendador

    Para habilitar copiar e colar:

    • Chave: agendador:ec2-startstop
    • Valor: verdadeiro

    Se você quiser que uma instância específica seja iniciada e interrompida em uma programação diferente, anexe informações adicionais à chave e ao valor da tag. Por exemplo, se você quiser que uma instância comece às 1500 UTC e pare às 2400 UTC na terça, quinta e sexta-feira, insira o seguinte.

    Chave: agendador:ec2-startstop:late Valor: 1500;2400;utc;tue,thu,fri

    Observe que a palavra "atrasado" pode ser qualquer string, "atrasado" não tem significado especial.

    Você pode converter UTC para sua hora local usando esta ferramenta .

    Você pode usar o editor de tags para instâncias de tags em massa. Isso pode permitir que você configure a marcação em massa com mais facilidade, o que pode ser útil para ter configurações diferentes para desenvolvimento, teste e produção. Eu duvido que você usaria isso na produção.

    Parâmetros do CloudFormation

    Ao executar o modelo do CloudFormation, você precisa inserir muitos parâmetros. A maioria você pode deixar no padrão. Aqui estão alguns dos parâmetros mais importantes

    • Nome da pilha: chame do que quiser. É exatamente como é chamado no CloudFormation.
    • Nome da tag personalizada: esta é a "chave" da tag que você coloca na instância do EC2. Deixe-o com o valor padrão, a menos que você tenha um bom motivo ou precise de várias instalações.
    • Hora de início/parada padrão: hora UTC padrão para iniciar e parar as instâncias
    • DynamoDB: as configurações são armazenadas no DynamoDB. Você pode alterar o nome da tabela e tal. Como o nível gratuito do DynamoDB não expira, é improvável que a maioria das pessoas seja cobrada.
    • (segunda tela) Permissões - este é um arenque vermelho, veja a seção abaixo. Deixe-o como padrão e execute como administrador ao tentar configurar o EC2 Scheduler.
    • Opções de notificação: achei útil configurar as notificações do SNS para poder validar se estava funcionando. Eu não gastei tempo para descobrir como desativá-los, acabei de excluí-lo e executei novamente o modelo Cloudformation para reinstalar.

    Permissões, políticas e funções

    A seção Permissões/função do IAM do modelo do CloudFormation é uma pista falsa - ou seja, é amplamente irrelevante. Ele especifica apenas o papel usado para executar o script do CloudFormation, não faz diferença para os recursos criados ou o papel usado quando a função lambda é executada. Em retrospecto, isso é óbvio, mas não era óbvio para mim quando comecei.

    Seja qual for a função que você executa este script, a mesma função e as permissões em linha são criadas no IAM. A função do Lambda é executada usando uma "função de agendador ec2" que o script cria.

    Incluí minhas políticas abaixo caso sejam úteis para alguém.

    Eventos e métricas do CloudWatch

    Se você quiser ver os logs da sua função Lambda, acesse Cloudwatch Events. O registro é muito bom. Também existem métricas, para que você possa ver quando é executado, o tempo em que é executado etc.

    Adicional

    O código para a função lambda está disponível no Github .

    Políticas

    Estes geralmente não são necessários, mas podem ser para alguém, então vou incluí-los.

    Política para função do IAM

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeInstances",
                    "ec2:DescribeTags",
                    "iam:CreateRole",
                    "iam:GetRole",
                    "iam:PassRole",
                    "iam:PutRolePolicy",
                    "iam:DeleteRolePolicy",
                    "iam:DeleteRole",
                    "dynamodb:*",
                    "lambda:*",
                    "SNS:Publish",
                    "events:*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "S3:GetObject",
                "Resource": [
                    "arn:aws:s3:::solutions-us-west-2",
                    "arn:aws:s3:::solutions-us-west-2/*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:StopInstances",
                    "ec2:StartInstances"
                ],
                "Resource": [
                    "arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012"
                ]
            }
        ]
    }
    

    Política de confiança para o papel do IAM

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "lambda.amazonaws.com",
              "cloudformation.amazonaws.com"
            ]
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
    • 19
  2. netfed
    2018-01-13T18:49:12+08:002018-01-13T18:49:12+08:00

    Se você deseja apenas iniciar e parar instâncias, aqui está outra versão que também faz uso do serviço Lambda. Ele pressupõe que você deseja controlar um id de instância específico. Você pode controlar várias instâncias adicionando mais IDs separados por uma vírgula. (ex: 'i-3453453','i-45656745'). Você pode encontrar o id de sua instância na seção Instâncias do console AWS.

    No console do Lambda

    1. Abra o console do AWS Lambda e escolha Create function.
    2. Escolha Autor do zero.
    3. Digite um nome para sua função, como "StopEC2Instances".
    4. Para Runtime, selecione Python 2.7
    5. Expanda o menu suspenso Função e escolha Criar uma função personalizada. Isso abre uma nova guia ou janela no seu navegador.
    6. No menu suspenso Função do IAM, selecione Criar uma nova função do IAM e insira um Nome de função, como "lambda_start_stop_ec2."
    7. Escolha Exibir documento de política, Editar e, em seguida, escolha Ok quando solicitado a ler a documentação. Substitua todo o texto na política por este:

    Código abaixo

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ec2:Start*",
            "ec2:Stop*"
          ],
          "Resource": "*"
        }
      ]
    }
    
    1. Escolha Permitir para concluir a criação da função e retornar ao console do AWS Lambda.
    2. Para interromper suas instâncias, substitua todo o texto no editor de código de função pelo seguinte:

    Código abaixo

    import boto3
    region = ' eu-west-1'
    instances = ['i-0dd344443184503fa']
    
    def lambda_handler(event, context):
        ec2 = boto3.client('ec2', region_name=region)
        ec2.stop_instances(InstanceIds=instances)
        print 'stopped your instances: ' + str(instances)
    

    Lembre-se de substituir os valores de região e instância pelos seus próprios.

    1. No menu suspenso Runtime, escolha Python2.7.
    2. Nas configurações básicas, insira 10 segundos para a função Timeout.
    3. Escolha Salvar.
    4. Repita todas as etapas para criar outra função que iniciará suas instâncias, mas use este script python para iniciar tudo:

    Código abaixo

    import boto3
    region = 'eu-west-1'
    instances = [' i-0dd344443184503fa']
    
    def lambda_handler(event, context):
        ec2 = boto3.client('ec2', region_name=region)
        ec2.start_instances(InstanceIds=instances)
        print 'started your instances: ' + str(instances)
    

    Agende as funções

    Aqui você criará um evento do CloudWatch que acionará sua função Lambda à noite

    1. Abra o console do Amazon CloudWatch.
    2. Escolha Eventos e, em seguida, escolha Criar regra.
    3. Escolha Agendar em Origem do Evento.
    4. Insira um intervalo de tempo ou expressão cron que informe ao Lambda quando parar suas instâncias. Para obter mais informações sobre a sintaxe correta, consulte Schedule Expression Syntax for Rules.

    Nota: As expressões Cron são avaliadas em UTC. Certifique-se de ajustar a expressão para seu fuso horário preferido. Aqui está um exemplo que executará a função todos os dias às 08:00 GMT/UTC):

    0 08 * * ? *
    
    1. Escolha Adicionar destino e, em seguida, escolha a função Lambda.
    2. Para Function, escolha a função do Lambda que interrompe suas instâncias.
    3. Escolha Configurar detalhes.
    4. Insira as seguintes informações nos campos fornecidos: Para Nome, insira um nome significativo, como "StopEC2Instances". Para Descrição, adicione uma descrição significativa, como "interrompe as instâncias do EC2 todos os dias à noite". Para Estado, selecione Ativado.
    5. Escolha Criar regra.

    Para reiniciar suas instâncias pela manhã, repita essas etapas e use o horário de início de sua preferência. Se você quiser enviar uma mensagem de correio sempre que as funções falharem, você pode configurar um tópico SNS e configurar o envio dessa mensagem em Depuração na Janela de Criação de Função do Lmbda.

    A fonte de tudo isso pode ser encontrada aqui: Documentação da AWS

    • 14
  3. Shivam Nagar
    2022-06-14T23:05:29+08:002022-06-14T23:05:29+08:00

    Uma maneira mais fácil de atingir o mesmo objetivo é usar as regras do AWS EventBridge.

    Vá para Amazon EventBridge > Regras

    1. Crie uma nova regra e selecione Tipo de regra como Agenda .

    2. Forneça a expressão cron para agendamento de desligamento da instância. Por ex. cron(30 17 * * ? *)

    3. Para Target1 , selecione:

      • Tipo de destino como "serviço da AWS"
      • Segmente como "chamada de API AWS StopInstances" e
      • forneça o ID da instância para encerrar conforme a programação.
      • Por fim, selecione Criar uma nova função para este recurso específico
    4. Revise os detalhes da programação e da instância e conclua a criação da regra.

    Você pode usar o método mencionado acima (usando lambda) para iniciar a mesma instância novamente.

    • 3

relate perguntas

  • Permissão negada (chave pública). SSH do Ubuntu local para o servidor Amazon EC2

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve