Come posso usare AWS Cloud Map per configurare il rilevamento servizi multi-account per i servizi ECS?

6 minuti di lettura
0

Desidero utilizzare AWS Cloud Map per configurare il rilevamento servizi multi-account per i miei servizi Amazon Elastic Container Service (Amazon ECS).

Descrizione breve

La creazione di uno spazio dei nomi privato in AWS Cloud Map crea anche una zona ospitata su Amazon Route 53. Poiché la zona ospitata della Route 53 è associata a un Amazon Virtual Private Cloud (Amazon VPC), i record DNS sono rilevabili. Pertanto, altri account AWS e Amazon VPC non possono scoprire il servizio Amazon ECS tramite DNS.

Prerequisiti:

  • Due Amazon VPC nello stesso account o in account diversi con le sottoreti, i gruppi di sicurezza e il CIDR non sovrapposto necessari.
  • Entrambi gli Amazon VPC utilizzano AmazonProvidedDNS, con gli attributi enableDnsHostnames e enableDnsSupport attivati.
  • Un cluster Amazon ECS.
  • L'ultima versione dell'Interfaccia della linea di comando AWS (AWS CLI) installata e configurata con le autorizzazioni appropriate.

**Nota:**Se ricevi errori durante l'esecuzione dell'interfaccia della linea di comando AWS, conferma di utilizzare una versione recente dell'interfaccia della linea di comando di AWS.

Risoluzione

Importante: I passaggi seguenti utilizzano esempi per l'Amazon VPC di destinazione, l'Amazon VPC di origine e il cluster Amazon ECS. Nell'interfaccia della linea di comando AWS, sostituisci i valori di esempio con i tuoi valori.

  • L'esempio di cluster Amazon ECS example-cluster si trova nell'account AWS 1.
  • L'esempio di destinazione Amazon VPC example-target-vpc ospita l'attività Amazon ECS e si trova nell'account AWS 1.
  • La fonte di esempio Amazon VPC example-source-vpc esegue la query DNS e si trova nell'account AWS 2.

Crea uno spazio dei nomi e un servizio AWS Cloud Map

1.    Configura la tua interfaccia della linea di comando AWS con le credenziali dell'account 1.

2.    Crea uno spazio dei nomi privato di rilevamento servizi AWS Cloud Map nell'account 1:

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

Nota: Il comando precedente crea uno spazio dei nomi con nome example-namespace e restituisce OperationID come output in JSON.

3.    Usa OperationID per verificare lo stato dello spazio dei nomi e dell'ID dello spazio dei nomi:

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

4.     Individua l'ID della zona ospitata associato allo spazio dei nomi:

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

5.    Usa l'ID dello spazio dei nomi per creare un servizio 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}]"

**Nota:**Il comando precedente crea un servizio AWS Cloud Map con nome example-myservice e restituisce un servizio ARN come output.

Registra una definizione di attività che utilizza la modalità di rete awsvpc

Registra una definizione di attività compatibile con AWS Fargate e che utilizza la modalità di rete awsvpc:

1.    Crea un file denominato fargate-task.json con il seguente contenuto della definizione dell'attività:

{
    "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.    Utilizza il file fargate-task.json per registrare la definizione dell'attività:

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

Crea un servizio Amazon ECS

1.    Crea un file chiamato ecs-service-discovery.json e includi i contenuti del servizio Amazon ECS che stai creando:

  • Specifica launchType come FARGATE.
  • Specifica PlatformVersion come versione più recente.
  • Assicurati che i parametri securityGroups e subnet appartengano all'example-target-vpc. Puoi ottenere gli ID del gruppo di sicurezza e della sottorete dalla tua console Amazon VPC.

Nota: Poiché la definizione dell'attività utilizza la modalità di rete awsvpc, è necessaria una awsvpcConfiguration.

File JSON di esempio:

{
    "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.    Usa il file ecs-service-discovery.json per creare il tuo servizio Amazon ECS:

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

3.    Conferma se l'attività del servizio è registrata come istanza nel servizio AWS Cloud Map:

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

Nota: Il tuo servizio Amazon ECS è ora rilevabile all'interno di example-target-vpc.

Associa l'Amazon VPC di origine alla zona ospitata della Route 53

1.    Se gli Amazon VPC si trovano in account diversi, invia una richiesta di autorizzazione di associazione Amazon VPC all'account 2:

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

2.    Configura awscli con le credenziali dell'account 2 e associa example-source-vpc nell'account 2 alla zona ospitata nell'account 1:

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

3.    Controlla se example-source-vpc è stato aggiunto alla zona ospitata:

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

4.    Verifica che il servizio Amazon ECS sia rilevabile tramite DNS in example-source-vpc. Interroga il DNS da un'istanza di Amazon Elastic Compute Cloud (Amazon EC2) con example-source-vpc:

$ dig +short example-service.example-namespace

Nota: Nel comando precedente example-service.example-namespace è il nome DNS. Sostituiscilo con il tuo servizio e spazio dei nomi di AWS Cloud Map.

Configura il peering Amazon VPC 

1.    Usa il peering Amazon VPC per connettere example-target-vpc con example-source-vpc.

2.    Aggiorna le tabelle di routing.

3.    Aggiorna i gruppi di sicurezza.

**Nota:**Dopo aver configurato il peering di Amazon VPC con le tabelle di routing e i gruppi di sicurezza, le risorse in example-source-vpc possono connettersi alle attività di Amazon ECS in example-target-vpc.

Se riscontri problemi durante la configurazione del peering di Amazon VPC, consulta i seguenti articoli di AWS Knowledge Center:

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa