Comment utiliser AWS Cloud Map pour configurer la découverte de services intercomptes pour les services ECS ?

Lecture de 6 minute(s)
0

Je souhaite utiliser AWS Cloud Map pour configurer la découverte de services intercomptes pour mes services Amazon Elastic Container Service (Amazon ECS).

Brève description

La création d’un espace de noms privé dans AWS Cloud Map permet également de créer une zone hébergée sur Amazon Route 53. La zone hébergée Route 53 étant associée à un Amazon Virtual Private Cloud (Amazon VPC), les enregistrements DNS sont détectables. Par conséquent, les autres comptes AWS et Amazon VPC ne peuvent pas découvrir le service Amazon ECS via DNS.

Prérequis :

  • Deux Amazon VPC sur le même compte ou sur des comptes différents avec les sous-réseaux et les groupes de sécurité requis ainsi que le CIDR qui ne se chevauchent pas.
  • Les deux Amazon VPC utilisant AmazonProvidedDNS, avec les attributs enableDnsHostnames et enableDnsSupport activés.
  • Un cluster Amazon ECS.
  • La dernière version de l’Interface de la ligne de commande AWS (AWS CLI) a été installée et configurée avec les autorisations appropriées.

**Remarque :**Si vous recevez des erreurs lorsque vous exécutez AWS CLI, vérifiez que vous utilisez une version récente de l’AWS CLI.

Résolution

**Important :**Les étapes suivantes utilisent des exemples pour l’Amazon VPC cible, l’Amazon VPC source et le cluster Amazon ECS. Dans l’AWS CLI, remplacez les valeurs exemple par vos valeurs.

  • L’exemple de cluster Amazon ECS example-cluster se trouve dans le compte AWS 1.
  • L’exemple d’Amazon VPC cible example-target-vpc héberge la tâche Amazon ECS et se trouve dans le compte AWS 1.
  • L’exemple d’Amazon VPC source example-source-vpc exécute la requête DNS et se trouve dans le compte AWS 2.

Création d’un espace de noms et d’un service AWS Cloud Map

1.    Configurez votre AWS CLI avec les informations d’identification du compte 1.

2.    Créez un espace de noms découverte de service privé AWS Cloud Map dans le compte 1 :

$ aws servicediscovery create-private-dns-namespace --name example-namespace  --vpc example-target-vpc

**Remarque :**La commande précédente crée un espace de noms avec le nom example-namespace et renvoie OperationID comme sortie au format JSON.

3.    Utilisez l’OperationID pour vérifier l’état de l’espace de noms et l’ID de l’espace de noms :

$ aws servicediscovery get-operation --operation-id <example-OperationId> --query 'Operation.{Status: Status, NamespaceID: Targets.NAMESPACE}'

4.     Localisez l’ID de zone hébergée associé à l’espace de noms :

$ aws servicediscovery get-namespace --id <example-NamespaceID> --query 'Namespace.Properties.DnsProperties.{HoztedZoneId: HostedZoneId}'

5.    Utilisez l’ID de l’espace de noms pour créer un service AWS Cloud Map :

$ aws servicediscovery create-service \
    --name myservice \
    --namespace-id  <example-NamespaceID> \
    --dns-config "NamespaceId=<example-NamespaceID>,RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=60}]"

**Remarque :**La commande précédente crée un service AWS Cloud Map nommé example-myservice et renvoie un ARN de service en sortie.

Enregistrez une définition de tâche qui utilise le mode réseau awsvpc

Enregistrez une définition de tâche compatible avec AWS Fargate et utilisant le mode réseau awsvpc :

1.    Créez un fichier nommé fargate-task.json avec le contenu de définition de tâche suivant :

{
    "family": "tutorial-task-def",
        "networkMode": "awsvpc",
        "containerDefinitions": [
            {
                "name": "sample-app",
                "image": "httpd:2.4",
                "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.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
                ]
            }
        ],
        "requiresCompatibilities": [
            "FARGATE"
        ],
        "cpu": "256",
        "memory": "512"
}

2.    Utilisez le fichier fargate-task.json pour enregistrer la définition de la tâche :

$ aws ecs register-task-definition --cli-input-json file://fargate-task.json

Création d’un service Amazon ECS

1.    Créez un fichier nommé ecs-service-discovery.json et incluez le contenu du service Amazon ECS que vous créez :

  • Indiquez launchType comme FARGATE.
  • Indiquez platformVersion comme étant la dernière version.
  • Assurez-vous que les paramètres securityGroups et subnets appartiennent à example-target-vpc. Vous pouvez obtenir les ID du groupe de sécurité et du sous-réseau depuis votre console Amazon VPC.

**Remarque :**Étant donné que la définition de la tâche utilise le mode réseau awsvpc, awsvpcConfiguration est requis.

Exemple de fichier JSON :

{
    "cluster": "example-cluster",
    "serviceName": "ecs-service-discovery",
    "taskDefinition": "tutorial-task-def",
    "serviceRegistries": [
       {
          "registryArn": "<Cloudmap service ARN>"
       }
    ],
    "launchType": "FARGATE",
    "platformVersion": "example-latest-version",
    "networkConfiguration": {
       "awsvpcConfiguration": {
          "assignPublicIp": "ENABLED",
          "securityGroups": [ "example-target-vpc-sg" ],
          "subnets": [ "example-target-vpc-subnet" ]
       }
    },
    "desiredCount": 1
}

2.    Utilisez le fichier ecs-service-discovery.json pour créer votre service Amazon ECS :

$ aws ecs create-service --cli-input-json file://ecs-service-discovery.json

3.    Vérifiez si la tâche de service est enregistrée en tant qu’instance dans le service AWS Cloud Map :

$ aws servicediscovery list-instances --service-id <example-cloud-map-service-id>

**Remarque :**Votre service Amazon ECS est désormais détectable dans example-target-vpc.

Associez l’Amazon VPC source à la zone hébergée Route 53

1.    Si les Amazon VPC appartiennent à des comptes différents, envoyez une demande d’autorisation d’association Amazon VPC au compte 2 :

$ aws route53 create-vpc-association-authorization --hosted-zone-id <example-HoztedZoneId>  --vpc VPCRegion=<example_VPC_region>,VPCId=<example-source-vpc>

2.    Configurez awscli avec les informations d’identification du compte 2 et associez example-source-vpc du compte 2 à la zone hébergée du compte 1 :

$ aws route53 associate-vpc-with-hosted-zone --hosted-zone-id <example-HoztedZoneId> --vpc VPCRegion=<example_VPC_region>,VPCId=<example-source-vpc>

3.    Vérifiez si example-source-vpc est ajouté à la zone hébergée :

aws route53 get-hosted-zone --id <example-HoztedZoneId> --query 'VPCs'

4.    Vérifiez que le service Amazon ECS est détectable via DNS dans example-source-vpc. Interrogez le DNS depuis une instance Amazon Elastic Compute Cloud (Amazon EC2) avec example-source-vpc :

$ dig +short example-service.example-namespace

**Remarque :**Dans la commande précédente, example-service.example-namespace est le nom DNS. Remplacez-le par votre service AWS Cloud Map et votre espace de noms.

Configurer l’appairage Amazon VPC 

1.    Utilisez l’appairage Amazon VPC pour connecter example-target-vpc à example-source-vpc.

2.    Mettez à jour les tables de routage.

3.    Mettez à jour les groupes de sécurité.

**Remarque :**Une fois que vous avez configuré l’appairage Amazon VPC avec les tables de routage et les groupes de sécurité, les ressources de example-source-vpc peuvent se connecter aux tâches Amazon ECS dans example-target-vpc.

Si vous rencontrez des problèmes lors de la configuration de l’appairage Amazon VPC, consultez les articles suivants du Centre de connaissances AWS :

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an