Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Comment utiliser la découverte de service Amazon ECS avec AWS CloudFormation ?
Je veux utiliser la découverte de service Amazon Elastic Container Service (Amazon ECS) avec AWS CloudFormation.
Brève description
La console Amazon ECS vous permet de créer des ressources de découverte de service pendant la création d'un service. Cependant, le type de ressource AWS::ECS::Service pour AWS CloudFormation ne vous permet pas de créer des ressources de découverte de service lors de la création du service.
Remarque : la console Amazon ECS utilise les API d'intégration CreatePrivateDnsNamespace, CreateService (AWS Cloud Map) et CreateService (Amazon ECS). Dans CloudFormation, vous pouvez utiliser les types de ressources AWS::ServiceDiscovery::PrivateDnsNamespace, AWS::ServiceDiscovery::Service et AWS::ECS::Service pour mettre en œuvre une intégration dans un seul modèle CloudFormation.
Résolution
1. Dans la section Ressources de votre modèle CloudFormation, créez un espace de noms de découverte de service privé, tel que exemple.com. Créez l'espace de noms dans un Amazon Virtual Private Cloud (Amazon VPC) existant. Consultez les exemples JSON et YAML suivants.
JSON :
{ "PrivateNamespace": { "Type": "AWS::ServiceDiscovery::PrivateDnsNamespace", "Properties": { "Name": "example.com", "Vpc": "vpc-xxxxxxx" } } }
YAML :
PrivateNamespace: Type: AWS::ServiceDiscovery::PrivateDnsNamespace Properties: Name: example.com Vpc: vpc-xxxxxxx
Remarque : Remplacez exemple.com par un nom pour votre espace de noms. Remplacez vpc xxxxxxx par l'ID d'un VPC de votre compte.
2. Créez un service de découverte de service à l'aide de l'ID de l'espace de noms que vous avez créé à l'étape 1.
Vous pouvez obtenir la valeur de l'ID de l'espace de noms en utilisant la fonction intrinsèque Ref dans votre modèle CloudFormation. Consultez les exemples JSON et YAML suivants.
JSON :
{ "DiscoveryService": { "Type": "AWS::ServiceDiscovery::Service", "Properties": { "Description": "Discovery Service for the Demo Application", "DnsConfig": { "RoutingPolicy": "MULTIVALUE", "DnsRecords": [ { "TTL": 60, "Type": "A" }, { "TTL": 60, "Type": "SRV" } ] }, "HealthCheckCustomConfig": { "FailureThreshold": 1 }, "Name": "example-service-name", "NamespaceId": { "Ref": "PrivateNamespace" } } } }
YAML :
DiscoveryService: Type: AWS::ServiceDiscovery::Service Properties: Description: Discovery Service for the Demo Application DnsConfig: RoutingPolicy: MULTIVALUE DnsRecords: - TTL: 60 Type: A - TTL: 60 Type: SRV HealthCheckCustomConfig: FailureThreshold: 1 Name: example-service-name NamespaceId: !Ref PrivateNamespace
Remarque : remplacez example-service-name par le nom de votre service.
La propriété DnsConfig spécifie les enregistrements DNS qui sont automatiquement créés dans Amazon Route 53. Ces enregistrements DNS sont créés lorsque votre tâche Amazon ECS est enregistrée auprès du service de découverte de service. Les enregistrements DNS de types A et SRV sont pris en charge. Pour plus d'informations, consultez Configuration de votre service pour utiliser la découverte de service.
Conseil : il est recommandé d'utiliser la propriété HealthCheckCustomConfig pour permettre à Amazon ECS d'indiquer l'état de la tâche à la découverte de service. Amazon ECS utilise les informations des vérifications de conteneur, des vérifications d'état et d'état de la tâche pour mettre à jour l'état de la découverte de service avec AWS Cloud Map.
3. Créez un Amazon ECS service qui s'intègre à l'espace de noms de découverte de service et au service que vous avez créés au cours des étapes précédentes. Utilisez la propriété ServiceRegistries de la ressource AWS:ECS።Service pour spécifier votre intégration. Consultez les exemples JSON et YAML suivants.
JSON :
{ "EcsService": { "Type": "AWS::ECS::Service", "Properties": { "Cluster": "awsExampleCluster", "DesiredCount": 4, "LaunchType": "FARGATE", "NetworkConfiguration": { "AwsvpcConfiguration": { "SecurityGroups": [ "sg-xxxxxxx" ], "Subnets": [ "subnet-xxxxxxx" ] } }, "ServiceName": "awsExampleService", "TaskDefinition": "awsExampleTaskDefinition", "ServiceRegistries": [ { "RegistryArn": { "Fn::GetAtt": [ "DiscoveryService", "Arn" ] }, "Port": 80 } ] } } }
YAML :
EcsService: Type: AWS::ECS::Service Properties: Cluster: awsExampleCluster DesiredCount: 4 LaunchType: FARGATE NetworkConfiguration: AwsvpcConfiguration: SecurityGroups: - sg-xxxxxxx Subnets: - subnet-xxxxxxx ServiceName: awsExampleService TaskDefinition: awsExampleTaskDefinition ServiceRegistries: - RegistryArn: !GetAtt DiscoveryService.Arn Port: 80
Remarque : Remplacez awsExampleCluster par votre cluster. Remplacez awsExampleService par votre service. Remplacez awsExampleTaskDefinition par votre définition de tâche. Remplacez sg-xxxxxxx par votre ID de groupe de sécurité. Remplacez subnet-xxxxxxx par votre ID de sous-réseau.
Pour la propriété RegistryArn, utilisez Amazon Resource Name (ARN) de la découverte de service que vous souhaitez intégrer dans votre Amazon ECS service. Utilisez la fonction intrinsèque Fn::GetAtt pour obtenir cette valeur de votre modèle CloudFormation.
Si vous utilisez le mode awsvpc, définissez la valeur sur Port ou une combinaison ContainerPort et ContainerName (tel que spécifié dans la définition de tâche). Si vous utilisez le mode host ou bridge, définissez la valeur sur ContainerPort ou ContainerName (tel que spécifié dans la définition de tâche).
4. Ouvrez la console CloudFormation, puis choisissez Créer une pile pour déployer les ressources en fonction de votre modèle mis à jour.
5. Pour vérifier que vos tâches peuvent être résolues depuis votre VPC, exécutez les commandes suivantes :
$ dig awsExampleService.awsExampleNamespace. +short $ dig srv awsExampleService.awsExampleNamespace. +short $ curl awsExampleService.awsExampleNamespace. -I
Remarque : La valeur d’awsExampleService est le nom de votre ressource AWS::ECS::Service. La valeur d’awsExampleNamespace est le nom de votre ressource AWS::ServiceDiscovery::PrivateDnsNamespace .
Les commandes renvoient une sortie similaire à celle-ci :
Pour $ dig awsExampleService.awsExampleNamespace. +short :
172.31.182.0 172.31.160.124 172.31.137.81 172.31.149.244
Pour $ dig srv awsExampleService.awsExampleNamespace.+short :
1 1 80 ffe95d27ea8d4f7aba0dfed87297fc5a.awsExampleService.awsExampleNamespace. 1 1 80 44a17fa781974a93bb563bc1826a8697.awsExampleService.awsExampleNamespace. 1 1 80 d640ecb3d283421bb2d1318caf4b0d66.awsExampleService.awsExampleNamespace. 1 1 80 65aff6fff33144b2ad79d283ab52cfe9.awsExampleService.awsExampleNamespace.
Pour $ curl awsExampleService.awsExampleNamespace. - I :
HTTP/1.1 200 OK Server: nginx/1.15.12 Date: Wed, 15 May 2019 02:25:19 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT Connection: keep-alive ETag: "5cb5d3c3-264" Accept-Ranges: bytes

Contenus pertinents
- demandé il y a 3 moislg...
- demandé il y a 2 anslg...
- Réponse acceptéedemandé il y a 4 moislg...
- demandé il y a 2 anslg...
- Comment puis-je empêcher l'échec de la stabilisation de mon service Amazon ECS dans CloudFormation ?AWS OFFICIELA mis à jour il y a 7 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a un an