{"id":25698,"date":"2025-04-25T11:47:31","date_gmt":"2025-04-25T11:47:31","guid":{"rendered":"https:\/\/www.cycloid.io\/?post_type=blogs&#038;p=25698"},"modified":"2026-06-16T06:24:02","modified_gmt":"2026-06-16T06:24:02","slug":"portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple","status":"publish","type":"blogs","link":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/","title":{"rendered":"Portails en libre-service : un d\u00e9veloppement plus rapide et plus simple"},"content":{"rendered":"<p>Chaque \u00e9quipe d&rsquo;ing\u00e9nierie l&rsquo;a d\u00e9j\u00e0 v\u00e9cu : un d\u00e9veloppeur doit cr\u00e9er un nouveau namespace Kubernetes pour tester un service de mani\u00e8re isol\u00e9e. Ou peut-\u00eatre d\u00e9ployer une base de donn\u00e9es PostgreSQL temporaire pour d\u00e9boguer un probl\u00e8me en staging. Au lieu de le provisionner eux-m\u00eames, ils ouvrent un ticket \u00e0 l&rsquo;\u00e9quipe DevOps. Puis ils attendent. Parfois des heures. Parfois des jours.<\/p>\n<p><span style=\"font-weight: 400;\">Cette attente n&rsquo;est pas due \u00e0 la lenteur de l&rsquo;\u00e9quipe DevOps. C&rsquo;est parce qu&rsquo;elle est d\u00e9j\u00e0 surcharg\u00e9e \u2014 \u00e0 r\u00e9soudre des probl\u00e8mes de production, \u00e0 examiner des pull requests d&rsquo;infrastructure, \u00e0 g\u00e9rer les <a href=\"https:\/\/www.cycloid.io\/fr\/product\/pipelines-ci-cd\/\">jobs CI\/CD<\/a>, \u00e0 faire tourner les secrets et \u00e0 r\u00e9pondre aux alertes. Une demande apparemment simple, comme configurer un namespace ou une base de donn\u00e9es, se retrouve souvent en bas de la file d&rsquo;attente.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00c0 mesure que les \u00e9quipes grandissent et livrent plus vite, cette friction s&rsquo;aggrave. Les d\u00e9veloppeurs se retrouvent bloqu\u00e9s \u00e0 attendre des ressources, et le DevOps devient un goulot d&rsquo;\u00e9tranglement. Tout le monde finit par contourner les d\u00e9lais plut\u00f4t que de les r\u00e9soudre.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Un <a href=\"https:\/\/www.cycloid.io\/fr\/solutions\/self-service-portal\/\">portail en libre-service<\/a> r\u00e9sout ce probl\u00e8me en donnant aux d\u00e9veloppeurs un acc\u00e8s contr\u00f4l\u00e9 \u00e0 l&rsquo;infrastructure dont ils ont besoin \u2014 sans passer par des tickets ou des fils Slack. Pour les \u00e9quipes qui d\u00e9butent, il est courant de se demander ce qu&rsquo;est un portail en libre-service et comment il s&rsquo;int\u00e8gre dans leur workflow.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dans cet article, nous verrons pourquoi le libre-service d\u00e9veloppeur est important, comment il s&rsquo;int\u00e8gre dans les <a href=\"https:\/\/www.cycloid.io\/fr\/solutions\/devops-rollout\/\">workflows DevOps<\/a> existants, et nous parcourrons un exemple de construction d&rsquo;un portail en libre-service avec Backstage, puis avec la plateforme Cycloid.<\/span><\/p>\n<h2><b><br \/>\nPourquoi les d\u00e9veloppeurs ont-ils besoin d&rsquo;un portail en libre-service ?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Dans de nombreuses organisations, les d\u00e9veloppeurs d\u00e9pendent des \u00e9quipes plateforme ou DevOps pour provisionner l&rsquo;infrastructure de base. M\u00eame les demandes simples \u2014 comme cr\u00e9er un environnement de test, lancer une instance PostgreSQL temporaire ou d\u00e9ployer un microservice derri\u00e8re un load balancer \u2014 n\u00e9cessitent souvent de soumettre un ticket et d&rsquo;attendre son tour.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ce ne sont pas des cas rares ; ce sont des actions courantes et r\u00e9p\u00e9tables. Mais parce qu&rsquo;elles d\u00e9pendent de quelqu&rsquo;un d&rsquo;autre pour les approuver et les ex\u00e9cuter, elles ralentissent les \u00e9quipes. Les \u00e9quipes plateforme sont d\u00e9bord\u00e9es, les files d&rsquo;attente grossissent, et m\u00eame les petits changements commencent \u00e0 sembler lourds. Des erreurs se glissent \u00e9galement \u2014 comme des configurations de s\u00e9curit\u00e9 manquantes, un balisage incoh\u00e9rent ou des environnements mal align\u00e9s.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C&rsquo;est l\u00e0 qu&rsquo;un portail en libre-service fait une vraie diff\u00e9rence. Au lieu de faire passer tout par une \u00e9quipe centrale, les d\u00e9veloppeurs acc\u00e8dent \u00e0 des workflows pr\u00e9-approuv\u00e9s qu&rsquo;ils peuvent ex\u00e9cuter eux-m\u00eames. Ils n&rsquo;\u00e9crivent pas du Terraform ni ne naviguent dans la console AWS. Ils remplissent un court formulaire qui d\u00e9clenche une automatisation en coulisses \u2014 utilisant de l&rsquo;infrastructure-as-code qui suit d\u00e9j\u00e0 les bonnes pratiques de l&rsquo;organisation.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par exemple, un template peut automatiquement appliquer le chiffrement, la s\u00e9lection de r\u00e9gion, le placement de sous-r\u00e9seau et le balisage pour chaque ressource qu&rsquo;il provisionne. Les d\u00e9veloppeurs obtiennent rapidement les environnements dont ils ont besoin. Et l&rsquo;\u00e9quipe plateforme garde le contr\u00f4le \u2014 sans \u00eatre dans la boucle pour chaque demande. Ce mod\u00e8le de libre-service r\u00e9duit la d\u00e9pendance op\u00e9rationnelle tout en maintenant la s\u00e9curit\u00e9 et l&rsquo;auditabilit\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Des portails comme Backstage rendent ce mod\u00e8le plus pratique. Backstage est un framework de plateforme en libre-service open source qui aide \u00e0 exposer ces workflows aux d\u00e9veloppeurs via une interface coh\u00e9rente. Des \u00e9quipes comme Monday.com utilisent ce pattern pour permettre aux ing\u00e9nieurs de lancer de nouveaux services, environnements et jobs en quelques minutes \u2014 tout en gardant tout gouvern\u00e9 et tra\u00e7able.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le libre-service ne signifie pas abandonner le contr\u00f4le. Il s&rsquo;agit d&rsquo;habiliter les d\u00e9veloppeurs \u2014 en leur donnant un acc\u00e8s s\u00e9curis\u00e9 \u00e0 une infrastructure reproductible pour qu&rsquo;ils puissent avancer plus vite sans ouvrir de tickets pour chaque petite t\u00e2che.<\/span><\/p>\n<h2><b><br \/>\nComment un portail en libre-service s&rsquo;int\u00e8gre-t-il dans les workflows DevOps ?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Un portail en libre-service ne se contente pas d&rsquo;acc\u00e9l\u00e9rer les demandes \u2014 il change la fa\u00e7on dont l&rsquo;infrastructure est g\u00e9r\u00e9e dans toute l&rsquo;organisation. Il s&rsquo;int\u00e8gre parfaitement dans les workflows DevOps modernes en transf\u00e9rant la charge d&rsquo;ex\u00e9cution sans sacrifier les standards ni le contr\u00f4le. Les d\u00e9veloppeurs peuvent avancer de mani\u00e8re autonome, tandis que les \u00e9quipes plateforme et DevOps gardent le contr\u00f4le sur ce qui est r\u00e9ellement provisionn\u00e9.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>Transformer les t\u00e2ches manuelles en workflows r\u00e9utilisables<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Traditionnellement, les changements d&rsquo;infrastructure impliquent une coordination manuelle \u2014 m\u00eame si Terraform ou CloudFormation est utilis\u00e9. Un d\u00e9veloppeur \u00e9crit le code, ouvre une pull request, attend qu&rsquo;un ing\u00e9nieur DevOps la r\u00e9vise, puis quelqu&rsquo;un approuve et ex\u00e9cute l&rsquo;\u00e9tape terraform apply. Chacune de ces \u00e9tapes n\u00e9cessite un humain dans la boucle, ce qui est la source des d\u00e9lais.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Avec une configuration en libre-service, ces t\u00e2ches sont transform\u00e9es en templates r\u00e9utilisables. L&rsquo;\u00e9quipe DevOps encode toutes les r\u00e8gles n\u00e9cessaires \u2014 configs de r\u00e9gion, permissions IAM, tags de centre de co\u00fbts \u2014 dans des modules Terraform ou des scripts CLI. Ceux-ci sont ensuite envelopp\u00e9s dans de simples formulaires auxquels les d\u00e9veloppeurs acc\u00e8dent via un portail comme Backstage.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">D\u00e9sormais, quand un d\u00e9veloppeur a besoin d&rsquo;une instance RDS ou d&rsquo;un nouveau bucket S3, il n&rsquo;ouvre pas de ticket \u2014 il remplit simplement un formulaire. En coulisses, le m\u00eame code Terraform est appliqu\u00e9, les m\u00eames permissions sont utilis\u00e9es \u2014 mais cela se produit automatiquement.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>Int\u00e9gration avec les workflows CI\/CD et GitOps existants<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Cette configuration ne remplace pas vos workflows existants \u2014 elle s&rsquo;y int\u00e8gre. Que vous utilisiez GitHub Actions, GitLab CI ou tout autre outil CI\/CD, un portail en libre-service peut se connecter directement dans votre pipeline et d\u00e9clencher la m\u00eame automatisation d&rsquo;infrastructure que vous utilisez d\u00e9j\u00e0.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Par exemple, une demande via le portail pourrait d\u00e9clencher un workflow qui :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Cr\u00e9e un d\u00e9p\u00f4t GitHub<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pousse les configs Terraform par d\u00e9faut<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ex\u00e9cute <\/span><span style=\"font-weight: 400;\">terraform apply<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Met \u00e0 jour le catalogue de services<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Notifie le d\u00e9veloppeur quand c&rsquo;est termin\u00e9<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Ces \u00e9tapes suivant les m\u00eames r\u00e8gles de pipeline que le reste de votre infrastructure, vous obtenez coh\u00e9rence et auditabilit\u00e9 sans avoir besoin d&rsquo;impliquer quelqu&rsquo;un de votre \u00e9quipe.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>G\u00e9rer les permissions sans complications<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">La gestion des acc\u00e8s dans le cloud est souvent l\u00e0 o\u00f9 les choses commencent \u00e0 se compliquer. Les \u00e9quipes doivent savoir qui est autoris\u00e9 \u00e0 cr\u00e9er des ressources, qui en est propri\u00e9taire et quelles limites sont en place. Sans syst\u00e8me clair, ces d\u00e9cisions se prennent informellement \u2014 peut-\u00eatre via un message Slack, ou enfouies dans un vieux script que personne ne se souvient d&rsquo;avoir \u00e9crit.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Un portail en libre-service r\u00e9sout cela en utilisant le contr\u00f4le d&rsquo;acc\u00e8s bas\u00e9 sur les r\u00f4les. L&rsquo;acc\u00e8s n&rsquo;est pas d\u00e9cid\u00e9 \u00e0 la vol\u00e9e ; il est li\u00e9 aux \u00e9quipes et aux permissions d\u00e9finies par l&rsquo;organisation. Par exemple, seuls les membres de l&rsquo;\u00e9quipe data peuvent cr\u00e9er des clusters Redshift. Les d\u00e9veloppeurs de l&rsquo;\u00e9quipe frontend n&rsquo;ont acc\u00e8s qu&rsquo;\u00e0 certains buckets S3 ou fonctions Lambda.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cette approche supprime les approximations. Tout le monde sait ce qu&rsquo;il peut et ne peut pas faire. Elle rend \u00e9galement le syst\u00e8me plus s\u00e9curis\u00e9 et plus facile \u00e0 g\u00e9rer \u00e0 mesure que l&rsquo;entreprise grandit. Au lieu de s&rsquo;appuyer sur la m\u00e9moire ou les approbations manuelles, l&rsquo;acc\u00e8s est automatis\u00e9 et clairement d\u00e9fini en un seul endroit.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>Maintenir la gouvernance et le contr\u00f4le<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Donner aux d\u00e9veloppeurs un acc\u00e8s direct ne signifie pas abandonner le contr\u00f4le. Tout ce qu&rsquo;ils font via le portail est pr\u00e9d\u00e9fini et approuv\u00e9 par l&rsquo;\u00e9quipe DevOps. Des conventions de nommage des ressources aux groupes de s\u00e9curit\u00e9, chaque configuration est int\u00e9gr\u00e9e dans l&rsquo;automatisation sous-jacente.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Au lieu de r\u00e9viser chaque demande, l&rsquo;\u00e9quipe DevOps r\u00e9vise les templates. Une fois quelque chose encod\u00e9 dans un template, cela devient la source de v\u00e9rit\u00e9. Ainsi, l&rsquo;infrastructure reste conforme \u2014 m\u00eame quand les d\u00e9veloppeurs la provisionnent eux-m\u00eames.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Un portail en libre-service apporte de la structure \u00e0 la fa\u00e7on dont l&rsquo;infrastructure est demand\u00e9e et g\u00e9r\u00e9e. Les d\u00e9veloppeurs peuvent avancer plus vite parce qu&rsquo;ils n&rsquo;ont plus \u00e0 attendre que quelqu&rsquo;un cr\u00e9e des ressources pour eux. En m\u00eame temps, les \u00e9quipes DevOps gardent le contr\u00f4le en d\u00e9finissant les r\u00e8gles \u00e0 l&rsquo;avance.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cette approche est b\u00e9n\u00e9fique pour les deux parties. Les d\u00e9veloppeurs ne sont plus bloqu\u00e9s, et les \u00e9quipes DevOps ne sont plus noy\u00e9es sous des tickets de routine. Les portails en libre-service apportent clart\u00e9, coh\u00e9rence et autonomie dans le provisionnement d&rsquo;infrastructure entre les \u00e9quipes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tout passe par une automatisation d\u00e9j\u00e0 approuv\u00e9e, donc rien ne contrevient aux standards ou aux politiques.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00c0 mesure que les entreprises \u00e9voluent, cette fa\u00e7on de travailler devient essentielle. Elle maintient l&rsquo;organisation, r\u00e9duit les erreurs et facilite la gestion des ressources cloud entre projets et environnements. Un bon portail en libre-service n&rsquo;est pas seulement une commodit\u00e9 \u2014 c&rsquo;est un \u00e9l\u00e9ment cl\u00e9 pour faire \u00e9voluer votre processus de d\u00e9veloppement correctement.<\/span><\/p>\n<h2><b><br \/>\nComment configurer un portail en libre-service avec Backstage<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Nous avons vu comment les portails en libre-service suppriment les goulots d&rsquo;\u00e9tranglement en permettant aux d\u00e9veloppeurs de provisionner l&rsquo;infrastructure sans attendre le DevOps. Voyons maintenant comment construire un exemple concret avec Backstage.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous allons cr\u00e9er un template Backstage qui permet aux d\u00e9veloppeurs de cr\u00e9er un bucket S3 avec quelques champs de saisie. Le processus d\u00e9clenchera l&rsquo;AWS CLI en coulisses, mais le d\u00e9veloppeur ne verra jamais cette complexit\u00e9. \u00c0 la fin, nous aurons une exp\u00e9rience de portail enti\u00e8rement automatis\u00e9e.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 1 : Cr\u00e9er le r\u00e9pertoire du template<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Commen\u00e7ons par cr\u00e9er un dossier d\u00e9di\u00e9 pour notre template :<\/span><\/p>\n<p><span style=\"font-family: 'Roboto Mono', monospace; font-weight: 400; color: #188038; font-size: 16px; letter-spacing: -0.5px;\">mkdir -p packages\/backend\/templates\/s3-bucket<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dans ce dossier, nous d\u00e9finirons le fichier template.yaml, et nous pourrons optionnellement inclure des fichiers suppl\u00e9mentaires comme README.md, des scripts r\u00e9utilisables ou des actions personnalis\u00e9es.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 2 : D\u00e9finir le YAML du template<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">D\u00e9finissons maintenant notre template dans <\/span><\/p>\n<p><span style=\"font-family: 'Roboto Mono', monospace; font-weight: 400; color: #188038; font-size: 16px; letter-spacing: -0.5px;\">packages\/backend\/templates\/s3-bucket\/template.yaml<\/span>:<\/p>\n<table style=\"background-color: #333333; color: #ffffff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">apiVersion: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">scaffolder.backstage.io\/v1beta3<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">kind: <\/span><span style=\"font-weight: 400;\">Template<\/span><span style=\"font-weight: 400; color: #339966;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">metadata:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> name: <\/span><span style=\"font-weight: 400;\">create-s3-bucket<\/span><span style=\"font-weight: 400; color: #339966;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> title: <\/span><span style=\"font-weight: 400;\">Create<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">an S3 Bucket<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> description: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">Provisions an S3 bucket using AWS CLI and applies basic settings<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">spec:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> owner: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">cloud-team<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> type: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">infrastructure<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> parameters:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\">&#8211;<\/span><span style=\"font-weight: 400;\"> title: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">Bucket Configuration<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">required:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\"> &#8211;<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">bucketName<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\"> &#8211;<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">region<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\"> &#8211;<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">visibility<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">properties:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">bucketName:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">type: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">string<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">title: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">S3 Bucket Name<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">region:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">type: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">string<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">title: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">AWS Region<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">default: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">us-east-1<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">visibility:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">type: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">string<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">title: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">Visibility<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">enum:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\"> &#8211;<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">private<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\"> &#8211;<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">public<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> steps:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\">&#8211;<\/span><span style=\"font-weight: 400;\"> id: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">validate<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">name: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">Validate Inputs<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">action: debug:log<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">input:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">message: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">Creating bucket \u00ab\u00a0$<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.bucketName }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00a0\u00bb in region \u00ab\u00a0$<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.region }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00a0\u00bb with visibility \u00ab\u00a0$<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.visibility }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\">&#8211;<\/span><span style=\"font-weight: 400;\"> id: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">create<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">name: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">Create Bucket<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">action: execute:script<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">input:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">script: <\/span><span style=\"font-weight: 400; color: #a2fca2;\">|<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> aws s3api create-bucket \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> &#8211;bucket $<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.bucketName }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> &#8211;region $<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.region }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> &#8211;create-bucket-configuration LocationConstraint=$<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.region }}<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> if [ \u00ab\u00a0$<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.visibility }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00a0\u00bb = \u00ab\u00a0public\u00a0\u00bb ]; then aws s3api put-bucket-acl \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> &#8211;bucket $<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.bucketName }}<\/span><span style=\"font-weight: 400; color: #a2fca2;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> &#8211;acl public-read<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"color: #a2fca2;\"> <span style=\"font-weight: 400;\">fi<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">aws s3api put-bucket-versioning \\<\/span><\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\"> &#8211;bucket $<\/span><span style=\"font-weight: 400; color: #ade5fc;\">{{ parameters.bucketName }}<\/span><span style=\"color: #a2fca2;\"><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> &#8211;versioning-configuration Status=Enabled <\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Ce template donne \u00e0 votre portail en libre-service un titre, une description, des champs de formulaire et des \u00e9tapes d&rsquo;ex\u00e9cution. Les d\u00e9veloppeurs fournissent simplement un nom, une r\u00e9gion et un niveau de visibilit\u00e9 \u2014 tout le reste est g\u00e9r\u00e9 par le script backend.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 3 : Enregistrer le template dans app-config.yaml<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Dans votre fichier racine <\/span><span style=\"font-weight: 400; color: #188038;\">app-config.yaml<\/span><span style=\"font-weight: 400;\">, ajoutez ou mettez \u00e0 jour la section des emplacements du catalogue comme suit :<\/span><\/p>\n<table style=\"background-color: #333333; color: #ffffff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400; color: #d36363;\">catalog:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #d36363;\"> locations:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">&#8211; type: file<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #d36363;\">target:<\/span><span style=\"font-weight: 400;\"> .\/packages\/backend\/templates\/s3-bucket\/template.yaml<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Puis red\u00e9marrez Backstage :<\/span><\/p>\n<table style=\"background-color: #333333; color: #ffffff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400; color: #ffffaa;\">yarn dev<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Vous verrez maintenant le template \u00ab Create an S3 Bucket \u00bb list\u00e9 dans la section Create.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-16432\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/S3-Bucket-template-listed-under-the-Create-section-300x137.png\" alt=\"\" width=\"900\" height=\"411\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/S3-Bucket-template-listed-under-the-Create-section-300x137.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/S3-Bucket-template-listed-under-the-Create-section-1024x467.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/S3-Bucket-template-listed-under-the-Create-section-768x350.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/S3-Bucket-template-listed-under-the-Create-section-1536x701.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/S3-Bucket-template-listed-under-the-Create-section.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 4 : Ajouter la prise en charge de scripts personnalis\u00e9s<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Au lieu d&rsquo;int\u00e9grer de longs scripts shell dans le fichier <\/span><span style=\"font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; font-weight: 400; color: #188038;\">template.yaml<\/span><span style=\"font-weight: 400;\">, nous pouvons extraire la logique dans un fichier de script.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cr\u00e9ez ce fichier :<\/span><\/p>\n<table style=\"background-color: #333333; color: #ffffff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400; color: #a2fca2;\">touch packages\/backend\/templates\/s3-bucket\/<\/span><span style=\"font-weight: 400; color: #ffffaa;\">create-bucket.sh<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #a2fca2;\">chmod <\/span><span style=\"font-weight: 400;\">+x <\/span><span style=\"font-weight: 400; color: #a2fca2;\">packages\/backend\/templates\/s3-bucket\/<\/span><span style=\"font-weight: 400; color: #ffffaa;\">create-bucket.sh<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table style=\"background-color: #333333; color: #fff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400; color: #fc9b9b;\">#!\/bin\/bash<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">BUCKET_NAME=<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$1<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">REGION=<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$2<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">VISIBILITY=<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$3<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">aws s3api create-bucket \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> &#8211;bucket <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$BUCKET_NAME<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> &#8211;region <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$REGION<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> &#8211;create-bucket-configuration LocationConstraint=<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$REGION<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">if<\/span><span style=\"font-weight: 400;\"> [ <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$VISIBILITY<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"> = <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0public\u00a0\u00bb<\/span><span style=\"font-weight: 400;\"> ]; <\/span><span style=\"font-weight: 400; color: #fcc28c;\">then<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> aws s3api put-bucket-acl \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">&#8211;bucket <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$BUCKET_NAME<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">&#8211;acl public-read<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">fi<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">aws s3api put-bucket-versioning \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> &#8211;bucket <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">$BUCKET_NAME<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> &#8211;versioning-configuration Status=Enabled<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Mettez maintenant \u00e0 jour l&rsquo;\u00e9tape <\/span><span style=\"font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; font-weight: 400; color: #188038;\">execute:script<\/span><span style=\"font-weight: 400;\"> dans <\/span><span style=\"font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; font-weight: 400; color: #188038;\">template.yaml<\/span><span style=\"font-weight: 400;\"> comme ceci :<\/span><\/p>\n<table style=\"background-color: #333333; color: #fff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">&#8211; id: create<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> name: <\/span><span style=\"font-weight: 400; color: #ffffaa;\">Run Script<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> action: execute:script<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> input:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">script: |<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">.\/packages\/backend\/templates\/s3-bucket\/create-bucket.sh \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">${{ parameters.bucketName }<\/span><span style=\"font-weight: 400; color: #a2fca2;\">}\u00a0\u00bb<\/span><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">${{ parameters.region }<\/span><span style=\"font-weight: 400; color: #a2fca2;\">}\u00a0\u00bb<\/span><span style=\"font-weight: 400;\"> \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0<\/span><span style=\"font-weight: 400; color: #ade5fc;\">${{ parameters.visibility }<\/span><span style=\"font-weight: 400; color: #a2fca2;\">}\u00a0\u00bb<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Cela am\u00e9liore la lisibilit\u00e9 et vous permet de r\u00e9utiliser le script pour d&rsquo;autres templates.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 5 : Mettre \u00e0 jour le Dockerfile pour inclure l&rsquo;AWS CLI<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Mettez \u00e0 jour votre <\/span><span style=\"font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; font-weight: 400; color: #188038;\">packages\/backend\/Dockerfile<\/span><span style=\"font-weight: 400;\"> (ou l\u00e0 o\u00f9 votre backend est construit) :<\/span><\/p>\n<table style=\"background-color: #333333; color: #fff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400; color: #fcc28c;\">FROM<\/span><span style=\"font-weight: 400;\"> node:<\/span><span style=\"font-weight: 400; color: #d36363;\">18<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #888888;\"># Install AWS CLI<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">RUN<\/span><span style=\"font-weight: 400;\"> apt-get update &amp;&amp; \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400; color: #ffffff;\">apt-get install -y curl unzip &amp;&amp; \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">curl <\/span><span style=\"color: #a2fca2;\"><span style=\"font-weight: 400;\">\u00ab\u00a0https:\/\/awscli.amazonaws.com\/awscli-exe-linux-x86_64.zip\u00a0\u00bb<\/span><span style=\"font-weight: 400;\"> -o <\/span><span style=\"font-weight: 400;\">\u00ab\u00a0awscliv2.zip\u00a0\u00bb<\/span><\/span><span style=\"font-weight: 400;\"> &amp;&amp; \\<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span> <span style=\"font-weight: 400;\">unzip awscliv2.zip &amp;&amp; .\/aws\/install<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">WORKDIR<\/span><span style=\"font-weight: 400;\"> \/app<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">COPY<\/span><span style=\"font-weight: 400;\"> . .<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">RUN<\/span><span style=\"font-weight: 400;\"> yarn install &#8211;frozen-lockfile<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400; color: #fcc28c;\">CMD<\/span><span style=\"font-weight: 400;\"> [<\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0yarn\u00a0\u00bb<\/span><span style=\"font-weight: 400;\">, <\/span><span style=\"font-weight: 400; color: #a2fca2;\">\u00ab\u00a0start\u00a0\u00bb<\/span><span style=\"font-weight: 400;\">]<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Vous pouvez v\u00e9rifier la disponibilit\u00e9 du CLI en ajoutant ceci au script :<\/span><\/p>\n<table style=\"background-color: #333333; color: #fff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">aws <\/span><span style=\"font-weight: 400; color: #888888;\">&#8211;version<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 6 : Configurer les credentials AWS<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Utilisez l&rsquo;une des options suivantes :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Variables d&rsquo;environnement<\/b><span style=\"font-weight: 400;\"> (via fichier <\/span><span style=\"font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; font-weight: 400; color: #188038;\">.env<\/span><span style=\"font-weight: 400;\"> ou shell) :<\/span><\/li>\n<\/ul>\n<table style=\"background-color: #333333; color: #fff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\"><span style=\"color: #ffffaa;\"><span style=\"font-weight: 400;\">export<\/span> <span style=\"font-weight: 400;\">AWS_ACCESS_KEY_ID<\/span><\/span><span style=\"font-weight: 400;\">=your-key<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"color: #ffffaa;\"><span style=\"font-weight: 400;\">export<\/span> <span style=\"font-weight: 400;\">AWS_SECRET_ACCESS_KEY<\/span><\/span><span style=\"font-weight: 400;\">=your-secret<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Monter les credentials AWS locaux<\/b><span style=\"font-weight: 400;\"> en d\u00e9veloppement :<\/span><\/li>\n<\/ul>\n<table style=\"background-color: #333333; color: #fff; font-family: 'Roboto Mono', monospace; font-size: 16px; letter-spacing: -0.5px; padding: 16px;\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">docker run -v ~\/<\/span><span style=\"font-weight: 400; color: #ade5fc;\">.aws<\/span><span style=\"font-weight: 400;\">:\/root\/<\/span><span style=\"font-weight: 400; color: #ade5fc;\">.aws<\/span><span style=\"font-weight: 400;\"> &#8230;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3><b>\u00c9tape 7 : Cr\u00e9er le bucket depuis Backstage<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Depuis l&rsquo;interface Backstage, les d\u00e9veloppeurs peuvent utiliser le portail en libre-service pour acc\u00e9der \u00e0 la page de cr\u00e9ation.<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Acc\u00e9dez \u00e0 Create<\/span><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone wp-image-16434\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Go-to-Create-Bucket-from-Backstage-300x137.png\" alt=\"\" width=\"900\" height=\"411\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Go-to-Create-Bucket-from-Backstage-300x137.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Go-to-Create-Bucket-from-Backstage-1024x467.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Go-to-Create-Bucket-from-Backstage-768x350.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Go-to-Create-Bucket-from-Backstage-1536x701.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Go-to-Create-Bucket-from-Backstage.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<ul>\n<li>S\u00e9lectionnez le template \u00ab Create an S3 Bucket \u00bb<\/li>\n<li>Remplissez le formulaire : nom du bucket et r\u00e9gion<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone wp-image-16436\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Fill-in-the-form-bucket-name-and-region-300x137.png\" alt=\"\" width=\"900\" height=\"411\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Fill-in-the-form-bucket-name-and-region-300x137.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Fill-in-the-form-bucket-name-and-region-1024x467.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Fill-in-the-form-bucket-name-and-region-768x350.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Fill-in-the-form-bucket-name-and-region-1536x701.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Fill-in-the-form-bucket-name-and-region.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Cliquez sur Next \u2192 Review \u2192 Create<\/span><\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16438\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Click-Next-\u00e2\u0086\u0092-Review-\u00e2\u0086\u0092-Create-300x97.png\" alt=\"\" width=\"900\" height=\"291\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Nous venons de cr\u00e9er une configuration en libre-service fonctionnelle pour AWS S3 avec Backstage. Les d\u00e9veloppeurs disposent maintenant d&rsquo;une interface o\u00f9 ils peuvent remplir un formulaire, cliquer sur \u00ab Create \u00bb et obtenir un bucket \u2014 automatis\u00e9, coh\u00e9rent et s\u00e9curis\u00e9.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16440\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/We-just-created-a-working-self-service-setup-for-AWS-S3-using-Backstage-300x56.png\" alt=\"\" width=\"900\" height=\"168\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/We-just-created-a-working-self-service-setup-for-AWS-S3-using-Backstage-300x56.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/We-just-created-a-working-self-service-setup-for-AWS-S3-using-Backstage-1024x190.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/We-just-created-a-working-self-service-setup-for-AWS-S3-using-Backstage-768x143.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/We-just-created-a-working-self-service-setup-for-AWS-S3-using-Backstage-1536x285.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/We-just-created-a-working-self-service-setup-for-AWS-S3-using-Backstage.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Le m\u00eame pattern peut \u00eatre \u00e9tendu pour cr\u00e9er des instances EC2, des utilisateurs IAM, des fonctions Lambda, et m\u00eame des applications compl\u00e8tes avec des pipelines CI\/CD.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2><b>Comment Cycloid g\u00e8re la gestion des actifs cloud sur plusieurs clouds<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">La configuration d&rsquo;un portail en libre-service avec Backstage nous a donn\u00e9 flexibilit\u00e9 et contr\u00f4le, mais a \u00e9galement demand\u00e9 beaucoup d&rsquo;efforts. Chaque partie de l&rsquo;exp\u00e9rience \u2014 structure du catalogue, templates, scripts, workflows \u2014 devait \u00eatre assembl\u00e9e pi\u00e8ce par pi\u00e8ce. Bien que cette modularit\u00e9 soit puissante, la responsabilit\u00e9 de maintenir l&rsquo;ensemble repose enti\u00e8rement sur l&rsquo;\u00e9quipe d&rsquo;ing\u00e9nierie.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour les organisations souhaitant avancer plus vite sans tout construire de z\u00e9ro, <\/span><a href=\"https:\/\/www.cycloid.io\/fr\/\"><span style=\"font-weight: 400;\">Cycloid<\/span><\/a><span style=\"font-weight: 400;\"> propose une approche tr\u00e8s diff\u00e9rente. Elle offre la m\u00eame exp\u00e9rience de libre-service d\u00e9veloppeur et de gouvernance \u2014 mais sans vous demander d&rsquo;h\u00e9berger ou de construire le portail vous-m\u00eame.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L&rsquo;interface de Cycloid est pr\u00eate \u00e0 l&#8217;emploi d\u00e8s votre connexion. Au lieu de c\u00e2bler des plugins ou d&rsquo;\u00e9tendre des d\u00e9finitions YAML, vous acc\u00e9dez directement \u00e0 un tableau de bord qui affiche d\u00e9j\u00e0 votre activit\u00e9 cloud, les m\u00e9triques d&rsquo;utilisation et les informations cl\u00e9s de vos projets. Elle est con\u00e7ue pour les \u00e9quipes qui veulent se concentrer sur la livraison d&rsquo;infrastructure, pas sur la maintenance des outils autour.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16442\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/From-this-Cycloid-dashboard-you-can-monitor-everything-300x138.png\" alt=\"\" width=\"900\" height=\"414\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/From-this-Cycloid-dashboard-you-can-monitor-everything-300x138.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/From-this-Cycloid-dashboard-you-can-monitor-everything-1024x470.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/From-this-Cycloid-dashboard-you-can-monitor-everything-768x353.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/From-this-Cycloid-dashboard-you-can-monitor-everything-1536x706.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/From-this-Cycloid-dashboard-you-can-monitor-everything.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Depuis ce tableau de bord, vous pouvez tout surveiller \u2014 de la sant\u00e9 des projets aux ex\u00e9cutions de pipelines et aux donn\u00e9es FinOps. Pas besoin de connecter s\u00e9par\u00e9ment un outil de m\u00e9triques ou un tracker de co\u00fbts cloud ; tout est inclus.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L\u00e0 o\u00f9 Backstage nous demandait de d\u00e9finir manuellement les workflows d&rsquo;infrastructure via des templates et des scripts, Cycloid vous permet de d\u00e9finir des modules r\u00e9utilisables via des <a href=\"https:\/\/www.cycloid.io\/fr\/product\/stacks\/\">Stacks<\/a>. Chaque stack agit comme une unit\u00e9 d&rsquo;infrastructure packag\u00e9e \u2014 une VM, un cluster Kubernetes, un bucket S3 \u2014 que vos \u00e9quipes peuvent provisionner via de simples formulaires. Celles-ci sont aliment\u00e9es par votre logique Terraform ou Ansible existante, donc vous ne r\u00e9\u00e9crivez rien. Vous l&rsquo;abstraiez simplement d&rsquo;une mani\u00e8re qui permet \u00e0 d&rsquo;autres \u00e9quipes de l&rsquo;utiliser en toute s\u00e9curit\u00e9.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16444\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-lets-you-define-reusable-modules-using-Stacks-300x266.png\" alt=\"\" width=\"900\" height=\"798\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-lets-you-define-reusable-modules-using-Stacks-300x266.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-lets-you-define-reusable-modules-using-Stacks-1024x908.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-lets-you-define-reusable-modules-using-Stacks-768x681.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-lets-you-define-reusable-modules-using-Stacks.png 1162w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Toutes les stacks sont versionn\u00e9es et stock\u00e9es dans votre d\u00e9p\u00f4t Git, vous offrant la m\u00eame transparence et tra\u00e7abilit\u00e9 que vous attendriez d&rsquo;un workflow GitOps. Mais au lieu de tout c\u00e2bler via des plugins Backstage, Cycloid g\u00e8re pour vous l&rsquo;interface et l&rsquo;orchestration du cycle de vie. L&rsquo;interface, les formulaires de saisie et m\u00eame les v\u00e9rifications de permissions sont d\u00e9j\u00e0 c\u00e2bl\u00e9s. Vous n&rsquo;avez qu&rsquo;\u00e0 d\u00e9finir quelles variables exposer et comment l&rsquo;infrastructure doit \u00eatre appliqu\u00e9e.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16446\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Components-Cycloid-handles-the-frontend-and-lifecycle-orchestration-for-you-300x150.png\" alt=\"\" width=\"900\" height=\"450\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Components-Cycloid-handles-the-frontend-and-lifecycle-orchestration-for-you-300x150.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Components-Cycloid-handles-the-frontend-and-lifecycle-orchestration-for-you-1024x513.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Components-Cycloid-handles-the-frontend-and-lifecycle-orchestration-for-you-768x385.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Components-Cycloid-handles-the-frontend-and-lifecycle-orchestration-for-you-1536x770.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Components-Cycloid-handles-the-frontend-and-lifecycle-orchestration-for-you.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Une fois qu&rsquo;une stack est d\u00e9clench\u00e9e, Cycloid ex\u00e9cute automatiquement le pipeline associ\u00e9 et vous donne une visibilit\u00e9 sur sa progression. Cycloid g\u00e8re la visibilit\u00e9, l&rsquo;automatisation et l&rsquo;inventaire out of the box \u2014 sur AWS, GCP, Azure et les environnements hybrides. Vous n&rsquo;avez pas besoin de g\u00e9rer manuellement les pipelines ou les plugins.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16448\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-handles-visibility-automation-and-inventory-out-of-the-box-across-AWS-GCP-Azure-and-hybrid-setups-300x223.png\" alt=\"\" width=\"899\" height=\"668\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-handles-visibility-automation-and-inventory-out-of-the-box-across-AWS-GCP-Azure-and-hybrid-setups-300x223.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-handles-visibility-automation-and-inventory-out-of-the-box-across-AWS-GCP-Azure-and-hybrid-setups-1024x762.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-handles-visibility-automation-and-inventory-out-of-the-box-across-AWS-GCP-Azure-and-hybrid-setups-768x571.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Cycloid-handles-visibility-automation-and-inventory-out-of-the-box-across-AWS-GCP-Azure-and-hybrid-setups.png 1274w\" sizes=\"(max-width: 899px) 100vw, 899px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Cette visibilit\u00e9 int\u00e9gr\u00e9e change la fa\u00e7on dont les \u00e9quipes op\u00e8rent. Vous n&rsquo;avez plus besoin de passer d&rsquo;une console cloud \u00e0 l&rsquo;autre ou de demander des acc\u00e8s. Tout est visible en un seul endroit, et l&rsquo;acc\u00e8s est contr\u00f4l\u00e9 par des r\u00f4les et des mappings de groupes pr\u00e9d\u00e9finis. Si quelqu&rsquo;un cr\u00e9e une instance EC2 ou un workload Kubernetes, cela appara\u00eet dans l&rsquo;inventaire, mapp\u00e9 \u00e0 la bonne \u00e9quipe et au bon environnement.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-16450\" src=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Cycloid-Everything-is-visible-in-one-place-and-access-is-controlled-by-pre-defined-roles-and-group-mappings-300x157.png\" alt=\"\" width=\"900\" height=\"471\" srcset=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Cycloid-Everything-is-visible-in-one-place-and-access-is-controlled-by-pre-defined-roles-and-group-mappings-300x157.png 300w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Cycloid-Everything-is-visible-in-one-place-and-access-is-controlled-by-pre-defined-roles-and-group-mappings-1024x537.png 1024w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Cycloid-Everything-is-visible-in-one-place-and-access-is-controlled-by-pre-defined-roles-and-group-mappings-768x403.png 768w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Cycloid-Everything-is-visible-in-one-place-and-access-is-controlled-by-pre-defined-roles-and-group-mappings-1536x805.png 1536w, https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/With-Cycloid-Everything-is-visible-in-one-place-and-access-is-controlled-by-pre-defined-roles-and-group-mappings.png 1600w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Cycloid expose \u00e9galement cet inventaire via des APIs, permettant aux \u00e9quipes d&rsquo;extraire des donn\u00e9es d&rsquo;actifs dans leurs propres tableaux de bord, d&rsquo;automatiser des t\u00e2ches de nettoyage ou de le connecter \u00e0 des moteurs de politique. Elle agit non seulement comme un portail, mais comme une couche de liaison entre l&rsquo;infrastructure, l&rsquo;automatisation et la gouvernance.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La diff\u00e9rence cl\u00e9 r\u00e9side dans ce que vous devez construire vous-m\u00eame. Avec Backstage, vous mettez d&rsquo;abord en place la fondation \u2014 catalogues, actions, plugins \u2014 et vous ajoutez des fonctionnalit\u00e9s par-dessus. Avec Cycloid, la fondation est d\u00e9j\u00e0 pos\u00e9e. Vous apportez votre Terraform, vos pipelines et vos credentials cloud \u2014 et tout le reste, de l&rsquo;interface \u00e0 l&rsquo;inventaire, est d\u00e9j\u00e0 l\u00e0 qui vous attend.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Avec Backstage, vous construisez le portail et l&rsquo;automatisation. Avec Cycloid, vous vous concentrez uniquement sur l&rsquo;automatisation. Ce changement \u2014 passer de la construction du framework \u00e0 simplement brancher votre propre logique \u2014 fait une \u00e9norme diff\u00e9rence en termes de rapidit\u00e9, d&rsquo;effort et de retour sur investissement.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2><b>Conclusion<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Les portails en libre-service aident les \u00e9quipes \u00e0 avancer plus vite en donnant aux d\u00e9veloppeurs les outils pour provisionner l&rsquo;infrastructure eux-m\u00eames \u2014 de mani\u00e8re s\u00e9curis\u00e9e et coh\u00e9rente. Que vous construisiez votre propre configuration avec Backstage ou utilisiez une plateforme pr\u00eate \u00e0 l&#8217;emploi comme Cycloid, l&rsquo;objectif reste le m\u00eame : r\u00e9duire les temps d&rsquo;attente, \u00e9viter les goulots d&rsquo;\u00e9tranglement manuels et garder le contr\u00f4le entre les mains de votre \u00e9quipe DevOps.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Si vous d\u00e9butez, Backstage vous offre un contr\u00f4le total. Si vous voulez avancer vite avec moins de configuration, Cycloid vous donne tout out of the box. Choisissez le chemin qui convient \u00e0 votre \u00e9quipe \u2014 et commencez \u00e0 lib\u00e9rer vos d\u00e9veloppeurs d\u00e8s aujourd&rsquo;hui.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2><b>Foire Aux Questions<\/b><\/h2>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h3><b>Qu&rsquo;est-ce qu&rsquo;un portail en libre-service en DevOps ?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Un portail en libre-service permet aux d\u00e9veloppeurs de provisionner de l&rsquo;infrastructure ou des services eux-m\u00eames en utilisant des templates pr\u00e9-approuv\u00e9s, r\u00e9duisant la d\u00e9pendance vis-\u00e0-vis des \u00e9quipes DevOps.<\/span><\/p>\n<h3><b>Pourquoi utiliser Backstage pour construire un portail en libre-service ?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Backstage est open source, hautement extensible et s&rsquo;int\u00e8gre bien avec les outils CI\/CD \u2014 ce qui en fait un choix id\u00e9al pour exposer l&rsquo;automatisation d&rsquo;infrastructure via une interface facile \u00e0 utiliser.<\/span><\/p>\n<h3><b>Pourquoi utiliser Cycloid comme portail en libre-service ?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Cycloid offre l&rsquo;exp\u00e9rience de libre-service d\u00e9veloppeur et la gouvernance, avec une interface pr\u00eate \u00e0 l&#8217;emploi d\u00e8s la connexion. Il agit non seulement comme un portail, mais comme une couche de liaison entre l&rsquo;infrastructure, l&rsquo;automatisation et la gouvernance.<\/span><\/p>\n<h3><b>Est-il possible de faire \u00e9voluer un portail en libre-service pour une grande \u00e9quipe ?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Oui, gr\u00e2ce au contr\u00f4le d&rsquo;acc\u00e8s bas\u00e9 sur les r\u00f4les, aux templates r\u00e9utilisables et aux pratiques GitOps, les portails en libre-service peuvent \u00e9voluer de mani\u00e8re s\u00e9curis\u00e9e sur plusieurs \u00e9quipes et environnements.<\/span><\/p>\n<h3><b>Quelle est la meilleure fa\u00e7on de mettre en \u0153uvre un portail en libre-service en entreprise ?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Commencez par un cas d&rsquo;usage simple comme le provisionnement S3, d\u00e9finissez des r\u00e8gles de gouvernance claires, et \u00e9tendez progressivement avec des outils comme Backstage ou des plateformes comme Cycloid pour une adoption plus rapide.<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"featured_media":16645,"parent":0,"template":"","meta":{"_acf_changed":false},"language":[],"tags":[],"class_list":["post-25698","blogs","type-blogs","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Portails en libre-service pour d\u00e9veloppeurs : DevOps plus rapide | Cycloid<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez comment un portail en libre-service acc\u00e9l\u00e8re les workflows DevOps. Guide complet avec Backstage et Cycloid pour provisionner des infrastructures sans ticket.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Portails en libre-service pour d\u00e9veloppeurs : DevOps plus rapide | Cycloid\" \/>\n<meta property=\"og:description\" content=\"D\u00e9couvrez comment un portail en libre-service acc\u00e9l\u00e8re les workflows DevOps. Guide complet avec Backstage et Cycloid pour provisionner des infrastructures sans ticket.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-16T06:24:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Self-Service_blog-v1-scaled-2.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1609\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/\",\"url\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/\",\"name\":\"Portails en libre-service pour d\u00e9veloppeurs : DevOps plus rapide | Cycloid\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.cycloid.io\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/Self-Service_blog-v1-scaled-2.webp\",\"datePublished\":\"2025-04-25T11:47:31+00:00\",\"dateModified\":\"2026-06-16T06:24:02+00:00\",\"description\":\"D\u00e9couvrez comment un portail en libre-service acc\u00e9l\u00e8re les workflows DevOps. Guide complet avec Backstage et Cycloid pour provisionner des infrastructures sans ticket.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.cycloid.io\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/Self-Service_blog-v1-scaled-2.webp\",\"contentUrl\":\"https:\\\/\\\/www.cycloid.io\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/Self-Service_blog-v1-scaled-2.webp\",\"width\":2560,\"height\":1609},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blog\\\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blogs\",\"item\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/blogs\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Portails en libre-service : un d\u00e9veloppement plus rapide et plus simple\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.cycloid.io\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Portails en libre-service pour d\u00e9veloppeurs : DevOps plus rapide | Cycloid","description":"D\u00e9couvrez comment un portail en libre-service acc\u00e9l\u00e8re les workflows DevOps. Guide complet avec Backstage et Cycloid pour provisionner des infrastructures sans ticket.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/","og_locale":"fr_FR","og_type":"article","og_title":"Portails en libre-service pour d\u00e9veloppeurs : DevOps plus rapide | Cycloid","og_description":"D\u00e9couvrez comment un portail en libre-service acc\u00e9l\u00e8re les workflows DevOps. Guide complet avec Backstage et Cycloid pour provisionner des infrastructures sans ticket.","og_url":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/","article_modified_time":"2026-06-16T06:24:02+00:00","og_image":[{"width":2560,"height":1609,"url":"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Self-Service_blog-v1-scaled-2.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/","url":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/","name":"Portails en libre-service pour d\u00e9veloppeurs : DevOps plus rapide | Cycloid","isPartOf":{"@id":"https:\/\/www.cycloid.io\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/#primaryimage"},"image":{"@id":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Self-Service_blog-v1-scaled-2.webp","datePublished":"2025-04-25T11:47:31+00:00","dateModified":"2026-06-16T06:24:02+00:00","description":"D\u00e9couvrez comment un portail en libre-service acc\u00e9l\u00e8re les workflows DevOps. Guide complet avec Backstage et Cycloid pour provisionner des infrastructures sans ticket.","breadcrumb":{"@id":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/#primaryimage","url":"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Self-Service_blog-v1-scaled-2.webp","contentUrl":"https:\/\/www.cycloid.io\/wp-content\/uploads\/2025\/04\/Self-Service_blog-v1-scaled-2.webp","width":2560,"height":1609},{"@type":"BreadcrumbList","@id":"https:\/\/www.cycloid.io\/fr\/blog\/portails-en-libre-service-un-developpement-plus-rapide-et-plus-simple\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cycloid.io\/fr\/"},{"@type":"ListItem","position":2,"name":"Blogs","item":"https:\/\/www.cycloid.io\/fr\/blogs\/"},{"@type":"ListItem","position":3,"name":"Portails en libre-service : un d\u00e9veloppement plus rapide et plus simple"}]},{"@type":"WebSite","@id":"https:\/\/www.cycloid.io\/fr\/#website","url":"https:\/\/www.cycloid.io\/fr\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cycloid.io\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/blogs\/25698","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/blogs"}],"about":[{"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/types\/blogs"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/media\/16645"}],"wp:attachment":[{"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/media?parent=25698"}],"wp:term":[{"taxonomy":"language","embeddable":true,"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/language?post=25698"},{"taxonomy":"tags","embeddable":true,"href":"https:\/\/www.cycloid.io\/fr\/wp-json\/wp\/v2\/tags?post=25698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}