DevPod sur AWS
Sources
- DevPod âïž
- DevContainer đł
Introduction đ
Dans cet article, je souhaite prĂ©senter un outil fantastique qui fait partie de la mĂȘme famille que GitPod et Codespaces : DevPod ! Il vous permet de crĂ©er des environnements de dĂ©veloppement sans effort â sans se retrouver bloquĂ© par un fournisseur. đâ
DevPod est basĂ© sur l’architecture DevContainer et utilise les spĂ©cifications contenues dans un fichier devcontainer.json pour lancer votre environnement de dĂ©veloppement. Personnellement, je l’utilise pour dĂ©ployer rapidement des maquette rĂ©seau avec ContainerLab. đ»đ§°
Qu’est-ce qu’un DevContainer ? đ€
Un conteneur de dĂ©veloppement (souvent appelĂ© « dev container ») vous permet d’utiliser un conteneur comme un environnement de dĂ©veloppement complet. (Consultez la documentation officielle de containers.dev pour plus de dĂ©tails.)
Décomposons cela :
Avez-vous dĂ©jĂ entendu l’expression « Ăa marche sur ma machine » ? Si vous ĂȘtes dĂ©veloppeur, vous avez sans doute rencontrĂ© ce problĂšme en collaborant avec d’autres. Mais devinez quoi ? Les DevContainers rĂ©solvent le problĂšme de la dĂ©rive des environnements en fournissant des environnements Docker cohĂ©rents et reproductibles. Adieu les maux de tĂȘte liĂ©s Ă l’installation ! đââïž
Avec les DevContainers, il vous suffit de :
- Un dossier
.devcontainer
dans votre projet. - Un fichier
devcontainer.json
qui indique à VS Code comment configurer le conteneur. - Docker installé localement
La pierre angulaire du DevContainer est le fichier devcontainer.json
. Par exemple :
{
"name": "Python DevContainer",
"image": "mcr.microsoft.com/devcontainers/python:3.10",
"features": {
"docker-in-docker": "latest"
},
"extensions": [
"ms-python.python",
"ms-azuretools.vscode-docker"
]
}
Que se passe-t-il ici ? đ”ïžââïž
- “image” â Cela utilise un environnement Python 3.10 prĂȘt Ă l’emploi.
- “features” â Cela ajoute la prise en charge de Docker dans le conteneur.
- “extensions” â Installe des extensions utiles pour Python et Docker dans VS Code.
Les DevContainers sont formidables pour le dĂ©veloppement local, mais parfois vous avez besoin de plus de puissance â peut-ĂȘtre que vos charges de travail sont Ă©normes, ou que vous souhaitez exĂ©cuter des laboratoires spĂ©cialisĂ©s. C’est lĂ qu’intervient DevPod. đȘ
Pour pouvoir déployer facilement des laboratoires sur le Cloud
Qu’est-ce que DevPod ? đ€
DevPod est un outil open-source qui vous permet de lancer des environnements de dĂ©veloppement soit sur votre machine locale, soit dans le cloud de votre choix. Imaginez une version auto-hĂ©bergĂ©e et ultra-personnalisable de GitHub Codespaces. đ
Dans mes aventures quotidiennes en rĂ©seau, je dĂ©ploie des configurations basĂ©es sur ContainerLab avec des DevContainers sur AWS. Voyons comment vous pouvez utiliser DevPod pour faire exactement cela (les dĂ©tails sur ContainerLab suivront dans un autre article, promisâŻ!). đ
Fournisseur AWS đ
DevPod utilise des Providers (fournisseurs), qui sont des modules de configuration dĂ©finissant oĂč et comment DevPod lance votre environnement. Voici la liste des fournisseurs :
Nous allons nous concentrer sur le Provider AWS â bien qu’il existe de nombreuses options de configuration :
Avant de paniquer devant tous ces rĂ©glages, ne vous inquiĂ©tez pas. Si vous ne faites que quelques expĂ©rimentations, les valeurs par dĂ©faut conviennent gĂ©nĂ©ralement. đ
Les avantages de l’open-source đ
Le fait que DevPod soit open-source signifie que vous pouvez jeter un Ćil sous le capot pour voir exactement comment il fonctionne. Consultez le code AWS ici si vous ĂȘtes curieux.
Fonctionnement du code AWS
Examinons ce que fait DevPod sur AWS en regardant le code aws.go. Ă un niveau global, il gĂšre :
- Initialisation : Lecture de la configuration et mise en place des clients du SDK AWS (avec des identifiants personnalisés si nécessaire).
- Réseautage : Recherche ou création du sous-réseau, VPC et groupes de sécurité appropriés.
- SĂ©lection de l’AMI : Choix d’une AMI adaptĂ©e (par dĂ©faut, une image Ubuntu 22.04 rĂ©cente) et dĂ©termination du pĂ©riphĂ©rique racine.
- Configuration IAM : VĂ©rification qu’un rĂŽle d’instance appropriĂ© et un profil d’instance existent, avec les politiques associĂ©es.
- Cycle de vie de l’instance : CrĂ©ation, dĂ©marrage, arrĂȘt, vĂ©rification du statut et suppression des instances.
- Injection de donnĂ©es utilisateur : GĂ©nĂ©ration d’un script (encodĂ© en Base64) qui configure l’instance (ajoute des utilisateurs et des clĂ©s SSH) au premier dĂ©marrage.
- DNS optionnel : Gestion des enregistrements Route 53 pour l’instance si la configuration l’exige.
De mon point de vue, deux points se distinguent comme étant potentiellement les plus critiques :
- (#4) Configuration IAM
- (#6) Injection de données utilisateur
Pourquoi les points #4 et #6 sont-ils « délicats » ?
Configuration IAM est principalement gérée par la fonction
CreateDevpodInstanceProfile
. Elle crée un rÎle nommédevpod-ec2-role
qui peut effectuer les opĂ©rations suivantes :- OpĂ©rations EC2 : Par exemple, il peut dĂ©crire ou arrĂȘter des instances â en particulier l’instance qui lui est associĂ©e.
- OpĂ©rations SSM : En attachant la politique AmazonSSMManagedInstanceCore, l’instance peut ĂȘtre gĂ©rĂ©e par AWS Systems Manager.
- Opérations KMS (optionnel) : Si configuré, il peut exécuter
kms:Decrypt
sur une clé KMS spécifique, ce qui est utile pour gérer les données de session ou les secrets.
Injection de donnĂ©es utilisateur est essentiellement un script de dĂ©marrage insĂ©rĂ© dans l’instance sous forme de Base64. Ce script configure un utilisateur
devpod
avec des droits sudo, crée les dossiers SSH et insÚre votre clé publique dans le fichier approprié. Dans le code, cela ressemble à :useradd devpod -d /home/devpod mkdir -p /home/devpod if grep -q sudo /etc/groups; then usermod -aG sudo devpod elif grep -q wheel /etc/groups; then usermod -aG wheel devpod fi echo "devpod ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/91-devpod mkdir -p /home/devpod/.ssh echo " + string(publicKey) + " >> /home/devpod/.ssh/authorized_keys chmod 0700 /home/devpod/.ssh chmod 0600 /home/devpod/.ssh/authorized_keys chown -R devpod:devpod /home/devpod
Comme DevPod est open-source, vous pouvez facilement vĂ©rifier par vous-mĂȘme. C’est un excellent outil d’apprentissage si vous souhaitez comprendre tous les rouages ! đ©
RĂŽles et politiques IAM
Vous devrez créer un utilisateur IAM et lui attacher une politique IAM qui accorde juste assez de permissions pour DevPod. Par exemple :
- Actions EC2 :
- Description :
ec2:DescribeSubnets
,ec2:DescribeVpcs
,ec2:DescribeImages
,ec2:DescribeInstances
,ec2:DescribeSecurityGroups
- Gestion des instances :
ec2:RunInstances
,ec2:StartInstances
,ec2:StopInstances
,ec2:TerminateInstances
,ec2:CancelSpotInstanceRequests
- Groupes de sécurité & Tags :
ec2:CreateSecurityGroup
,ec2:AuthorizeSecurityGroupIngress
,ec2:CreateTags
- Description :
- Actions IAM :
iam:GetInstanceProfile
,iam:CreateRole
,iam:PutRolePolicy
,iam:AttachRolePolicy
,iam:CreateInstanceProfile
,iam:AddRoleToInstanceProfile
- Route 53 (optionnel) :
route53:ListHostedZones
,route53:GetHostedZone
,route53:ChangeResourceRecordSets
Configuration AWS đïž
J’utilise gĂ©nĂ©ralement la console web AWS pour configurer cela, mais vous pouvez tout Ă fait le faire via la CLI.
Ătape 1 : Connectez-vous Ă la console AWS
- Rendez-vous sur AWS Management Console.
- Utilisez un compte disposant des droits appropriés pour créer des ressources IAM.
Ătape 2 : CrĂ©er une politique IAM personnalisĂ©e
A. Accédez à la console IAM
- Dans le menu AWS, trouvez IAM.
B. Créer une nouvelle politique
- Cliquez sur Policies dans le menu de gauche.
- Cliquez sur Create policy.
C. Passez Ă l’onglet JSON
- Collez quelque chose comme ceci, en ajustant si nécessaire :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2Actions",
"Effect": "Allow",
"Action": [
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeSecurityGroups",
"ec2:RunInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances",
"ec2:CancelSpotInstanceRequests",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource": "*"
},
{
"Sid": "IAMActions",
"Effect": "Allow",
"Action": [
"iam:GetInstanceProfile",
"iam:CreateRole",
"iam:PutRolePolicy",
"iam:AttachRolePolicy",
"iam:CreateInstanceProfile",
"iam:AddRoleToInstanceProfile"
],
"Resource": "*"
},
{
"Sid": "Route53Actions",
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:GetHostedZone",
"route53:ChangeResourceRecordSets"
],
"Resource": "*"
}
]
}
- Cliquez sur Next (les tags sont optionnels), puis sur Next: Review.
D. Vérifier et créer
- Nommez-la
DevpodToolPolicy
(ou comme vous le souhaitez). - Ajoutez une description facultative.
- Cliquez sur Create policy.
Ătape 3 : CrĂ©er ou mettre Ă jour l’utilisateur IAM
A. Créer un nouvel utilisateur (si nécessaire)
- Cliquez sur Users dans IAM.
- Cliquez sur Add user.
- Donnez-lui un nom (par exemple,
devpod-tool-user
). - Choisissez Programmatic access si vous souhaitez un accĂšs via la CLI. đ€
- Cliquez sur Next.
B. Attacher votre nouvelle politique
- Sur la page des permissions, choisissez Attach policies directly.
- Cochez
DevpodToolPolicy
. - Cliquez sur Create.
- Et voilĂ !
Ătape 4 : VĂ©rifier et c’est fini
Retournez dans Users â devpod-tool-user â Permissions pour confirmer que DevpodToolPolicy
est bien attachĂ©e. â
Ătape 5 : Utilisez ces identifiants
- Si vous avez créé un utilisateur programmatique, n’oubliez pas de noter l’Access Key ID et le Secret Access Key.
Bonus : Notez votre ID VPC (dans la section VPC sur AWS). Vous en aurez besoin lors de la configuration de DevPod.
Configurer DevPod đ ïž
1. Configurer le profil AWS
aws configure --profile Devpod
Lorsqu’on vous le demande :
- L’Access Key ID
- Le Secret Access Key
- La région par défaut (par exemple,
eu-west-1
) - Le format de sortie (je le laisse généralement vide)
2. Ajouter le profil Ă DevPod
- Dans DevPod, créez un nouveau provider et choisissez AWS.
- Sélectionnez la région AWS (par exemple,
eu-west-1
). - Développez les options AWS.
- Taille du disque AWS : par exemple, 40âŻGB pour commencer.
- Type d’instance : par exemple,
t2.small
. - Profil AWS : sélectionnez
Devpod
(ou le nom que vous avez choisi). - ID VPC AWS : ajoutez votre VPC.
- Vous pouvez laisser le reste par défaut.
Cliquez sur Add Provider.
Tester un dĂ©ploiement đ§Ș
Déployer
Nous allons effectuer un test rapide en utilisant l’une des images Docker prĂ©construites :
- Rendez-vous dans Workspaces dans DevPod.
- Cliquez sur Create Workspace.
- Choisissez votre nouveau provider AWS.
- Choisissez votre IDE préféré (VS Code, etc.).
- Ă droite, sĂ©lectionnez un exemple de dĂ©marrage rapide (par exemple, Python). đ
- Cliquez sur Create Workspace.
Attendez quelques instants, et votre environnement basĂ© sur le cloud apparaĂźtra dans VS Code. đ
ArrĂȘter
Lorsque vous n’utilisez pas l’environnement, cliquez sur Stop pour Ă©teindre l’instance EC2. Vous ne paierez que pour le stockage â aucun temps de calcul. IdĂ©al pour votre portefeuille. đ°
Supprimer
Supprimer le workspace supprime toutes les ressources AWS associĂ©es Ă cet environnement, vous ne paierez donc pas un centime. Mais vous devrez redĂ©ployer si vous souhaitez l’utiliser Ă nouveau. â»ïž
Conclusion đĄ
En combinant DevContainers et DevPod sur AWS, vous pouvez crĂ©er des environnements de dĂ©veloppement flexibles et autogĂ©rĂ©s qui Ă©voluent avec votre croissance â sans ĂȘtre enfermĂ© dans des plateformes spĂ©cifiques Ă un fournisseur. Dites adieu aux problĂšmes du « Ăa marche sur ma machine ! » et accueillez un codage sans friction. đâš
Amusez-vous bien ! đ