Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Découvrez comment créer une tâche pour les instances gérées Amazon ECS à l'aide du AWS CLI
Les étapes suivantes vous aident à configurer un cluster, créer un fournisseur de capacité, enregistrer une définition de tâche, exécuter une tâche Linux et réaliser d’autres scénarios courants dans Amazon ECS avec des instances gérées Amazon ECS à l’aide de l’ AWS CLI. Utilisez la version la plus récente de l’ AWS CLI. Pour savoir comment opérer une mise à niveau vers la dernière version, consultez la section Installation ou mise à jour vers la dernière version de l’ AWS CLI.
Note
Vous pouvez utiliser des points de terminaison de service à double pile pour interagir avec Amazon ECS à partir de AWS AWS CLI SDKs, et de l'API Amazon ECS via les deux IPv4 et. IPv6 Pour de plus amples informations, veuillez consulter Utilisation des points de terminaison à double pile Amazon ECS.
Rubriques
Prérequis
Avant de commencer le didacticiel, vous devez avoir effectué les opérations suivantes :
-
Vous avez suivi les étapes décrites dans la section Configuration pour utiliser Amazon ECS.
-
La dernière version du AWS CLI est installée et configurée. Pour plus d'informations sur l'installation ou la mise à niveau de la CLI AWS CLI, consultez la section Installation ou mise à jour vers la dernière version de la AWS CLI dans le guide de AWS Command Line Interface l'utilisateur.
-
Vous devez avoir suivi les étapes de Configurer l'utilisation d'Amazon ECS.
-
Vous disposez des rôles IAM requis pour les instances gérées Amazon ECS. Cela consiste notamment à :
-
Rôle dans l'infrastructure : permet à Amazon ECS de passer des appels aux AWS services en votre nom afin de gérer l'infrastructure des instances gérées Amazon ECS.
Pour de plus amples informations, veuillez consulter Rôle IAM dans l'infrastructure Amazon ECS.
-
Profil d’instance : fournit des autorisations pour l’agent de conteneur Amazon ECS et le démon Docker exécutés sur des instances gérées.
Le nom du rôle d'instance doit être inclus
ecsInstanceRoleen tant que préfixe pour correspondre à l'iam:PassRoleaction du rôle d'infrastructure.Pour de plus amples informations, veuillez consulter Profil d’instance des instances gérées Amazon ECS.
-
-
Vous avez un créé un VPC et un groupe de sécurité prêts à être utilisés. Ce didacticiel utilise une image de conteneur hébergée sur Amazon ECR Public. Vos instances doivent donc disposer d’un accès Internet. Pour attribuer à vos instances une route vers Internet, utilisez l’une des options suivantes :
-
Utilisez un sous-réseau privé avec une passerelle NAT dotée d'une adresse IP Elastic.
-
Utilisez un sous-réseau public et attribuez une adresse IP publique aux instances.
Pour de plus amples informations, veuillez consulter Créer un Virtual Private Cloud.
Pour plus d'informations sur les groupes de sécurité et les règles, consultez les sections Groupes de sécurité par défaut pour vous VPCs et Exemples de règles dans le guide de l'utilisateur d'Amazon Virtual Private Cloud.
-
-
(Facultatif) AWS CloudShell est un outil qui fournit aux clients une ligne de commande sans avoir à créer leur propre EC2 instance. Pour plus d'informations, voir Qu'est-ce que c'est AWS CloudShell ? dans le guide de AWS CloudShell l'utilisateur.
Étape 1 : créer un cluster
Par défaut, votre compte reçoit un cluster default.
Note
L'utilisation du cluster default qui vous est fourni présente l'avantage que vous n'avez pas besoin de spécifier l'option --cluster dans les commandes suivantes. Si vous créez votre propre cluster, sans valeur par défaut, vous devez spécifier cluster_name--cluster pour chaque commande que vous prévoyez d'utiliser avec ce cluster. cluster_name
Créez votre propre cluster avec un nom unique à l'aide de la commande suivante :
aws ecs create-cluster --cluster-namemanaged-instances-cluster
Sortie :
{ "cluster": { "status": "ACTIVE", "defaultCapacityProviderStrategy": [], "statistics": [], "capacityProviders": [], "tags": [], "clusterName": "managed-instances-cluster", "settings": [ { "name": "containerInsights", "value": "disabled" } ], "registeredContainerInstancesCount": 0, "pendingTasksCount": 0, "runningTasksCount": 0, "activeServicesCount": 0, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster" } }
Étape 2 : créer un fournisseur de capacité pour les instances gérées Amazon ECS
Avant de pouvoir exécuter des tâches à l’aide d’instances gérées Amazon ECS, vous devez créer un fournisseur de capacité qui définit la configuration de l’infrastructure. Le fournisseur de capacité spécifie les rôles IAM, la configuration réseau et les autres paramètres de vos instances gérées.
Créez un fichier JSON avec la configuration de votre fournisseur de capacité. Remplacez les valeurs des espaces réservés par vos identificateurs de ressources réels :
{ "name": "managed-instances-cp", "cluster": "managed-instances-cluster", "managedInstancesProvider": { "infrastructureRoleArn": "arn:aws:iam::aws_account_id:role/ecsInfrastructureRole", "instanceLaunchTemplate": { "ec2InstanceProfileArn": "arn:aws:iam::aws_account_id:instance-profile/ecsInstanceRole", "networkConfiguration": { "subnets": [ "subnet-abcdef01234567890", "subnet-1234567890abcdef0" ], "securityGroups": [ "sg-0123456789abcdef0" ] }, "storageConfiguration": { "storageSizeGiB": 100 }, "monitoring": "basic" } } }
Enregistrez cette configuration sous managed-instances-cp.json et créez le fournisseur de capacité :
aws ecs create-capacity-provider --cli-input-json file://managed-instances-cp.json
La commande renvoie une description du fournisseur de capacité une fois sa création terminée.
Étape 3 : définir une stratégie de fournisseur de capacité par défaut pour le cluster
Mettez à jour le cluster pour utiliser le fournisseur de capacité d’instances gérées Amazon ECS comme stratégie de fournisseur de capacité par défaut. Cela permet aux tâches et aux services d’utiliser automatiquement les instances gérées Amazon ECS sans spécifier explicitement le fournisseur de capacité.
Créez un fichier JSON avec la configuration du fournisseur de capacité du cluster :
{ "cluster": "managed-instances-cluster", "capacityProviders": [ "managed-instances-cp" ], "defaultCapacityProviderStrategy": [ { "capacityProvider": "managed-instances-cp", "weight": 1 } ] }
Enregistrez cette configuration sous le nom cluster-cp-strategy.json et mettez à jour le cluster :
aws ecs put-cluster-capacity-providers --cli-input-json file://cluster-cp-strategy.json
Étape 4 : enregistrer une définition de tâche Linux
Avant de pouvoir exécuter une tâche sur votre cluster, vous devez enregistrer une définition de tâche. Les définitions de tâches sont des listes de conteneurs regroupés ensemble. L'exemple suivant est une définition de tâche simple qui crée une application Web PHP à l'aide de l'image de conteneur httpd hébergée sur Docker Hub. Pour plus d'informations sur les paramètres de définition des tâches disponibles, consultez Paramètres de définition de tâche Amazon ECS pour Fargate.
{ "family": "sample-managed-instances", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "managed-instances-app", "image": "public.ecr.aws/docker/library/httpd:latest", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html><head><title>Amazon ECS Sample App</title><style>body {margin-top: 40px; background-color: #333;} </style></head><body><div style=color:white;text-align:center><h1>Amazon ECS Sample App</h1><h2>Congratulations!</h2><p>Your application is now running on a container in Amazon ECS using Amazon ECS Managed Instances.</p></div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "MANAGED_INSTANCES" ], "cpu": "256", "memory": "512" }
Enregistrez la définition de tâche JSON sous forme de fichier et transmettez-la avec l'option --cli-input-json file://. path_to_file.json
Pour utiliser un fichier JSON pour les définitions de conteneur :
aws ecs register-task-definition --cli-input-json file://$HOME/tasks/managed-instances-task.json
La commande register-task-definition renvoie une description de la définition de tâche une fois l'enregistrement terminé.
Étape 5 : répertorier les définitions de tâche
Vous pouvez répertorier les définitions de tâches de votre compte à tout moment à l'aide de la commande list-task-definitions. La sortie de cette commande affiche les valeurs family et revision que vous pouvez utiliser ensemble lorsque vous appelez run-task ou start-task.
aws ecs list-task-definitions
Sortie :
{ "taskDefinitionArns": [ "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" ] }
Étape 6 : créer un service
Une fois que vous avez enregistré une tâche pour votre compte, vous pouvez créer un service pour la tâche enregistrée dans votre cluster. Pour cet exemple, vous créez un service avec une instance de la définition de tâche sample-managed-instances:1 exécutée dans votre cluster. La tâche nécessite un itinéraire vers Internet. Il y a deux façons d'y parvenir. Une façon consiste à utiliser un sous-réseau privé configuré avec une passerelle NAT avec une adresse IP Elastic dans un sous-réseau public. Une autre façon consiste à utiliser un sous-réseau public et à attribuer une adresse IP publique à votre tâche. Les deux exemples sont présentés ci-dessous.
Exemple d’utilisation d’un sous-réseau privé :
aws ecs create-service --clustermanaged-instances-cluster--service-namemanaged-instances-service--task-definition sample-managed-instances:1 --desired-count 1 --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234]}"
Exemple d’utilisation d’un sous-réseau public :
aws ecs create-service --clustermanaged-instances-cluster--service-namemanaged-instances-service--task-definition sample-managed-instances:1 --desired-count 1 --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234],assignPublicIp=ENABLED}"
La commande create-service renvoie une description du service une fois sa création terminée.
Étape 7 : répertorier les services
Affichez les services de votre cluster. Vous devriez voir le service que vous avez exécuté dans la section précédente. Vous pouvez noter le nom du service ou l'ARN complet qui est renvoyé par cette commande et l'utiliser pour décrire le service ultérieurement.
aws ecs list-services --cluster managed-instances-cluster
Sortie :
{ "serviceArns": [ "arn:aws:ecs:region:aws_account_id:service/managed-instances-cluster/managed-instances-service" ] }
Étape 8 : décrire le service en cours d’exécution
Décrivez le service à l'aide du nom de service récupéré précédemment afin d'obtenir plus d'informations sur la tâche.
aws ecs describe-services --cluster managed-instances-cluster --services managed-instances-service
En cas de réussite, une description des défaillances de service et des services est renvoyée. Par exemple, dans la section services, vous trouverez des informations sur les déploiements, telles que le statut des tâches en cours d'exécution ou en attente. Vous trouverez également des informations sur la définition des tâches, la configuration réseau et les événements horodatés. Dans la section des défaillances, vous trouverez des informations sur les défaillances, le cas échéant, associées à l'appel.
Le résultat indiquera que le service utilise le fournisseur de capacité d’instances gérées Amazon ECS :
{ "services": [ { "capacityProviderStrategy": [ { "capacityProvider": "managed-instances-cp", "weight": 1, "base": 0 } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "ENABLED" } }, "enableECSManagedTags": false, "loadBalancers": [], "deploymentController": { "type": "ECS" }, "desiredCount": 1, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster", "serviceArn": "arn:aws:ecs:region:aws_account_id:service/managed-instances-service", "serviceName": "managed-instances-service", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" } ], "failures": [] }
Étape 9 : tester
Pour tester votre déploiement, vous devez trouver l’adresse IP publique de l’instance gérée qui exécute votre tâche.
Tâche de test déployée à l'aide d'un sous-réseau public
Tout d’abord, obtenez l’ARN de la tâche auprès de votre service :
aws ecs list-tasks --cluster managed-instances-cluster --service managed-instances-service
La sortie contient l’ARN de la tâche :
{ "taskArns": [ "arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE" ] }
Décrivez la tâche pour obtenir l’ARN de l’instance de conteneur. Utilisez l’ARN de la tâche pour le paramètre tasks :
aws ecs describe-tasks --cluster managed-instances-cluster --tasks arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE
Le résultat indique que la tâche est exécutée sur des instances gérées Amazon ECS et inclut l’ARN de l’instance de conteneur :
{ "tasks": [ { "launchType": "MANAGED_INSTANCES", "capacityProviderName": "managed-instances-cp", "containerInstanceArn": "arn:aws:ecs:region:aws_account_id:container-instance/managed-instances-cluster/CONTAINER_INSTANCE_ID", "taskArn": "arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE", "taskDefinitionArn": "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" } ] }
Décrivez l'instance de conteneur pour obtenir EC2 son ID :
aws ecs describe-container-instances --cluster managed-instances-cluster --container-instancesCONTAINER_INSTANCE_ID
La sortie inclut l'ID de l' EC2 instance :
{ "containerInstances": [ { "ec2InstanceId": "i-1234567890abcdef0", "capacityProviderName": "managed-instances-cp", "containerInstanceArn": "arn:aws:ecs:region:aws_account_id:container-instance/managed-instances-cluster/CONTAINER_INSTANCE_ID" } ] }
Décrivez l' EC2 instance pour obtenir l'adresse IP publique :
aws ec2 describe-instances --instance-idsi-1234567890abcdef0
L’adresse IP publique se trouve dans la sortie :
{ "Reservations": [ { "Instances": [ { "PublicIpAddress": "198.51.100.2", "InstanceId": "i-1234567890abcdef0" } ] } ] }
Entrez l’adresse IP publique dans votre navigateur Web et vous devriez voir une page Web qui affiche l’application Amazon ECS exemple s’exécutant sur les instances gérées Amazon ECS.
Tâche de test déployée à l'aide d'un sous-réseau privé
Pour les tâches déployées dans des sous-réseaux privés, vous pouvez utiliser Amazon ECS Exec pour vous connecter au conteneur et tester le déploiement depuis l’instance. Suivez les mêmes étapes que ci-dessus pour obtenir l’ARN de la tâche, puis utilisez ECS Exec :
aws ecs execute-command --cluster managed-instances-cluster \ --task arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE\ --container managed-instances-app \ --interactive \ --command "/bin/sh"
Une fois le shell interactif lancé, vous pouvez tester le serveur Web :
curl localhost
Vous devriez voir l'équivalent HTML de la page Web d'exemple d'application Amazon ECS.
Étape 10 : nettoyer
Une fois que vous avez terminé ce didacticiel, vous devez nettoyer les ressources qui lui sont associées afin d'éviter la facturation de frais pour des ressources inutilisées.
Supprimez le service de la fonction :
aws ecs delete-service --cluster managed-instances-cluster --service managed-instances-service --force
Attendez que le service soit supprimé et que toutes les tâches s’arrêtent, puis supprimez le fournisseur de capacité :
aws ecs delete-capacity-provider --capacity-provider managed-instances-cp
Supprimez le cluster :
aws ecs delete-cluster --cluster managed-instances-cluster
Note
Les instances gérées sont automatiquement résiliées lorsque le fournisseur de capacité est supprimé. Il n'est pas nécessaire de mettre fin aux EC2 instances manuellement.