Le plug-in ECS de Docker a été publié et il semble qu'il prenne également en charge la version stable de Docker pour Mac, alors je l'ai essayé.
Il existe des documents officiels et des sites de commentaires, mais il y a eu des obstacles, alors (Sans le savoir, la commande docker ecs compose a été intégrée dans docker compose ...) Je l'ai résumé comme un mémo personnel pour les débutants ECS.
La version 2 de l'AWS CLI est requise. Nous vous recommandons de mettre à jour Docker et AWS CLI vers la dernière version.
Lien de référence: Paramètres AWS CLI Installation, mise à jour et désinstallation de l'AWS CLI version 2 sur macOS
Cette fois, nous utiliserons Docker Official Sample. Commencez par vérifier le fonctionnement localement. Il est presque écrit dans Official Doc, mais en tant que mémo personnel, il s'agit d'un échantillon officiel de Docker. Je vais vous expliquer la procédure de.
$ git clone https://github.com/docker/ecs-plugin.git
$ cd ecs-plugin/example/
$ docker build app -t example
--Spécifiez une balise et confirmez que l'image a été créée
$ docker images --filter reference=example
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
example             latest              33e46b7030e0        4 minutes ago       52.3MB
$ docker run -t -i -p 5000:5000 example
Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Essayez d'accéder à http://0.0.0.0:5000/. Parce que redis ne fonctionne pas redis.exceptions.ConnectionError Devrait se produire. Quittez avec CTRL + C.
Amazon ECR est comme Docker Hub. Poussez l'image Docker créée vers ECR et tirez-la lorsque vous utilisez docker-compose.
python
$ docker context use default
$ docker context ls
Cela crée également un utilisateur IAM selon Official Doc .. Suivez les étapes pour le créer avec le nom «Administrateur». Lorsque vous vous connectez en tant qu'utilisateur IAM que vous avez créé, "Administrator @ aws_account_id" s'affiche dans la barre de navigation. ex. Administrator@1234-5678-9012
Notez les informations d'identification car vous les utiliserez plus tard. aws_account_id aws_access_key_id aws_secret_access_key
Dans mon cas, j'utilise la région de Tokyo (ap-nord-est-1). Entrez le aws_account_id confirmé dans la barre de navigation dans [aws_account_id] sans tirets. ex. 1234-5678-9012 => 123456789012
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded
Maintenant que vous avez une image à pousser vers Amazon ECR, créez un référentiel pour la conserver. Créez un référentiel appelé example: latest et transmettez l'exemple d'image que vous venez de créer.
--Créer un référentiel
$ aws ecr create-repository \
		--repository-name example \
		--image-scanning-configuration scanOnPush=true \
		--region ap-northeast-1 
$ docker tag example:latest [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com/example:latest
--Pousser l'image
$ docker push [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com/example:latest
$ aws ecr list-images --repository-name example
Tirez l'image poussée vers ECR et vérifiez l'opération localement. Assurez-vous que vous pouvez pousser l'image vers ERC. Ouvrez la console Amazon ECR (https://console.aws.amazon.com/ecr/). Le référentiel d'exemple doit avoir été créé.

Copiez l'URL. Collez-le dans l'image de docker-compose.yml et docker-compose up. commentez x-aws-pull_credentials car ils ne sont pas nécessaires cette fois.
example/docker-compose.yml
version: "3.8"
services:
  frontend:
    build: app
    # x-aws-pull_credentials: <<<your arn for your secret you can get with docker ecs secret list>>>
    image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/example:latest
    ports:
      - "5000:5000"
    depends_on:
      - backend
  backend:
    image: redis:alpine
$ docker-compose up
Vous pouvez extraire l'image poussée vers ECR afin de pouvoir vérifier le fonctionnement de l'application localement.

J'ai pu confirmer le fonctionnement de redis.
$ docker-compose down
Selon docker docs (translation), créez-le avec le nom myecscontext. Utilisez les informations d'identification créées précédemment dans IAM. aws_access_key_id aws_secret_access_key
$ docker context create ecs myecscontext
? Select AWS Profile new profile
? profile name myecscontext
? Region ap-northeast-1
? Enter credentials Yes
? AWS Access Key ID aws_access_key_id
? Enter AWS Secret Access Key aws_secret_access_key
Successfully created ecs context "myecscontext"
Vérifier le contexte
$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm
myecscontext        ecs                 ap-northeast-1                 
Utilisez myecscontext
$ docker context use myecscontext
this tool requires the "new ARN resource ID format"
Il semble que vous deviez activer le format ARN long. Je pense que c'est magique et exécutez-le.
$ aws ecs put-account-setting-default --name awsvpcTrunking --value enabled
$ aws ecs put-account-setting-default --name containerInsights --value enabled
$ aws ecs put-account-setting-default --name containerInstanceLongArnFormat --value enabled
$ aws ecs put-account-setting-default --name serviceLongArnFormat --value enabled
$ aws ecs put-account-setting-default --name taskLongArnFormat --value enabled
C'est finalement ECS, mais c'est fini en un instant. Lorsque le docker se compose, les ressources sont automatiquement créées et déployées.
$ docker compose up
WARN[0000] services.build: unsupported attribute        
[+] Running 17/17
 ⠿ example                        CREATE_COMPLETE                                                                                                          204.0s
 ⠿ ExampleLoadBalancer            CREATE_COMPLETE                                                                                                          122.0s
 ⠿ FrontendTCP5000TargetGroup     CREATE_COMPLETE                                                                                                            1.0s
 ⠿ CloudMap                       CREATE_COMPLETE                                                                                                           51.0s
 ⠿ FrontendTaskExecutionRole      CREATE_COMPLETE                                                                                                           22.0s
 ⠿ LogGroup                       CREATE_COMPLETE                                                                                                            3.0s
 ⠿ ExampleDefaultNetwork          CREATE_COMPLETE                                                                                                            8.0s
 ⠿ Cluster                        CREATE_COMPLETE                                                                                                            6.0s
 ⠿ BackendTaskExecutionRole       CREATE_COMPLETE                                                                                                           21.0s
 ⠿ ExampleDefaultNetworkIngress   CREATE_COMPLETE                                                                                                            1.0s
 ⠿ FrontendTaskDefinition         CREATE_COMPLETE                                                                                                            3.0s
 ⠿ BackendTaskDefinition          CREATE_COMPLETE                                                                                                            4.0s
 ⠿ FrontendServiceDiscoveryEntry  CREATE_COMPLETE                                                                                                            3.0s
 ⠿ BackendServiceDiscoveryEntry   CREATE_COMPLETE                                                                                                            1.9s
 ⠿ BackendService                 CREATE_COMPLETE                                                                                                           68.0s
 ⠿ FrontendTCP5000Listener        CREATE_COMPLETE                                                                                                            1.0s
 ⠿ FrontendService                CREATE_COMPLETE                                                                                                           68.0s
Vérifiez l'état du conteneur en cours d'exécution.
$ docker compose ps
ID                                     NAME                REPLICAS            PORTS
example-BackendService-xSDWkSABSvEt    backend             1/1                 
example-FrontendService-0pIz1giwUZg4   frontend            1/1                 ExampleLoadBalancer-29dbd0f98418a861.elb.ap-northeast-1.amazonaws.com:5000->5000/tcp
Essayez d'accéder aux PORTS frontaux. Je pense que vous avez déployé l'exemple d'application. http://ExampleLoadBalancer-29dbd0f98418a861.elb.ap-northeast-1.amazonaws.com:5000/
Si votre docker compose, la ressource sera supprimée automatiquement.
$ docker compose down
[+] Running 17/17
 ⠿ example                        DELETE_COMPLETE                                                                                                                515.0s
 ⠿ ExampleLoadBalancer            DELETE_COMPLETE                                                                                                                389.0s
 ⠿ FrontendTCP5000TargetGroup     DELETE_COMPLETE                                                                                                                389.0s
 ⠿ CloudMap                       DELETE_COMPLETE                                                                                                                514.0s
 ⠿ FrontendTaskExecutionRole      DELETE_COMPLETE                                                                                                                393.0s
 ⠿ LogGroup                       DELETE_COMPLETE                                                                                                                471.0s
 ⠿ ExampleDefaultNetwork          DELETE_COMPLETE                                                                                                                467.0s
 ⠿ Cluster                        DELETE_COMPLETE                                                                                                                467.0s
 ⠿ BackendTaskExecutionRole       DELETE_COMPLETE                                                                                                                472.0s
 ⠿ ExampleDefaultNetworkIngress   DELETE_COMPLETE                                                                                                                  3.0s
 ⠿ FrontendTaskDefinition         DELETE_COMPLETE                                                                                                                390.0s
 ⠿ BackendTaskDefinition          DELETE_COMPLETE                                                                                                                467.0s
 ⠿ FrontendServiceDiscoveryEntry  DELETE_COMPLETE                                                                                                                389.0s
 ⠿ BackendServiceDiscoveryEntry   DELETE_COMPLETE                                                                                                                467.0s
 ⠿ BackendService                 DELETE_COMPLETE                                                                                                                464.0s
 ⠿ FrontendTCP5000Listener        DELETE_COMPLETE                                                                                                                388.0s
 ⠿ FrontendService                DELETE_COMPLETE                                                                                                                386.0s
Échantillon officiel Docker Déploiement du conteneur Docker dans ECS Comment démarrer Amazon ECR à l'aide de l'AWS CLI Comment démarrer Amazon ECS à l'aide de Fargate La commande docker ecs est née en collaboration avec Docker et AWS, j'ai donc essayé de l'utiliser J'ai essayé le déploiement Amazon ECS de Docker Compose
Recommended Posts