[Introduction à Docker x ECS] Déploiement ECS avec docker compose up

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.

Environnement de vérification

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

Préparation de l'image Docker

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.

Configuration avec Amazon ECR

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

Préparation des utilisateurs IAM

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

Authentifiez-vous auprès du registre par défaut depuis la console

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

Créer un référentiel

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

Contrôle du fonctionnement local de docker-compose

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éé.

スクリーンショット 2020-10-30 13.01.54.png

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.

スクリーンショット 2020-10-30 13.09.57.png

J'ai pu confirmer le fonctionnement de redis.

$ docker-compose down

Déployer sur ECS

Création de contexte AWS

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

Déployer sur ECS

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'application déployée

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/

Supprimer les ressources déployées

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

Références

É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

[Introduction à Docker x ECS] Déploiement ECS avec docker compose up
[Docker] Introduction à docker compose Résumé de base de docker-compose.yml
Configurer GitLab avec docker
Créer un environnement Node.js avec Docker Compose
Introduction à Linux Container / Docker (Partie 1)
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
Introduction aux algorithmes avec la méthode java-Shakutori
WordPress avec Docker Compose sur CentOS 8
Introduction à Linux Container / Docker (Partie 2)
Créer un compilateur C à utiliser avec Rust x CLion avec Docker
Mettre à jour MySQL de 5.7 à 8.0 avec Docker
Comment démarrer Camunda avec Docker
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Comment partager des fichiers avec Docker Toolbox
Construire un environnement Rails 6 + MySQL avec Docker compose
Déployer sur heroku avec Docker (Rails 6, MySQL)
Introduction aux algorithmes avec java-Search (recherche prioritaire en profondeur)
Introduction au développement pratique de conteneurs Docker / Kubernetes
Exemple pour démarrer Ubuntu avec le déploiement avec client-go
Installer Docker avec WSL2 Memo ([Partie 2] Introduction à Docker)
Comment exécuter Blazor (C #) avec Docker
[Introduction à Docker] Tutoriel officiel (traduction en japonais)
Comment créer un environnement Rails 6 avec Docker
Introduction aux algorithmes avec java --Search (recherche de priorité de largeur)
Introduction à la bataille de robots avec Robocode (construction d'environnement)
Comment se moquer de chaque cas avec Mockito 1x
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
Introduction aux algorithmes avec java --Search (bit full search)
Introduction aux algorithmes avec java-Search (recherche complète, recherche de bisection)
Présentation de Rspec avec Ruby on Rails x Docker
Paramètre pour quitter le conteneur Docker avec VScode
Déployer des rails sur ECS Fargate avec AWS Copilot
Comment donner votre image à quelqu'un avec Docker
[Rails] Comment créer un environnement avec Docker
Je ne peux pas faire docker-compose up -d avec docker
Introduction à Robot Battle avec Robocode (développement pour débutants)
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Facile à afficher Hello World avec Rails + Docker