Je souhaite utiliser le planificateur Amazon EventBridge pour arrêter et démarrer automatiquement mes instances Amazon Elastic Compute Cloud (Amazon EC2).
Brève description
Pour arrêter et démarrer automatiquement les instances EC2, utilisez le planificateur EventBridge pour appeler directement les API Amazon EC2 StartInstances et StopInstances. Vous pouvez également utiliser le planificateur pour invoquer une fonction AWS Lambda afin d'arrêter et de démarrer l'instance. Il est recommandé d'utiliser les API Amazon EC2 comme cible du planificateur afin d'éviter d'avoir à créer des fonctions Lambda supplémentaires.
Pour une solution plus évoluée, utilisez le planificateur d’instances sur AWS.
Résolution
Prérequis : vous devez obtenir les ID des instances que vous souhaitez arrêter et démarrer.
Utiliser le planificateur pour appeler directement les API Amazon EC2
Créer une politique et un rôle IAM pour le planificateur EventBridge
Procédez comme suit :
- Utilisez l'éditeur de stratégies JSON pour créer une politique Gestion des identités et des accès AWS (AWS IAM) qui permet au planificateur EventBridge d'arrêter et de démarrer votre instance.
Exemple de stratégie :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
Remarque : si vous avez chiffré votre volume Amazon Elastic Block Store (Amazon EBS) avec une clé AWS Key Management Service (AWS KMS) gérée par le client, ajoutez kms:CreateGrant à la politique. Si la fonction Lambda n'a pas accès à la clé de chiffrement, elle peut uniquement arrêter l'instance, mais pas la redémarrer. Pour plus d'informations, consultez la section Stratégie de clé AWS KMS requise pour une utilisation avec des volumes chiffrés.
- Ouvrez la console IAM.
- Sélectionnez Rôles, puis Créer un rôle.
- Dans Type d'entité approuvée, sélectionnez Stratégie d’approbation personnalisée.
- Saisissez la politique IAM suivante :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "AWS_ACCOUNT_ID"
}
}
}
]
}
Remarque : remplacez AWS_ACCOUNT_ID par l'ID de votre compte AWS.
- Sélectionnez Suivant.
- Pour Politiques d'autorisations, sélectionnez la politique IAM que vous avez créée à l'étape 1.
- Pour Nom du rôle, saisissez un nom tel que EventBridge_Scheduler_Role.
- Sélectionnez Créer un rôle.
Créer le calendrier du planificateur EventBridge
Créez un calendrier pour l'API StopInstances et un autre pour l'API StartInstances. Configurez les paramètres suivants lorsque vous créez le calendrier :
- Pour Target API, sélectionnez Toutes les API, puis recherchez Amazon EC2.
- Sélectionnez StopInstances ou StartInstances, puis saisissez les ID d'instance.
- Pour Paramètres : facultatif, sous Autorisations, choisissez Sélectionner un rôle existant, puis choisissez le rôle IAM que vous avez créé.
Utiliser le planificateur pour invoquer les fonctions Lambda
Créer une politique IAM et un rôle IAM pour votre fonction Lambda
Procédez comme suit :
- Utilisez l'éditeur de stratégies JSON pour créer une politique IAM qui permet à Lambda d'arrêter et de démarrer votre instance.
Exemple de stratégie :
{ "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": "*"
}
]
}
Remarque : si vous utilisez un volume Amazon EBS chiffré avec une clé AWS KMS gérée par le client, ajoutez kms:CreateGrant à la stratégie. Si la fonction Lambda n'a pas accès à la clé de chiffrement, elle peut uniquement arrêter l'instance, mais pas la redémarrer. Pour plus d'informations, consultez la section Stratégie de clé AWS KMS requise pour une utilisation avec des volumes chiffrés.
- Créez un rôle IAM pour Lambda.
- Associez la politique IAM au rôle IAM.
Créer des fonctions Lambda pour arrêter et démarrer vos instances
Procédez comme suit :
- Ouvrez la console Lambda.
- Sélectionnez Créer une fonction, puis Créer à partir de zéro.
- Sous Informations de base, configurez les paramètres suivants :
Pour Nom de la fonction, saisissez un nom qui décrit la fonction, tel que StopEC2Instances ou StartEC2Instances.
Pour Exécution, sélectionnez Python 3.14.
Sous Autorisations, développez le menu déroulant Modifier le rôle d'exécution par défaut.
Sous Rôle d'exécution, sélectionnez Utiliser un rôle existant.
Dans le champ Rôle existant, sélectionnez le rôle IAM que vous avez créé.
- Sélectionnez Créer une fonction.
- Choisissez l'onglet Code, puis l'onglet lambda_funciton.py.
- Pour Code source, saisissez le code suivant dans l'éditeur de code pour configurer l'arrêt de l'instance :
import boto3
region = 'us-west-1'
instances = ['i-12345acdb12345abcd', 'i-12345acdb12345abcd']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
Pour configurer le démarrage de l'instance, saisissez le code suivant dans l'éditeur de code :
import boto3
region = 'us-west-1'
instances = ['i-12345acdb12345abcd', 'i-12345acdb12345abcd']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
Remarque : remplacez us-west-1 par la région AWS de vos instances et i-12345acdb12345abcd par les ID de vos instances.
- Sélectionnez Déployer.
- Choisissez l’onglet Configuration, puis Configuration générale.
- Sélectionnez Modifier.
- Pour Délai, sélectionnez 10 secondes, puis choisissez Enregistrer.
Remarque : si vous avez associé la fonction à Amazon Virtual Private Cloud (Amazon VPC), vérifiez que la fonction peut atteindre le point de terminaison Amazon EC2 via Internet. Ou configurez un point de terminaison de cloud privé virtuel (VPC) pour Amazon EC2.
Tester vos fonctions Lambda
Testez les fonctions Lambda pour l’arrêt de l’instance et le démarrage de l’instance.
Avant et après l’exécution du test, vérifiez le statut de vos instances pour vous assurer que vos fonctions sont opérationnelles.
Pour utiliser AWS CloudTrail afin de confirmer que la fonction Lambda a arrêté ou démarré l'instance, procédez comme suit :
- Ouvrez la console CloudTrail.
- Dans le volet de navigation, sélectionnez Historique des événements.
- Dans la liste déroulante Attributs de recherche, choisissez Nom de l'événement.
- Dans la barre de recherche, saisissez StopInstances pour consulter les résultats. Puis, saisissez StartInstances.
Remarque : si aucun résultat ne s'affiche, cela signifie que la fonction Lambda n'a pas arrêté ou démarré les instances.
Créer un calendrier du planificateur EventBridge pour exécuter vos fonctions Lambda
Créez un calendrier pour exécuter vos fonctions Lambda. Pour ** Sélectionner une cible**, sélectionnez Cibles modélisées, puis choisissez Invocation d’AWS Lambda. Utiliser les fonctions Lambda que vous avez créées.