Les instances T4g sont des instances de la famille T4 optimisées par les processeurs AWS Graviton2 basés sur l'architecture ARM64 .
Elles sont conçues pour offrir un très bon rapport qualité-prix tout en restant économiques.
Les instances basées sur Graviton2 coûtent environ 20 à 40% de moins que les instances équivalentes basées sur des processeurs Intel ou AMD .
AWS revendique que Graviton2 peut fournir jusqu'à 40% de meilleurs performances par dollar aux instances de la même gamme basées sur x86 .
Les instances T4g utilisent le concept de credits de performance. Chaque instances accumule des credits de CPU lorsqu'elle est sous-utilisée, qu'elle peut ensuite utiliser
pour accélérer temporairement les performances si néssecaire (l'instance est burstable) .
Créer et configurer une instance EC2 `t4g.medium`
1. Lancer une nouvelle instance EC2.
Se connecter à la console AWS EC2.
Cliquer sur "Launch Instance".
2. Configurer les paramètres de l'instance :
- AMI : Sélectionner une image Amazon Linux 2 (recommandée pour les architectures ARM).
- Type d'instance : Choisir `t4g.medium`.
- Options d'architecture : S'assurer que l’architecture ARM64 est sélectionnée.
3. Choisir le groupe de sécurité.
Il faut créer un nouveau groupe de sécurité ou sélectionner un groupe existant qui permet les connexions SSH (port 22) et HTTP/HTTPS (port 80/443).
4. Configurer le stockage et le balisage.
Stockage : 8-10 Go pour commencer devraient suffire. Si besoin , il est possible d'en ajouter plus tard.
Balisage : Ajouter un balisage comme `Name` = `streamlit-t4g-instance`.
5. Lancer l'instance et se connecter via SSH.
Une fois l'instance lancée, se connecter en SSH :
ssh -i "chemin/vers/ton/fichier.pem" ec2-user@
Installer Docker et AWS CLI sur l'instance
1. Installer Docker sur l'instance.
Exécuter les commandes suivantes pour installer Docker :
# Mettre à jour le système
sudo yum update -y
# Installer Docker
sudo amazon-linux-extras install docker -y
sudo service docker start
# Ajouter l'utilisateur `ec2-user` au groupe `docker`
sudo usermod -aG docker ec2-user
# (Déconnexion puis reconnexion pour appliquer les changements)
exit
Il faut ensuite se reconnecter à l'instance, puis installer AWS CLI pour accéder à ECR :
# Reconnexion
ssh -i "chemin/vers/ton/fichier.pem" ec2-user@
2. Installation de AWS CLI
# Installer AWS CLI
sudo yum install -y aws-cli
Après l'installation, vous devez configurer AWS CLI avec vos informations d'identification AWS :
aws configure
Cela vous demandera les éléments suivants :
1. AWS Access Key ID: (`XXXXXXXXXXXX`) -> Récupère cette clé dans ta console AWS IAM.
2. AWS Secret Access Key: (`XXXXXXXXXXXXXXXXXXXX`) -> Récupère ce secret également dans la console AWS.
3. Default region name: Entrez la région par défaut (par exemple `us-west-2`).
4. Default output format: `json`.
Cela permet à l'instance de s'authentifier auprès d'ECR et d'autres services AWS.
Récupérer l'image Docker depuis ECR
Authentification de Docker avec ECR :
aws ecr get-login-password --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com
Remarque 1
L’utilisation d’un rôle IAM permet de gérer de manière plus sécurisée l’accès aux services AWS (comme ECR, S3, etc.) sans utiliser de clés d’accès (Access Key ID et Secret Access Key) sur les instances.
Cela réduit le risque de compromission des informations d'identification et simplifie la gestion des permissions.
Que faire si aucun rôle IAM n'est attaché à ton instance EC2 ?
Si ton instance n'a pas de rôle IAM attaché, tu dois en créer un et l'attacher à ton instance pour utiliser des services comme ECR sans avoir besoin de clés d'accès.
Étapes pour attacher un rôle IAM à ton instance EC2
1. Créer un rôle IAM pour EC2 :
- Accède à la console IAM > Roles > Create role.
- Sélectionne AWS service et choisis EC2.
- Ajoute la politique AmazonEC2ContainerRegistryFullAccess.
- Donne un nom au rôle (par exemple, `EC2ECRAccessRole`) et crée le rôle.
2. Attacher le rôle IAM à ton instance :
- Retourne à EC2 > Instances.
- Sélectionne ton instance > Actions > Security > Modify IAM role.
- Choisis le rôle IAM que tu viens de créer (`EC2ECRAccessRole`) et attache-le.
Remarque 2
Si tu as le contrôle sur la construction de l'image Docker, il est préférable de créer une image multi-plateforme (`multi-arch`) compatible avec `arm64` et `amd64`.
Cela garantit que Docker sélectionne automatiquement la bonne architecture selon la machine.
Voici comment procéder pour créer une image multi-plateforme :
Construire une image Docker compatible ARM
- Installer `buildx` si nécessaire (Docker Desktop et Docker versions récentes l'intègrent déjà).
- Exécuter la commande suivante depuis le répertoire où se trouve ton Dockerfile :
sudo docker buildx create --name mybuilder --use
sudo docker buildx build --no-cache --platform linux/amd64,linux/arm64 -t 'ton-id-de-registry'.dkr.ecr.'ta-region'.amazonaws.com/'nom-du-repo':latest --push .
Cette commande crée et publie une image compatible avec `amd64` et `arm64` dans ton registre ECR.
Récupérer l'image Docker
docker pull 'ton-id-de-registry'.dkr.ecr.'ta-region'.amazonaws.com/'nom-du-repo':latest
Lance le conteneur Streamlit :
docker run -d -p 80:8501 'ton-id-de-registry'.dkr.ecr.'ta-region'.amazonaws.com/'nom-du-repo':latest
Limiter les performances Docker :
docker run -d -p 80:8501 --cpus="1.0" --memory="1g" 'ton-id-de-registry'.dkr.ecr.'ta-region'.amazonaws.com/'nom-du-repo':latest
Votre conteneur Docker fonctionne sur une instance t4g.medium !
rappel sur docker :
Affichicher les docker en fonctionnement :
sudo docker ps
pour l'arréter (en utilisant le nom du conteneur) :
sudo docker stop naughty_newton