Orrett vous explique comment
démarrer et arrêter automatiquement des instances
avec AWS Lambda et AWS Cloudwatch

lambdastartstop_thumbnail

Je souhaite arrêter et démarrer des instances à des heures prédéfinies ou selon des seuils d'utilisation spécifiques afin de réduire mon utilisation Amazon EC2. Est-ce que je peux configurer AWS Lambda et AWS CloudWatch pour m'aider à faire cela automatiquement ?

Vous pouvez utiliser un événement CloudWatch pour lancer une fonction Lambda afin de démarrer et d'arrêter vos instances EC2 à des intervalles réguliers.

Les événements CloudWatch vous permettent de créer un événement qui est déclenché à une heure donnée ou selon un intervalle spécifique en réponse aux événements qui ont lieu dans votre compte. Par exemple, vous pouvez créer une alarme CloudWatch qui se déclenche à une heure prédéterminée ou lorsque l'utilisation de la CPU d'une instance atteint certains niveaux (10 % ou plus, par exemple).

Vous pouvez configurer une fonction Lambda pour démarrer et arrêter les instances lorsqu'elles sont déclenchées par cet événement CloudWatch.

Dans cet exemple, vous créez des fonctions Lambda pour démarrer et arrêter les instances lorsqu'elles sont déclenchées, puis vous créez des événements CloudWatch qui déclenchent le démarrage des instances le matin et leur arrêt le soir. Pour commencer, créez des fonctions Lambda pour démarrer et arrêter vos instances EC2 :

1. Connectez-vous à la console AWS Lambda et sélectionnez Create a Lambda function. Lorsque vous êtes invité à sélectionner un plan, cliquez sur Skip.

2. Saisissez les informations suivantes pour configurer la fonction Lambda :

  • Pour Name, saisissez « StopEC2Instances » ou un autre nom significatif à vos yeux.
  • Pour Description, ajoutez une description significative (par exemple, « arrête les instances EC2 tous les soirs »).
  • Pour Runtime, sélectionnez Python 2.7.

3. Pour arrêter les instances, saisissez l'exemple de code suivant :

import boto3

# Enter the region your instances are in, e.g. 'us-east-1'

region = 'XX-XXXXX-X'

# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']

instances = ['X-XXXXXXXX']

def lambda_handler(event, context):  

    ec2 = boto3.client('ec2', region_name=region)

    ec2.stop_instances(InstanceIds=instances)

    print 'stopped your instances: ' + str(instances)

4. Développez le menu déroulant Role et sélectionnez Create new role.

5. Saisissez les informations suivantes pour créer un rôle destiné à Lambda :

  • Pour IAM Role, saisissez « Création d'un rôle IAM » ou un autre nom significatif à vos yeux.
  • Pour Role Name, saisissez « lambda_start_stop_ec2 » ou un autre nom significatif à vos yeux.

6. Cliquez sur View Policy Document et modifiez la stratégie comme suit :

{

  "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": "*"

    }

  ]

}

7. Cliquez sur Next, puis sur Create Function.
Remarque : vous devez uniquement suivre ces étapes une seule fois. Lorsque vous créerez une deuxième fonction, vous pourrez sélectionner le rôle « lambda_start_stop_ec2 » dans Lambda.

8. Répétez les étapes 1 à 4 pour créer une autre fonction qui démarrera vos instances à nouveau, avec un code similaire à celui-ci :

import boto3

# Enter the region your instances are in, e.g. 'us-east-1'

region = 'XX-XXXXX-X'

# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']

instances = ['X-XXXXXXXX']

 

def lambda_handler(event, context):

    ec2 = boto3.client('ec2', region_name=region)

    ec2.start_instances(InstanceIds=instances)

    print 'started your instances: ' + str(instances)

Remarque : utilisez un nom et une description qui reflètent que cette fonction sera utilisée pour lancer les instances.

Créez un événement CloudWatch qui déclenche la fonction Lambda le soir :

1. Ouvrez la console CloudWatch.

2. Cliquez sur Event, puis sur Create rule.

3. Sélectionnez Schedule sous Event Selector.

4. Saisissez un intervalle de temps ou une expression cron afin d'indiquer à Lambda quand arrêter les instances. Pour plus d'informations sur la syntaxe correcte, consultez la section Syntaxe d'expression de planification des règles. Remarque : les expressions cron sont évaluées selon l'heure UTC. Assurez-vous de l'ajuster pour le fuseau horaire de votre choix.

5. Sélectionnez Add target.

6. Sous Targets, sélectionnez Lambda function.

7. Pour Function, sélectionnez la fonction Lambda que vous avez créée pour arrêter les instances.

8. Sélectionnez Configure details.

9. Saisissez les informations ci-dessous dans les champs affichés :

  • Pour Name, saisissez « StopEC2Instances » ou un autre nom significatif à vos yeux.
  • Pour Description, ajoutez une description significative (par exemple, « arrête les instances EC2 tous les soirs »).
  • Pour State, cochez Enabled.

10. Choisissez Create rule.

Répétez ces étapes avec l'heure de votre choix pour redémarrer les instances le matin.

VPN, conflit, adresses IP de passerelle choisies, VPC, passerelle réseau privé virtuel


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 07/07/2016