CINXE.COM
Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway Elements | Scaleway Blog
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway Elements<!-- --> <!-- --> | Scaleway Blog</title><meta name="description" content="In the last 48 hours, several Scaleway teams were on the front line to launch, in less than a day, an integral videoconferencing solution: Ensemble."/><meta property="og:url" content="https://www.scaleway.com/en/blog/building-jitsi-solution-powered-by-scaleway/"/><meta property="og:type" content="article"/><meta property="og:title" content="Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway Elements"/><meta property="og:description" content="In the last 48 hours, several Scaleway teams were on the front line to launch, in less than a day, an integral videoconferencing solution: Ensemble."/><meta property="article:author" content="https://www.scaleway.com/en/blog/author/oceane-franc"/><meta property="og:image" content="https://www.scaleway.com/scaleway-og.jpg"/><meta content="https://www.scaleway.com/scaleway-og.jpg" name="twitter:image"/><meta content="summary" name="twitter:card"/><meta content="@Scaleway" name="twitter:creator"/><meta content="Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway" name="twitter:title"/><meta content="In the last 48 hours, several Scaleway teams were on the front line to launch, in less than a day, an integral videoconferencing solution: Ensemble." name="twitter:description"/><link href="https://www.scaleway.com/en/blog/building-jitsi-solution-powered-by-scaleway/" rel="canonical"/><meta name="next-head-count" content="16"/><link rel="preload" href="/_next/static/media/a34f9d1faa5f3315-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/2d141e1a38819612-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/css/5a4aac22989312df.css" as="style"/><link rel="stylesheet" href="/_next/static/css/5a4aac22989312df.css" data-n-g=""/><link rel="preload" href="/_next/static/css/c609e7b393629430.css" as="style"/><link rel="stylesheet" href="/_next/static/css/c609e7b393629430.css" data-n-p=""/><link rel="preload" href="/_next/static/css/1ca77b1ad9949237.css" as="style"/><link rel="stylesheet" href="/_next/static/css/1ca77b1ad9949237.css" data-n-p=""/><link rel="preload" href="/_next/static/css/4ad6f1eee4386756.css" as="style"/><link rel="stylesheet" href="/_next/static/css/4ad6f1eee4386756.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-7ff391b0025b4fe3.js" defer=""></script><script src="/_next/static/chunks/framework-2de211cc2591dcf8.js" defer=""></script><script src="/_next/static/chunks/main-387e329be5509820.js" defer=""></script><script src="/_next/static/chunks/pages/_app-1496642abd45d16f.js" defer=""></script><script src="/_next/static/chunks/675-283f369b69dc812e.js" defer=""></script><script src="/_next/static/chunks/395-a7842d01211b5e87.js" defer=""></script><script src="/_next/static/chunks/278-6df85a5cbf7eb789.js" defer=""></script><script src="/_next/static/chunks/830-01fd7ba2b0b77b8e.js" defer=""></script><script src="/_next/static/chunks/102-27040e86297157d6.js" defer=""></script><script src="/_next/static/chunks/854-ca4cfc03ee0da0c6.js" defer=""></script><script src="/_next/static/chunks/367-337657c830ee0244.js" defer=""></script><script src="/_next/static/chunks/51-873605722a81cdf5.js" defer=""></script><script src="/_next/static/chunks/pages/blog/%5Bslug%5D-574c558d3f8ed907.js" defer=""></script><script src="/_next/static/85BYxc5vA-nbO8Fs_1Ijf/_buildManifest.js" defer=""></script><script src="/_next/static/85BYxc5vA-nbO8Fs_1Ijf/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global 0"></style><div class="__variable_375d66 __variable_f77ac8 container"><div class="blog"><header class="HeaderBlog_headerContainer__n3f6s full-width"><div class="container"><div class="HeaderBlog_header__CTV5V"><div class="HeaderBlog_logo__kbnMY"><a href="/en/blog/"><img alt="Scaleway Blog" loading="lazy" width="240" height="40" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/static/media/logo-blog.49246fc4.svg 1x, /_next/static/media/logo-blog.49246fc4.svg 2x" src="/_next/static/media/logo-blog.49246fc4.svg"/></a><a href="#main" class="SkipLink_link__wUma3">Skip to main content</a><a href="#footer" class="SkipLink_link__wUma3">Skip to footer section</a><button class="HeaderBlog_menuButton__PP1O7" type="button"><style data-emotion="css 3sqif5">.css-3sqif5{vertical-align:middle;fill:currentColor;height:1em;width:1em;min-width:1em;min-height:1em;}.css-3sqif5 .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-3sqif5 e1gt4cfo0"><path fill-rule="evenodd" d="M2 4.75A.75.75 0 0 1 2.75 4h14.5a.75.75 0 0 1 0 1.5H2.75A.75.75 0 0 1 2 4.75M2 10a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H2.75A.75.75 0 0 1 2 10m0 5.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75" clip-rule="evenodd"></path></svg></button></div><nav class="HeaderBlog_topNav__cNrI_ font-body-small-regular"><ul class="HeaderBlog_links__1jfH4"><li><a href="/en/blog/incidents/">Incidents</a></li><li><a href="https://www.scaleway.com/en/docs/">Docs</a></li><li><a href="https://www.scaleway.com/en/contact/">Contact</a></li></ul><ul class="HeaderBlog_language__IixQV"><li><span class="sr-only">English</span><span>en</span></li></ul></nav><nav class="HeaderBlog_bottomNav__wIZob"><a class="cta-primary cta-size-small" href="/en/">Discover Scaleway</a><div class="HeaderBlog_socials__eZU_7"><a href="https://x.com/Scaleway/"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path d="M15.203 1.875h2.757l-6.023 6.883 7.085 9.367h-5.547l-4.345-5.68-4.972 5.68H1.4l6.442-7.363-6.797-8.887h5.688l3.928 5.193zm-.967 14.6h1.527L5.903 3.438H4.264z"></path></svg><span class="sr-only">X</span></a><a href="https://slack.scaleway.com/"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path fill-rule="evenodd" d="M6.056 3.419a1.75 1.75 0 0 0 1.75 1.751H9.39a.167.167 0 0 0 .167-.166V3.419a1.75 1.75 0 1 0-3.501 0m3.5 4.392a1.75 1.75 0 0 0-1.75-1.751H3.417a1.75 1.75 0 0 0-1.75 1.751 1.75 1.75 0 0 0 1.75 1.752h4.39a1.75 1.75 0 0 0 1.75-1.752m-6.123 6.142a1.75 1.75 0 0 0 1.75-1.752v-1.585a.167.167 0 0 0-.167-.166H3.433a1.75 1.75 0 0 0-1.75 1.751 1.75 1.75 0 0 0 1.75 1.752m4.376-3.503a1.75 1.75 0 0 0-1.75 1.751v4.38a1.75 1.75 0 1 0 3.5 0V12.2a1.75 1.75 0 0 0-1.75-1.751m7.01-2.639a1.75 1.75 0 1 1 3.501 0 1.75 1.75 0 0 1-1.75 1.752h-1.584a.167.167 0 0 1-.167-.167zm-.875 0a1.75 1.75 0 1 1-3.5 0V3.42a1.75 1.75 0 1 1 3.5 0zm0 8.77a1.75 1.75 0 0 0-1.75-1.752H10.61a.167.167 0 0 0-.167.167v1.585a1.75 1.75 0 1 0 3.501 0m-3.5-4.38a1.75 1.75 0 0 0 1.75 1.752h4.39a1.75 1.75 0 0 0 1.75-1.752 1.75 1.75 0 0 0-1.75-1.751h-4.39a1.75 1.75 0 0 0-1.75 1.751" clip-rule="evenodd"></path></svg><span class="sr-only">Slack</span></a><a href="/en/blog/rss.xml"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path d="M3.75 3a.75.75 0 0 0-.75.75v.5c0 .414.336.75.75.75H4c6.075 0 11 4.925 11 11v.25c0 .414.336.75.75.75h.5a.75.75 0 0 0 .75-.75V16C17 8.82 11.18 3 4 3z"></path><path d="M3 8.75A.75.75 0 0 1 3.75 8H4a8 8 0 0 1 8 8v.25a.75.75 0 0 1-.75.75h-.5a.75.75 0 0 1-.75-.75V16a6 6 0 0 0-6-6h-.25A.75.75 0 0 1 3 9.25zM7 15a2 2 0 1 1-4 0 2 2 0 0 1 4 0"></path></svg><span class="sr-only">RSS</span></a></div></nav></div></div></header><main class="main" id="main"><nav class="TopBar_navBar__jEc9M"><a class="TopBar_link__c_MXa" href="/en/blog/"><svg width="16" height="16" aria-hidden="true"><use xlink:href="/svg/sprite.svg#all-items"></use></svg>all</a><a class="TopBar_link__c_MXa" href="/en/blog/build/">build</a><a class="TopBar_link__c_MXa TopBar_isActive__bqGIp" href="/en/blog/deploy/">deploy</a><a class="TopBar_link__c_MXa" href="/en/blog/scale/">scale</a></nav><section class="Hero_wrapper__l0O5u"><div class="Hero_content__WhyjP"><h1 class="font-heading-secondary-title Hero_title__64Z8x">Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway</h1><div class="Hero_footer__KFZYB"><div class="blogCategory"><a class="cta-inline cta-size-big" href="/en/blog/deploy/">Deploy</a></div><span class="blogDot Hero_dot__OjyBJ" aria-hidden="true">•</span><address class="blogAuthor"><a class="cta-inline cta-size-big" href="/en/blog/author/oceane-franc/">Océane Franc</a></address><span class="blogDot Hero_dot__OjyBJ" aria-hidden="true">•</span><div><time dateTime="2020-03-23">23/03/20</time><span class="blogDot" aria-hidden="true">•</span><span>7 min read</span></div></div></div><div class="Hero_imageWrapper__tMCgD"><img alt="" loading="lazy" width="512" height="320" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp 1x, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp 2x" src="https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp"/></div></section><div class="PostPage_post__sMook"><div class="TableOfContent_tableOfContent__e65l6"><nav aria-describedby="tableofcontent-main"><h2 class="font-body-small-bold">Table of contents</h2><ul><li class="TableOfContent_selected__VR351"><a href="#main">Introduction</a></li><li class=""><a href="#how-it-all-started">How it All Started?</a></li><li class=""><a href="#how-does-it-work">How Does it Work?</a></li><li class=""><a href="#scaleway-terraform-module">Scaleway Terraform Module</a></li><li class=""><a href="#scaleway-jitsi-image">Scaleway Jitsi Image</a></li><li class=""><a href="#scaleway-registry">Scaleway Registry</a></li><li class=""><a href="#scaleway-load-balancer">Scaleway Load Balancer</a></li><li class=""><a href="#scaleway-placement-groups">Scaleway Placement Groups</a></li><li class=""><a href="#scaleway-security-groups">Scaleway Security Groups</a></li><li class=""><a href="#scaleway-domains">Scaleway Domains</a></li><li class=""><a href="#its-working-like-a-charm">It's Working like a Charm</a></li><li class=""><a href="#whats-next">What's Next?</a></li></ul></nav></div><div class="BlogRichText_blogRichText__zXeTD"><p>In the last 48 hours, several Scaleway teams were on the front line to launch, in less than a day, an integral videoconferencing solution: <strong><a href="https://ensemble.scaleway.com">Ensemble</a></strong>.<br/> <strong>Free, open-source and sovereign, Jitsi VideoConferencing powered by Scaleway will be available for the duration of the Covid-19 crisis!</strong><br/> You will be able to use this solution to keep in touch with your family and friends, maintain your business, interact with your customers, meet your patients or prepare your exams with other students.</p> <div class="Media_wrapper__eT8E7"><figure class="Media_figure__D04Zg"><div><img alt="" loading="lazy" decoding="async" data-nimg="fill" class="Media_image__JJOCm" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:contain;color:transparent" sizes="(min-width: 1200px) 40vw, (min-width: 1024px) 50vw, 100vw" srcSet="https://scaleway.com/cdn-cgi/image/width=256/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 256w, https://scaleway.com/cdn-cgi/image/width=384/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 384w, https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 640w, https://scaleway.com/cdn-cgi/image/width=750/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 750w, https://scaleway.com/cdn-cgi/image/width=828/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 828w, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 1080w, https://scaleway.com/cdn-cgi/image/width=1200/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 1200w, https://scaleway.com/cdn-cgi/image/width=1920/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 1920w, https://scaleway.com/cdn-cgi/image/width=2048/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 2048w, https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp 3840w" src="https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp"/></div></figure></div> <h2 id="how-it-all-started">How it All Started?</h2> <p>Monday 8am we decided to join the collective effort against #COVID19. By deploying <a href="https://jitsi.org/jitsi-meet/">Jitsi Meet</a>, an open-source video conferencing solution providing secured virtual rooms with high video and audio quality, on more than one hundred Scaleway instances, we aimed to facilitate remote communication for all amid the COVID-19 pandemic.</p> <h2 id="how-does-it-work">How Does it Work?</h2> <p>In a nutshell, <a href="https://ensemble.scaleway.com/">ensemble.scaleway.com</a> aims at providing Jitsi servers. The number of people in need of a scalable videoconference solution being very high at the moment, it was our responsibility to find an alternative that was able to handle a significant load of video bridge requests.<br/> As shown in the architecture diagram below, all Jitsi instances are constantly monitored to keep track of their capacity. This allows us to ensure that each user is provided with the least-used instance to create a virtual room and start a call.</p> <div class="Media_wrapper__eT8E7"><figure class="Media_figure__D04Zg"><div><img alt="" loading="lazy" decoding="async" data-nimg="fill" class="Media_image__JJOCm" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:contain;color:transparent" sizes="(min-width: 1200px) 40vw, (min-width: 1024px) 50vw, 100vw" srcSet="https://scaleway.com/cdn-cgi/image/width=256/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 256w, https://scaleway.com/cdn-cgi/image/width=384/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 384w, https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 640w, https://scaleway.com/cdn-cgi/image/width=750/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 750w, https://scaleway.com/cdn-cgi/image/width=828/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 828w, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 1080w, https://scaleway.com/cdn-cgi/image/width=1200/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 1200w, https://scaleway.com/cdn-cgi/image/width=1920/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 1920w, https://scaleway.com/cdn-cgi/image/width=2048/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 2048w, https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp 3840w" src="https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp"/></div></figure></div> <p>The stateless API is composed of a front website in React and an API that will query a Prometheus (every 30 seconds) to get a list of all the Jitsi servers available and their current CPU usage.<br/> The web application then selects the Jitsi server that has the most CPU available and returns the URL to the user. With that URL, a user can easily connect to the Jitsi server and start enjoying the call with an optimal sound and video quality.<br/> All Jitsi servers are deployed on <a href="https://www.scaleway.com/en/">Scaleway Instances</a> which can hold a large number of concurrent video bridges.<br/> Now that we explained the general architecture and the typical user workflow of this application, let's see how it is deployed using <em>infrastructure as code technologies.</em></p> <h2 id="scaleway-terraform-module">Scaleway Terraform Module</h2> <p><a href="https://www.terraform.io/">Terraform</a> is an infrastructure tool that manages cloud resources in a declarative paradigm. We decided to use the <a href="https://www.terraform.io/docs/providers/scaleway/index.html">Scaleway Terraform Provider</a> to manage all our infrastructure from a single versioned place. All changes applied to our infrastructure are tracked in a git repository.</p> <p>To ensure consistency across concurrent Terraform execution, the terraform state is persisted in a Scaleway Database PostgreSQL managed instance. For that, we used the <a href="https://www.terraform.io/docs/backends/types/pg.html">pg backend in Terraform</a>.</p> <p>We created all the required instances to make this application run:</p> <ul> <li>The most important are the Jitsi servers. At the moment, we created more than 100 of those ( <code class="Code_codeInline__OLfWO">DEV1-L</code> type). These instances run the Jitsi videoconference solution.</li> <li>The instance running the Prometheus. Prometheus scraps the state of each Jitsi state and, in particular, the CPU usage of each Jitsi server.</li> <li>The instances running the APIs. The API instances query the Prometheus to identify what are the CPU usage on all Jitsi servers and return them to the web application.</li> </ul> <p>These constitute the infrastructure of <a href="http://ensemble.scaleway.com">ensemble.scaleway.com</a>. Now we are going to complete this Terraform module by enabling those instances to serve our application.</p> <h2 id="scaleway-jitsi-image">Scaleway Jitsi Image</h2> <p>When creating an instance, you have to select or <a href="https://www.scaleway.com/en/docs/create-an-image-from-my-server/">create an image</a>. In each cloud deployment, instances are booted with a specific cloud image that is designed to meet the specific requirements of the instance.</p> <p>First, we created a base image called base, which was the starting point for all the others. On this base image, we installed the requirements to run containers with Docker, <code class="Code_codeInline__OLfWO">docker-compose</code> and a <code class="Code_codeInline__OLfWO">node_exporter</code> that is used by our Prometheus monitoring system to know, among other information, the CPU usage of the machine.</p> <p>From the base image, we then created a Jitsi image using the official docker compose distribution: <a href="https://github.com/jitsi/docker-jitsi-meet/">docker-jitsi-meet</a>. We also added an <a href="https://github.com/nginxinc/nginx-prometheus-exporter">Nginx Prometheus exporter</a> on <code class="Code_codeInline__OLfWO">docker-jitsi-meet docker-compose</code> for monitoring purposes.</p> <p>When a Jitsi instance boots with this image, a <code class="Code_codeInline__OLfWO">docker-compose</code> will start and the Jitsi server which is running as a container will automatically start working as well.</p> <p>Note that the base and Jitsi images are created with Ansible playbooks. It allows to easily recreate images when needed.<br/> Finally, we created a <code class="Code_codeInline__OLfWO">front</code> container image which gathers the web application code (<code class="Code_codeInline__OLfWO">React</code>) and the API code (<code class="Code_codeInline__OLfWO">Node.js</code>). This image will run inside containers that <code class="Code_codeInline__OLfWO">docker-compose</code> will pull from a private Scaleway registry.</p> <h2 id="scaleway-registry">Scaleway Registry</h2> <p>The base image aims at providing the system-wide requirements such as the operating system and other basic components as docker, <code class="Code_codeInline__OLfWO">docker-composes</code>, <code class="Code_codeInline__OLfWO">node_export</code>... However, we needed to be able to deploy new versions of our applications without rebooting an instance with a new image. As a result, we decoupled the base image from the application that was containerized.</p> <p>The API and the React website which are bundled in the same container image are hosted on a <a href="https://www.scaleway.com/en/container-registry/">Scaleway private registry</a>. Once stored on the registry, images can be pulled in the instance by the docker daemon controlled by <code class="Code_codeInline__OLfWO">docker-compose</code> to run the application. That comes in very handy when we need to deploy a new version of our API after a bug fix or a feature enhancement as we only need to push the new container image to the registry and tell <code class="Code_codeInline__OLfWO">docker-compose</code> to use the new version.</p> <p>Now that our applications are deployed, let's see how we can make our API server reliable using a Load Balancer.</p> <h2 id="scaleway-load-balancer">Scaleway Load Balancer</h2> <p><a href="https://www.scaleway.com/en/load-balancer/">Load Balancers</a> are highly available and fully-managed instances that allow to distribute the workload among your various services. They ensure the scaling of all your applications while securing their continuous availability, even in the event of heavy traffic. Load Balancers are built to use an Internet-facing front-end server to shuttle information to and from backend servers. They provide a dedicated public IP address and forward requests automatically to one of the backend servers based on resource availability.</p> <p>In the context of Jitsi, we used our Load Balancer to automatically forward requests to our API servers based on resource availability. Our API servers are the ones providing information about the current load of each Jitsi sever to ensure that the user is provided with the most available instance.</p> <p>Load Balancer can also allow us to add more API instances if the existing API instances are too busy to handle the load. In addition, they can evict a faulty API server in case it is not able to answer requests anymore for whichever reason. We even added an extra reliability guarantee on our API instances by using Scaleway Placement Groups.</p> <h2 id="scaleway-placement-groups">Scaleway Placement Groups</h2> <p><a href="https://www.scaleway.com/en/docs/configuring-clusters-using-placement-groups/">Placement Groups</a> allow you to organize instances into groups, distributing the load, and ensuring maximum availability. Placement groups have two operating modes. The first one is called <code class="Code_codeInline__OLfWO">max_availability</code>. It ensures that all the compute instances that belong to the same group will not run on the same underlying hardware. The second one is called <code class="Code_codeInline__OLfWO">low_latency</code> and does the exact opposite: it brings compute instances closer together to achieve higher network throughput. In the context of our application, we want to ensure that the API servers and Jitsi servers are as available as possible.</p> <p>We enable the <code class="Code_codeInline__OLfWO">max_availability</code> mode across our two API servers so they are not on the same underlying hypervisor. Now that we have a reliable deployment of our API server, let's see how to secure the connection to the different ports available on those machines using Scaleway Security Groups.</p> <h2 id="scaleway-security-groups">Scaleway Security Groups</h2> <p><a href="https://www.scaleway.com/en/docs/how-to-activate-a-stateful-cloud-firewall/">Security groups</a> enable you to create rules that either drop or allow incoming traffic from or to certain ports of your server. Typically it establishes a barrier between a trusted (internal) network and untrusted external network, like the Internet. The security group configuration is based on a set of inbound and outbound rules. We applied security groups to all the components of our architecture.</p> <p>On the API instances, we only allowed <code class="Code_codeInline__OLfWO">HTTPS/HTTP</code> connection and SSH remote access connection.<br/> On the Jitsi instances, only SSH and ports that are required for Jitsi to work are allowed. All the others are blocked.</p> <p>Let's complete this deployment by adding human understandable domain names for each component of this application.</p> <h2 id="scaleway-domains">Scaleway Domains</h2> <p>Finally, we wanted to manage the DNS record for each of the instances: API, Jitsi servers and Prometheus). DNS records make a domain name such as <code class="Code_codeInline__OLfWO">h-5660.ensemble.scaleway.com</code> resolve to the correct Jitsi instance across all users.<br/> We use Scaleway domains to manage the DNS record for the whole ensemble.scaleway.com solution. When provisionning a new Jitsi server in Terraform, we automatically generate a DNS record for this Jitsi instance.</p> <p>We generated a wildcard certificate for all subdomains of ensemble.scaleway.com. Each Jitsi server gets its certificate that is used by their Nginx server to handle HTTPS connections.</p> <p>While currently in early access, you can already register for <a href="https://www.scaleway.com/en/betas/#domains">Scaleway Domains </a>.</p> <h2 id="its-working-like-a-charm">It's Working like a Charm</h2> <p>The <a href="https://ensemble.scaleway.com/">ensemble.scaleway.com</a> solution was built and deployed in a flash thanks to joint forces, and the first reactions are already very positive. The solution is widely used and the number of rooms created keeps increasing. In the last 8 hours, we monitored more than <strong>800 active Jitsi connections</strong>, <strong>1700 Jitsi rooms created</strong> and <strong>more than 6000 page views of ensemble.scaleway.com from all over the world.</strong></p> <div class="Media_wrapper__eT8E7"><figure class="Media_figure__D04Zg"><div><img alt="" loading="lazy" decoding="async" data-nimg="fill" class="Media_image__JJOCm" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;object-fit:contain;color:transparent" sizes="(min-width: 1200px) 40vw, (min-width: 1024px) 50vw, 100vw" srcSet="https://scaleway.com/cdn-cgi/image/width=256/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 256w, https://scaleway.com/cdn-cgi/image/width=384/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 384w, https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 640w, https://scaleway.com/cdn-cgi/image/width=750/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 750w, https://scaleway.com/cdn-cgi/image/width=828/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 828w, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 1080w, https://scaleway.com/cdn-cgi/image/width=1200/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 1200w, https://scaleway.com/cdn-cgi/image/width=1920/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 1920w, https://scaleway.com/cdn-cgi/image/width=2048/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 2048w, https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp 3840w" src="https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp"/></div></figure></div> <h2 id="whats-next">What's Next?</h2> <p>We are still working actively on this project to provide support to as many people as possible in this challenging period. In particular, we will work to make this project and the code used to create this infrastructure available to all as soon as possible.<br/> In the meantime, if you would like to set up your own Jitsi server, feel free to check our tutorials on how to install Jitsi on your server, whether you are using <a href="https://www.scaleway.com/en/docs/setting-up-jitsi-meet-videoconferencing-on-debian-buster/">Debian 10</a> or <a href="https://www.scaleway.com/en/docs/installing-jitsi-meet-videoconferencing-ubuntu-bionic/">Ubuntu 18.04</a>.</p></div></div><section class="ExtraPosts_container__0fO7Q"><h2 class="font-heading-highlighted ExtraPosts_title__hqJSu">Recommended articles</h2><div class="ExtraPosts_articles__4oTri"><article class="RecommendedArticleCard_articleCard__L95dV"><div class="blogImage RecommendedArticleCard_img__lFn5u"><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 640w, https://scaleway.com/cdn-cgi/image/width=750/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 750w, https://scaleway.com/cdn-cgi/image/width=828/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 828w, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 1080w, https://scaleway.com/cdn-cgi/image/width=1200/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 1200w, https://scaleway.com/cdn-cgi/image/width=1920/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 1920w, https://scaleway.com/cdn-cgi/image/width=2048/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 2048w, https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp 3840w" src="https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp"/></div><div class="RecommendedArticleCard_contentContainer__83Lgz"><h2 class="font-heading-title blogArticleTitle RecommendedArticleCard_heading___OIAO"><a class="breakout-link" href="/en/blog/infrastructure-as-code/">Infrastructure as Code</a></h2><div class="RecommendedArticleCard_excerpt__Gsphk" role="doc-subtitle"><div class="RichText_scwRichtextStyle__xoOiq"><p class="font-body-regular">Infrastructure as Code (also known as IaC) is a type of configuration that automates the managing and provisioning of the infrastructure through code - without going through manual processes.</p></div></div><div class="RecommendedArticleCard_footer__avFIY"><div class="blogCategory"><a href="/en/blog/deploy/">Deploy</a></div><span class="blogDot RecommendedArticleCard_dot__4FuRq" aria-hidden="true">•</span><address class="blogAuthor"><a href="/en/blog/author/remy-leone/">Rémy Léone</a></address><span class="blogDot RecommendedArticleCard_dot__4FuRq" aria-hidden="true">•</span><div><time dateTime="2022-07-04">04/07/22</time><span class="blogDot" aria-hidden="true">•</span><span>6 min read</span></div></div><div aria-label="Tags list. Click to choose as filter." class="Tags_tags__UDbwl"><span class="Tag_tag__JS3kY">Infrastructure-as-code</span></div></div></article></div><div class="ExtraPosts_articles__4oTri"><article class="RecommendedArticleCard_articleCard__L95dV"><div class="blogImage RecommendedArticleCard_img__lFn5u"><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 640w, https://scaleway.com/cdn-cgi/image/width=750/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 750w, https://scaleway.com/cdn-cgi/image/width=828/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 828w, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 1080w, https://scaleway.com/cdn-cgi/image/width=1200/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 1200w, https://scaleway.com/cdn-cgi/image/width=1920/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 1920w, https://scaleway.com/cdn-cgi/image/width=2048/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 2048w, https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp 3840w" src="https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp"/></div><div class="RecommendedArticleCard_contentContainer__83Lgz"><h2 class="font-heading-title blogArticleTitle RecommendedArticleCard_heading___OIAO"><a class="breakout-link" href="/en/blog/infrastructure-as-code-scaleway-internal-usage/">Infrastructure as Code @Scaleway (2/3) - Internal usage</a></h2><div class="RecommendedArticleCard_excerpt__Gsphk" role="doc-subtitle"><div class="RichText_scwRichtextStyle__xoOiq"><p class="font-body-regular">In this article, we will review the different tools we use and how our product teams are using them to deliver your cloud resources as efficiently as possible</p></div></div><div class="RecommendedArticleCard_footer__avFIY"><div class="blogCategory"><a href="/en/blog/scale/">Scale</a></div><span class="blogDot RecommendedArticleCard_dot__4FuRq" aria-hidden="true">•</span><address class="blogAuthor"><a href="/en/blog/author/remy-leone/">Rémy Léone</a></address><span class="blogDot RecommendedArticleCard_dot__4FuRq" aria-hidden="true">•</span><div><time dateTime="2019-07-24">24/07/19</time><span class="blogDot" aria-hidden="true">•</span><span>7 min read</span></div></div><div aria-label="Tags list. Click to choose as filter." class="Tags_tags__UDbwl"><span class="Tag_tag__JS3kY">Infrastructure-as-code</span><span class="Tag_tag__JS3kY">Scaleway</span></div></div></article></div><div class="ExtraPosts_articles__4oTri"><article class="RecommendedArticleCard_articleCard__L95dV"><div class="blogImage RecommendedArticleCard_img__lFn5u"><img alt="" loading="lazy" decoding="async" data-nimg="fill" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="https://scaleway.com/cdn-cgi/image/width=640/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 640w, https://scaleway.com/cdn-cgi/image/width=750/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 750w, https://scaleway.com/cdn-cgi/image/width=828/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 828w, https://scaleway.com/cdn-cgi/image/width=1080/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 1080w, https://scaleway.com/cdn-cgi/image/width=1200/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 1200w, https://scaleway.com/cdn-cgi/image/width=1920/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 1920w, https://scaleway.com/cdn-cgi/image/width=2048/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 2048w, https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp 3840w" src="https://scaleway.com/cdn-cgi/image/width=3840/https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp"/></div><div class="RecommendedArticleCard_contentContainer__83Lgz"><h2 class="font-heading-title blogArticleTitle RecommendedArticleCard_heading___OIAO"><a class="breakout-link" href="/en/blog/infrastructure-as-code-supported-tools-3-3/">Infrastructure as code - Supported tools</a></h2><div class="RecommendedArticleCard_excerpt__Gsphk" role="doc-subtitle"><div class="RichText_scwRichtextStyle__xoOiq"><p class="font-body-regular">In this final article of our Infrastructure-as-code series, we will see what kind of infrastructure-as-code tooling you can use with your Scaleway resources.</p></div></div><div class="RecommendedArticleCard_footer__avFIY"><div class="blogCategory"><a href="/en/blog/deploy/">Deploy</a></div><span class="blogDot RecommendedArticleCard_dot__4FuRq" aria-hidden="true">•</span><address class="blogAuthor"><a href="/en/blog/author/remy-leone/">Rémy Léone</a></address><span class="blogDot RecommendedArticleCard_dot__4FuRq" aria-hidden="true">•</span><div><time dateTime="2021-11-23">23/11/21</time><span class="blogDot" aria-hidden="true">•</span><span>8 min read</span></div></div><div aria-label="Tags list. Click to choose as filter." class="Tags_tags__UDbwl"><span class="Tag_tag__JS3kY">Infrastructure-as-code</span></div></div></article></div></section></main><footer id="footer" class="Footer_footer__dXXGl full-width"><div class="container"><div class="Footer_categories__GKzcP"><div><div class="Footer_title__SsUPi">Products</div><ul><li><a class="cta-inline cta-size-big" href="/en/all-products/">All Products</a></li><li><a class="cta-inline cta-size-big" href="/en/betas/">Betas</a></li><li><a class="cta-inline cta-size-big" href="/en/bare-metal/">Bare Metal</a></li><li><a class="cta-inline cta-size-big" href="/en/dedibox/">Dedibox</a></li><li><a class="cta-inline cta-size-big" href="/en/elastic-metal/">Elastic Metal</a></li><li><a class="cta-inline cta-size-big" href="/en/virtual-instances/">Compute Instances</a></li><li><a class="cta-inline cta-size-big" href="/en/gpu-instances/">GPU</a></li><li><a class="cta-inline cta-size-big" href="/en/containers/">Containers</a></li><li><a class="cta-inline cta-size-big" href="/en/object-storage/">Object Storage</a></li><li><a class="cta-inline cta-size-big" href="/en/block-storage/">Block Storage</a></li></ul></div><div><div class="Footer_title__SsUPi">Resources</div><ul><li><a href="https://www.scaleway.com/en/docs/" class="cta-inline cta-size-big">Documentation</a></li><li><a href="https://www.scaleway.com/en/docs/changelog/" class="cta-inline cta-size-big">Changelog</a></li><li><a class="cta-inline cta-size-big" href="https://www.scaleway.com/en/blog/">Blog</a></li><li><a href="https://feature-request.scaleway.com/" class="cta-inline cta-size-big">Feature Requests</a></li><li><a href="https://slack.scaleway.com/" class="cta-inline cta-size-big">Slack Community</a></li></ul></div><div><div class="Footer_title__SsUPi">Contact</div><ul><li><a href="https://console.scaleway.com/support/create/" class="cta-inline cta-size-big">Create a ticket</a></li><li><a href="https://console.scaleway.com/support/abuses/create/" class="cta-inline cta-size-big">Report Abuse</a></li><li><a href="https://status.scaleway.com/" class="cta-inline cta-size-big">Status</a></li><li><a href="https://console.online.net/fr/login" class="cta-inline cta-size-big">Dedibox Console online.net</a></li><li><a class="cta-inline cta-size-big" href="/en/assistance/">Support plans</a></li><li><a href="https://ultraviolet.scaleway.com/6dd9b5c45/p/62b4e2-ultraviolet" class="cta-inline cta-size-big">Brand resources</a></li></ul></div><div><div class="Footer_title__SsUPi">Company</div><ul><li><a class="cta-inline cta-size-big" href="/en/about-us/">About us</a></li><li><a class="cta-inline cta-size-big" href="/en/events/">Events</a></li><li><a href="https://www.scaleway.com/en/marketplace/" class="cta-inline cta-size-big">Marketplace</a></li><li><a class="cta-inline cta-size-big" href="/en/environmental-leadership/">Environment </a></li><li><a class="cta-inline cta-size-big" href="/en/social-responsibility/">Social Responsibility</a></li><li><a class="cta-inline cta-size-big" href="/en/security-and-resilience/">Security</a></li><li><a class="cta-inline cta-size-big" href="/en/shared-responsibility-model/">Shared Responsibility Model</a></li><li><a class="cta-inline cta-size-big" href="/en/news/">News</a></li><li><a class="cta-inline cta-size-big" href="/en/careers/">Careers</a></li><li><a class="cta-inline cta-size-big" href="/en/scaleway-learning/">Scaleway Learning</a></li><li><a class="cta-inline cta-size-big" href="/en/customer-testimonials/">Client Success Stories</a></li><li><style data-emotion="css je8g23">.css-je8g23{pointer-events:none;}</style><style data-emotion="css 1ra7yv3">.css-1ra7yv3{background-color:transparent;border:none;padding:0;color:#34a8ff;-webkit-text-decoration:underline;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;text-decoration-color:transparent;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:text-decoration-color 250ms ease-out;transition:text-decoration-color 250ms ease-out;gap:8px;position:relative;cursor:pointer;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;font-size:16px;font-family:Inter,Asap,sans-serif;font-weight:500;letter-spacing:0;line-height:24px;paragraph-spacing:0;text-case:none;}.css-1ra7yv3 .e1afnb7a2{-webkit-transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;}.css-1ra7yv3 >*{pointer-events:none;}.css-1ra7yv3:hover,.css-1ra7yv3:focus{outline:none;-webkit-text-decoration:underline;text-decoration:underline;text-decoration-thickness:1px;color:#6fc2ff;text-decoration-color:#6fc2ff;}.css-1ra7yv3:hover .e1afnb7a2,.css-1ra7yv3:focus .e1afnb7a2{-webkit-transform:translate(-4px, 0);-moz-transform:translate(-4px, 0);-ms-transform:translate(-4px, 0);transform:translate(-4px, 0);}.css-1ra7yv3[data-variant='inline']{-webkit-text-decoration:underline;text-decoration:underline;text-decoration-thickness:1px;}.css-1ra7yv3:hover::after,.css-1ra7yv3:focus::after{background-color:#34a8ff;}.css-1ra7yv3:active{text-decoration-thickness:2px;}</style><a href="https://labs.scaleway.com/en/" target="_blank" rel="noopener noreferrer" class="css-1ra7yv3 e1afnb7a0" variant="bodyStrong" data-variant="standalone">Labs<style data-emotion="css ajnoa3">.css-ajnoa3{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;padding-bottom:4px;}</style><span class="css-ajnoa3 e1afnb7a1"><style data-emotion="css 1udvifh">.css-1udvifh{vertical-align:middle;fill:currentColor;height:14px;width:14px;min-width:14px;min-height:14px;}.css-1udvifh .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="e1afnb7a2 css-1udvifh e1gt4cfo0"><path fill-rule="evenodd" d="M4.25 6.5a.75.75 0 0 0-.75.75v8.5c0 .414.336.75.75.75h8.5a.75.75 0 0 0 .75-.75v-4a.75.75 0 0 1 1.5 0v4A2.25 2.25 0 0 1 12.75 18h-8.5A2.25 2.25 0 0 1 2 15.75v-8.5A2.25 2.25 0 0 1 4.25 5h5a.75.75 0 0 1 0 1.5z" clip-rule="evenodd"></path><path fill-rule="evenodd" d="M6.194 13.753a.75.75 0 0 0 1.06.053L16.5 5.44v2.81a.75.75 0 0 0 1.5 0v-4.5a.75.75 0 0 0-.75-.75h-4.5a.75.75 0 0 0 0 1.5h2.553l-9.056 8.194a.75.75 0 0 0-.053 1.06" clip-rule="evenodd"></path></svg></span></a></li></ul></div></div><div class="Footer_socialsContainer__FuhFv"><a href="/en/"><img alt="Scaleway" loading="lazy" width="166" height="32" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/static/media/logo.7e2996cb.svg 1x, /_next/static/media/logo.7e2996cb.svg 2x" src="/_next/static/media/logo.7e2996cb.svg"/></a><div><p>Follow us</p><a class="Footer_socialLink__9UK2B" href="https://x.com/Scaleway/"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path d="M15.203 1.875h2.757l-6.023 6.883 7.085 9.367h-5.547l-4.345-5.68-4.972 5.68H1.4l6.442-7.363-6.797-8.887h5.688l3.928 5.193zm-.967 14.6h1.527L5.903 3.438H4.264z"></path></svg><span class="sr-only">x</span></a><a class="Footer_socialLink__9UK2B" href="https://slack.scaleway.com/"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path fill-rule="evenodd" d="M6.056 3.419a1.75 1.75 0 0 0 1.75 1.751H9.39a.167.167 0 0 0 .167-.166V3.419a1.75 1.75 0 1 0-3.501 0m3.5 4.392a1.75 1.75 0 0 0-1.75-1.751H3.417a1.75 1.75 0 0 0-1.75 1.751 1.75 1.75 0 0 0 1.75 1.752h4.39a1.75 1.75 0 0 0 1.75-1.752m-6.123 6.142a1.75 1.75 0 0 0 1.75-1.752v-1.585a.167.167 0 0 0-.167-.166H3.433a1.75 1.75 0 0 0-1.75 1.751 1.75 1.75 0 0 0 1.75 1.752m4.376-3.503a1.75 1.75 0 0 0-1.75 1.751v4.38a1.75 1.75 0 1 0 3.5 0V12.2a1.75 1.75 0 0 0-1.75-1.751m7.01-2.639a1.75 1.75 0 1 1 3.501 0 1.75 1.75 0 0 1-1.75 1.752h-1.584a.167.167 0 0 1-.167-.167zm-.875 0a1.75 1.75 0 1 1-3.5 0V3.42a1.75 1.75 0 1 1 3.5 0zm0 8.77a1.75 1.75 0 0 0-1.75-1.752H10.61a.167.167 0 0 0-.167.167v1.585a1.75 1.75 0 1 0 3.501 0m-3.5-4.38a1.75 1.75 0 0 0 1.75 1.752h4.39a1.75 1.75 0 0 0 1.75-1.752 1.75 1.75 0 0 0-1.75-1.751h-4.39a1.75 1.75 0 0 0-1.75 1.751" clip-rule="evenodd"></path></svg><span class="sr-only">slack</span></a><a class="Footer_socialLink__9UK2B" href="https://www.instagram.com/scaleway/"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path fill-rule="evenodd" d="M1.667 9.719c0-2.848 0-4.272.563-5.356A5 5 0 0 1 4.362 2.23c1.084-.563 2.507-.563 5.355-.563h.566c2.848 0 4.272 0 5.355.563a5 5 0 0 1 2.132 2.133c.563 1.084.563 2.508.563 5.356v.566c0 2.848 0 4.272-.562 5.356a5 5 0 0 1-2.133 2.133c-1.083.563-2.507.563-5.355.563h-.566c-2.848 0-4.271 0-5.355-.563a5 5 0 0 1-2.132-2.133c-.563-1.084-.563-2.508-.563-5.356zm3.67.284a4.668 4.668 0 1 0 9.336 0 4.668 4.668 0 0 0-9.336 0m7.697 0a3.03 3.03 0 1 1-6.06 0 3.03 3.03 0 1 1 6.06 0m2.912-4.854a1.09 1.09 0 1 1-2.18 0 1.09 1.09 0 0 1 2.18 0" clip-rule="evenodd"></path></svg><span class="sr-only">instagram</span></a><a class="Footer_socialLink__9UK2B" href="https://www.linkedin.com/company/scaleway/"><style data-emotion="css 1fr75dr">.css-1fr75dr{vertical-align:middle;fill:currentColor;height:20px;width:20px;min-width:20px;min-height:20px;}.css-1fr75dr .fillStroke{stroke:currentColor;fill:none;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="css-1fr75dr e1gt4cfo0"><path fill-rule="evenodd" d="M18.332 18.166a.167.167 0 0 1-.167.167h-3.09a.167.167 0 0 1-.167-.167V12.5c0-1.599-.608-2.492-1.874-2.492-1.377 0-2.096.93-2.096 2.492v5.666a.167.167 0 0 1-.167.167H7.804a.167.167 0 0 1-.166-.167V7.39c0-.092.074-.167.166-.167h2.967c.092 0 .167.075.167.167v.67c0 .174.275.26.39.131a3.88 3.88 0 0 1 2.96-1.307c2.357 0 4.044 1.439 4.044 4.415zM3.7 5.767a2.043 2.043 0 0 1-2.035-2.05c0-1.132.91-2.05 2.035-2.05s2.034.918 2.034 2.05-.91 2.05-2.034 2.05m-1.704 12.4c0 .091.074.166.166.166H5.27a.167.167 0 0 0 .167-.167V7.39a.167.167 0 0 0-.167-.167H2.163a.167.167 0 0 0-.166.167z" clip-rule="evenodd"></path></svg><span class="sr-only">linkedIn</span></a></div></div><ul class="Footer_sublinks__Mjpw0"><li><a href="/en/contracts/">Contracts</a></li><li><a href="/en/legal-notice/">Legal Notice</a></li><li><a href="/en/privacy-policy/">Privacy Policy</a></li><li><a href="/en/cookie/">Cookie</a></li><li><a href="https://security.scaleway.com">Security Measures</a></li></ul><span class="Footer_brand__qv1gM">© 1999-<!-- -->2024<!-- --> - Scaleway SAS</span></div></footer></div><div id="portal"></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"post":{"id":204,"attributes":{"title":"building-jitsi-solution-powered-by-scaleway","path":"building-jitsi-solution-powered-by-scaleway/","description":"In the last 48 hours, several Scaleway teams were on the front line to launch, in less than a day, an integral videoconferencing solution: **[Ensemble](https://ensemble.scaleway.com)**. \n**Free, open-source and sovereign, Jitsi VideoConferencing powered by Scaleway will be available for the duration of the Covid-19 crisis!** \nYou will be able to use this solution to keep in touch with your family and friends, maintain your business, interact with your customers, meet your patients or prepare your exams with other students.\n\n![](https://www-uploads.scaleway.com/blog-preview-covid-small--1-.webp)\n\n## How it All Started? \n\nMonday 8am we decided to join the collective effort against #COVID19\\. By deploying [Jitsi Meet](https://jitsi.org/jitsi-meet/), an open-source video conferencing solution providing secured virtual rooms with high video and audio quality, on more than one hundred Scaleway instances, we aimed to facilitate remote communication for all amid the COVID-19 pandemic.\n\n## How Does it Work?\n\nIn a nutshell, [ensemble.scaleway.com](https://ensemble.scaleway.com/) aims at providing Jitsi servers. The number of people in need of a scalable videoconference solution being very high at the moment, it was our responsibility to find an alternative that was able to handle a significant load of video bridge requests. \nAs shown in the architecture diagram below, all Jitsi instances are constantly monitored to keep track of their capacity. This allows us to ensure that each user is provided with the least-used instance to create a virtual room and start a call.\n\n![](https://www-uploads.scaleway.com/blog-Deploiement-Jitsi-V7.webp)\n\nThe stateless API is composed of a front website in React and an API that will query a Prometheus (every 30 seconds) to get a list of all the Jitsi servers available and their current CPU usage. \nThe web application then selects the Jitsi server that has the most CPU available and returns the URL to the user. With that URL, a user can easily connect to the Jitsi server and start enjoying the call with an optimal sound and video quality. \nAll Jitsi servers are deployed on [Scaleway Instances](https://www.scaleway.com/en/) which can hold a large number of concurrent video bridges. \nNow that we explained the general architecture and the typical user workflow of this application, let's see how it is deployed using _infrastructure as code technologies._\n\n## Scaleway Terraform Module\n\n[Terraform](https://www.terraform.io/) is an infrastructure tool that manages cloud resources in a declarative paradigm. We decided to use the [Scaleway Terraform Provider](https://www.terraform.io/docs/providers/scaleway/index.html) to manage all our infrastructure from a single versioned place. All changes applied to our infrastructure are tracked in a git repository.\n\nTo ensure consistency across concurrent Terraform execution, the terraform state is persisted in a Scaleway Database PostgreSQL managed instance. For that, we used the [pg backend in Terraform](http://www.terraform.io/docs/backends/types/pg.html).\n\nWe created all the required instances to make this application run:\n\n* The most important are the Jitsi servers. At the moment, we created more than 100 of those ( `DEV1-L` type). These instances run the Jitsi videoconference solution.\n* The instance running the Prometheus. Prometheus scraps the state of each Jitsi state and, in particular, the CPU usage of each Jitsi server.\n* The instances running the APIs. The API instances query the Prometheus to identify what are the CPU usage on all Jitsi servers and return them to the web application.\n\nThese constitute the infrastructure of [ensemble.scaleway.com](http://ensemble.scaleway.com). Now we are going to complete this Terraform module by enabling those instances to serve our application.\n\n## Scaleway Jitsi Image\n\nWhen creating an instance, you have to select or [create an image](https://www.scaleway.com/en/docs/create-an-image-from-my-server/). In each cloud deployment, instances are booted with a specific cloud image that is designed to meet the specific requirements of the instance.\n\nFirst, we created a base image called base, which was the starting point for all the others. On this base image, we installed the requirements to run containers with Docker, `docker-compose` and a `node_exporter` that is used by our Prometheus monitoring system to know, among other information, the CPU usage of the machine.\n\nFrom the base image, we then created a Jitsi image using the official docker compose distribution: [docker-jitsi-meet](https://github.com/jitsi/docker-jitsi-meet/). We also added an [Nginx Prometheus exporter](https://github.com/nginxinc/nginx-prometheus-exporter) on `docker-jitsi-meet docker-compose` for monitoring purposes.\n\nWhen a Jitsi instance boots with this image, a `docker-compose` will start and the Jitsi server which is running as a container will automatically start working as well.\n\nNote that the base and Jitsi images are created with Ansible playbooks. It allows to easily recreate images when needed. \nFinally, we created a `front` container image which gathers the web application code (`React`) and the API code (`Node.js`). This image will run inside containers that `docker-compose` will pull from a private Scaleway registry.\n\n## Scaleway Registry\n\nThe base image aims at providing the system-wide requirements such as the operating system and other basic components as docker, `docker-composes`, `node_export`... However, we needed to be able to deploy new versions of our applications without rebooting an instance with a new image. As a result, we decoupled the base image from the application that was containerized.\n\nThe API and the React website which are bundled in the same container image are hosted on a [Scaleway private registry](https://www.scaleway.com/en/container-registry/). Once stored on the registry, images can be pulled in the instance by the docker daemon controlled by `docker-compose` to run the application. That comes in very handy when we need to deploy a new version of our API after a bug fix or a feature enhancement as we only need to push the new container image to the registry and tell `docker-compose` to use the new version.\n\nNow that our applications are deployed, let's see how we can make our API server reliable using a Load Balancer.\n\n## Scaleway Load Balancer\n\n[Load Balancers](https://www.scaleway.com/en/load-balancer/) are highly available and fully-managed instances that allow to distribute the workload among your various services. They ensure the scaling of all your applications while securing their continuous availability, even in the event of heavy traffic. Load Balancers are built to use an Internet-facing front-end server to shuttle information to and from backend servers. They provide a dedicated public IP address and forward requests automatically to one of the backend servers based on resource availability.\n\nIn the context of Jitsi, we used our Load Balancer to automatically forward requests to our API servers based on resource availability. Our API servers are the ones providing information about the current load of each Jitsi sever to ensure that the user is provided with the most available instance.\n\nLoad Balancer can also allow us to add more API instances if the existing API instances are too busy to handle the load. In addition, they can evict a faulty API server in case it is not able to answer requests anymore for whichever reason. We even added an extra reliability guarantee on our API instances by using Scaleway Placement Groups.\n\n## Scaleway Placement Groups\n\n[Placement Groups](https://www.scaleway.com/en/docs/configuring-clusters-using-placement-groups/) allow you to organize instances into groups, distributing the load, and ensuring maximum availability. Placement groups have two operating modes. The first one is called `max_availability`. It ensures that all the compute instances that belong to the same group will not run on the same underlying hardware. The second one is called `low_latency` and does the exact opposite: it brings compute instances closer together to achieve higher network throughput. In the context of our application, we want to ensure that the API servers and Jitsi servers are as available as possible.\n\nWe enable the `max_availability` mode across our two API servers so they are not on the same underlying hypervisor. Now that we have a reliable deployment of our API server, let's see how to secure the connection to the different ports available on those machines using Scaleway Security Groups.\n\n## Scaleway Security Groups\n\n[Security groups](https://www.scaleway.com/en/docs/how-to-activate-a-stateful-cloud-firewall/) enable you to create rules that either drop or allow incoming traffic from or to certain ports of your server. Typically it establishes a barrier between a trusted (internal) network and untrusted external network, like the Internet. The security group configuration is based on a set of inbound and outbound rules. We applied security groups to all the components of our architecture.\n\nOn the API instances, we only allowed `HTTPS/HTTP` connection and SSH remote access connection. \nOn the Jitsi instances, only SSH and ports that are required for Jitsi to work are allowed. All the others are blocked.\n\nLet's complete this deployment by adding human understandable domain names for each component of this application.\n\n## Scaleway Domains\n\nFinally, we wanted to manage the DNS record for each of the instances: API, Jitsi servers and Prometheus). DNS records make a domain name such as `h-5660.ensemble.scaleway.com` resolve to the correct Jitsi instance across all users. \nWe use Scaleway domains to manage the DNS record for the whole ensemble.scaleway.com solution. When provisionning a new Jitsi server in Terraform, we automatically generate a DNS record for this Jitsi instance.\n\nWe generated a wildcard certificate for all subdomains of ensemble.scaleway.com. Each Jitsi server gets its certificate that is used by their Nginx server to handle HTTPS connections.\n\nWhile currently in early access, you can already register for [Scaleway Domains ](https://www.scaleway.com/en/betas/#domains).\n\n## It's Working like a Charm\n\nThe [ensemble.scaleway.com](https://ensemble.scaleway.com/) solution was built and deployed in a flash thanks to joint forces, and the first reactions are already very positive. The solution is widely used and the number of rooms created keeps increasing. In the last 8 hours, we monitored more than **800 active Jitsi connections**, **1700 Jitsi rooms created** and **more than 6000 page views of ensemble.scaleway.com from all over the world.**\n\n![](https://www-uploads.scaleway.com/blog-Screenshot-2020-03-18-at-16-42-04.webp)\n\n## What's Next?\n\nWe are still working actively on this project to provide support to as many people as possible in this challenging period. In particular, we will work to make this project and the code used to create this infrastructure available to all as soon as possible. \nIn the meantime, if you would like to set up your own Jitsi server, feel free to check our tutorials on how to install Jitsi on your server, whether you are using [Debian 10](http://www.scaleway.com/en/docs/setting-up-jitsi-meet-videoconferencing-on-debian-buster/) or [Ubuntu 18.04](http://www.scaleway.com/en/docs/installing-jitsi-meet-videoconferencing-ubuntu-bionic/).","createdAt":"2023-01-19T09:20:32.994Z","updatedAt":"2023-02-08T15:47:31.587Z","publishedAt":"2023-01-19T09:25:12.872Z","locale":"en","tags":"Open-source\nJitsi\nScaleway","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":7,"excerpt":"Scaleway's teams were on the front line to launch an integral videoconferencing solution in less than a day: Ensemble","author":"Océane Franc","h1":"Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway","createdOn":"2020-03-23","image":{"data":{"id":1714,"attributes":{"name":"Post-Jitsi-Conference-Illustration-Blog.webp","alternativeText":null,"caption":null,"width":1216,"height":752,"formats":{"large":{"ext":".webp","url":"https://www-uploads.scaleway.com/large_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp","hash":"large_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2","mime":"image/webp","name":"large_Post-Jitsi-Conference-Illustration-Blog.webp","path":null,"size":"292.80","width":1000,"height":618},"small":{"ext":".webp","url":"https://www-uploads.scaleway.com/small_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp","hash":"small_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2","mime":"image/webp","name":"small_Post-Jitsi-Conference-Illustration-Blog.webp","path":null,"size":"101.85","width":500,"height":309},"medium":{"ext":".webp","url":"https://www-uploads.scaleway.com/medium_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp","hash":"medium_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2","mime":"image/webp","name":"medium_Post-Jitsi-Conference-Illustration-Blog.webp","path":null,"size":"190.32","width":750,"height":464},"thumbnail":{"ext":".webp","url":"https://www-uploads.scaleway.com/thumbnail_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp","hash":"thumbnail_Post_Jitsi_Conference_Illustration_Blog_a01ff977e2","mime":"image/webp","name":"thumbnail_Post-Jitsi-Conference-Illustration-Blog.webp","path":null,"size":"32.81","width":245,"height":152}},"hash":"Post_Jitsi_Conference_Illustration_Blog_a01ff977e2","ext":".webp","mime":"image/webp","size":393.33,"url":"https://www-uploads.scaleway.com/Post_Jitsi_Conference_Illustration_Blog_a01ff977e2.webp","previewUrl":null,"provider":"@website/strapi-provider-upload-scaleway-bucket","provider_metadata":null,"createdAt":"2023-01-19T09:24:13.250Z","updatedAt":"2023-01-19T09:24:13.250Z"}}},"recommendedArticles":{"data":[{"id":197,"attributes":{"title":"infrastructure-as-code","path":"infrastructure-as-code/","description":"It wasn’t that long ago that you had to open a ticket to ask for more resources within your company, remember? Infrastructure management has changed drastically in the last decades.\n\nBusinesses rarely change their infrastructure... and infrastructures themselves don't change every day. Software installation used to be done manually or semi-manually, with scripts that only worked in a specific context. This model raised a few issues:\n\n* **It wasn’t scalable:** solving issues became more time-consuming as resources were managed in an ad-hoc way\n* **It wasn’t replicable:** it was challenging to understand what production environments were made of and to recreate it for a pre-production environment\n* **It used a lot of tooling:** internal scripts could not be easily reused in different contexts\n\nThankfully, the context shifted in the last few years. Churn is now growing as projects rise (and fall) faster than ever. Standard tools are available and widespread. And Ops work is shifting towards automation, which handles an increasingly significant part of the tasks. So it's increasingly crucial to automate infrastructures as applications can be deployed into production up to hundreds of times per day.\n\n## Manage and provision your infra automatically \n\nInfrastructure as Code (also known as IaC) is a type of configuration that automates the managing and provisioning of the infrastructure through code - without going through manual processes. There are two types of descriptions you can use. The description of the infrastructure resources hosting the application (your VMs, Bare Metal machines, etc.), and the configuration of the services deployed and hosted on this underlying infrastructure - or software environment (installed packages, configuration files, libraries, etc.).\n\n## Track your infrastructure with your code workflow\n\nOne advantage of using code to describe infrastructure is that the same tooling is used to write the code: the same editor and the same versioning system - without any additional tools. This will allow you to track changes made to the infrastructure the same way you do with your code. \nOnce a versioning system is in place, you can centralize all changes to a single point, for instance, [GitHub](https://github.com/) or [GitLab](https://gitlab.com/). This repository creates a single source of truth. For example, a user could use [_VSCode_](https://code.visualstudio.com/) to write the code and [_Git_](https://git-scm.com/) to track it.\n\nCentralization is helpful to track all the changes that were made to the infrastructure. It is also helpful to have all commit messages to help to understand what happened.\n\n## From imperative to declarative\n\nIn mathematics and computer science, idempotence means that an operation has the same effect whether it is applied once or several times.\n\nHere, we want the actions of our infra as code tool to be as idempotent as possible. So we \"ensure the presence of a line in a file\" rather than \"adding a line to a file.”\n\nThis allows us to launch our tool in a loop without the state changing in the absence of updates in the code describing the infrastructure.\n\nThis notion is crucial to understand the choices and limitations of infra as code solutions. We do not describe actions, we describe the desired state. Then our tool will infer the actions to be performed to converge towards this state.\n\n## Simplify the collaboration between Dev and Ops\n\nWhen this pattern of version tracking is enforced, the repository that contains this code becomes a _single source of truth_.\n\nHaving this unique point of control on the infrastructure helps to gain insight and discover how the infrastructure is built. Infra as code will become a key area of collaboration for developers and operational staff.\n\nWhat could be easier than sending a pull request rather than a ticket or an email when you want to change something?\n\nWhat better way to collaborate than on code, which will be executed as written? The idea is to deliver code, whether it's for the application or the infrastructure, and to let automation do the rest.\n\nThis is why this infra as code movement often comes from both developers and system administrators: the former see it as a way to gain certain independence while the latter find it makes their daily lives easier thanks to repetitive and often low added-value tasks. \nThe objective of the DevOps movement is to align teams with business objectives by improving collaboration between Developers and Operations and by working together to develop infra as code as collective property.\n\n## Pet vs. cattle\n\nThe teams responsible for internal infrastructure often compare servers to pets and even give them nicknames. They take care of them daily. If a \"pet\" server goes down, it is challenging to rebuild them from scratch because the internal configuration is not well-tracked. Therefore, those servers are fragile, and as time goes on, they become a liability.\n\nThe modern approach is more oriented towards cattle management. The objective is to manage the infrastructure like a herd: your servers are simply assigned a number, and you manage them as a whole. It is not sad to see them disappear, and if one gets \"sick”, you simply replace them. This \"replacement\" in a more concrete context would mean a pure replacement of a virtual machine or the re-provisioning of the physical server concerned.\n\nEach server should be able to be assigned a random and unique identifier. However, this does not exclude having some differentiations! Eventually, these servers will be assigned roles or labels based on their capabilities, such as the presence of GPUs.\n\n## Multiplatform VS platform-dependent\n\nIs Infrastructure as Code platform-dependent? The provisioning and configuration depend on the software platform, not the service provider. An Ubuntu machine will work the same way with two different vendors, for example. The dependency will be on the operating system: location of files, commands used... In many cases, automation tools can manage this and abstract it for you. If they don't provide an abstraction, you can always use conditional execution to run only a subset of a given program that targets a specific platform.\n\nFor the infrastructure, if your resources are configured for a given provider, you cannot copy and paste it directly to another provider.\n\nSome resources will have attributes that are not the same, depending on the cloud provider. The language used to describe the resources is the same, meaning it will be easy to understand exactly what needs to be migrated.\n\n## Infrastructure as Code as a way to align Dev and Ops \n\nWhen Infrastructure as Code is enforced, development and operational teams are using the same source repository, so both those teams can review and apply changes to them. IaC lowers the risk of misunderstandings as both teams share the context and see the same files.\n\n### Grasp the infrastructure and contribute to it\n\n \nAs a result, it is easier to grasp the infrastructure if it is in a written format. This allows whoever has access to it to start reading and understand how the infrastructure and provisioning work. It becomes easier to train many people and, by doing so, reduce the risk of depending on a single person to perform a task.\n\n### Test a complete deployment using CI/CD\n\n \nHaving a single CI/CD allows you to recreate a copy of the same infrastructure. For instance, having a copy of the same infrastructure for each client. \n \nIt also helps you test whether a given release of your software project will work on a given architecture. You can have a build that will create a copy of your infra, deploy the code on it, and ensure that it runs correctly.\n\n**Infrastructure as Code is a new way to provision and configure infrastructure.** It is also a paradigm shift towards a declarative way of describing infrastructure and using tools to make them happen. \nIn our next article about infrastructure as code, we will explain how we use infra as code tools - also start managing your infrastructure using these tool.","createdAt":"2023-01-18T18:34:52.972Z","updatedAt":"2023-01-24T12:50:41.827Z","publishedAt":"2023-01-18T18:36:22.548Z","locale":"en","tags":"Infrastructure-as-code","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":6,"excerpt":"Infrastructure as Code (also known as IaC) is a type of configuration that automates the managing and provisioning of the infrastructure through code - without going through manual processes.","author":"Rémy Léone","h1":"Infrastructure as Code","createdOn":"2022-07-04","image":{"data":{"id":1710,"attributes":{"name":"Post-Terraform-Infrastructure-Illustration-Blog (1).webp","alternativeText":null,"caption":null,"width":1216,"height":752,"formats":{"large":{"ext":".webp","url":"https://www-uploads.scaleway.com/large_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp","hash":"large_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be","mime":"image/webp","name":"large_Post-Terraform-Infrastructure-Illustration-Blog (1).webp","path":null,"size":"264.19","width":1000,"height":618},"small":{"ext":".webp","url":"https://www-uploads.scaleway.com/small_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp","hash":"small_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be","mime":"image/webp","name":"small_Post-Terraform-Infrastructure-Illustration-Blog (1).webp","path":null,"size":"93.82","width":500,"height":309},"medium":{"ext":".webp","url":"https://www-uploads.scaleway.com/medium_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp","hash":"medium_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be","mime":"image/webp","name":"medium_Post-Terraform-Infrastructure-Illustration-Blog (1).webp","path":null,"size":"174.11","width":750,"height":464},"thumbnail":{"ext":".webp","url":"https://www-uploads.scaleway.com/thumbnail_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp","hash":"thumbnail_Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be","mime":"image/webp","name":"thumbnail_Post-Terraform-Infrastructure-Illustration-Blog (1).webp","path":null,"size":"32.57","width":245,"height":152}},"hash":"Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be","ext":".webp","mime":"image/webp","size":356.74,"url":"https://www-uploads.scaleway.com/Post_Terraform_Infrastructure_Illustration_Blog_1_52aed915be.webp","previewUrl":null,"provider":"@website/strapi-provider-upload-scaleway-bucket","provider_metadata":null,"createdAt":"2023-01-18T18:35:53.113Z","updatedAt":"2023-01-18T18:35:53.113Z"}}},"recommendedArticles":{"data":[{"id":179,"attributes":{"title":"terraform-how-to-init-your-infrastructure","path":"terraform-how-to-init-your-infrastructure/","description":"Hi everyone! I’m Jules, Developer Relations Manager at Scaleway, and today I am going to show you how Terraform is going to change the way you currently manage your cloud infrastructure. If you want to quickly and easily set up a cloud infrastructure, one of the best ways to do it is to create a Terraform repository. You will then be able to deploy your resources in a few clicks.\n\nTerraform is an open-source, Infrastructure-as-Code tool that helps you manage your infrastructure at any time, deploy it/delete it in just one click, and work with other developers on your projects. Previously, I worked as a Solutions Architect for different projects, and it really helps me keep track of my work, the infrastructures that I deployed and also allows many developers to work on the same project easily. \n \nBefore starting on the project, you need to have an [account](https://www.scaleway.com/en/docs/console/my-account/how-to/create-an-account/), your [credentials](https://www.scaleway.com/en/docs/console/my-account/concepts/#api-key) all set up, and [install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) on the server you are using, or locally, using the last version of the [Scaleway Terraform provider](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs).\n\n## Best practices to structure a Terraform environment \n\nFirst, let’s create our workspace. Even if it is not at all mandatory, Terraform developers like to organize their repository to easily find their resources. It also allows you to store your data in a unique location, depending on the environment you want to deploy your infrastructure in (you can have a repository for your development infrastructure, etc.). \n\nNow we are going to create four different files:\n\n* main.tf: will contain the main set of configurations for your project. Here, it will be our instance\n* provider.tf: Terraform relies on plugins called “providers” to interact with remote systems\n* backend.tf: each Terraform configuration can specify a backend, which defines where the state file of the current infrastructure will be stored. Thanks to this file, Terraform keeps track of the managed resources. This state can be stored locally or remotely. Configuring a remote backend allows multiple people to work on the same infrastructure\n* variables.tf: will contain the variable definitions for your project. Since all Terraform values must be defined, any variables that are not given a default value will become required arguments\n* terraform.tfvars: allows you to set the actual value of the variables\n\nFor the time being, let’s just create these four files and fill the backend and the provider as in this example:\n\n```bash\nterraform {\n backend \"s3\" {\n bucket = \"XXXXXXXXX\"\n key = \"terraform.tfstate\"\n region = \"fr-par\"\n endpoint = \"https://s3.fr-par.scw.cloud\"\n skip_credentials_validation = true\n skip_region_validation = true\n }\n}\n\n\n/*\nFor the credentials part:\n==\u003e Create a ~/.aws/credentials:\n[default]\naws_access_key_id=\u003cSCW_ACCESS_KEY\u003e\naws_secret_access_key=\u003cSCW_SECRET_KEY\u003e\nregion=fr-par\n*/\n```\n\n```bash\nterraform {\n required_providers {\n scaleway = {\n source = \"scaleway/scaleway\"\n version = \"2.2.0\"\n }\n }\n required_version = \"\u003e= 0.13\"\n}\n```\n\n## Organize your files properly on Terraform\n\nBesides the code we are providing you with, our Terraform directory consists of several other files, created by the Terraform provider itself, to keep your infrastructure on tracks:\n* .terraform/ : this directory contains the providers pulled down to local. It will be re-created when terraform init is run in a new environment\n* terraform.tfstate and terraform.tfstate.backup: these files contain the Terraform state specific to a specific environment. These files may contain sensitive information stored in plain text from the previous deployment\n* terraform.tfvars : may contain secrets (usernames, password, IP addresses, etc.) about a specific environment\n\nWe should take steps to avoid check-in of such files. Indeed, there is some content you really do not want to display (like with many other programming languages). For this, we can use a .gitignore file and mention the extension of such files.\n\n## Team work on Terraform \n\nAn important thing to know about Terraform is that it stores the resources it manages into a state file. There are two types of state files: remote and local. But how do we work when we use a remote state file? What keeps us from deleting what our amazing coworkers have deployed into their infrastructure? The combinaison of a backend + a remote state! Where local state is great for an isolated developer, remote state is absolutely necessary for a team, as each member will need to share the infrastructure state whenever there is a change. \n\nSo, each time a change is applied, the state is updated with new values: creations, deletions, and updates. \nKnowing that, we can assume that it is going to be much more convenient to set up a backend for each developer so they can participate in our Terraform project. In our case, we will set up an Object Storage bucket to store our backend (do not forget to set up your bucket credentials in \\~/.aws/credentials). \n\nDon’t forget to **create your bucket before creating your backend**. This is the only thing you have to do by yourself in the console, or via the API, before launching your project.\n\n## Deploying our first resources: instance + block\n\nHere, we are going to fill our main.tf with our instance resources. \nFor this part, we are going to launch our first instance with an IP and a volume attached to it. \n\n```bash\nresource \"scaleway_instance_ip\" \"public_ip\" {}\n\nresource \"scaleway_instance_volume\" \"scw-instance\" {\n size_in_gb = 30\n type = \"l_ssd\"\n}\n\nresource \"scaleway_instance_server\" \"scw-instance\" {\n type = \"DEV1-L\"\n image = \"ubuntu_focal\"\n\n tags = [\"terraform instance\", \"scw-instance\"]\n\n ip_id = scaleway_instance_ip.public_ip.id\n\n additional_volume_ids = [scaleway_instance_volume.scw-instance.id]\n\n root_volume {\n # The local storage of a DEV1-L instance is 80 GB, subtract 30 GB from the additional l_ssd volume, then the root volume needs to be 50 GB.\n size_in_gb = 50\n }\n}\n\n```\n\nAlso, do not forget to fill your variables.tf and your terraform.tfvars:\n\n```bash\nvariable \"zone\" {\n type = string\n}\n\nvariable \"region\" {\n type = string\n}\n\nvariable \"env\" {\n type = string\n}\n\n```\n\n```bash\nzone = \"fr-par-1\"\nregion = \"fr-par\"\nenv = \"dev\"\n\n```\n\nTo finally launch our infrastructure, let’s switch on our terminal and write these three commands:\n`Terraform Init` \n`Terraform plan` \n`Terraform apply`\n\n## Deploying a Kubernetes Kapsule cluster with Terraform\n\nKapsule is the managed Kubernetes cluster developed by Scaleway. To deploy it with Scaleway, you will have to create a cluster resource and a pool associated. In our example, we add an autoscaling plus an auto\\_upgrade (every Sunday at 4 a.m). \n\n```bash\nresource \"scaleway_k8s_cluster\" \"kapsule\" {\n name = \"kapsule-${var.env}\"\n description = \"${var.env} cluster\"\n version = var.kapsule_cluster_version\n cni = \"calico\"\n tags = [var.env]\n\n autoscaler_config {\n disable_scale_down = false\n scale_down_delay_after_add = \"5m\"\n estimator = \"binpacking\"\n expander = \"random\"\n ignore_daemonsets_utilization = true\n balance_similar_node_groups = true\n expendable_pods_priority_cutoff = -5\n }\n\n auto_upgrade {\n enable = true\n maintenance_window_start_hour = 4\n maintenance_window_day = \"sunday\"\n }\n}\n\nresource \"scaleway_k8s_pool\" \"default\" {\n cluster_id = scaleway_k8s_cluster.kapsule.id\n name = \"default\"\n node_type = var.kapsule_pool_node_type\n size = var.kapsule_pool_size\n autoscaling = true\n autohealing = true\n min_size = var.kapsule_pool_min_size\n max_size = var.kapsule_pool_max_size\n}\n```\n\n```bash\nvariable \"kapsule_cluster_version\" {\n type = string\n}\n\nvariable \"kapsule_pool_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_min_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_max_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_node_type\" {\n type = string\n}\n\n```\n\n```bash\nkapsule_cluster_version = \"1.22\"\nkapsule_pool_size = 2\nkapsule_pool_min_size = 2\nkapsule_pool_max_size = 4\nkapsule_pool_node_type = \"DEV1-M\"\n```\n\n## Adding the database\n\nFirst export your passwords in a var env: \n\n`\u003e export TF_VAR_rdb_user_root_password=”PASSWORD”`\n\n`\u003e export TF_VAR_rdb_user_scaleway_db_password=\"test\"`\n\nN.B.: a little reminder about passwords. Passwords at Scaleway must be between 8 and 128 characters, contain at least one digit, one uppercase, one lowercase, and one special character. \n\nThen, just create the resources needed for your database: the instance, the database, the user and your ACLs:\n\n```bash\nresource \"scaleway_rdb_instance\" \"scaleway-rdb\" {\n name = \"postgresql-${var.env}\"\n node_type = var.rdb_instance_node_type\n volume_type = var.rdb_instance_volume_type\n engine = var.rdb_instance_engine\n is_ha_cluster = var.rdb_is_ha_cluster\n disable_backup = var.rdb_disable_backup\n volume_size_in_gb = var.rdb_instance_volume_size_in_gb\n user_name = \"root\"\n password = var.rdb_user_root_password\n}\n\nresource \"scaleway_rdb_database\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n name = \"${var.env}-database\"\n}\n\nresource \"scaleway_rdb_user\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n name = \"${var.env}-user-database\"\n password = var.rdb_user_scaleway_db_password\n is_admin = false\n}\n\nresource \"scaleway_rdb_acl\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n acl_rules {\n ip = \"${scaleway_instance_ip.public_ip.address}/32\"\n description = \"SCW instance\"\n }\n}\n\n```\n\n```bash\nrdb_instance_node_type = \"db-gp-xs\"\nrdb_instance_engine = \"PostgreSQL-13\"\nrdb_is_ha_cluster = true\nrdb_disable_backup = false\nrdb_instance_volume_type = \"bssd\"\nrdb_instance_volume_size_in_gb = \"50\"\n```\n\n```bash\nvariable \"rdb_is_ha_cluster\" {\n type = bool\n}\n\nvariable \"rdb_disable_backup\" {\n type = bool\n}\n\nvariable \"rdb_instance_node_type\" {\n type = string\n}\n\nvariable \"rdb_instance_engine\" {\n type = string\n}\n\nvariable \"rdb_instance_volume_size_in_gb\" {\n type = string\n}\n\nvariable \"rdb_user_root_password\" {\n type = string\n}\n\nvariable \"rdb_user_scaleway_db_password\" {\n type = string\n}\n\nvariable \"rdb_instance_volume_type\" {\n type = string\n}\n```\n\nFinally, you will have your own infrastructure, with an instance, a database which is only capable to communicate with instance, and a kapsule cluster, all ready to use !\n\n## What’s coming next?\n\nThis article is only the first part of our “How you can use Terraform to deploy your Scaleway infrastructure” series. We hope that, by reading it, you will realize that Terraform is a fantastic tool to manage your cloud infrastructures at Scaleway. Of course, we have more products to show you, and there is always room for improvement: for example, wrap everything into a module to easily use this code in another project. We will tackle this topic in a future article.","createdAt":"2023-01-18T15:58:07.168Z","updatedAt":"2024-10-25T14:45:44.397Z","publishedAt":"2023-01-23T03:06:30.603Z","locale":"en","tags":"Terraform\nInfrastructure\nInfrastructure-as-Code\nDiscover\nQuickstart","popular":false,"articleOfTheMonth":false,"category":"Build","timeToRead":10,"excerpt":"If you want to quickly and easily set up a cloud infrastructure, one of the best ways to do it is to create a Terraform repository. Learn the basics to start your infrastructure on Terraform.","author":"Jules Martin","h1":"Terraform: how to init your infrastructure","createdOn":"2022-07-21"}},{"id":168,"attributes":{"title":"terraform-module-deploy-your-infrastructure-in-one-click","path":"terraform-module-deploy-your-infrastructure-in-one-click/","description":"We are going to cover some new concepts of Terraform to help you manage your infrastructure easily. As we are continuously working on new products and our Terraform provider, I’m also excited to cover new products that will strengthen your architecture.\n\nFirst, we will use our first [repository](https://github.com/julesmartin76000/Scaleway_how_to_terraform) as a base to set up our new infrastructure. We will transform our main directory into a sub-section to have multiple modules inside one big Scaleway module. This structure opens up the possibility to deploy all the infrastructure you need in one click. Then, if you don’t need products (like a database for example), you will simply not call this sub-module in your main.tf.\n\nYou can find this second and more developed repository right[here](https://github.com/julesmartin76000/Scaleway%5Fglobal%5Fmodule). \n\nBefore starting on the project, you need to have an [account](https://www.scaleway.com/en/docs/console/my-account/how-to/create-an-account/) and your [credentials](https://www.scaleway.com/en/docs/console/my-account/concepts/#api-key) all set up. You’ll also need to [install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) on the server you are using, or locally, using the last version of the [Scaleway Terraform provider](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs).\n\n## First, what is a module?\n\nHashicorp documentation defines a module as a container for multiple resources used together. More specifically, a module is a small portion of your code that you put inside a specific repository to use again later. It will allow you to:\n\n* Give a clearer vision of your code and how to use it;\n* deploy the same piece of code multiple times in a second;\n* call the same code into a different configuration (launching multiple servers with different sizing).\n\nIn this tutorial, I will turn one specific product (in this case, an instance) and turn it into a module. Then, we will deploy our infrastructure. \n\n## Second, what are we going to deploy?\n\nWe are going to deploy the basics of infrastructure to allow you to build any kind of application: an instance, a database, a Kubernetes cluster, a load balancer. We’ll wrap everything in a private network, behind a public gateway, for safety reasons. However, the integration of the Kubernetes cluster inside a VPC is not done yet, so it will be completed outside of our private network. \n \n![Schema of the infrastructure we will deploy](https://lh5.googleusercontent.com/gN9vuebEVg_S_515WvB9J90WJTqLE8RTXpMpJdpIMWm1g2Mybe-DlK6HEegF0mppnIOrJsOeq6FX0kF6n3CSEoWOYjoYY6grEOCvC9JgfzTlZPB_5Wih6gz8PGH99L1W4t9-DLjdZzksrNzZYd_2D68)\n\n## A new architecture\n\nThe first change is that we will modify the tree structure of the repository. Instead of having everything on the same level and one file per product/feature, we are going to divide our resources into sub-directory, with the same layout each time. \n\nWe are going from this:\n\n![](https://lh6.googleusercontent.com/Gldfjqjuxi7yj19d_hCvveaOBPFlGUrb42lzATT3iEJ-6uMHg7AIyw3tpktkbkX34KpGhxcUD52qUdCQhhQ4-Y5oQl4jfuokBTGKCjxmMmVFUSj1ucsL3bLUPSggSTGdZVHZR-nN6tbXyJHMVJGw5w)\n\nTo this:\n\n```bash\ntree\n├── LICENSE\n├── README.md\n├── Terraform_Module_Scaleway_Schema.webp\n├── backend.tf\n├── main.tf\n├── module\n│ ├── database\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ ├── instance\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ ├── kapsule\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ ├── loadbalancer\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ └── vpc\n│ ├── main.tf\n│ ├── outputs.tf\n│ ├── provider.tf\n│ └── variables.tf\n├── provider.tf\n├── terraform.tfvars\n└── variables.tf\n\n6 directories, 28 files\n```\n\nAlthough it looks more complicated at first glance, this is an easier and more scalable way to deploy and maintain your infrastructure. In fact, your root main.tf will be only used to call the resources that you need by sourcing the right module. \n\nYour variables and outputs will be linked to your dedicated resources in the right module. And if you need global variables, you will still have the root variables.tf file. \n\nFinally, if you want to deploy more/new resources, you simply have to create a new sub-directory and call it as many times as you need. \n\n## Turning a Terraform repository into a module\n\nLet’s take a deep dive into our new main.tf, where all the logic is going to be gathered.\n\nWe went from this:\n\n```js\nresource “scaleway_instance_ip” “public_ip” {}\nresource “scaleway_instance_volume” “scw-instance” {\n size_in_gb = 30\n type = “l_ssd”\n}\nresource “scaleway_instance_server” “scw-instance” {\n type = “DEV1-L”\n image = “ubuntu_focal”\n tags = [“terraform instance”, “scw-instance”]\n ip_id = scaleway_instance_ip.public_ip.id\n additional_volume_ids = [scaleway_instance_volume.scw-instance.id]\n root_volume {\n # The local storage of a DEV1-L instance is 80 GB, subtract 30 GB from the additional l_ssd volume, then the root volume needs to be 50 GB.\n size_in_gb = 50\n }\n}\n\n```\n\nto this: \n\n```js\nmodule \"instance\" {\n source = \"./module/instance\"\n instance_size_in_gb = var.instance_size_in_gb\n instance_type = var.instance_type\n instance_image = var.instance_image\n volume_size_in_gb = var.volume_size_in_gb\n volume_type = var.volume_type\n tags = var.tags\n private_network_id = module.vpc.private_network_id\n}\n\nmodule \"database\" {\n source = \"./module/database\"\n\n rdb_instance_node_type = var.rdb_instance_node_type\n rdb_instance_engine = var.rdb_instance_engine\n rdb_is_ha_cluster = var.rdb_is_ha_cluster\n rdb_disable_backup = var.rdb_disable_backup\n rdb_instance_volume_type = var.rdb_instance_volume_type\n rdb_instance_volume_size_in_gb = var.rdb_instance_volume_size_in_gb\n rdb_user_root_password = var.rdb_user_root_password\n rdb_user_scaleway_db_password = var.rdb_user_scaleway_db_password\n instance_ip_addr = module.instance.instance_ip_addr\n private_network_id = module.vpc.private_network_id\n user_name = var.user_name\n zone = var.zone\n region = var.region\n env = var.env\n}\n\nmodule \"kapsule\" {\n source = \"./module/kapsule\"\n\n kapsule_cluster_version = var.kapsule_cluster_version\n kapsule_pool_size = var.kapsule_pool_size\n kapsule_pool_min_size = var.kapsule_pool_min_size\n kapsule_pool_max_size = var.kapsule_pool_max_size\n kapsule_pool_node_type = var.kapsule_pool_node_type\n cni = var.cni\n zone = var.zone\n region = var.region\n env = var.env\n}\n\nmodule \"loadbalancer\" {\n source = \"./module/loadbalancer\"\n\n lb_size = var.lb_size\n inbound_port = var.inbound_port\n forward_port = var.forward_port\n forward_protocol = var.forward_protocol\n private_network_id = module.vpc.private_network_id\n zone = var.zone\n region = var.region\n env = var.env\n}\n\nmodule \"vpc\" {\n source = \"./module/vpc\"\n\n public_gateway_dhcp = var.public_gateway_dhcp\n public_gateway_type = var.public_gateway_type\n bastion_port = var.bastion_port\n zone = var.zone\n region = var.region\n env = var.env\n\n}\n\n```\n\nAs you can see, we deleted the instance resources from our previous example to call all the modules. Our main.tf will be our “call-center”. It will call all the modules we need to deploy our infrastructure. \n\nIf we compare it with our previous repository, we see the logic of the resources has been moved to module/instance/main.tf (I just added the private network to my instance). \n\nAlso, I advise you to transform every argument into a variable. First, it will help add granularity to your project: You will be able to deploy multiple resources easily, with different configurations. Second, you will have an overview of your configuration at a glance. \n\nThe main.tf from your instance’s module will look quite similar to the previous version (I just added the private network to my instance). \n\nThen, I simply used the same logic to all my previous files (database.tf, kapsule.tf, etc…) and created modules for each product. \n\nAll the values are still in the tfvars, which will allow you to have a clear overview of what kind of resources you have deployed. And if you want to, for example, switch to a bigger database, you simply have to update this file. There’s no need to modify the structure of your architecture or touch the resource itself. \n\n## Network\n\nScaleway launched VPC at the end of 2021\\. And for the last six months, we have continuously added features to our network ecosystem. Here is the example I used to deploy our VPC: \n\n```js\n#Private Network creation\nresource \"scaleway_vpc_private_network\" \"scaleway_pn\" {\n name = \"${var.env}-private_network\"\n}\n\n#DHCP\nresource \"scaleway_vpc_public_gateway_dhcp\" \"scaleway_dhcp\" {\n subnet = var.public_gateway_dhcp\n push_default_route = var.dhcp_push_default_route\n}\n\n#Public Gateway\nresource \"scaleway_vpc_public_gateway_ip\" \"scaleway\" {\n}\n\nresource \"scaleway_vpc_public_gateway\" \"scaleway_pg\" {\n name = \"${var.env}-public_gateway\"\n type = var.public_gateway_type\n ip_id = scaleway_vpc_public_gateway_ip.scaleway.id\n bastion_enabled = var.bastion_enabled\n bastion_port = var.bastion_port\n}\n\n#Routing\nresource \"scaleway_vpc_gateway_network\" \"scaleway\" {\n gateway_id = scaleway_vpc_public_gateway.scaleway_pg.id\n private_network_id = scaleway_vpc_private_network.scaleway_pn.id\n dhcp_id = scaleway_vpc_public_gateway_dhcp.scaleway_dhcp.id\n cleanup_dhcp = var.cleanup_dhcp\n enable_masquerade = var.enable_masquerade\n depends_on = [scaleway_vpc_public_gateway.scaleway_pg, scaleway_vpc_public_gateway_ip.scaleway, scaleway_vpc_private_network.scaleway_pn]\n}\n\n```\n\n \nWith our current infrastructure, you can see we implemented our virtual private cloud:\n\n* You can deploy a private network for an instance, a load balancer, and a database.\n* Our Public Gateway owns three main components:\n* 1. DHCP (allocation of private IP addresses);\n* 2. NAT gateway (managing the ingress/egress traffic);\n* 3. SSH Bastion (secure management of your SSH keys).\n\nYou can now implement a secure infrastructure thanks to the combination of Public Gateway + Private Networks (!). \n \n## What’s next?\n\nI did not go through all the code of this repository or all the “specificities”. For example, I didn’t discuss how to secure [sensitive information](https://learn.hashicorp.com/tutorials/terraform/sensitive-variables) or how to manage [outputs](https://learn.hashicorp.com/tutorials/terraform/outputs) through modules. The examples I gave speak for themselves. \n\nHowever, now you have a fully functional module that allows you to deploy rapidly a fully usable infrastructure to launch your first project. At the end of the day, all you have to update is your tfvars. This repository can serve as a guideline for anyone looking to write and maintain their Terraform infrastructure.\n\nMore products/features are coming in the next months. We’re preparing Terraform integration for Serverless, CaaS, and more new products in the near future, so stay tuned! ","createdAt":"2023-01-18T15:17:43.557Z","updatedAt":"2023-03-21T15:17:29.193Z","publishedAt":"2023-01-18T15:18:34.924Z","locale":"en","tags":"Terraform\nInfrastructure\nInfrastructure-as-Code","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":10,"excerpt":"Terraform is an infrastructure as code tool, and in this hands-on guide, we will learn how to turn an instance into a module to deploy our infrastructure. ","author":"Jules Martin","h1":"Terraform module: Deploy your infrastructure in one click","createdOn":"2022-07-25"}},{"id":194,"attributes":{"title":"scalable-infrastructure","path":"scalable-infrastructure/","description":"In our last webinar, we welcomed Killian from Golem.ai, and Sylvia and Jonathan from Microbiome Studio. We discussed how they built scalable infrastructure to support their startups' goals. They shared their experience, what they learned along their journeys, and how they optimized their infrastructure. Here is a cheat sheet of their best practices: \n\n## Start simple\n\nSimplicity is often crucial when launching a new product or service. To get a scalable infrastructure, you need to start somewhere. However, as exciting as setting up a whole cluster of microservices with five layers of abstraction might sound, the best advice we could give you is to start simple. Build based on your needs at this stage, time and practice will tell you which needs will persist, then you can add to them. \nOver-engineering can be your doom. It will have the opposite effect to what you intended: it will cause your flexibility and evolution to stall. So keep it simple from the start. \n\n## Managed products\n\nStart simple, but start in a way that allows you to build on. This is what managed products are specifically designed for: the cloud provider deals with all the installation and configuration, so all you need to do is leverage a comprehensive, user-friendly setting you can install and scale in two clicks. This significant time-saver allows your teams to focus on more important topics. \n\n## Storage\n\nYou can drastically optimize your bill in the long run just by developing elastic data models at the beginning of the building process. There are different types of data storage, each coming with its own characteristics, latency, and pricing. For instance, you can use Block Storage to store necessary information for the duration of the project, and then once completed, you can archive it with Object Storage, as Microbiome Studio does. \n \nTo help you make the right choice, Scaleway’s own DbaaS PM wrote a [guide on how to choose the right type of storage](https://www.scaleway.com/en/blog/managed-database-how-to-choose-the-right-type-of-storage/). \n\n## Redundancy\n\nIf a service exists only once, then it does not exist. This is indeed the mantra of [Golem.ai](https://golem.ai/). Infrastructure as a Service is instrumental when you are building efficient infrastructure. Replicating the services is a fundamental element that allows you to stay at the top of your game in the face of challenges. \n\n## Automate everywhere\n\nEnsure that each deployment is not a three-day job when it can be done in just one click.. \nFor instance, autoscaling is a powerful tool for optimizing your resources or managing workload peaks. You can scale to zero whenever you need, even at night! Even if a client decides to process a million documents overnight, autoscaling can handle it without needing your team to wake up at 2 AM! \n\n## Observability \u0026 debugging\n\nMonitoring and debugging are very important. Knowing what is happening on your infrastructure is crucial for both DevOps and user comprehension. You can use open-source tools like [Grafana](https://grafana.com/) (open-source analytics \u0026 monitoring solution for databases) or Sentry (application monitoring and error tracking software) to give you the data you need. \n\n## A comprehensive vision\n\nVisualize the different infrastructure components to improve the coupling of these elements. The infrastructure WILL evolve: you need to be able to modify it when necessary. So having a comprehensive vision of all your services is a must if you want them to work together. After all, your infrastructure is a big machine made of tons of smaller machines, don’t make the mistake of focusing on one element at the cost of the whole infrastructure. \n\n## Identify energy-intensive resources\n\nIdentify the resources consumed in terms of CPU, RAM, and data storage to optimize those that are less energy-efficient. For instance, with Serverless, you can switch on and off your machine depending on the resources you need. To schedule all this, automation techniques for resource supply and the configuration of these machines allow for more scalability. [Open-source tools](https://www.scaleway.com/en/blog/40-open-source-projects/) such as Grafana to monitor and analyze databases are a must-known here. \n\n## Empower your team\n\nThe strength of your company and products comes directly from your team: the people who made it all happen. For instance, learning to use managed products can seem complicated, or even pointless when you already have a team that could replicate this work. You might also think that manual installation is a saving. On the contrary, practice often shows that the amount of time you will need, not to mention getting up at 2 AM to relaunch the faulty server, makes it everything but a saving! \n \n## Think multi cloud\n\n[92%](https://www.flexera.com/blog/cloud/cloud-computing-trends-2021-state-of-the-cloud-report/) of companies use more than one cloud provider, yet don’t realize the power of a well-thought multi-cloud strategy. For instance, a startup with international ambition could run its infrastructure on a Kubernetes cluster, think about using a multi-cloud orchestrator such as [Kosmos](https://www.scaleway.com/en/blog/k8s-multi-cloud/). It will allow you to plug your cluster in data centers of different cloud providers from all over the world to guarantee that your client's data is hosted locally - which is starting to be a must for a lot of companies.","createdAt":"2023-01-18T17:52:43.417Z","updatedAt":"2023-02-02T16:26:55.252Z","publishedAt":"2023-01-18T17:53:04.692Z","locale":"en","tags":"Startup\nInfrastructure\nBest practices\nTestimonials","popular":false,"articleOfTheMonth":false,"category":"Build","timeToRead":4,"excerpt":"Kilian \u0026 Sylvia shared their experience as CTO: what they learned along their journeys and how they optimized their infrastructure. Here is a cheat sheet of their best practices.","author":"Hana Khelifa","h1":"Best practices to build a scalable infrastructure","createdOn":"2022-07-08"}}]},"meta":{"id":704,"title":"Infrastructure as Code","description":"Infrastructure as Code (also known as IaC) is a type of configuration that automates the managing and provisioning of the infrastructure through code - without going through manual processes.","ogtype":null,"ogtitle":null,"ogdescription":"Infrastructure as Code (also known as IaC) is a type of configuration that automates the managing and provisioning of the infrastructure through code - without going through manual processes.","noindex":false},"localizations":{"data":[]}}},{"id":209,"attributes":{"title":"infrastructure-as-code-scaleway-internal-usage","path":"infrastructure-as-code-scaleway-internal-usage/","description":"Infrastructure as Code (IaC) is a way to describe infrastructure in a language that is stored as a text file, just like code. \n\nScaleway manages a **lot** of resources. Efficient tools are essential to manage all these assets at scale. In this article, we will review the different tools we use and how our product teams are using them to deliver your cloud resources as efficiently as possible.\n\nWe want this article to be easy to follow and explicit enough so that you fully understand what happens when you boot up an instance.As a result, the list of tools presented is not exhaustive.\n\nAnother aspect of this article is that not all of these tools can be considered as \"Infra as Code\" per se because some do not deploy anything. Nevertheless, they are helping to bootstrap an environment in which Infra as Code becomes possible.\n\nAs a service provider, we start with basic and unconfigured hardware such as pristine servers (from different manufacturers), unconfigured routers and switches. We have to properly install those to have an environment that can support a higher level of abstraction. This is a classical [Bootstrapping](https://en.wikipedia.org/wiki/Bootstrapping) problem.\n\nLet's first start with the tool we use to store the inventory of all the raw devices: Netbox.\n\n## Netbox\n\n[Netbox](https://netbox.readthedocs.io/en/stable/) is an open-source web application designed to help manage and document computer networks. \nNetbox is a [Data Center Infrastructure Management (DCIM)](https://fr.wikipedia.org/wiki/Data%5FCenter%5FInfrastructure%5FManagement) tool and an [IP address management system (IPAM)](https://en.wikipedia.org/wiki/IP%5Faddress%5Fmanagement). \nNetbox can be seen as our _single source of truth for devices and network infrastructure_.\n\nEach Scaleway product team is a _tenant_ of a set of resources. Therefore we have an inventory of machines per team. We can also have search queries made per location, per model, per date of installation and so on. \nFor example, we can quickly test if an IP address belongs to Scaleway's ranges by looking into Netbox.\n\n_The customer data is not in Netbox!_ If you have an instance at Scaleway, it will not show up in Netbox, only the hypervisor on which your instance runs will.\n\nNetbox is compatible with other infrastructure as code tools. It has a REST API that many tools share. One example of such netbox integration is ansible through its [dynamic inventory plugin](https://docs.ansible.com/ansible/latest/plugins/inventory/netbox.html).\n\nNow that we have seen where all the physical devices are inventoried, let's see where all the software is stored: Gitlab.\n\n## Gitlab \u0026 gitlab-ci (CI/CD)\n\nAll our internal code is stored on gitlab. Therefore, gitlab is our _single source of truth for code_. \nOnce new code is merged inside a given repository, a build can be triggered.\n\n[GitLab CI/CD](https://about.gitlab.com/product/continuous-integration/) is a tool built into [GitLab](https://about.gitlab.com/) which automates SDLC (deployment pipeline) with continuous methodologies.\n\nThis build will run integration tests using [Continuous Integration (CI)](https://en.wikipedia.org/wiki/Continuous%5Fintegration). This test ensures that we don't have regression in the test suite of a given project. \nThis build will create artifacts and then the [Continuous Delivery (CD)](https://en.wikipedia.org/wiki/Continuous%5Fdelivery) part will simply push those artifacts to the relevant environment (production, pre-production or development).\n\nTypically, we use this tool to build docker images, push those images into internal registries and more generally deploy complete servers automatically using a single commit. Examples of this include:\n\n* cleaning of obsolete images inside registries,\n* deploying cronjobs,\n* deploying a specific application of a given version.\n\nNow that we have seen where all the software is tracked and the CI/CD jobs are launched let's see how a typical machine gets booted up and controlled with a classical infra as code tool such as Saltstack.\n\n## Saltstack\n\n### Overview\n\n[Saltstack](https://docs.saltstack.com/en/latest/) is an automation tool used internally to provision and configure multiple devices on an event based model. \nSalt is based on the concept of state. This state describes how a typical machine should be installed and configured. The states are stored on a master node which acts as a _single source of truth for provisioning and configuration_.\n\nSaltstack is a client server workflow: a client called \"minion\" connects to a master node. The \"minion\" identifies the \"master\" by its name or IP address. The \"master\" identifies the minion by its host name. Communication between the server and the clients takes place after the acceptance of the \"minion\" by the \"master\" and after acceptance of an exchange of encryption keys. Minions can then be ordered in batches using criteria such as operating systems, regular expressions on host name, architecture types, etc.\n\nOne of the core features of saltstack is to have a dynamic workflow based on events. The status files (aka the \"states\") describe the state in which a server should be. Minions have a watch on values. As soon as one of these values changes, it triggers a refresh on all the minions that will regenerate their pillars based on the new value. This allows us to deploy large amounts of updates quickly on all our machines managed with salt minions.\n\nWhen we want to provision a new machine, we install a salt minion on it. But one could ask:\n\n### How does a machine go from pristine to connected to our saltstack cluster?\n\nOnce a machine is racked, the [MAC address](https://en.wikipedia.org/wiki/MAC%5Faddress) of the [NIC](https://en.wikipedia.org/wiki/Network%5Finterface%5Fcontroller) of the machine is provided to our instance team. \nAn image will be assigned to this MAC address. Once the machine boots up and shows up on the network, it will get an address from our [DHCP](https://en.wikipedia.org/wiki/Dynamic%5FHost%5FConfiguration%5FProtocol) server. Once it has an IP address, the server will try to boot over [PXE](https://en.wikipedia.org/wiki/Preboot%5FExecution%5FEnvironment) to the image configured. This first installation builds the basics of the machine: install an operating system and the required dependencies (ssh, authentication mechanisms, certificates, ...). One of these dependencies is precisely the _salt minion_. The machine is ready once the \"minion\" is installed and configured to talk to the master. It can fetch its configuration and be configured with code just like any other.\n\n### Our usage\n\nSaltstack comes as an open source software with community based formulas. \nWe wanted to have full ownership over the formulas used inside our infrastructure. As a result, we implemented our own formulas to adapt them precisely to our needs.\n\nOther nice features of saltstack include a complete log of all actions performed on the servers. This kind of feature is missing from tools such as Ansible that aims to leave no tracks on a server. With saltstack we have a guarantee that all actions will leave an auditable track, useful to know what happens on a machine or to debug a system.\n\nWe can also send commands to a system even if the ssh daemon encounters a problem. This is particularly useful when ssh experiences configuration issues and risks being locked out if only ssh is used.\n\nRecurring operations are also easy to implement natively. This is particularly useful when we want to investigate and report a particular issue.\n\nNow we have a set of machines that are tracked through Netbox, code to manage them is stored on gitlab, and a salt minion installed to control them remotely. We have the basics of a running and automated IaaS. \nAfter this point, the product teams are free to use the automation as they want. Many of them use Ansible.\n\n## Ansible \u0026 Awx\n### Ansible\n\n[Ansible](https://www.ansible.com/) is an automation tool used to provision and configure multiple devices.\n\nProduct teams are autonomous on their provisioning. This tool is used by product teams when they want to provision a given server, but also by the networking teams to configure switches and other networking devices.\n\nMany internal roles are also available to help teams setup common configuration such as monitoring configuration.\n\nAuthentication is based around a [PAM](https://en.wikipedia.org/wiki/Pluggable%5Fauthentication%5Fmodule) system plugged over [LDAP](https://en.wikipedia.org/wiki/Lightweight%5FDirectory%5FAccess%5FProtocol). When Ansible wants to connect to a given machine or run commands with `sudo`, the access is managed through sssd that will query our internal LDAP.\n\nAt Scaleway, developers can run playbooks from their laptop to deploy to production but they can also use a job system such as awx to have recurring jobs.\n\n### Awx\n\n[Awx](https://github.com/ansible/awx) provides a web-based user interface, REST API, and a task engine built on top of [Ansible](https://www.ansible.com/). It is the upstream project for [Tower](https://www.ansible.com/products/tower), a commercial derivative of AWX.\n\nAwx is mainly used by our teams to launch recurring jobs and deploy workers that manage our hypervisors. \nAdvantages of Awx are the reports that are available every time a job is launched. These reports are not available inside saltstack.\n\nFinally, once all the required tools are made available by the given team, some can use Kubernetes to have a full deployment managed with code.\n\n## Kubernetes\n\nTeams can run directly on top of our managed [Kubernetes](https://www.scaleway.com/fr/betas/). By doing so, they can have the full scaling features provided by Kubernetes for their product.\n\nResources are encoded as Kubernetes objects, tracked inside a git repository, and applied as the code gets pushed to production. \nAs for the packaging aspect of these, we use [Helm](https://helm.sh/) as a package manager to install all our services. \nWe use Helm charts and try to upstream as much as possible the one we use.\n\n## Conclusion\n\nAs detailed, there is not a single tool that can solve all the infrastructure management challenges that a platform as large as Scaleway encounters. Each of the tool we presented solves a specific part of the problem. \nTools are used to solve a specific problem in a specific context. That's why the different teams have different tools. They use the most useful one for their specific context.\n\nAs the feature set of those tools changes, so does their usage. One tool can be seen as fit for a particular moment but will not necessarily scale as well as another as time goes on. That is why it is important to keep an eye on how to solve problems more efficiently while keeping the platform stable.\n\nIn the next article, we will see all the tools you can start using today with your Scaleway infrastructure, to keep track of your resources and be more efficient in your deployments.","createdAt":"2023-01-19T09:58:32.038Z","updatedAt":"2023-02-23T13:35:06.928Z","publishedAt":"2023-01-19T10:00:40.192Z","locale":"en","tags":"Infrastructure-as-code\nScaleway","popular":false,"articleOfTheMonth":false,"category":"Scale","timeToRead":7,"excerpt":"In this article, we will review the different tools we use and how our product teams are using them to deliver your cloud resources as efficiently as possible","author":"Rémy Léone","h1":"Infrastructure as Code @Scaleway (2/3) - Internal usage","createdOn":"2019-07-24","image":{"data":{"id":1720,"attributes":{"name":"Infrastructure-Illustration-Blog.webp","alternativeText":null,"caption":null,"width":1216,"height":752,"formats":{"large":{"ext":".webp","url":"https://www-uploads.scaleway.com/large_Infrastructure_Illustration_Blog_7eee78f94a.webp","hash":"large_Infrastructure_Illustration_Blog_7eee78f94a","mime":"image/webp","name":"large_Infrastructure-Illustration-Blog.webp","path":null,"size":"281.97","width":1000,"height":618},"small":{"ext":".webp","url":"https://www-uploads.scaleway.com/small_Infrastructure_Illustration_Blog_7eee78f94a.webp","hash":"small_Infrastructure_Illustration_Blog_7eee78f94a","mime":"image/webp","name":"small_Infrastructure-Illustration-Blog.webp","path":null,"size":"97.45","width":500,"height":309},"medium":{"ext":".webp","url":"https://www-uploads.scaleway.com/medium_Infrastructure_Illustration_Blog_7eee78f94a.webp","hash":"medium_Infrastructure_Illustration_Blog_7eee78f94a","mime":"image/webp","name":"medium_Infrastructure-Illustration-Blog.webp","path":null,"size":"183.64","width":750,"height":464},"thumbnail":{"ext":".webp","url":"https://www-uploads.scaleway.com/thumbnail_Infrastructure_Illustration_Blog_7eee78f94a.webp","hash":"thumbnail_Infrastructure_Illustration_Blog_7eee78f94a","mime":"image/webp","name":"thumbnail_Infrastructure-Illustration-Blog.webp","path":null,"size":"31.70","width":245,"height":152}},"hash":"Infrastructure_Illustration_Blog_7eee78f94a","ext":".webp","mime":"image/webp","size":385.66,"url":"https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_7eee78f94a.webp","previewUrl":null,"provider":"@website/strapi-provider-upload-scaleway-bucket","provider_metadata":null,"createdAt":"2023-01-19T10:00:07.626Z","updatedAt":"2023-01-19T10:00:07.626Z"}}},"recommendedArticles":{"data":[{"id":168,"attributes":{"title":"terraform-module-deploy-your-infrastructure-in-one-click","path":"terraform-module-deploy-your-infrastructure-in-one-click/","description":"We are going to cover some new concepts of Terraform to help you manage your infrastructure easily. As we are continuously working on new products and our Terraform provider, I’m also excited to cover new products that will strengthen your architecture.\n\nFirst, we will use our first [repository](https://github.com/julesmartin76000/Scaleway_how_to_terraform) as a base to set up our new infrastructure. We will transform our main directory into a sub-section to have multiple modules inside one big Scaleway module. This structure opens up the possibility to deploy all the infrastructure you need in one click. Then, if you don’t need products (like a database for example), you will simply not call this sub-module in your main.tf.\n\nYou can find this second and more developed repository right[here](https://github.com/julesmartin76000/Scaleway%5Fglobal%5Fmodule). \n\nBefore starting on the project, you need to have an [account](https://www.scaleway.com/en/docs/console/my-account/how-to/create-an-account/) and your [credentials](https://www.scaleway.com/en/docs/console/my-account/concepts/#api-key) all set up. You’ll also need to [install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) on the server you are using, or locally, using the last version of the [Scaleway Terraform provider](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs).\n\n## First, what is a module?\n\nHashicorp documentation defines a module as a container for multiple resources used together. More specifically, a module is a small portion of your code that you put inside a specific repository to use again later. It will allow you to:\n\n* Give a clearer vision of your code and how to use it;\n* deploy the same piece of code multiple times in a second;\n* call the same code into a different configuration (launching multiple servers with different sizing).\n\nIn this tutorial, I will turn one specific product (in this case, an instance) and turn it into a module. Then, we will deploy our infrastructure. \n\n## Second, what are we going to deploy?\n\nWe are going to deploy the basics of infrastructure to allow you to build any kind of application: an instance, a database, a Kubernetes cluster, a load balancer. We’ll wrap everything in a private network, behind a public gateway, for safety reasons. However, the integration of the Kubernetes cluster inside a VPC is not done yet, so it will be completed outside of our private network. \n \n![Schema of the infrastructure we will deploy](https://lh5.googleusercontent.com/gN9vuebEVg_S_515WvB9J90WJTqLE8RTXpMpJdpIMWm1g2Mybe-DlK6HEegF0mppnIOrJsOeq6FX0kF6n3CSEoWOYjoYY6grEOCvC9JgfzTlZPB_5Wih6gz8PGH99L1W4t9-DLjdZzksrNzZYd_2D68)\n\n## A new architecture\n\nThe first change is that we will modify the tree structure of the repository. Instead of having everything on the same level and one file per product/feature, we are going to divide our resources into sub-directory, with the same layout each time. \n\nWe are going from this:\n\n![](https://lh6.googleusercontent.com/Gldfjqjuxi7yj19d_hCvveaOBPFlGUrb42lzATT3iEJ-6uMHg7AIyw3tpktkbkX34KpGhxcUD52qUdCQhhQ4-Y5oQl4jfuokBTGKCjxmMmVFUSj1ucsL3bLUPSggSTGdZVHZR-nN6tbXyJHMVJGw5w)\n\nTo this:\n\n```bash\ntree\n├── LICENSE\n├── README.md\n├── Terraform_Module_Scaleway_Schema.webp\n├── backend.tf\n├── main.tf\n├── module\n│ ├── database\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ ├── instance\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ ├── kapsule\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ ├── loadbalancer\n│ │ ├── main.tf\n│ │ ├── outputs.tf\n│ │ ├── provider.tf\n│ │ └── variables.tf\n│ └── vpc\n│ ├── main.tf\n│ ├── outputs.tf\n│ ├── provider.tf\n│ └── variables.tf\n├── provider.tf\n├── terraform.tfvars\n└── variables.tf\n\n6 directories, 28 files\n```\n\nAlthough it looks more complicated at first glance, this is an easier and more scalable way to deploy and maintain your infrastructure. In fact, your root main.tf will be only used to call the resources that you need by sourcing the right module. \n\nYour variables and outputs will be linked to your dedicated resources in the right module. And if you need global variables, you will still have the root variables.tf file. \n\nFinally, if you want to deploy more/new resources, you simply have to create a new sub-directory and call it as many times as you need. \n\n## Turning a Terraform repository into a module\n\nLet’s take a deep dive into our new main.tf, where all the logic is going to be gathered.\n\nWe went from this:\n\n```js\nresource “scaleway_instance_ip” “public_ip” {}\nresource “scaleway_instance_volume” “scw-instance” {\n size_in_gb = 30\n type = “l_ssd”\n}\nresource “scaleway_instance_server” “scw-instance” {\n type = “DEV1-L”\n image = “ubuntu_focal”\n tags = [“terraform instance”, “scw-instance”]\n ip_id = scaleway_instance_ip.public_ip.id\n additional_volume_ids = [scaleway_instance_volume.scw-instance.id]\n root_volume {\n # The local storage of a DEV1-L instance is 80 GB, subtract 30 GB from the additional l_ssd volume, then the root volume needs to be 50 GB.\n size_in_gb = 50\n }\n}\n\n```\n\nto this: \n\n```js\nmodule \"instance\" {\n source = \"./module/instance\"\n instance_size_in_gb = var.instance_size_in_gb\n instance_type = var.instance_type\n instance_image = var.instance_image\n volume_size_in_gb = var.volume_size_in_gb\n volume_type = var.volume_type\n tags = var.tags\n private_network_id = module.vpc.private_network_id\n}\n\nmodule \"database\" {\n source = \"./module/database\"\n\n rdb_instance_node_type = var.rdb_instance_node_type\n rdb_instance_engine = var.rdb_instance_engine\n rdb_is_ha_cluster = var.rdb_is_ha_cluster\n rdb_disable_backup = var.rdb_disable_backup\n rdb_instance_volume_type = var.rdb_instance_volume_type\n rdb_instance_volume_size_in_gb = var.rdb_instance_volume_size_in_gb\n rdb_user_root_password = var.rdb_user_root_password\n rdb_user_scaleway_db_password = var.rdb_user_scaleway_db_password\n instance_ip_addr = module.instance.instance_ip_addr\n private_network_id = module.vpc.private_network_id\n user_name = var.user_name\n zone = var.zone\n region = var.region\n env = var.env\n}\n\nmodule \"kapsule\" {\n source = \"./module/kapsule\"\n\n kapsule_cluster_version = var.kapsule_cluster_version\n kapsule_pool_size = var.kapsule_pool_size\n kapsule_pool_min_size = var.kapsule_pool_min_size\n kapsule_pool_max_size = var.kapsule_pool_max_size\n kapsule_pool_node_type = var.kapsule_pool_node_type\n cni = var.cni\n zone = var.zone\n region = var.region\n env = var.env\n}\n\nmodule \"loadbalancer\" {\n source = \"./module/loadbalancer\"\n\n lb_size = var.lb_size\n inbound_port = var.inbound_port\n forward_port = var.forward_port\n forward_protocol = var.forward_protocol\n private_network_id = module.vpc.private_network_id\n zone = var.zone\n region = var.region\n env = var.env\n}\n\nmodule \"vpc\" {\n source = \"./module/vpc\"\n\n public_gateway_dhcp = var.public_gateway_dhcp\n public_gateway_type = var.public_gateway_type\n bastion_port = var.bastion_port\n zone = var.zone\n region = var.region\n env = var.env\n\n}\n\n```\n\nAs you can see, we deleted the instance resources from our previous example to call all the modules. Our main.tf will be our “call-center”. It will call all the modules we need to deploy our infrastructure. \n\nIf we compare it with our previous repository, we see the logic of the resources has been moved to module/instance/main.tf (I just added the private network to my instance). \n\nAlso, I advise you to transform every argument into a variable. First, it will help add granularity to your project: You will be able to deploy multiple resources easily, with different configurations. Second, you will have an overview of your configuration at a glance. \n\nThe main.tf from your instance’s module will look quite similar to the previous version (I just added the private network to my instance). \n\nThen, I simply used the same logic to all my previous files (database.tf, kapsule.tf, etc…) and created modules for each product. \n\nAll the values are still in the tfvars, which will allow you to have a clear overview of what kind of resources you have deployed. And if you want to, for example, switch to a bigger database, you simply have to update this file. There’s no need to modify the structure of your architecture or touch the resource itself. \n\n## Network\n\nScaleway launched VPC at the end of 2021\\. And for the last six months, we have continuously added features to our network ecosystem. Here is the example I used to deploy our VPC: \n\n```js\n#Private Network creation\nresource \"scaleway_vpc_private_network\" \"scaleway_pn\" {\n name = \"${var.env}-private_network\"\n}\n\n#DHCP\nresource \"scaleway_vpc_public_gateway_dhcp\" \"scaleway_dhcp\" {\n subnet = var.public_gateway_dhcp\n push_default_route = var.dhcp_push_default_route\n}\n\n#Public Gateway\nresource \"scaleway_vpc_public_gateway_ip\" \"scaleway\" {\n}\n\nresource \"scaleway_vpc_public_gateway\" \"scaleway_pg\" {\n name = \"${var.env}-public_gateway\"\n type = var.public_gateway_type\n ip_id = scaleway_vpc_public_gateway_ip.scaleway.id\n bastion_enabled = var.bastion_enabled\n bastion_port = var.bastion_port\n}\n\n#Routing\nresource \"scaleway_vpc_gateway_network\" \"scaleway\" {\n gateway_id = scaleway_vpc_public_gateway.scaleway_pg.id\n private_network_id = scaleway_vpc_private_network.scaleway_pn.id\n dhcp_id = scaleway_vpc_public_gateway_dhcp.scaleway_dhcp.id\n cleanup_dhcp = var.cleanup_dhcp\n enable_masquerade = var.enable_masquerade\n depends_on = [scaleway_vpc_public_gateway.scaleway_pg, scaleway_vpc_public_gateway_ip.scaleway, scaleway_vpc_private_network.scaleway_pn]\n}\n\n```\n\n \nWith our current infrastructure, you can see we implemented our virtual private cloud:\n\n* You can deploy a private network for an instance, a load balancer, and a database.\n* Our Public Gateway owns three main components:\n* 1. DHCP (allocation of private IP addresses);\n* 2. NAT gateway (managing the ingress/egress traffic);\n* 3. SSH Bastion (secure management of your SSH keys).\n\nYou can now implement a secure infrastructure thanks to the combination of Public Gateway + Private Networks (!). \n \n## What’s next?\n\nI did not go through all the code of this repository or all the “specificities”. For example, I didn’t discuss how to secure [sensitive information](https://learn.hashicorp.com/tutorials/terraform/sensitive-variables) or how to manage [outputs](https://learn.hashicorp.com/tutorials/terraform/outputs) through modules. The examples I gave speak for themselves. \n\nHowever, now you have a fully functional module that allows you to deploy rapidly a fully usable infrastructure to launch your first project. At the end of the day, all you have to update is your tfvars. This repository can serve as a guideline for anyone looking to write and maintain their Terraform infrastructure.\n\nMore products/features are coming in the next months. We’re preparing Terraform integration for Serverless, CaaS, and more new products in the near future, so stay tuned! ","createdAt":"2023-01-18T15:17:43.557Z","updatedAt":"2023-03-21T15:17:29.193Z","publishedAt":"2023-01-18T15:18:34.924Z","locale":"en","tags":"Terraform\nInfrastructure\nInfrastructure-as-Code","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":10,"excerpt":"Terraform is an infrastructure as code tool, and in this hands-on guide, we will learn how to turn an instance into a module to deploy our infrastructure. ","author":"Jules Martin","h1":"Terraform module: Deploy your infrastructure in one click","createdOn":"2022-07-25"}},{"id":179,"attributes":{"title":"terraform-how-to-init-your-infrastructure","path":"terraform-how-to-init-your-infrastructure/","description":"Hi everyone! I’m Jules, Developer Relations Manager at Scaleway, and today I am going to show you how Terraform is going to change the way you currently manage your cloud infrastructure. If you want to quickly and easily set up a cloud infrastructure, one of the best ways to do it is to create a Terraform repository. You will then be able to deploy your resources in a few clicks.\n\nTerraform is an open-source, Infrastructure-as-Code tool that helps you manage your infrastructure at any time, deploy it/delete it in just one click, and work with other developers on your projects. Previously, I worked as a Solutions Architect for different projects, and it really helps me keep track of my work, the infrastructures that I deployed and also allows many developers to work on the same project easily. \n \nBefore starting on the project, you need to have an [account](https://www.scaleway.com/en/docs/console/my-account/how-to/create-an-account/), your [credentials](https://www.scaleway.com/en/docs/console/my-account/concepts/#api-key) all set up, and [install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) on the server you are using, or locally, using the last version of the [Scaleway Terraform provider](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs).\n\n## Best practices to structure a Terraform environment \n\nFirst, let’s create our workspace. Even if it is not at all mandatory, Terraform developers like to organize their repository to easily find their resources. It also allows you to store your data in a unique location, depending on the environment you want to deploy your infrastructure in (you can have a repository for your development infrastructure, etc.). \n\nNow we are going to create four different files:\n\n* main.tf: will contain the main set of configurations for your project. Here, it will be our instance\n* provider.tf: Terraform relies on plugins called “providers” to interact with remote systems\n* backend.tf: each Terraform configuration can specify a backend, which defines where the state file of the current infrastructure will be stored. Thanks to this file, Terraform keeps track of the managed resources. This state can be stored locally or remotely. Configuring a remote backend allows multiple people to work on the same infrastructure\n* variables.tf: will contain the variable definitions for your project. Since all Terraform values must be defined, any variables that are not given a default value will become required arguments\n* terraform.tfvars: allows you to set the actual value of the variables\n\nFor the time being, let’s just create these four files and fill the backend and the provider as in this example:\n\n```bash\nterraform {\n backend \"s3\" {\n bucket = \"XXXXXXXXX\"\n key = \"terraform.tfstate\"\n region = \"fr-par\"\n endpoint = \"https://s3.fr-par.scw.cloud\"\n skip_credentials_validation = true\n skip_region_validation = true\n }\n}\n\n\n/*\nFor the credentials part:\n==\u003e Create a ~/.aws/credentials:\n[default]\naws_access_key_id=\u003cSCW_ACCESS_KEY\u003e\naws_secret_access_key=\u003cSCW_SECRET_KEY\u003e\nregion=fr-par\n*/\n```\n\n```bash\nterraform {\n required_providers {\n scaleway = {\n source = \"scaleway/scaleway\"\n version = \"2.2.0\"\n }\n }\n required_version = \"\u003e= 0.13\"\n}\n```\n\n## Organize your files properly on Terraform\n\nBesides the code we are providing you with, our Terraform directory consists of several other files, created by the Terraform provider itself, to keep your infrastructure on tracks:\n* .terraform/ : this directory contains the providers pulled down to local. It will be re-created when terraform init is run in a new environment\n* terraform.tfstate and terraform.tfstate.backup: these files contain the Terraform state specific to a specific environment. These files may contain sensitive information stored in plain text from the previous deployment\n* terraform.tfvars : may contain secrets (usernames, password, IP addresses, etc.) about a specific environment\n\nWe should take steps to avoid check-in of such files. Indeed, there is some content you really do not want to display (like with many other programming languages). For this, we can use a .gitignore file and mention the extension of such files.\n\n## Team work on Terraform \n\nAn important thing to know about Terraform is that it stores the resources it manages into a state file. There are two types of state files: remote and local. But how do we work when we use a remote state file? What keeps us from deleting what our amazing coworkers have deployed into their infrastructure? The combinaison of a backend + a remote state! Where local state is great for an isolated developer, remote state is absolutely necessary for a team, as each member will need to share the infrastructure state whenever there is a change. \n\nSo, each time a change is applied, the state is updated with new values: creations, deletions, and updates. \nKnowing that, we can assume that it is going to be much more convenient to set up a backend for each developer so they can participate in our Terraform project. In our case, we will set up an Object Storage bucket to store our backend (do not forget to set up your bucket credentials in \\~/.aws/credentials). \n\nDon’t forget to **create your bucket before creating your backend**. This is the only thing you have to do by yourself in the console, or via the API, before launching your project.\n\n## Deploying our first resources: instance + block\n\nHere, we are going to fill our main.tf with our instance resources. \nFor this part, we are going to launch our first instance with an IP and a volume attached to it. \n\n```bash\nresource \"scaleway_instance_ip\" \"public_ip\" {}\n\nresource \"scaleway_instance_volume\" \"scw-instance\" {\n size_in_gb = 30\n type = \"l_ssd\"\n}\n\nresource \"scaleway_instance_server\" \"scw-instance\" {\n type = \"DEV1-L\"\n image = \"ubuntu_focal\"\n\n tags = [\"terraform instance\", \"scw-instance\"]\n\n ip_id = scaleway_instance_ip.public_ip.id\n\n additional_volume_ids = [scaleway_instance_volume.scw-instance.id]\n\n root_volume {\n # The local storage of a DEV1-L instance is 80 GB, subtract 30 GB from the additional l_ssd volume, then the root volume needs to be 50 GB.\n size_in_gb = 50\n }\n}\n\n```\n\nAlso, do not forget to fill your variables.tf and your terraform.tfvars:\n\n```bash\nvariable \"zone\" {\n type = string\n}\n\nvariable \"region\" {\n type = string\n}\n\nvariable \"env\" {\n type = string\n}\n\n```\n\n```bash\nzone = \"fr-par-1\"\nregion = \"fr-par\"\nenv = \"dev\"\n\n```\n\nTo finally launch our infrastructure, let’s switch on our terminal and write these three commands:\n`Terraform Init` \n`Terraform plan` \n`Terraform apply`\n\n## Deploying a Kubernetes Kapsule cluster with Terraform\n\nKapsule is the managed Kubernetes cluster developed by Scaleway. To deploy it with Scaleway, you will have to create a cluster resource and a pool associated. In our example, we add an autoscaling plus an auto\\_upgrade (every Sunday at 4 a.m). \n\n```bash\nresource \"scaleway_k8s_cluster\" \"kapsule\" {\n name = \"kapsule-${var.env}\"\n description = \"${var.env} cluster\"\n version = var.kapsule_cluster_version\n cni = \"calico\"\n tags = [var.env]\n\n autoscaler_config {\n disable_scale_down = false\n scale_down_delay_after_add = \"5m\"\n estimator = \"binpacking\"\n expander = \"random\"\n ignore_daemonsets_utilization = true\n balance_similar_node_groups = true\n expendable_pods_priority_cutoff = -5\n }\n\n auto_upgrade {\n enable = true\n maintenance_window_start_hour = 4\n maintenance_window_day = \"sunday\"\n }\n}\n\nresource \"scaleway_k8s_pool\" \"default\" {\n cluster_id = scaleway_k8s_cluster.kapsule.id\n name = \"default\"\n node_type = var.kapsule_pool_node_type\n size = var.kapsule_pool_size\n autoscaling = true\n autohealing = true\n min_size = var.kapsule_pool_min_size\n max_size = var.kapsule_pool_max_size\n}\n```\n\n```bash\nvariable \"kapsule_cluster_version\" {\n type = string\n}\n\nvariable \"kapsule_pool_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_min_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_max_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_node_type\" {\n type = string\n}\n\n```\n\n```bash\nkapsule_cluster_version = \"1.22\"\nkapsule_pool_size = 2\nkapsule_pool_min_size = 2\nkapsule_pool_max_size = 4\nkapsule_pool_node_type = \"DEV1-M\"\n```\n\n## Adding the database\n\nFirst export your passwords in a var env: \n\n`\u003e export TF_VAR_rdb_user_root_password=”PASSWORD”`\n\n`\u003e export TF_VAR_rdb_user_scaleway_db_password=\"test\"`\n\nN.B.: a little reminder about passwords. Passwords at Scaleway must be between 8 and 128 characters, contain at least one digit, one uppercase, one lowercase, and one special character. \n\nThen, just create the resources needed for your database: the instance, the database, the user and your ACLs:\n\n```bash\nresource \"scaleway_rdb_instance\" \"scaleway-rdb\" {\n name = \"postgresql-${var.env}\"\n node_type = var.rdb_instance_node_type\n volume_type = var.rdb_instance_volume_type\n engine = var.rdb_instance_engine\n is_ha_cluster = var.rdb_is_ha_cluster\n disable_backup = var.rdb_disable_backup\n volume_size_in_gb = var.rdb_instance_volume_size_in_gb\n user_name = \"root\"\n password = var.rdb_user_root_password\n}\n\nresource \"scaleway_rdb_database\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n name = \"${var.env}-database\"\n}\n\nresource \"scaleway_rdb_user\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n name = \"${var.env}-user-database\"\n password = var.rdb_user_scaleway_db_password\n is_admin = false\n}\n\nresource \"scaleway_rdb_acl\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n acl_rules {\n ip = \"${scaleway_instance_ip.public_ip.address}/32\"\n description = \"SCW instance\"\n }\n}\n\n```\n\n```bash\nrdb_instance_node_type = \"db-gp-xs\"\nrdb_instance_engine = \"PostgreSQL-13\"\nrdb_is_ha_cluster = true\nrdb_disable_backup = false\nrdb_instance_volume_type = \"bssd\"\nrdb_instance_volume_size_in_gb = \"50\"\n```\n\n```bash\nvariable \"rdb_is_ha_cluster\" {\n type = bool\n}\n\nvariable \"rdb_disable_backup\" {\n type = bool\n}\n\nvariable \"rdb_instance_node_type\" {\n type = string\n}\n\nvariable \"rdb_instance_engine\" {\n type = string\n}\n\nvariable \"rdb_instance_volume_size_in_gb\" {\n type = string\n}\n\nvariable \"rdb_user_root_password\" {\n type = string\n}\n\nvariable \"rdb_user_scaleway_db_password\" {\n type = string\n}\n\nvariable \"rdb_instance_volume_type\" {\n type = string\n}\n```\n\nFinally, you will have your own infrastructure, with an instance, a database which is only capable to communicate with instance, and a kapsule cluster, all ready to use !\n\n## What’s coming next?\n\nThis article is only the first part of our “How you can use Terraform to deploy your Scaleway infrastructure” series. We hope that, by reading it, you will realize that Terraform is a fantastic tool to manage your cloud infrastructures at Scaleway. Of course, we have more products to show you, and there is always room for improvement: for example, wrap everything into a module to easily use this code in another project. We will tackle this topic in a future article.","createdAt":"2023-01-18T15:58:07.168Z","updatedAt":"2024-10-25T14:45:44.397Z","publishedAt":"2023-01-23T03:06:30.603Z","locale":"en","tags":"Terraform\nInfrastructure\nInfrastructure-as-Code\nDiscover\nQuickstart","popular":false,"articleOfTheMonth":false,"category":"Build","timeToRead":10,"excerpt":"If you want to quickly and easily set up a cloud infrastructure, one of the best ways to do it is to create a Terraform repository. Learn the basics to start your infrastructure on Terraform.","author":"Jules Martin","h1":"Terraform: how to init your infrastructure","createdOn":"2022-07-21"}},{"id":194,"attributes":{"title":"scalable-infrastructure","path":"scalable-infrastructure/","description":"In our last webinar, we welcomed Killian from Golem.ai, and Sylvia and Jonathan from Microbiome Studio. We discussed how they built scalable infrastructure to support their startups' goals. They shared their experience, what they learned along their journeys, and how they optimized their infrastructure. Here is a cheat sheet of their best practices: \n\n## Start simple\n\nSimplicity is often crucial when launching a new product or service. To get a scalable infrastructure, you need to start somewhere. However, as exciting as setting up a whole cluster of microservices with five layers of abstraction might sound, the best advice we could give you is to start simple. Build based on your needs at this stage, time and practice will tell you which needs will persist, then you can add to them. \nOver-engineering can be your doom. It will have the opposite effect to what you intended: it will cause your flexibility and evolution to stall. So keep it simple from the start. \n\n## Managed products\n\nStart simple, but start in a way that allows you to build on. This is what managed products are specifically designed for: the cloud provider deals with all the installation and configuration, so all you need to do is leverage a comprehensive, user-friendly setting you can install and scale in two clicks. This significant time-saver allows your teams to focus on more important topics. \n\n## Storage\n\nYou can drastically optimize your bill in the long run just by developing elastic data models at the beginning of the building process. There are different types of data storage, each coming with its own characteristics, latency, and pricing. For instance, you can use Block Storage to store necessary information for the duration of the project, and then once completed, you can archive it with Object Storage, as Microbiome Studio does. \n \nTo help you make the right choice, Scaleway’s own DbaaS PM wrote a [guide on how to choose the right type of storage](https://www.scaleway.com/en/blog/managed-database-how-to-choose-the-right-type-of-storage/). \n\n## Redundancy\n\nIf a service exists only once, then it does not exist. This is indeed the mantra of [Golem.ai](https://golem.ai/). Infrastructure as a Service is instrumental when you are building efficient infrastructure. Replicating the services is a fundamental element that allows you to stay at the top of your game in the face of challenges. \n\n## Automate everywhere\n\nEnsure that each deployment is not a three-day job when it can be done in just one click.. \nFor instance, autoscaling is a powerful tool for optimizing your resources or managing workload peaks. You can scale to zero whenever you need, even at night! Even if a client decides to process a million documents overnight, autoscaling can handle it without needing your team to wake up at 2 AM! \n\n## Observability \u0026 debugging\n\nMonitoring and debugging are very important. Knowing what is happening on your infrastructure is crucial for both DevOps and user comprehension. You can use open-source tools like [Grafana](https://grafana.com/) (open-source analytics \u0026 monitoring solution for databases) or Sentry (application monitoring and error tracking software) to give you the data you need. \n\n## A comprehensive vision\n\nVisualize the different infrastructure components to improve the coupling of these elements. The infrastructure WILL evolve: you need to be able to modify it when necessary. So having a comprehensive vision of all your services is a must if you want them to work together. After all, your infrastructure is a big machine made of tons of smaller machines, don’t make the mistake of focusing on one element at the cost of the whole infrastructure. \n\n## Identify energy-intensive resources\n\nIdentify the resources consumed in terms of CPU, RAM, and data storage to optimize those that are less energy-efficient. For instance, with Serverless, you can switch on and off your machine depending on the resources you need. To schedule all this, automation techniques for resource supply and the configuration of these machines allow for more scalability. [Open-source tools](https://www.scaleway.com/en/blog/40-open-source-projects/) such as Grafana to monitor and analyze databases are a must-known here. \n\n## Empower your team\n\nThe strength of your company and products comes directly from your team: the people who made it all happen. For instance, learning to use managed products can seem complicated, or even pointless when you already have a team that could replicate this work. You might also think that manual installation is a saving. On the contrary, practice often shows that the amount of time you will need, not to mention getting up at 2 AM to relaunch the faulty server, makes it everything but a saving! \n \n## Think multi cloud\n\n[92%](https://www.flexera.com/blog/cloud/cloud-computing-trends-2021-state-of-the-cloud-report/) of companies use more than one cloud provider, yet don’t realize the power of a well-thought multi-cloud strategy. For instance, a startup with international ambition could run its infrastructure on a Kubernetes cluster, think about using a multi-cloud orchestrator such as [Kosmos](https://www.scaleway.com/en/blog/k8s-multi-cloud/). It will allow you to plug your cluster in data centers of different cloud providers from all over the world to guarantee that your client's data is hosted locally - which is starting to be a must for a lot of companies.","createdAt":"2023-01-18T17:52:43.417Z","updatedAt":"2023-02-02T16:26:55.252Z","publishedAt":"2023-01-18T17:53:04.692Z","locale":"en","tags":"Startup\nInfrastructure\nBest practices\nTestimonials","popular":false,"articleOfTheMonth":false,"category":"Build","timeToRead":4,"excerpt":"Kilian \u0026 Sylvia shared their experience as CTO: what they learned along their journeys and how they optimized their infrastructure. Here is a cheat sheet of their best practices.","author":"Hana Khelifa","h1":"Best practices to build a scalable infrastructure","createdOn":"2022-07-08"}}]},"meta":{"id":716,"title":"Infrastructure as Code @Scaleway (2/3) - Internal usage","description":"Scaleway manages a lot of resources. Efficient tools are essential to manage all these assets at scale. In this article, we will review the different tools we use and how our product teams are using them to deliver your cloud resources as efficiently as possible.\n","ogtype":null,"ogtitle":null,"ogdescription":"Scaleway manages a lot of resources. Efficient tools are essential to manage all these assets at scale. In this article, we will review the different tools we use and how our product teams are using them to deliver your cloud resources as efficiently as possible.\n","noindex":false},"localizations":{"data":[]}}},{"id":64,"attributes":{"title":"infrastructure-as-code-supported-tools-3-3","path":"infrastructure-as-code-supported-tools-3-3/","description":"We will see what kind of infrastructure as code tooling you can use with your Scaleway resources.\n\nAs we have seen in the first article, infrastructure as code allows you to define your infrastructure as a code in a given language. Those tools usually support several vendors. This helps users to adapt quickly to a new setup with a new provider while keeping the same development methodology.\n\nVendor supports can vary depending on the tool you use. In this article, we will focus on the most widespread infrastructure as code tool that Scaleway natively supports. For each of these tools, we will link several tutorials to help you get started and quickly gain knowledge on them.\n\nAll the tools we present work on the most common platforms, such as Linux, macOS, Windows, FreeBSD, and NetBSD.\n\n## Ansible\n\n[Ansible](https://www.ansible.com) is a very versatile tool used to provision and perform actions on a set of machines. Ansible works by providing modules that will execute tasks on a remote target. Those tasks can be executed in a sequence to perform complex actions such as configuring a complete software stack on a remote host.\n\n### Product Modules\n\nAnsible ships many modules that connect directly with our APIs to provide infrastructure automation inside your Ansible playbooks.\n\nAt the moment, the latest Ansible version supports:\n\n| Scaleway service | Related Ansible module |\n| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Instance | [scaleway\\_compute](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fcompute%5Fmodule.html) – Scaleway compute management module |\n| Flexible IP | [scaleway\\_ip](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fip%5Fmodule.html) – Scaleway IP management module |\n| Scaleway Load Balancer | [scaleway\\_lb](https://docs.ansible.com/ansible/latest/modules/scaleway%5Flb%5Fmodule.html) – Scaleway load-balancer management module |\n| Security Group | [scaleway\\_security\\_group](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fsecurity%5Fgroup%5Fmodule.html) – Scaleway Security Group management module |\n| Security Group rules | [scaleway\\_security\\_group\\_rule](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fsecurity%5Fgroup%5Frule%5Fmodule.html) – Scaleway Security Group Rule management module |\n| Authorized SSH keys | [scaleway\\_sshkey](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fsshkey%5Fmodule.html) – Scaleway SSH keys management module |\n| Metadata API | [scaleway\\_user\\_data](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fuser%5Fdata%5Fmodule.html) – Scaleway user\\_data management module |\n| Scaleway Volumes | [scaleway\\_volume](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fvolume%5Fmodule.html) – Scaleway volumes management module |\n\nThese modules perform actions on your Scaleway resources. Sometimes in your playbook, you don't want to modify anything, but instead, want to fetch data to inject it in Ansible tasks. That's where facts modules come in. These modules are designed to fetch the information from Scaleway APIs and make them available inside your tasks. For instance, you can fetch the IP instances attached to an instance to configure a particular application.\n\n| Ansible facts module | Description |\n| ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |\n| [scaleway\\_security\\_group\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fsecurity%5Fgroup%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway security groups available |\n| [scaleway\\_image\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fimage%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway images available |\n| [scaleway\\_ip\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fip%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway IPs available |\n| [scaleway\\_volume\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fvolume%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway volumes available |\n| [scaleway\\_server\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fserver%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway servers available |\n| [scaleway\\_snapshot\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Fsnapshot%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway snapshots available |\n| [scaleway\\_organization\\_facts](https://docs.ansible.com/ansible/latest/modules/scaleway%5Forganization%5Ffacts%5Fmodule.html) | Gather facts about the Scaleway organizations available |\n\n### Inventory\n\nInventory is a core concept of Ansible. It allows you to define a large host set that can be a target for the execution of a set of tasks. Inventories can have many forms. They can be a static file that contains a host list, but they can also be a plugin that will execute code and return data about a set of hosts. This is particularly useful in a cloud environment where resources are very elastic and dynamic.\n\n[Scaleway inventory plugin](https://docs.ansible.com/ansible/latest/plugins/inventory/scaleway.html) brings you these features. This plugin fetches your resources from our APIs and presents them to you in an Ansible compatible format. It can also perform filter operation on tags and regions so you can execute on a fine-grained host set.\n\n### Evolution of Ansible support\n\nAs you can see, Scaleway's support in Ansible is widespread and encompasses many useful features. You can have a complete provisioning stack with Ansible that can install your application on Scaleway infrastructures natively.\n\nAnsible is on the Scaleway roadmap for active support! We plan to have a Python SDK generated just like our golang SDK. This would allow us to add support very easily to new products with any tool written in Python.\n\n## Packer\n\n[Packer](https://packer.io) creates machine images for multiple platforms from a single source configuration file. It can build images for multiple cloud providers platforms, including [Scaleway](https://www.packer.io/docs/builders/scaleway.html).\n\nThis tool is typically used to build a reference image (like a _golden image_) that has an environment ready to run your application. Packer can run multiple provisioners, including [Ansible](https://developer.hashicorp.com/packer/plugins/provisioners/ansible/ansible). By doing so, you can combine both tools to have images that are fully managed by code.\n\nYou can find tutorials on our website about how to deploy your image using [Packer](https://www.scaleway.com/en/docs/deploy-cloud-servers-with-packer-and-terraform/).\n\nWe want to migrate Packer to use our new [go SDK](https://github.com/scaleway/scaleway-sdk-go).\n\n## Terraform\n\n[Terraform](https://www.terraform.io) is a popular tool to spawn entire infrastructure with code. Scaleway has been involved with Terraform for a long time. We wanted to keep investing in this tool due to its massive and popular adoption.\n\nWe are currently refactoring [our Terraform provider](https://www.terraform.io/docs/providers/scaleway/) to use [our refactored SDK](https://github.com/scaleway/scaleway-sdk-go). This will help us to provide native support for new products quickly. This SDK uses resources' definition written as protobuf to streamline our development.\n\n## Kubernetes\n\n[Kubernetes](https://kubernetes.io) is a container orchestration solution that recently gained a tremendous amount of adoption. You can use Kubernetes to fully manage your infrastructures and application lifecycle.\n\nKubernetes is built around the idea of having the desired state for your infrastructure matching the observed state of your infrastructure. In Kubernetes, your application is described by a set of objects that make up your application (LoadBalancer configuration, number of replicas, placement on specific nodes, ...). This declarative paradigm is the same that we use in other infra as code tools.\n\nScaleway provides you with a managed Kubernetes. You can use this service to have a managed Kubernetes cluster upon which your application will be deployed. \nIf you prefer to manage your cluster yourself, you can use a solution such as [Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) to deploy your Kubernetes cluster on Scaleway. \n\nAs for the roadmap, we will release our [cloud controller manager (CCM)](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) soon.\n\n## Conclusion\n\nScaleway natively supports a wide range of Infrastructure as code use cases. \nUsing infra as code allows you to benefit from versioning, code reviews, and reproducibility, to name a few.\n\nThere are many other options available to control your resources: we got a [command-line interface](https://github.com/scaleway/scaleway-cli), a [web console](https://console.scaleway.com), and [REST APIs](https://developers.scaleway.com/en/).\n\nJoin us on the `#opensource` channel of [our community Slack](https://slack.scaleway.com) to give us feedback on our opensource tools. \nYou can create an account on [Scaleway](https://www.scaleway.com/en/) and receive a voucher of 500 EUR to use freely for one month 🚀.","createdAt":"2023-01-17T13:37:49.300Z","updatedAt":"2023-02-23T13:17:17.004Z","publishedAt":"2023-01-17T13:40:30.682Z","locale":"en","tags":"Infrastructure-as-code","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":8,"excerpt":"In this final article of our Infrastructure-as-code series, we will see what kind of infrastructure-as-code tooling you can use with your Scaleway resources.","author":"Rémy Léone","h1":"Infrastructure as code - Supported tools","createdOn":"2021-11-23","image":{"data":{"id":1534,"attributes":{"name":"Infrastructure-Illustration-Blog.webp","alternativeText":null,"caption":null,"width":1216,"height":752,"formats":{"large":{"ext":".webp","url":"https://www-uploads.scaleway.com/large_Infrastructure_Illustration_Blog_a8e27e62b9.webp","hash":"large_Infrastructure_Illustration_Blog_a8e27e62b9","mime":"image/webp","name":"large_Infrastructure-Illustration-Blog.webp","path":null,"size":"281.97","width":1000,"height":618},"small":{"ext":".webp","url":"https://www-uploads.scaleway.com/small_Infrastructure_Illustration_Blog_a8e27e62b9.webp","hash":"small_Infrastructure_Illustration_Blog_a8e27e62b9","mime":"image/webp","name":"small_Infrastructure-Illustration-Blog.webp","path":null,"size":"97.45","width":500,"height":309},"medium":{"ext":".webp","url":"https://www-uploads.scaleway.com/medium_Infrastructure_Illustration_Blog_a8e27e62b9.webp","hash":"medium_Infrastructure_Illustration_Blog_a8e27e62b9","mime":"image/webp","name":"medium_Infrastructure-Illustration-Blog.webp","path":null,"size":"183.64","width":750,"height":464},"thumbnail":{"ext":".webp","url":"https://www-uploads.scaleway.com/thumbnail_Infrastructure_Illustration_Blog_a8e27e62b9.webp","hash":"thumbnail_Infrastructure_Illustration_Blog_a8e27e62b9","mime":"image/webp","name":"thumbnail_Infrastructure-Illustration-Blog.webp","path":null,"size":"31.70","width":245,"height":152}},"hash":"Infrastructure_Illustration_Blog_a8e27e62b9","ext":".webp","mime":"image/webp","size":385.66,"url":"https://www-uploads.scaleway.com/Infrastructure_Illustration_Blog_a8e27e62b9.webp","previewUrl":null,"provider":"@website/strapi-provider-upload-scaleway-bucket","provider_metadata":null,"createdAt":"2023-01-17T13:39:16.407Z","updatedAt":"2023-01-17T13:39:16.407Z"}}},"recommendedArticles":{"data":[{"id":196,"attributes":{"title":"migrating-to-kubernetes","path":"migrating-to-kubernetes/","description":"[Mon Petit Placement](https://www.monpetitplacement.fr/) is a French startup specializing in investing. As they scaled, they needed an infrastructure to support their growth, so they teamed up with [Skyloud](https://www.skyloud.fr/). Skyloud supported them in migrating their infrastructure to the cloud, and more particularly on Kubernetes. I interviewed Skyloud’s CTO, Etienne Fachaux, to understand how they used Kubernetes and Terraform to migrate VM-based infrastructure to the cloud.\n\n## Cloud migration to enable scaling\n\nThe migration came from the need to have a scalable platform to do FinOps. Mon Petit Placement needed the cost of their infrastructure to be optimized and based on their actual use: as nothing happens at night, and they had a big spike during the day, they didn’t want to pay for fixed resources.\n\nThe original architecture was based on dedicated servers and[ instances](https://www.scaleway.com/en/virtual-instances/), which required too much time to install and configure, but mostly blocked the flexibility and scalability they needed. It was neither scalable nor redundant, as they had a single point of failure. So if there’s a down, they had no backup solution except reinstalling the service.\n\nSo they called Skyloud to build new infrastructure on the Cloud to unlock the cloud’s benefits.\n\n## Make your legacy cloud-native\n\nThe most challenging part of migrating to the Cloud is restructuring the application to make it cloud-native and easily usable for the developers. So they did it in two steps: one to educate on the new practices and new deployment methods engineers on Mon Petit Placement’s team, and the second to migrate, install and test everything.\n\nThis allowed Mon Petit Placement’s engineering team to have time to get onboarded on those drastic changes.\n\nMon Petit Placement and Skyloud chose Kubernetes as the main component of their infrastructure, with complementary solutions such as a personalized CI/CD. The migration was smooth thanks to Terraform and Kapsule, which allowed Skyloud to test and deploy quickly.\n\nTerraform was a great support in executing this project: it was the obvious choice to have every resource documented on its implementation in a coded form. Terraform helped give full transparency on how their infrastructure got deployed on the cloud. That enabled Mon Petit Placement to evolve without being stuck and needing to call on Skyloud at every step. They only had benefits thanks to this migration.\n\n## Kubernetes infrastructure open to the multi-cloud\n\nKubernetes has a strong community that brings a lot to the cloud industry and has the benefits of being cloud-agnostic and open-source. All those reasons make Kubernetes particularly loved at Skyloud - which is also a significant[ open-source contributor](https://github.com/skyloud).\n\nKubernetes also enables its clients to switch to a multi-cloud strategy whenever they want to, thanks to the infrastructure delivered by Skyloud on Kubernetes. Skyloud provides an entirely done infrastructure, with a door open to the multi-cloud, to let the company be free to choose and be flexible on their growth. They don’t want their client to depend on them, or a specific cloud provider - which means providing the best tools in an agile environment.\n\nThey chose Kubernetes to implement this new infrastructure as it meets the fundamental principles of good infrastructure and applicative architecture. The standardization of Kubernetes brings flexibility, agility and enables the developers to test components that were inaccessible before Kubernetes.\n\nKubernetes allows interfacing two clouds thanks to the compatible connector. If clouds don’t work together on shared projects to unify the cloud industry, then their client pays the price; it’s complicated for us to have interoperability between clouds to allow secure communication between clouds.\n\nThere is a strong need for companies to control the flow between clouds.\n\nFor Skyloud, Kubernetes is a response to that, or Rancher too. Rancher is an open-source tool we particularly enjoy thanks to its polyvalence and its interoperability between clouds, which gives more flexibility in our deployment and allows us to benefit from each cloud's strengths.\n\n## Pedagogy is key\n\nSignificant changes always ask for a pedagogical approach. Without it, a new solution risk not sticking and being used. So Skyloud put in place tools and visuals to support the engineering team of their clients in understanding how their new infrastructure works, all the new deployment methods, and the new CI/CD.\n\nThe goal is not to have clients who depend on Skyloud’s service but to empower them. They can intervene in any bricks of the infrastructure, whether it’s Gitlab or Terraform, and add what they want to weed this new infrastructure with new tools and application concepts.\n\nSkyloud handles all the redundant parts and automatizable to provide a clear and finished CI. Then the client adds on whatever he may need - with Skyloud being on their corner if they need support.\n\nSo if you are a startup that wants to migrate to the cloud to optimize its infrastructure, with an engineering team to focus on the product to tackle this mission, how about relying on a partner?","createdAt":"2023-01-18T18:13:00.405Z","updatedAt":"2023-02-14T08:26:44.963Z","publishedAt":"2023-01-18T18:15:22.384Z","locale":"en","tags":"Kubernetes\nMigration\nInfrastructure\nTestimonials","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":4,"excerpt":"Discover how Mon Petit Placement, a french startup, migrated their infrastructure to the cloud, and more particularly on Kubernetes and how they made their legacy cloud-native.","author":"Hana Khelifa","h1":"Making a legacy cloud-native, the Skyloud testimonials","createdOn":"2022-11-23"}},{"id":234,"attributes":{"title":"using-infrastructure-as-code-to-migrate","path":"using-infrastructure-as-code-to-migrate/","description":"[LockSelf](https://www.lockself.com/) is a French startup specializing in cybersecurity. We are developing solutions for access security and management, as well as sharing sensitive passwords and documents. We recently migrated out of AWS and into Scaleway - and a lot of European Startups will face the same mission to get back the sovereignty of their data. We wanted to share our experience doing so. We hope it will help some of you.\n\n## Lockself: data security as a core business \n\nThe data we manage is critical: passwords, sensitive data, and so on. The organizations we support have particularly high standards for their storage - both in terms of where it is hosted and by whom. Our first challenge, more than just data encryption, is to make sure employees’ accesses are secure, as they are the main gateway in the event of a cyberattack. \n\nWe used to host our data with AWS. However, as we grow, the demand for a sovereign cloud is growing too, which is a real business challenge for us. Beyond a qualitative product, our clients need their data hosted in France, and this can’t be done properly without a French cloud provider.\n\nBy changing providers, we can answer the growing demand from our clients’ end users or suppliers regarding the security of the solutions used to share and manage specific sensitive data.\n\nIt is a strategic issue as we always wanted to position ourselves on a secure end-to-end approach with a high level of security on the application and encryption side and a high level of trust on the data storage side. This will now translate into 100% French cloud hosting offers adapted to the needs of each client. The on-premise offer obviously remains, now more than ever, relevant for players wishing or having the obligation to manage our solutions internally.\n\nFinally, working with a French stakeholder such as Scaleway, capable of providing us with the same level of service as AWS, is aligned with the values that we hold in terms of sovereignty and on which we must be consistent, especially as we work in cybersecurity.\n\n## Multi cloud as a way to back up data\n\nSome of our customers are still hosted by Outscale as Outscale was historically used alongside AWS for our dedicated hosting offer. Today, this multi-cloud strategy allows us to rely on each provider to outsource backups from one to the other - backups made on Outscale are outsourced to Scaleway and vice versa. This operation allows us to have a healthy backup management 100% based on French hosting. \n\n## From AWS to Scaleway\n\nWe used AWS ec2 for our application instances, RDS for databases, Amazon S3 for storing our files and a load balancer to distribute the load on the different ec2 instances.\n\nBeing a data vault, we host both passwords and files. We store our files on Amazon S3 and our passwords on a Mariadb database.\n\nThe data migration was done via Rclone from Amazon S3 to Object Storage. We had planned our migration via Rclone ahead of time, so that most of the files could be transferred immediately. On migration day, the Rclone only had to sync the latest changes and the migration took no more than an hour.\n\n## From Amazon S3 to Object Storage: using Rclone to migrate\n\nRclone is a command-line tool that allows you to copy/synchronize data stored in objects such as Amazon S3 at AWS and Object Storage at Scaleway. It is a sort of Swiss army knife that allowed us to directly communicate between Amazon S3 and Object Storage without going through a transition server.\n\nThe database migration required more preparation because Scaleway’s Database service does not offer Mariadb. So we decided to take advantage of Kosmos to deploy a Mariadb Galera cluster.\n\nThis also allowed us to have a database replicated in several hosting zones (fr-par-1, fr-par-2, fr-par-3). Thanks to this system, we benefit from very high availability and resilience for the storage of our passwords. \n\n## Terraform to simplify the migration process\n\nOur application, developed in Symfony, was hosted in Docker containers at AWS, on several servers to ensure high availability and positioned behind an Elastic Load Balancer.\n\nTo replicate this at Scaleway, we used a Load Balancer to continuously receive incoming requests which are then transmitted to the Ingress-Nginx Load Balancer of the Kubernetes cluster managed by Scaleway. The load is then distributed between the different application containers. This configuration allows us to achieve an even higher level of availability than on AWS.\n\nOur backup system did not need to undergo any modifications because it still uses s3cmd, and only the destination of the backups was changed. \n\nThe configuration of this infrastructure, managed by a Terraform project, allows us to maintain an Infrastructure as Code, and to gain agility in maintaining it in operational conditions. \n\n## The aftermath \n\nFollowing the migration, we observed shorter response times, which can be explained by the closer location of our new servers compared to the old ones, and by the improved performance of Scaleway’s servers. We did not initially need such high performance, but all of Scaleway's servers - including the least efficient - are equipped with high-performance processors.\n\nAs a result, we have chosen Scaleway’s least powerful servers, but even these remain more efficient than our previous servers at AWS, even if they are more expensive. However, for the moment, we find the price/performance ratio more interesting at Scaleway than at AWS. We, therefore, expect to receive a higher bill, but with an infrastructure that can support greater use.","createdAt":"2023-01-19T12:46:03.767Z","updatedAt":"2024-10-25T14:48:33.009Z","publishedAt":"2023-01-19T12:47:56.762Z","locale":"en","tags":"Infrastructure-as-code\nTerraform\nMigration\nSovereignty\nStorage\nMulti-Cloud\nTestimonials","popular":false,"articleOfTheMonth":false,"category":"Deploy","timeToRead":3,"excerpt":"We recently migrated out of AWS and into Scaleway - and a lot of European Startups will face the same mission to get back the sovereignty of their data. We wanted to share our experience doing so.","author":"Lockself","h1":"Migrating from AWS to Scaleway using Terraform","createdOn":"2022-05-04"}},{"id":179,"attributes":{"title":"terraform-how-to-init-your-infrastructure","path":"terraform-how-to-init-your-infrastructure/","description":"Hi everyone! I’m Jules, Developer Relations Manager at Scaleway, and today I am going to show you how Terraform is going to change the way you currently manage your cloud infrastructure. If you want to quickly and easily set up a cloud infrastructure, one of the best ways to do it is to create a Terraform repository. You will then be able to deploy your resources in a few clicks.\n\nTerraform is an open-source, Infrastructure-as-Code tool that helps you manage your infrastructure at any time, deploy it/delete it in just one click, and work with other developers on your projects. Previously, I worked as a Solutions Architect for different projects, and it really helps me keep track of my work, the infrastructures that I deployed and also allows many developers to work on the same project easily. \n \nBefore starting on the project, you need to have an [account](https://www.scaleway.com/en/docs/console/my-account/how-to/create-an-account/), your [credentials](https://www.scaleway.com/en/docs/console/my-account/concepts/#api-key) all set up, and [install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) on the server you are using, or locally, using the last version of the [Scaleway Terraform provider](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs).\n\n## Best practices to structure a Terraform environment \n\nFirst, let’s create our workspace. Even if it is not at all mandatory, Terraform developers like to organize their repository to easily find their resources. It also allows you to store your data in a unique location, depending on the environment you want to deploy your infrastructure in (you can have a repository for your development infrastructure, etc.). \n\nNow we are going to create four different files:\n\n* main.tf: will contain the main set of configurations for your project. Here, it will be our instance\n* provider.tf: Terraform relies on plugins called “providers” to interact with remote systems\n* backend.tf: each Terraform configuration can specify a backend, which defines where the state file of the current infrastructure will be stored. Thanks to this file, Terraform keeps track of the managed resources. This state can be stored locally or remotely. Configuring a remote backend allows multiple people to work on the same infrastructure\n* variables.tf: will contain the variable definitions for your project. Since all Terraform values must be defined, any variables that are not given a default value will become required arguments\n* terraform.tfvars: allows you to set the actual value of the variables\n\nFor the time being, let’s just create these four files and fill the backend and the provider as in this example:\n\n```bash\nterraform {\n backend \"s3\" {\n bucket = \"XXXXXXXXX\"\n key = \"terraform.tfstate\"\n region = \"fr-par\"\n endpoint = \"https://s3.fr-par.scw.cloud\"\n skip_credentials_validation = true\n skip_region_validation = true\n }\n}\n\n\n/*\nFor the credentials part:\n==\u003e Create a ~/.aws/credentials:\n[default]\naws_access_key_id=\u003cSCW_ACCESS_KEY\u003e\naws_secret_access_key=\u003cSCW_SECRET_KEY\u003e\nregion=fr-par\n*/\n```\n\n```bash\nterraform {\n required_providers {\n scaleway = {\n source = \"scaleway/scaleway\"\n version = \"2.2.0\"\n }\n }\n required_version = \"\u003e= 0.13\"\n}\n```\n\n## Organize your files properly on Terraform\n\nBesides the code we are providing you with, our Terraform directory consists of several other files, created by the Terraform provider itself, to keep your infrastructure on tracks:\n* .terraform/ : this directory contains the providers pulled down to local. It will be re-created when terraform init is run in a new environment\n* terraform.tfstate and terraform.tfstate.backup: these files contain the Terraform state specific to a specific environment. These files may contain sensitive information stored in plain text from the previous deployment\n* terraform.tfvars : may contain secrets (usernames, password, IP addresses, etc.) about a specific environment\n\nWe should take steps to avoid check-in of such files. Indeed, there is some content you really do not want to display (like with many other programming languages). For this, we can use a .gitignore file and mention the extension of such files.\n\n## Team work on Terraform \n\nAn important thing to know about Terraform is that it stores the resources it manages into a state file. There are two types of state files: remote and local. But how do we work when we use a remote state file? What keeps us from deleting what our amazing coworkers have deployed into their infrastructure? The combinaison of a backend + a remote state! Where local state is great for an isolated developer, remote state is absolutely necessary for a team, as each member will need to share the infrastructure state whenever there is a change. \n\nSo, each time a change is applied, the state is updated with new values: creations, deletions, and updates. \nKnowing that, we can assume that it is going to be much more convenient to set up a backend for each developer so they can participate in our Terraform project. In our case, we will set up an Object Storage bucket to store our backend (do not forget to set up your bucket credentials in \\~/.aws/credentials). \n\nDon’t forget to **create your bucket before creating your backend**. This is the only thing you have to do by yourself in the console, or via the API, before launching your project.\n\n## Deploying our first resources: instance + block\n\nHere, we are going to fill our main.tf with our instance resources. \nFor this part, we are going to launch our first instance with an IP and a volume attached to it. \n\n```bash\nresource \"scaleway_instance_ip\" \"public_ip\" {}\n\nresource \"scaleway_instance_volume\" \"scw-instance\" {\n size_in_gb = 30\n type = \"l_ssd\"\n}\n\nresource \"scaleway_instance_server\" \"scw-instance\" {\n type = \"DEV1-L\"\n image = \"ubuntu_focal\"\n\n tags = [\"terraform instance\", \"scw-instance\"]\n\n ip_id = scaleway_instance_ip.public_ip.id\n\n additional_volume_ids = [scaleway_instance_volume.scw-instance.id]\n\n root_volume {\n # The local storage of a DEV1-L instance is 80 GB, subtract 30 GB from the additional l_ssd volume, then the root volume needs to be 50 GB.\n size_in_gb = 50\n }\n}\n\n```\n\nAlso, do not forget to fill your variables.tf and your terraform.tfvars:\n\n```bash\nvariable \"zone\" {\n type = string\n}\n\nvariable \"region\" {\n type = string\n}\n\nvariable \"env\" {\n type = string\n}\n\n```\n\n```bash\nzone = \"fr-par-1\"\nregion = \"fr-par\"\nenv = \"dev\"\n\n```\n\nTo finally launch our infrastructure, let’s switch on our terminal and write these three commands:\n`Terraform Init` \n`Terraform plan` \n`Terraform apply`\n\n## Deploying a Kubernetes Kapsule cluster with Terraform\n\nKapsule is the managed Kubernetes cluster developed by Scaleway. To deploy it with Scaleway, you will have to create a cluster resource and a pool associated. In our example, we add an autoscaling plus an auto\\_upgrade (every Sunday at 4 a.m). \n\n```bash\nresource \"scaleway_k8s_cluster\" \"kapsule\" {\n name = \"kapsule-${var.env}\"\n description = \"${var.env} cluster\"\n version = var.kapsule_cluster_version\n cni = \"calico\"\n tags = [var.env]\n\n autoscaler_config {\n disable_scale_down = false\n scale_down_delay_after_add = \"5m\"\n estimator = \"binpacking\"\n expander = \"random\"\n ignore_daemonsets_utilization = true\n balance_similar_node_groups = true\n expendable_pods_priority_cutoff = -5\n }\n\n auto_upgrade {\n enable = true\n maintenance_window_start_hour = 4\n maintenance_window_day = \"sunday\"\n }\n}\n\nresource \"scaleway_k8s_pool\" \"default\" {\n cluster_id = scaleway_k8s_cluster.kapsule.id\n name = \"default\"\n node_type = var.kapsule_pool_node_type\n size = var.kapsule_pool_size\n autoscaling = true\n autohealing = true\n min_size = var.kapsule_pool_min_size\n max_size = var.kapsule_pool_max_size\n}\n```\n\n```bash\nvariable \"kapsule_cluster_version\" {\n type = string\n}\n\nvariable \"kapsule_pool_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_min_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_max_size\" {\n type = number\n}\n\nvariable \"kapsule_pool_node_type\" {\n type = string\n}\n\n```\n\n```bash\nkapsule_cluster_version = \"1.22\"\nkapsule_pool_size = 2\nkapsule_pool_min_size = 2\nkapsule_pool_max_size = 4\nkapsule_pool_node_type = \"DEV1-M\"\n```\n\n## Adding the database\n\nFirst export your passwords in a var env: \n\n`\u003e export TF_VAR_rdb_user_root_password=”PASSWORD”`\n\n`\u003e export TF_VAR_rdb_user_scaleway_db_password=\"test\"`\n\nN.B.: a little reminder about passwords. Passwords at Scaleway must be between 8 and 128 characters, contain at least one digit, one uppercase, one lowercase, and one special character. \n\nThen, just create the resources needed for your database: the instance, the database, the user and your ACLs:\n\n```bash\nresource \"scaleway_rdb_instance\" \"scaleway-rdb\" {\n name = \"postgresql-${var.env}\"\n node_type = var.rdb_instance_node_type\n volume_type = var.rdb_instance_volume_type\n engine = var.rdb_instance_engine\n is_ha_cluster = var.rdb_is_ha_cluster\n disable_backup = var.rdb_disable_backup\n volume_size_in_gb = var.rdb_instance_volume_size_in_gb\n user_name = \"root\"\n password = var.rdb_user_root_password\n}\n\nresource \"scaleway_rdb_database\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n name = \"${var.env}-database\"\n}\n\nresource \"scaleway_rdb_user\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n name = \"${var.env}-user-database\"\n password = var.rdb_user_scaleway_db_password\n is_admin = false\n}\n\nresource \"scaleway_rdb_acl\" \"scaleway-rdb\" {\n instance_id = scaleway_rdb_instance.scaleway-rdb.id\n acl_rules {\n ip = \"${scaleway_instance_ip.public_ip.address}/32\"\n description = \"SCW instance\"\n }\n}\n\n```\n\n```bash\nrdb_instance_node_type = \"db-gp-xs\"\nrdb_instance_engine = \"PostgreSQL-13\"\nrdb_is_ha_cluster = true\nrdb_disable_backup = false\nrdb_instance_volume_type = \"bssd\"\nrdb_instance_volume_size_in_gb = \"50\"\n```\n\n```bash\nvariable \"rdb_is_ha_cluster\" {\n type = bool\n}\n\nvariable \"rdb_disable_backup\" {\n type = bool\n}\n\nvariable \"rdb_instance_node_type\" {\n type = string\n}\n\nvariable \"rdb_instance_engine\" {\n type = string\n}\n\nvariable \"rdb_instance_volume_size_in_gb\" {\n type = string\n}\n\nvariable \"rdb_user_root_password\" {\n type = string\n}\n\nvariable \"rdb_user_scaleway_db_password\" {\n type = string\n}\n\nvariable \"rdb_instance_volume_type\" {\n type = string\n}\n```\n\nFinally, you will have your own infrastructure, with an instance, a database which is only capable to communicate with instance, and a kapsule cluster, all ready to use !\n\n## What’s coming next?\n\nThis article is only the first part of our “How you can use Terraform to deploy your Scaleway infrastructure” series. We hope that, by reading it, you will realize that Terraform is a fantastic tool to manage your cloud infrastructures at Scaleway. Of course, we have more products to show you, and there is always room for improvement: for example, wrap everything into a module to easily use this code in another project. We will tackle this topic in a future article.","createdAt":"2023-01-18T15:58:07.168Z","updatedAt":"2024-10-25T14:45:44.397Z","publishedAt":"2023-01-23T03:06:30.603Z","locale":"en","tags":"Terraform\nInfrastructure\nInfrastructure-as-Code\nDiscover\nQuickstart","popular":false,"articleOfTheMonth":false,"category":"Build","timeToRead":10,"excerpt":"If you want to quickly and easily set up a cloud infrastructure, one of the best ways to do it is to create a Terraform repository. Learn the basics to start your infrastructure on Terraform.","author":"Jules Martin","h1":"Terraform: how to init your infrastructure","createdOn":"2022-07-21"}}]},"meta":{"id":585,"title":"Infrastructure as code - Supported tools","description":"In this final article of our Infrastructure-as-code series, we will see what kind of infrastructure-as-code tooling you can use with your Scaleway resources.","ogtype":null,"ogtitle":null,"ogdescription":"In this final article of our Infrastructure-as-code series, we will see what kind of infrastructure-as-code tooling you can use with your Scaleway resources.","noindex":false},"localizations":{"data":[]}}}]},"meta":{"id":711,"title":"Building a scalable video conferencing solution in a single day, using Jitsi and Scaleway Elements","description":"In the last 48 hours, several Scaleway teams were on the front line to launch, in less than a day, an integral videoconferencing solution: Ensemble.","ogtype":null,"ogtitle":null,"ogdescription":null,"noindex":false,"ogimage":{"data":null}},"localizations":{"data":[]}}},"_nextI18Next":{"initialI18nStore":{"en":{"common":{"open":"Open","close":"Close","backTo":"Back to {{page}}","seeMore":"See more","skip":"Skip {{to}}","toLogin":"to login","toMain":"to main content","toFooter":"to footer section","footer":{"followUs":"Follow us","subLinks":{"contracts":{"href":"/en/contracts/","title":"Contracts"},"legalNotice":{"href":"/en/legal-notice/","title":"Legal Notice"},"privacyPolicy":{"href":"/en/privacy-policy/","title":"Privacy Policy"},"cookie":{"href":"/en/cookie/","title":"Cookie"},"securityMeasures":{"href":"https://security.scaleway.com","title":"Security Measures"}}},"breadcrumb":{"homepageLink":{"home":{"href":"/","title":"Home"}}},"cookies":{"acceptAll":"Accept all","rejectAll":"Reject all","save":"Save settings","panelManagementTitle":"Manage cookies settings","panelConsent":{"title":"Cookie time!","description":"We use cookies in order to improve our website and to offer you a better experience. You can also consult our ","linkLabel":"Cookie policy","link":"/en/privacy-policy/","settings":"Manage your preferences"},"categories":{"functional":{"title":"Functional","subtitle":"Always active","description":"These cookies are required for the website to function properly and to allow you to use its services and features. Without these cookies, we would be unable to provide certain requested services or features."},"analytics":{"title":"Analytics","description":"These cookies are used to monitor the performance of our site and to enhance your browsing experience."},"marketing":{"title":"Marketing","description":"These cookies are used to understand user behavior in order to provide you with a more relevant browsing experience or personalize the content on our site."}}}},"blog":{"tagsAriaLabel":"Tags list. Click to choose as filter.","timeToRead":"{{min}} min read","recommendedArticles":"Recommended articles","pagination":{"next":"Forward to Next","previous":"Back to Previous","goToPage":"Go to page ","currentPage":"Current page: "},"copyButton":{"copied":"Copied!","defaultValue":"Copy","code":"Copy code"},"home":{"title":"Scaleway Blog - All posts","description":"Scaleway’s blog helps developers and startups to build, deploy and scale applications.","heading":"Scaleway Blog","articleOfMonth":"Must read","latestArticles":"Latest articles","popularArticles":"Most popular articles"},"categoryPage":{"build":{"title":"Build Projects with Scaleway","description":"Learn how to easily build and develop projects using Scaleway products."},"deploy":{"title":"Deploy Applications with Scaleway","description":"Discover how to deploy your applications smoothly with Scaleway."},"scale":{"title":"Scale Your Applications with Scaleway","description":"Find out how to efficiently scale your applications on Scaleway."},"incidents":{"title":"Incident Reports","description":"All the latest updates on Scaleway Cloud ecosystem incidents, and how they were resolved."}},"authorPage":{"title_one":"A {{author}}'s post","title_other":"All {{author}}'s posts","description_one":"Discover a blog post written by {{author}}.","description_other":"Discover all the blog posts written by {{author}}."}},"pages":{"available_zones":"Available zones:","city":"{{code}}:","AMS":"Amsterdam","PAR":"Paris","WAW":"Warsaw","yes":"Yes","no":"No","daily":"Daily","weekly":"Weekly","monthly":"Monthly","yearly":"Yearly","published":"Published on","seeMore":"See more","blocks":{"calculator":{"choose":"Choose your plan","availabilityZone":"Availability Zone","instanceType":"Instance Type","quantity":"Quantity","selectPlaceholder":"Select...","volumeSize":"Volume Size","volumeSizeHelper":"Min. 10 GB","volumeType":"Volume Type","sizeUnit":"GB","flexibleIp":"Flexible IPv4","ipHelper":"You need a Flexible IP if you want to get an Instance with a public IPv4.\n Uncheck this box if you already have one available on your account, or if you don’t need an IPv4.","noOtherType":"No other type available with this Instance"},"productFaq":{"title":"Frequently asked questions"},"productTutorials":{"title":"Get started with tutorials"},"customerStories":{"defaultTitle":"Customer success stories"}},"templates":{"beta":{"discovery":{"title":"Discovery","description":"Discovery products are prototypical versions of a product. This phase aims to validate an idea and to prove there is interest in the product. During the Discovery phase, customers can be contacted by the Product team to ask them to share their thoughts on the product and to help with the development of the new solution.\nProducts in the Discovery phase are not guaranteed to be released. The duration of the Discovery phase may vary depending on the product."},"early-access":{"title":"Early Access","description":""},"private":{"title":"Private Beta","description":"Private Beta products are early versions of future products or features. This phase allows users to test, validate a product in development, and give feedback to the Product team.\nPrivate Beta is limited to users selected by the Product Development team. Users can request access to the product via a form and the development team will grant access rights. The Private Beta stage usually lasts three to six months."},"public":{"title":"Public Beta","description":"Public Beta products are ready to be tested by all customers. Public Beta products may not include all of the final product’s features.\nPublic Beta is the last stage of testing before a product is released in General Availability.\nThese products are intended to be used in test environments unless specified otherwise. The Public Beta phase lasts six months on average."}},"domains":{"register":"Register","registerInfo":"Price before tax\nFirst year registration's price.","transfer":"Transfer","transferInfo":"Price before tax\nTransfer price for domain during first year.","renewing":"Renewing","renewingInfo":"Price before tax\nSecond year registration's price.","restoration":"Restoration","restorationInfo":"Price before tax\nPrice for renewing after expiration and/or redemption period."},"contact":{"titleForm":"Your contact","firstName":"First Name","lastName":"Last Name","email":"Email","jobRole":"Job Role","tel":"Phone (format: 33600000000)","digits":"Only digits","acme":"ACME","8ball":"8ball","emailPlaceholder":"username@domain.tld","john":"John","doe":"Doe","SocietyTitle":"Your société","company":"Company","industry":"Industry","country":"Country","legal":"Your data will be processed by Scaleway S.A.S. in order to manage your request. To know more, visit our","privacy":"Privacy Policy","ctaLabel":"Be contacted","optional":"(optional)","countries":{"labelCountry":"Select your country","france":"France","germany":"Germany","austria":"Austria","belgium":"Belgium","czechia":"Czechia","denmark":"Denmark","estonia":"Estonia","finland":"Finland","greece":"Greece","hungary":"Hungary","ireland":"Ireland","italy":"Italy","latvia":"Latvia","lithuania":"Lithuania","norway":"Norway","netherlands":"Netherlands","poland":"Poland","portugal":"Portugal","romania":"Romania","slovenia":"Slovenia","spain":"Spain","sweden":"Sweden","switzerland":"Switzerland","gb":"United Kingdom of Great Britain and Northern Ireland","usa":"United States of America","other":"Other"},"industries":{"labelIndustry":"Select your industry","computerSoftware":"Computer Software","consulting":"Consulting","ecommerce":"E-commerce","education":"Education","energy":"Energy","finance":"Finance,","gaming":"Gaming","hospitalHealthcare":"Hospital \u0026 Healthcare","infoTechnoServices":"Information Technology \u0026 Services","manufacturing":"Manufacturing","media":"Media","publicSector":"Public Sector","retail":"Retail","startups":"Startups","technology":"Technology","telecommunications":"Telecommunications","transportTruckRailroad":"Transportation/Trucking/Railroad"}},"contactPartner":{"partner":{"title":"Partner Identification","domain":"Your domain","placeholder":"example.com"},"opportunity":{"title":"Opportunity information","company":"Company name","project":"Project name","yourProject":"Your project name","name":"Contact name","firstName":"Contact first name","email":"Contact email","number":"Contact phone number","job":"Contact job title","onlyDigits":"Only digits","countries":{"title":"Country","labelCountry":"Select your country","france":"France","germany":"Germany","austria":"Austria","belgium":"Belgium","czechia":"Czechia","denmark":"Denmark","estonia":"Estonia","finland":"Finland","greece":"Greece","hungary":"Hungary","ireland":"Ireland","italy":"Italy","latvia":"Latvia","lithuania":"Lithuania","norway":"Norway","netherlands":"Netherlands","poland":"Poland","portugal":"Portugal","romania":"Romania","slovenia":"Slovenia","spain":"Spain","sweden":"Sweden","switzerland":"Switzerland","gb":"United Kingdom of Great Britain and Northern Ireland","usa":"United States of America","other":"Other"}},"product":{"title":"Product scope","label":"Description : Compute, Containers, AI …"},"timing":{"title":"Timing","timeScale":"Time scale","placeholder":"Select time scale","budget":"Budget","company":"Company name","event":"Compelling event","eventPlaceholder":"Reason to act","date":"Estimated close date"},"budget":{"title":"Budget","overallBudget":"Overall project budget","productBudget":"Product budget (MRR)","currency":"In euros €"},"legal":"Your data will be processed by Scaleway S.A.S. in order to manage your request. To know more, visit our","privacy":"Privacy Policy","ctaLabel":"Submit"},"testimonials":{"title":"Customer Success Story","readMore":"Read more"},"pricingPage":{"backButton":"Back to Pricing page","title":"All Range","legal":"Legal notice","backToProducts":"Return to products","openAll":"Open all","closeAll":"Close all","close":"Close","open":"Open","regions":"Regions","subtableToggleButtons":"Subtable open buttons","viewPricing":"View pricing"},"partnerProgram":{"showingPartners_zero":"No partners to show","showingPartners_one":"Showing {{count}} partner","showingPartners_other":"Showing {{count}} partners","type_one":"Partner type","type_other":"Partner types","expertise_one":"Expertise","expertise_other":"Expertises","industry_one":"Industry","industry_other":"Industries","location_one":"Location","location_other":"Locations","filtersTitle":"Filters","clearFiltersLabel":"Clear filters"},"partnerPage":{"partners":"Partners","details":"Details","activity":"Activity","contact":"Contact","viewWebsite":"View Website"}},"notFound":{"title":"Page not found","text":"It seems that the page you want to access does not exist. Please check your URL or renew your request later.","link":"Return to homepage"}}}},"initialLocale":"en","ns":["common","blog","pages"],"userConfig":{"i18n":{"locales":["default","en","fr"],"defaultLocale":"default","localeDetection":false},"default":{"i18n":{"locales":["default","en","fr"],"defaultLocale":"default","localeDetection":false}}}},"header":{"mainNavigationItems":[{"id":542,"title":"Dedibox and Bare Metal","menuAttached":false,"order":1,"path":"/DediboxBareMetal","type":"WRAPPER","uiRouterKey":"dedibox-and-bare-metal-1","slug":"dedibox-bare-metal","external":false,"items":[{"id":543,"title":"Dedibox - dedicated servers","menuAttached":false,"order":1,"path":"/DediboxBareMetal/Dedibox","type":"INTERNAL","uiRouterKey":"dedibox-dedicated-servers","slug":"dedibox-bare-metal-dedibox","external":false,"related":{"id":29,"title":"Dedibox","path":"/dedibox/","scheduledAt":null,"createdAt":"2022-04-19T15:29:02.488Z","updatedAt":"2024-11-22T10:20:26.181Z","publishedAt":"2022-04-28T17:05:07.122Z","locale":"en","__contentType":"api::page.page","navigationItemId":543,"__templateName":"Generic"},"items":[{"id":544,"title":"Start","menuAttached":false,"order":1,"path":"/DediboxBareMetal/Dedibox/Start","type":"INTERNAL","uiRouterKey":"start-2","slug":"dedibox-bare-metal-dedibox-start","external":false,"related":{"id":53,"title":"Start","path":"/dedibox/start/","scheduledAt":null,"createdAt":"2022-04-21T16:44:17.577Z","updatedAt":"2024-11-22T10:20:26.898Z","publishedAt":"2022-04-28T17:12:40.426Z","locale":"en","__contentType":"api::page.page","navigationItemId":544,"__templateName":"Generic"},"items":[],"description":"Affordable servers with the best price-performance ratio on the market"},{"id":545,"title":"Pro","menuAttached":false,"order":2,"path":"/DediboxBareMetal/Dedibox/Pro","type":"INTERNAL","uiRouterKey":"pro-4","slug":"dedibox-bare-metal-dedibox-pro","external":false,"related":{"id":9,"title":"Pro","path":"/dedibox/pro/","scheduledAt":null,"createdAt":"2022-04-07T13:51:48.537Z","updatedAt":"2024-11-22T10:20:26.820Z","publishedAt":"2022-04-28T17:04:00.983Z","locale":"en","__contentType":"api::page.page","navigationItemId":545,"__templateName":"Generic"},"items":[],"description":"Perfect balance of processing power, memory and storage"},{"id":546,"title":"Core","menuAttached":false,"order":3,"path":"/DediboxBareMetal/Dedibox/Core","type":"INTERNAL","uiRouterKey":"core-1","slug":"dedibox-bare-metal-dedibox-core","external":false,"related":{"id":14,"title":"Core","path":"/dedibox/core/","scheduledAt":null,"createdAt":"2022-04-11T09:05:58.588Z","updatedAt":"2024-11-22T10:20:26.821Z","publishedAt":"2022-04-28T17:04:22.560Z","locale":"en","__contentType":"api::page.page","navigationItemId":546,"__templateName":"Generic"},"items":[],"description":"The high performance backbone of your mission-critical infrastructure"},{"id":547,"title":"Store","menuAttached":false,"order":4,"path":"/DediboxBareMetal/Dedibox/Store","type":"INTERNAL","uiRouterKey":"store-2","slug":"dedibox-bare-metal-dedibox-store","external":false,"related":{"id":5,"title":"Store","path":"/dedibox/store/","scheduledAt":null,"createdAt":"2022-04-01T15:14:47.812Z","updatedAt":"2024-11-22T10:20:26.902Z","publishedAt":"2022-04-28T17:03:51.376Z","locale":"en","__contentType":"api::page.page","navigationItemId":547,"__templateName":"Generic"},"items":[],"description":"For mission-critical data, fast storage, backup and streaming"},{"id":832,"title":"GPU","menuAttached":false,"order":5,"path":"/DediboxBareMetal/Dedibox/GPU_ddx","type":"INTERNAL","uiRouterKey":"gpu-9","slug":"dedibox-bare-metal-dedibox-gpu-ddx","external":false,"related":{"id":1454,"title":"GPU","path":"/dedibox/gpu/","scheduledAt":null,"createdAt":"2024-10-31T10:01:24.876Z","updatedAt":"2024-11-22T10:20:26.906Z","publishedAt":"2024-11-07T07:38:37.573Z","locale":"en","__contentType":"api::page.page","navigationItemId":832,"__templateName":"Generic"},"items":[],"description":"Dedicated GPU power with reliable performance and stability"},{"id":548,"title":"Dedirack","menuAttached":false,"order":6,"path":"/DediboxBareMetal/Dedibox/Dedirack","type":"INTERNAL","uiRouterKey":"dedirack-1","slug":"dedibox-bare-metal-dedibox-dedirack","external":false,"related":{"id":155,"title":"Dedirack","path":"/dedibox/dedirack/","scheduledAt":null,"createdAt":"2022-05-02T10:08:21.002Z","updatedAt":"2024-11-22T10:20:26.900Z","publishedAt":"2022-05-02T10:46:06.212Z","locale":"en","__contentType":"api::page.page","navigationItemId":548,"__templateName":"Generic"},"items":[],"description":"Host your Hardware in our secured French datacenters"},{"id":742,"title":"Dedibox VPS","menuAttached":false,"order":7,"path":"/DediboxBareMetal/Dedibox/VPS","type":"INTERNAL","uiRouterKey":"dedibox-vps","slug":"dedibox-bare-metal-dedibox-vps","external":false,"related":{"id":1234,"title":"Dedibox VPS","path":"/dedibox-vps/","scheduledAt":null,"createdAt":"2024-05-08T16:42:21.258Z","updatedAt":"2024-08-28T09:39:00.756Z","publishedAt":"2024-05-14T16:28:25.184Z","locale":"en","__contentType":"api::page.page","navigationItemId":742,"__templateName":"Generic"},"items":[],"description":"60 locations worldwide, starting at €4,99/month"}],"description":""},{"id":553,"title":"Elastic Metal - bare metal cloud","menuAttached":false,"order":2,"path":"/DediboxBareMetal/elasticmetal","type":"INTERNAL","uiRouterKey":"elastic-metal-bare-metal-cloud-1","slug":"dedibox-bare-metal-elasticmetal","external":false,"related":{"id":87,"title":"Elastic Metal","path":"/elastic-metal/","scheduledAt":null,"createdAt":"2022-04-28T12:45:28.696Z","updatedAt":"2024-11-08T15:01:56.485Z","publishedAt":"2022-04-28T13:22:46.501Z","locale":"en","__contentType":"api::page.page","navigationItemId":553,"__templateName":"Generic"},"items":[{"id":554,"title":"Aluminium","menuAttached":false,"order":1,"path":"/DediboxBareMetal/elasticmetal/Aluminium","type":"INTERNAL","uiRouterKey":"aluminium-1","slug":"dedibox-bare-metal-elasticmetal-aluminium","external":false,"related":{"id":8,"title":"Aluminium","path":"/elastic-metal/aluminium/","scheduledAt":null,"createdAt":"2022-04-06T13:13:04.829Z","updatedAt":"2024-11-08T15:01:56.748Z","publishedAt":"2022-04-28T17:04:04.448Z","locale":"en","__contentType":"api::page.page","navigationItemId":554,"__templateName":"Generic"},"items":[],"description":"Fully dedicated bare metal servers with native cloud integration, at the best price"},{"id":557,"title":"Beryllium","menuAttached":false,"order":2,"path":"/DediboxBareMetal/elasticmetal/Beryllium","type":"INTERNAL","uiRouterKey":"beryllium-1","slug":"dedibox-bare-metal-elasticmetal-beryllium","external":false,"related":{"id":15,"title":"Beryllium","path":"/elastic-metal/beryllium/","scheduledAt":null,"createdAt":"2022-04-11T10:57:25.297Z","updatedAt":"2024-11-08T15:01:56.754Z","publishedAt":"2022-04-28T17:13:35.576Z","locale":"en","__contentType":"api::page.page","navigationItemId":557,"__templateName":"Generic"},"items":[],"description":"Powerful, balanced and reliable servers for production-grade applications"},{"id":556,"title":"Iridium","menuAttached":false,"order":3,"path":"/DediboxBareMetal/elasticmetal/Iridium","type":"INTERNAL","uiRouterKey":"iridium-1","slug":"dedibox-bare-metal-elasticmetal-iridium","external":false,"related":{"id":810,"title":"Iridium","path":"/elastic-metal/iridium/","scheduledAt":null,"createdAt":"2023-04-27T13:53:48.244Z","updatedAt":"2024-11-08T15:01:56.752Z","publishedAt":"2023-05-29T08:52:19.666Z","locale":"en","__contentType":"api::page.page","navigationItemId":556,"__templateName":"Generic"},"items":[],"description":"Powerful dedicated server designed to handle high-workload applications"},{"id":555,"title":"Lithium","menuAttached":false,"order":4,"path":"/DediboxBareMetal/elasticmetal/Lithium","type":"INTERNAL","uiRouterKey":"lithium-1","slug":"dedibox-bare-metal-elasticmetal-lithium","external":false,"related":{"id":16,"title":"Lithium","path":"/elastic-metal/lithium/","scheduledAt":null,"createdAt":"2022-04-11T11:15:36.538Z","updatedAt":"2024-11-08T15:01:56.753Z","publishedAt":"2022-04-28T17:13:30.074Z","locale":"en","__contentType":"api::page.page","navigationItemId":555,"__templateName":"Generic"},"items":[],"description":"Designed with huge local storage to keep, back up, and protect your data"},{"id":833,"title":"Titanium","menuAttached":false,"order":5,"path":"/DediboxBareMetal/elasticmetal/Titanium","type":"INTERNAL","uiRouterKey":"titanium","slug":"dedibox-bare-metal-elasticmetal-titanium","external":false,"related":{"id":1457,"title":"Titanium","path":"/elastic-metal/titanium/","scheduledAt":null,"createdAt":"2024-10-31T15:08:59.416Z","updatedAt":"2024-11-08T15:52:51.005Z","publishedAt":"2024-11-07T06:52:37.648Z","locale":"en","__contentType":"api::page.page","navigationItemId":833,"__templateName":"Generic"},"items":[],"description":"Power and stability of dedicated GPU hardware integrated into the Scaleway ecosystem"}],"description":""},{"id":558,"title":"Apple","menuAttached":false,"order":3,"path":"/DediboxBareMetal/Apple","type":"INTERNAL","uiRouterKey":"apple-2","slug":"dedibox-bare-metal-apple","external":false,"related":{"id":1088,"title":"Apple Mac mini","path":"/apple-mac-mini/","scheduledAt":null,"createdAt":"2024-01-31T15:28:49.276Z","updatedAt":"2024-11-06T08:30:29.831Z","publishedAt":"2024-08-02T07:56:22.454Z","locale":"en","__contentType":"api::page.page","navigationItemId":558,"__templateName":"Generic"},"items":[{"id":561,"title":"Mac mini M1","menuAttached":false,"order":1,"path":"/DediboxBareMetal/Apple/M1","type":"INTERNAL","uiRouterKey":"mac-mini-m1-1","slug":"dedibox-bare-metal-apple-m1","external":false,"related":{"id":91,"title":"Hello m1","path":"/hello-m1/","scheduledAt":null,"createdAt":"2022-04-28T15:24:50.963Z","updatedAt":"2024-11-06T08:29:13.324Z","publishedAt":"2023-10-16T14:15:59.310Z","locale":"en","__contentType":"api::page.page","navigationItemId":561,"__templateName":"Generic"},"items":[],"description":"Enjoy the Mac mini experience with great simplicity"},{"id":560,"title":"Mac mini M2","menuAttached":false,"order":2,"path":"/DediboxBareMetal/Apple/m2","type":"INTERNAL","uiRouterKey":"mac-mini-m2-2","slug":"dedibox-bare-metal-apple-m2","external":false,"related":{"id":1086,"title":"mac mini M2","path":"/mac-mini-m2/","scheduledAt":null,"createdAt":"2024-01-31T09:30:46.938Z","updatedAt":"2024-08-07T16:00:48.720Z","publishedAt":"2024-02-05T15:21:02.196Z","locale":"en","__contentType":"api::page.page","navigationItemId":560,"__templateName":"Generic"},"items":[],"description":"Perform your daily tasks with speed and efficiency"},{"id":559,"title":"Mac mini M2 Pro","menuAttached":false,"order":3,"path":"/DediboxBareMetal/Apple/M2pro","type":"INTERNAL","uiRouterKey":"mac-mini-m2-pro-1","slug":"dedibox-bare-metal-apple-m2pro","external":false,"related":{"id":991,"title":"mac mini M2 pro","path":"/mac-mini-m2-pro/","scheduledAt":null,"createdAt":"2023-10-25T08:56:21.435Z","updatedAt":"2024-08-07T16:02:51.939Z","publishedAt":"2023-11-16T12:11:33.094Z","locale":"en","__contentType":"api::page.page","navigationItemId":559,"__templateName":"Generic"},"items":[],"description":"Realize your most ambitious projects thanks to a new level of power"}],"description":""}],"description":""},{"id":562,"title":"Compute","menuAttached":false,"order":2,"path":"/Compute","type":"WRAPPER","uiRouterKey":"compute-3","slug":"compute-4","external":false,"items":[{"id":563,"title":"Virtual Instances","menuAttached":false,"order":1,"path":"/Compute/VirtualInstances","type":"INTERNAL","uiRouterKey":"virtual-instances-1","slug":"compute-virtual-instances","external":false,"related":{"id":655,"title":"Virtual Instances","path":"/virtual-instances/","scheduledAt":null,"createdAt":"2023-02-20T10:48:52.279Z","updatedAt":"2024-08-28T07:01:50.413Z","publishedAt":"2023-02-28T08:32:03.960Z","locale":"en","__contentType":"api::page.page","navigationItemId":563,"__templateName":"Generic"},"items":[{"id":567,"title":"Production-Optimized","menuAttached":false,"order":1,"path":"/Compute/VirtualInstances/Prod","type":"INTERNAL","uiRouterKey":"production-optimized-2","slug":"compute-virtual-instances-prod","external":false,"related":{"id":657,"title":"Production-Optimized Instances","path":"/production-optimized-instances/","scheduledAt":null,"createdAt":"2023-02-20T15:13:14.415Z","updatedAt":"2024-10-30T14:59:58.375Z","publishedAt":"2023-02-28T08:34:34.739Z","locale":"en","__contentType":"api::page.page","navigationItemId":567,"__templateName":"Generic"},"items":[],"description":"Dedicated vCPU for the most demanding workloads (x86)"},{"id":566,"title":"Workload-Optimized","menuAttached":false,"order":2,"path":"/Compute/VirtualInstances/Workload-Optimized","type":"INTERNAL","uiRouterKey":"workload-optimized-1","slug":"compute-virtual-instances-workload-optimized","external":false,"related":{"id":802,"title":"Workload-Optimized Instances","path":"/workload-optimized-instances/","scheduledAt":null,"createdAt":"2023-04-25T12:38:13.577Z","updatedAt":"2024-08-28T12:05:29.294Z","publishedAt":"2023-05-26T13:36:52.797Z","locale":"en","__contentType":"api::page.page","navigationItemId":566,"__templateName":"Generic"},"items":[],"description":"Secure, scalable VMs, equipped for high memory and compute demands (x86)"},{"id":565,"title":"Cost-Optimized","menuAttached":false,"order":3,"path":"/Compute/VirtualInstances/Cost-Optimized","type":"INTERNAL","uiRouterKey":"cost-optimized-1","slug":"compute-virtual-instances-cost-optimized","external":false,"related":{"id":656,"title":"Cost-Optimized Instances","path":"/cost-optimized-instances/","scheduledAt":null,"createdAt":"2023-02-20T12:55:45.865Z","updatedAt":"2024-08-28T08:44:44.416Z","publishedAt":"2023-02-28T08:34:47.421Z","locale":"en","__contentType":"api::page.page","navigationItemId":565,"__templateName":"Generic"},"items":[],"description":"Highly reliable and priced affordably Instances with shared vCPUs (x86 and ARM)"},{"id":564,"title":"Learning","menuAttached":false,"order":4,"path":"/Compute/VirtualInstances/Learning","type":"INTERNAL","uiRouterKey":"learning-1","slug":"compute-virtual-instances-learning","external":false,"related":{"id":13,"title":"Stardust Instances","path":"/stardust-instances/","scheduledAt":null,"createdAt":"2022-04-11T09:03:33.397Z","updatedAt":"2024-05-15T13:51:19.969Z","publishedAt":"2022-04-28T17:04:10.708Z","locale":"en","__contentType":"api::page.page","navigationItemId":564,"__templateName":"Generic"},"items":[],"description":"A tiny instance to test and host your personal projects (x86)"}],"description":""},{"id":568,"title":"GPU","menuAttached":false,"order":2,"path":"/Compute/gpu","type":"INTERNAL","uiRouterKey":"gpu-8","slug":"compute-gpu","external":false,"related":{"id":1025,"title":"GPU Instances","path":"/gpu-instances/","scheduledAt":null,"createdAt":"2023-11-30T13:15:51.769Z","updatedAt":"2024-11-19T16:38:15.121Z","publishedAt":"2023-12-12T12:52:20.083Z","locale":"en","__contentType":"api::page.page","navigationItemId":568,"__templateName":"Generic"},"items":[{"id":571,"title":"L4 GPU Instance","menuAttached":false,"order":1,"path":"/Compute/gpu/L4","type":"INTERNAL","uiRouterKey":"l4-gpu-instance","slug":"compute-gpu-l4","external":false,"related":{"id":1108,"title":"L4 GPU Instance","path":"/l4-gpu-instance/","scheduledAt":null,"createdAt":"2024-02-28T16:20:43.240Z","updatedAt":"2024-11-20T14:49:27.542Z","publishedAt":"2024-03-04T13:37:45.809Z","locale":"en","__contentType":"api::page.page","navigationItemId":571,"__templateName":"Generic"},"items":[],"description":"Maximize your AI infrastructures with a versatile Instance"},{"id":572,"title":"L40S GPU Instance","menuAttached":false,"order":2,"path":"/Compute/gpu/L40s","type":"INTERNAL","uiRouterKey":"l40-s-gpu-instance","slug":"compute-gpu-l40s","external":false,"related":{"id":1221,"title":"L40S GPU Instance","path":"/l40s-gpu-instance/","scheduledAt":null,"createdAt":"2024-04-26T13:37:31.531Z","updatedAt":"2024-11-20T14:50:10.681Z","publishedAt":"2024-04-29T12:12:07.466Z","locale":"en","__contentType":"api::page.page","navigationItemId":572,"__templateName":"Generic"},"items":[],"description":"Universal Instance, faster than L4 and cheaper than H100 PCIe"},{"id":569,"title":"H100 PCIe GPU Instance","menuAttached":false,"order":3,"path":"https://www.scaleway.com/en/h100-pcie-try-it-now/","type":"EXTERNAL","uiRouterKey":"h100-pc-ie-gpu-instance-4","slug":{},"external":true,"description":"Accelerate your model training with the most high-end AI chip"},{"id":570,"title":"GPU 3070 Instances","menuAttached":false,"order":4,"path":"/Compute/gpu/3070","type":"INTERNAL","uiRouterKey":"gpu-3070-instances-1","slug":"compute-gpu-3070","external":false,"related":{"id":397,"title":"GPU 3070 Instances","path":"/gpu-3070-instances/","scheduledAt":null,"createdAt":"2022-05-30T11:52:26.506Z","updatedAt":"2023-11-16T16:38:12.184Z","publishedAt":"2022-05-30T12:33:10.212Z","locale":"en","__contentType":"api::page.page","navigationItemId":570,"__templateName":"Generic"},"items":[],"description":"Dedicated NVIDIA® RTX 3070 with the best price/performance ratio"},{"id":573,"title":"Render GPU Instances","menuAttached":false,"order":5,"path":"/Compute/gpu/render","type":"INTERNAL","uiRouterKey":"render-gpu-instances","slug":"compute-gpu-render","external":false,"related":{"id":52,"title":"GPU Render Instances","path":"/gpu-render-instances/","scheduledAt":null,"createdAt":"2022-04-21T16:00:29.592Z","updatedAt":"2024-09-25T09:40:12.404Z","publishedAt":"2022-04-28T17:12:46.136Z","locale":"en","__contentType":"api::page.page","navigationItemId":573,"__templateName":"Generic"},"items":[],"description":"Dedicated Tesla P100s for all your Machine Learning \u0026 Artificial Intelligence needs."}],"description":""},{"id":574,"title":"Serverless","menuAttached":false,"order":3,"path":"/Compute/Serverless","type":"WRAPPER","uiRouterKey":"serverless-7","slug":"compute-serverless","external":false,"items":[{"id":576,"title":"Serverless Functions","menuAttached":false,"order":1,"path":"/Compute/Serverless/Functions","type":"INTERNAL","uiRouterKey":"serverless-functions-1","slug":"compute-serverless-functions","external":false,"related":{"id":50,"title":"Serverless Functions","path":"/serverless-functions/","scheduledAt":null,"createdAt":"2022-04-21T15:28:10.687Z","updatedAt":"2024-07-05T11:44:44.356Z","publishedAt":"2022-04-28T17:12:49.569Z","locale":"en","__contentType":"api::page.page","navigationItemId":576,"__templateName":"Generic"},"items":[],"description":"Experience an easy way to run your code on the cloud"},{"id":575,"title":"Serverless Containers","menuAttached":false,"order":2,"path":"/Compute/Serverless/Containers","type":"INTERNAL","uiRouterKey":"serverless-containers-2","slug":"compute-serverless-containers","external":false,"related":{"id":7,"title":"Serverless Containers","path":"/serverless-containers/","scheduledAt":null,"createdAt":"2022-04-04T07:02:24.178Z","updatedAt":"2024-07-05T11:46:09.955Z","publishedAt":"2022-04-28T17:03:54.693Z","locale":"en","__contentType":"api::page.page","navigationItemId":575,"__templateName":"Generic"},"items":[],"description":"Easily run containers on the cloud with a single command"},{"id":579,"title":"Serverless Jobs","menuAttached":false,"order":3,"path":"/Compute/Serverless/Jobs","type":"INTERNAL","uiRouterKey":"serverless-jobs-1","slug":"compute-serverless-jobs","external":false,"related":{"id":980,"title":"Serverless Jobs","path":"/serverless-jobs/","scheduledAt":null,"createdAt":"2023-10-13T16:05:31.205Z","updatedAt":"2024-08-20T12:28:03.639Z","publishedAt":"2023-12-07T15:55:35.668Z","locale":"en","__contentType":"api::page.page","navigationItemId":579,"__templateName":"Generic"},"items":[],"description":"Run batches of tasks in the cloud"}],"description":""},{"id":580,"title":"Containers","menuAttached":false,"order":4,"path":"/Compute/Containers","type":"INTERNAL","uiRouterKey":"containers-4","slug":"compute-containers","external":false,"related":{"id":465,"title":"Containers","path":"/containers/","scheduledAt":null,"createdAt":"2022-07-29T15:09:20.535Z","updatedAt":"2024-08-28T07:05:23.005Z","publishedAt":"2023-02-27T13:53:48.270Z","locale":"en","__contentType":"api::page.page","navigationItemId":580,"__templateName":"Generic"},"items":[{"id":581,"title":"Kubernetes Kapsule","menuAttached":false,"order":1,"path":"/Compute/Containers/Kapsule","type":"INTERNAL","uiRouterKey":"kubernetes-kapsule-1","slug":"compute-containers-kapsule","external":false,"related":{"id":6,"title":"Kubernetes Kapsule","path":"/kubernetes-kapsule/","scheduledAt":null,"createdAt":"2022-04-01T15:40:18.523Z","updatedAt":"2024-04-30T14:13:12.823Z","publishedAt":"2022-11-02T17:14:27.738Z","locale":"en","__contentType":"api::page.page","navigationItemId":581,"__templateName":"Generic"},"items":[],"description":"Kubernetes exclusively for Scaleway products and resources"},{"id":582,"title":"Kubernetes Kosmos","menuAttached":false,"order":2,"path":"/Compute/Containers/Kosmos","type":"INTERNAL","uiRouterKey":"kubernetes-kosmos-1","slug":"compute-containers-kosmos","external":false,"related":{"id":43,"title":"Kubernetes Kosmos","path":"/kubernetes-kosmos/","scheduledAt":null,"createdAt":"2022-04-20T17:18:27.347Z","updatedAt":"2024-07-12T09:35:39.810Z","publishedAt":"2022-04-28T17:13:15.597Z","locale":"en","__contentType":"api::page.page","navigationItemId":582,"__templateName":"Generic"},"items":[],"description":"Multi-cloud Kubernetes for Scaleway and external providers resources"},{"id":583,"title":"Container Registry","menuAttached":false,"order":3,"path":"/Compute/Containers/containerregisrt","type":"INTERNAL","uiRouterKey":"container-registry-1","slug":"compute-containers-containerregisrt","external":false,"related":{"id":39,"title":"Container Registry","path":"/container-registry/","scheduledAt":null,"createdAt":"2022-04-20T14:07:31.417Z","updatedAt":"2023-11-15T08:49:34.191Z","publishedAt":"2022-04-28T17:06:10.179Z","locale":"en","__contentType":"api::page.page","navigationItemId":583,"__templateName":"Generic"},"items":[],"description":"An easy-to-use Docker repository"}],"description":""}],"description":""},{"id":584,"title":"AI","menuAttached":false,"order":3,"path":"/AI","type":"WRAPPER","uiRouterKey":"ai","slug":"ai-1","external":false,"items":[{"id":585,"title":"Clusters","menuAttached":false,"order":1,"path":"/AI/Clusters","type":"WRAPPER","uiRouterKey":"clusters-1","slug":"ai-clusters","external":false,"items":[{"id":588,"title":"Custom-built Clusters","menuAttached":false,"order":1,"path":"/AI/Clusters/AIsuper","type":"INTERNAL","uiRouterKey":"custom-built-clusters","slug":"ai-clusters-a-isuper","external":false,"related":{"id":953,"title":"Custom-built Clusters","path":"/custom-built-clusters/","scheduledAt":null,"createdAt":"2023-09-22T14:14:40.961Z","updatedAt":"2024-10-29T12:48:55.663Z","publishedAt":"2023-10-04T14:49:01.987Z","locale":"en","__contentType":"api::page.page","navigationItemId":588,"__templateName":"Generic"},"items":[],"description":"Build the next Foundation Model with one of the fastest and most energy-efficient supercomputers in the world"},{"id":776,"title":"On Demand Cluster","menuAttached":false,"order":2,"path":"/AI/Clusters/Clusterondemand","type":"INTERNAL","uiRouterKey":"on-demand-cluster","slug":"ai-clusters-clusterondemand","external":false,"related":{"id":1266,"title":"Cluster On Demand ","path":"/cluster-on-demand/","scheduledAt":null,"createdAt":"2024-05-16T15:00:19.723Z","updatedAt":"2024-11-08T08:52:40.598Z","publishedAt":"2024-05-21T14:10:00.511Z","locale":"en","__contentType":"api::page.page","navigationItemId":776,"__templateName":"Generic"},"items":[],"description":"Rent a GPU-cluster from 32 to more than a thousand GPUs to speed up distributed training"}],"description":""},{"id":592,"title":"Model-as-a-service","menuAttached":false,"order":2,"path":"/AI/ManagedServices","type":"WRAPPER","uiRouterKey":"model-as-a-service-1","slug":"ai-managed-services","external":false,"items":[{"id":593,"title":"Managed Inference","menuAttached":false,"order":1,"path":"/AI/ManagedServices/llm","type":"INTERNAL","uiRouterKey":"managed-inference-2","slug":"ai-managed-services-llm","external":false,"related":{"id":1303,"title":"Inference","path":"/inference/","scheduledAt":null,"createdAt":"2024-06-13T13:16:26.427Z","updatedAt":"2024-11-15T14:11:15.846Z","publishedAt":"2024-06-28T12:43:39.677Z","locale":"en","__contentType":"api::page.page","navigationItemId":593,"__templateName":"Generic"},"items":[],"description":"Deploy AI models in a dedicated inference infrastructure. Get tailored security and predictable throughput"},{"id":824,"title":"Generative APIs","menuAttached":false,"order":2,"path":"/AI/ManagedServices/GenerativeAPIs","type":"INTERNAL","uiRouterKey":"generative-ap-is-2","slug":"ai-managed-services-generative-ap-is","external":false,"related":{"id":1418,"title":"Generative APIs","path":"/generative-apis/","scheduledAt":null,"createdAt":"2024-10-10T16:23:00.732Z","updatedAt":"2024-11-20T17:52:03.232Z","publishedAt":"2024-10-11T12:17:56.286Z","locale":"en","__contentType":"api::page.page","navigationItemId":824,"__templateName":"Generic"},"items":[],"description":"Consume AI models instantly via a simple API call. All hosted in Europe"}],"description":""},{"id":586,"title":"GPU Instances","menuAttached":false,"order":3,"path":"/AI/gpu","type":"WRAPPER","uiRouterKey":"gpu-instances","slug":"ai-gpu","external":false,"items":[{"id":589,"title":"L40S GPU Instance","menuAttached":false,"order":1,"path":"https://www.scaleway.com/en/l40s-gpu-instance/","type":"EXTERNAL","uiRouterKey":"l40-s-gpu-instance-1","slug":{},"external":true,"description":"Accelerate the next generation of AI-enabled applications with the universal L40S GPU Instance, faster than L4 and cheaper than H100 PCIe"},{"id":590,"title":"L4 GPU Instance","menuAttached":false,"order":2,"path":"https://www.scaleway.com/en/l4-gpu-instance/","type":"EXTERNAL","uiRouterKey":"l4-gpu-instance-1","slug":{},"external":true,"description":"Maximize your AI infrastructure's potential with a versatile and cost-effective GPU Instance"},{"id":587,"title":"H100 PCIe GPU Instance","menuAttached":false,"order":3,"path":"https://www.scaleway.com/en/h100-pcie-try-it-now/","type":"EXTERNAL","uiRouterKey":"h100-pc-ie-gpu-instance-2","slug":{},"external":true,"description":"Accelerate your model training with the most high-end AI chip"},{"id":591,"title":"Render GPU Instance","menuAttached":false,"order":4,"path":"https://www.scaleway.com/en/gpu-render-instances/","type":"EXTERNAL","uiRouterKey":"render-gpu-instance-1","slug":{},"external":true,"description":"Dedicated Tesla P100s for all your Machine Learning \u0026 Artificial Intelligence needs"}],"description":""}],"description":""},{"id":594,"title":"Storage","menuAttached":false,"order":4,"path":"/Storage","type":"WRAPPER","uiRouterKey":"storage-3","slug":"storage-2","external":false,"items":[{"id":602,"title":"Storage","menuAttached":false,"order":1,"path":"/Storage/storage","type":"WRAPPER","uiRouterKey":"storage-4","slug":"storage-storage","external":false,"items":[{"id":604,"title":"Object Storage","menuAttached":false,"order":1,"path":"/Storage/storage/ObjectStorage","type":"INTERNAL","uiRouterKey":"object-storage-4","slug":"storage-storage-object-storage","external":false,"related":{"id":652,"title":"Object Storage","path":"/object-storage/","scheduledAt":null,"createdAt":"2023-02-16T09:44:56.414Z","updatedAt":"2024-10-25T13:10:50.377Z","publishedAt":"2023-03-07T18:05:15.061Z","locale":"en","__contentType":"api::page.page","navigationItemId":604,"__templateName":"Generic"},"items":[],"description":"Amazon S3-compatible and Multi-AZ resilient object storage service. Ensuring high availability for your data"},{"id":605,"title":"Scaleway Glacier","menuAttached":false,"order":2,"path":"/Storage/storage/glacier","type":"INTERNAL","uiRouterKey":"scaleway-glacier-1","slug":"storage-storage-glacier","external":false,"related":{"id":17,"title":"Glacier Cold storage","path":"/glacier-cold-storage/","scheduledAt":null,"createdAt":"2022-04-11T11:58:13.079Z","updatedAt":"2024-10-25T13:13:55.154Z","publishedAt":"2022-04-28T17:13:24.608Z","locale":"en","__contentType":"api::page.page","navigationItemId":605,"__templateName":"Generic"},"items":[],"description":"Cold Storage class to secure long-term object storage. Ideal for deep archived data."},{"id":606,"title":"Block Storage","menuAttached":false,"order":3,"path":"/Storage/storage/BlockStorage","type":"INTERNAL","uiRouterKey":"block-storage-3","slug":"storage-storage-block-storage","external":false,"related":{"id":141,"title":"Block Storage","path":"/block-storage/","scheduledAt":null,"createdAt":"2022-05-02T08:20:39.280Z","updatedAt":"2024-10-30T16:13:44.480Z","publishedAt":"2022-05-02T08:28:12.783Z","locale":"en","__contentType":"api::page.page","navigationItemId":606,"__templateName":"Generic"},"items":[],"description":"Flexible and reliable storage for demanding workloads"}],"description":""}],"description":""},{"id":595,"title":"Network","menuAttached":false,"order":5,"path":"/Network","type":"WRAPPER","uiRouterKey":"network-3","slug":"network-4","external":false,"items":[{"id":603,"title":"Network","menuAttached":false,"order":1,"path":"/Network/Network","type":"WRAPPER","uiRouterKey":"network-4","slug":"network-network","external":false,"items":[{"id":607,"title":"Virtual Private Cloud","menuAttached":false,"order":1,"path":"/Network/Network/VPC","type":"INTERNAL","uiRouterKey":"virtual-private-cloud-1","slug":"network-network-vpc","external":false,"related":{"id":885,"title":"VPC","path":"/vpc/","scheduledAt":null,"createdAt":"2023-07-11T14:38:07.412Z","updatedAt":"2024-06-18T10:05:19.765Z","publishedAt":"2023-07-11T14:38:10.387Z","locale":"en","__contentType":"api::page.page","navigationItemId":607,"__templateName":"Generic"},"items":[],"description":"Secure your cloud resources with ease on a resilient regional network"},{"id":609,"title":"Public Gateway","menuAttached":false,"order":2,"path":"/Network/Network/public","type":"INTERNAL","uiRouterKey":"public-gateway-1","slug":"network-network-public","external":false,"related":{"id":54,"title":"Public Gateway","path":"/public-gateway/","scheduledAt":null,"createdAt":"2022-04-22T09:34:12.578Z","updatedAt":"2024-09-11T14:24:49.432Z","publishedAt":"2022-04-28T17:13:01.025Z","locale":"en","__contentType":"api::page.page","navigationItemId":609,"__templateName":"Generic"},"items":[],"description":" A single and secure entrance to your infrastructure"},{"id":608,"title":"Load Balancer","menuAttached":false,"order":3,"path":"/Network/Network/load","type":"INTERNAL","uiRouterKey":"load-balancer-1","slug":"network-network-load","external":false,"related":{"id":45,"title":"Load Balancer","path":"/load-balancer/","scheduledAt":null,"createdAt":"2022-04-21T07:46:46.140Z","updatedAt":"2024-07-24T14:48:37.806Z","publishedAt":"2022-11-18T08:58:30.309Z","locale":"en","__contentType":"api::page.page","navigationItemId":608,"__templateName":"Generic"},"items":[],"description":"Improve the performance of your services as you grow"},{"id":610,"title":"Domains and DNS","menuAttached":false,"order":4,"path":"/Network/Network/DomainsandDNS","type":"INTERNAL","uiRouterKey":"domains-and-dns-1","slug":"network-network-domainsand-dns","external":false,"related":{"id":44,"title":"Domains and DNS","path":"/domains-and-dns/","scheduledAt":null,"createdAt":"2022-04-21T07:26:18.059Z","updatedAt":"2024-03-05T17:01:32.782Z","publishedAt":"2022-04-28T17:13:12.082Z","locale":"en","__contentType":"api::page.page","navigationItemId":610,"__templateName":"Generic"},"items":[],"description":"Buy domain names and manage DNS. Find your favourite extensions at a fair price"},{"id":792,"title":"IPAM (IP Address Manager)","menuAttached":false,"order":5,"path":"/Network/Network/IPAM","type":"INTERNAL","uiRouterKey":"ipam-ip-address-manager","slug":"network-network-ipam","external":false,"related":{"id":1300,"title":"IPAM","path":"/ipam/","scheduledAt":null,"createdAt":"2024-06-07T13:07:18.728Z","updatedAt":"2024-07-12T10:47:10.965Z","publishedAt":"2024-07-10T07:39:07.627Z","locale":"en","__contentType":"api::page.page","navigationItemId":792,"__templateName":"Generic"},"items":[],"description":"Centralize and simplify your Scaleway IP address management"},{"id":820,"title":"Edge Services","menuAttached":false,"order":6,"path":"/Network/Network/EdgeServices","type":"INTERNAL","uiRouterKey":"edge-services","slug":"network-network-edge-services","external":false,"related":{"id":1399,"title":"Edge Services","path":"/edge-services/","scheduledAt":null,"createdAt":"2024-07-12T10:30:47.181Z","updatedAt":"2024-11-04T15:19:29.792Z","publishedAt":"2024-09-24T10:34:53.990Z","locale":"en","__contentType":"api::page.page","navigationItemId":820,"__templateName":"Generic"},"items":[],"description":"Expose your HTTP services to the internet with security, reliability, and efficiency by design."}],"description":""}],"description":""},{"id":596,"title":"Data \u0026 Tools","menuAttached":false,"order":6,"path":"/ManagedServices","type":"WRAPPER","uiRouterKey":"data-2","slug":"managed-services","external":false,"items":[{"id":611,"title":"Data","menuAttached":false,"order":1,"path":"/ManagedServices/Data","type":"WRAPPER","uiRouterKey":"data","slug":"managed-services-data","external":false,"items":[{"id":612,"title":"Managed Database for PostgreSQL \u0026 MySQL","menuAttached":false,"order":1,"path":"/ManagedServices/Data/SQL","type":"INTERNAL","uiRouterKey":"managed-database-for-postgre-sql-2","slug":"managed-services-data-sql","external":false,"related":{"id":48,"title":"Database","path":"/database/","scheduledAt":null,"createdAt":"2022-04-21T14:06:34.262Z","updatedAt":"2024-07-02T15:50:10.807Z","publishedAt":"2022-04-28T17:12:57.201Z","locale":"en","__contentType":"api::page.page","navigationItemId":612,"__templateName":"Generic"},"items":[],"description":"New generation of Relational Databases designed to scale on-demand"},{"id":613,"title":"Managed Database for Redis™","menuAttached":false,"order":2,"path":"/ManagedServices/Data/Redis","type":"INTERNAL","uiRouterKey":"managed-database-for-redis-1","slug":"managed-services-data-redis","external":false,"related":{"id":427,"title":"Managed Database for Redis™","path":"/managed-database-for-redistm/","scheduledAt":null,"createdAt":"2022-06-10T13:30:28.356Z","updatedAt":"2024-06-18T10:05:41.869Z","publishedAt":"2022-07-27T15:29:59.282Z","locale":"en","__contentType":"api::page.page","navigationItemId":613,"__templateName":"Generic"},"items":[],"description":"Accelerate your web application with powerful caching of Memory Databases"},{"id":614,"title":"Managed MongoDB®","menuAttached":false,"order":3,"path":"/ManagedServices/Data/document","type":"INTERNAL","uiRouterKey":"managed-mongo-db","slug":"managed-services-data-document","external":false,"related":{"id":890,"title":"Managed MongoDB","path":"/managed-mongodb/","scheduledAt":null,"createdAt":"2023-07-25T07:58:39.536Z","updatedAt":"2024-11-14T08:16:03.033Z","publishedAt":"2023-10-03T08:31:21.477Z","locale":"en","__contentType":"api::page.page","navigationItemId":614,"__templateName":"Generic"},"items":[],"description":"Drive your own document-oriented database. Let us managed the engine"},{"id":781,"title":"Serverless SQL Database","menuAttached":false,"order":4,"path":"/ManagedServices/Data/Serverless_SQL","type":"INTERNAL","uiRouterKey":"serverless-sql-database-2","slug":"managed-services-data-serverless-sql","external":false,"related":{"id":823,"title":"Serverless Sql Database","path":"/serverless-sql-database/","scheduledAt":null,"createdAt":"2023-05-11T22:46:48.805Z","updatedAt":"2024-11-06T14:51:53.874Z","publishedAt":"2023-05-11T22:47:00.320Z","locale":"en","__contentType":"api::page.page","navigationItemId":781,"__templateName":"Generic"},"items":[],"description":"Go serverless with fully managed database"},{"id":780,"title":"Messaging and Queuing","menuAttached":false,"order":5,"path":"/ManagedServices/Data/m\u0026q","type":"INTERNAL","uiRouterKey":"messaging-and-queuing-1","slug":"managed-services-data-m-and-q","external":false,"related":{"id":642,"title":"Messaging and Queuing","path":"/messaging-and-queuing/","scheduledAt":null,"createdAt":"2023-02-09T16:38:42.456Z","updatedAt":"2024-05-21T14:34:56.011Z","publishedAt":"2023-02-09T16:46:35.902Z","locale":"en","__contentType":"api::page.page","navigationItemId":780,"__templateName":"Generic"},"items":[],"description":"Send messages and events without having to manage your message broker"},{"id":822,"title":"Distributed Data Lab","menuAttached":false,"order":6,"path":"/ManagedServices/Data/DataLab","type":"INTERNAL","uiRouterKey":"distributed-data-lab","slug":"managed-services-data-data-lab","external":false,"related":{"id":949,"title":"Distributed Data Lab ","path":"/distributed-data-lab/","scheduledAt":null,"createdAt":"2023-09-21T11:57:12.802Z","updatedAt":"2024-10-30T15:28:03.991Z","publishedAt":"2024-09-27T15:10:48.257Z","locale":"en","__contentType":"api::page.page","navigationItemId":822,"__templateName":"Generic"},"items":[],"description":"Speed up data processing over very large volumes of data with an Apache Spark™ managed solution."}],"description":""},{"id":619,"title":"Business Applications","menuAttached":false,"order":2,"path":"/ManagedServices/ManagedServices","type":"WRAPPER","uiRouterKey":"business-applications","slug":"managed-services-managed-services","external":false,"items":[{"id":620,"title":"Web Hosting","menuAttached":false,"order":1,"path":"/ManagedServices/ManagedServices/hosting","type":"INTERNAL","uiRouterKey":"web-hosting-4","slug":"managed-services-managed-services-hosting","external":false,"related":{"id":47,"title":"Web hosting","path":"/web-hosting/","scheduledAt":null,"createdAt":"2022-04-21T11:51:48.689Z","updatedAt":"2024-11-20T15:59:55.910Z","publishedAt":"2022-04-28T13:34:58.879Z","locale":"en","__contentType":"api::page.page","navigationItemId":620,"__templateName":"Generic"},"items":[],"description":"Hosting for individuals, professionals, and everyone in between."},{"id":621,"title":"Web Platform","menuAttached":false,"order":2,"path":"/ManagedServices/ManagedServices/WebPlatform","type":"INTERNAL","uiRouterKey":"web-platform-2","slug":"managed-services-managed-services-web-platform","external":false,"related":{"id":576,"title":"Web Platform - powered by Clever Cloud","path":"/web-platform-powered-by-clever-cloud/","scheduledAt":null,"createdAt":"2022-12-07T14:07:50.856Z","updatedAt":"2023-11-16T15:19:36.970Z","publishedAt":"2022-12-13T08:01:42.916Z","locale":"en","__contentType":"api::page.page","navigationItemId":621,"__templateName":"Generic"},"items":[],"description":"Ship your applications only in a few clicks."},{"id":622,"title":"Transactional Email","menuAttached":false,"order":3,"path":"/ManagedServices/ManagedServices/tem","type":"INTERNAL","uiRouterKey":"transactional-email-2","slug":"managed-services-managed-services-tem","external":false,"related":{"id":776,"title":"Transactional Email (TEM)","path":"/transactional-email-tem/","scheduledAt":null,"createdAt":"2023-04-05T16:33:35.536Z","updatedAt":"2024-10-21T14:45:56.496Z","publishedAt":"2023-04-06T10:30:43.491Z","locale":"en","__contentType":"api::page.page","navigationItemId":622,"__templateName":"Generic"},"items":[],"description":"Instant delivery of your transactional emails"},{"id":623,"title":"Cockpit","menuAttached":false,"order":4,"path":"/ManagedServices/ManagedServices/Cockpit","type":"INTERNAL","uiRouterKey":"cockpit-2","slug":"managed-services-managed-services-cockpit","external":false,"related":{"id":814,"title":"Cockpit","path":"/cockpit/","scheduledAt":null,"createdAt":"2023-05-02T08:04:46.085Z","updatedAt":"2024-07-05T11:54:39.588Z","publishedAt":"2023-05-04T16:18:10.562Z","locale":"en","__contentType":"api::page.page","navigationItemId":623,"__templateName":"Generic"},"items":[],"description":"Monitor infrastructures in minutes with a fully managed observability solution"},{"id":784,"title":"IoT Hub","menuAttached":false,"order":5,"path":"/ManagedServices/ManagedServices/iot","type":"INTERNAL","uiRouterKey":"io-t-hub","slug":"managed-services-managed-services-iot","external":false,"related":{"id":31,"title":"Iot hub","path":"/iot-hub/","scheduledAt":null,"createdAt":"2022-04-20T04:58:03.085Z","updatedAt":"2023-11-15T15:42:53.313Z","publishedAt":"2022-04-28T17:13:21.005Z","locale":"en","__contentType":"api::page.page","navigationItemId":784,"__templateName":"Generic"},"items":[],"description":"A purpose-built bridge between connected hardware and cloud."}],"description":""},{"id":615,"title":"Security \u0026 Organization","menuAttached":false,"order":3,"path":"/ManagedServices/SecurityandAccount","type":"WRAPPER","uiRouterKey":"security-3","slug":"managed-services-securityand-account","external":false,"items":[{"id":618,"title":"Identity and Access Management (IAM)","menuAttached":false,"order":1,"path":"/ManagedServices/SecurityandAccount/iam","type":"INTERNAL","uiRouterKey":"identity-and-access-management-iam-1","slug":"managed-services-securityand-account-iam","external":false,"related":{"id":569,"title":"IAM","path":"/iam/","scheduledAt":null,"createdAt":"2022-12-02T16:25:06.762Z","updatedAt":"2024-08-22T09:40:22.523Z","publishedAt":"2022-12-06T15:27:30.794Z","locale":"en","__contentType":"api::page.page","navigationItemId":618,"__templateName":"Generic"},"items":[],"description":"The easiest way to safely collaborate in the cloud"},{"id":616,"title":"Secret Manager","menuAttached":false,"order":2,"path":"/ManagedServices/SecurityandAccount/secretmanager","type":"INTERNAL","uiRouterKey":"secret-manager-1","slug":"managed-services-securityand-account-secretmanager","external":false,"related":{"id":779,"title":"Secret Manager","path":"/secret-manager/","scheduledAt":null,"createdAt":"2023-04-11T11:04:18.808Z","updatedAt":"2024-08-28T09:57:43.021Z","publishedAt":"2023-04-26T07:47:45.718Z","locale":"en","__contentType":"api::page.page","navigationItemId":616,"__templateName":"Generic"},"items":[],"description":"Protect your sensitive data across your cloud infrastructure"},{"id":617,"title":"Cost Manager","menuAttached":false,"order":3,"path":"/ManagedServices/SecurityandAccount/cost-manager","type":"INTERNAL","uiRouterKey":"cost-manager-1","slug":"managed-services-securityand-account-cost-manager","external":false,"related":{"id":1186,"title":"Cost Manager","path":"/cost-manager/","scheduledAt":null,"createdAt":"2024-04-08T07:36:07.839Z","updatedAt":"2024-04-08T09:14:21.699Z","publishedAt":"2024-04-08T09:14:21.666Z","locale":"en","__contentType":"api::page.page","navigationItemId":617,"__templateName":"Generic"},"items":[],"description":"Easily track your consumption in an all-in-one tool"},{"id":830,"title":"Environmental Footprint Calculator","menuAttached":false,"order":4,"path":"/ManagedServices/SecurityandAccount/Footprint","type":"INTERNAL","uiRouterKey":"environmental-footprint-calculator","slug":"managed-services-securityand-account-footprint","external":false,"related":{"id":1450,"title":"Environmental Footprint Calculator","path":"/environmental-footprint-calculator/","scheduledAt":null,"createdAt":"2024-10-28T14:47:30.518Z","updatedAt":"2024-11-05T16:23:53.555Z","publishedAt":"2024-11-04T12:12:34.311Z","locale":"en","__contentType":"api::page.page","navigationItemId":830,"__templateName":"Generic"},"items":[],"description":"Accurately track your environmental impact and make informed choices"}],"description":""},{"id":624,"title":"Developer Tools","menuAttached":false,"order":4,"path":"/ManagedServices/DeveloperTools","type":"WRAPPER","uiRouterKey":"developer-tools","slug":"managed-services-developer-tools","external":false,"items":[{"id":625,"title":"Scaleway API","menuAttached":false,"order":1,"path":"https://www.scaleway.com/en/developers/api/","type":"EXTERNAL","uiRouterKey":"scaleway-api-2","slug":{},"external":true,"description":"The Public Interface for developers"},{"id":626,"title":"CLI","menuAttached":false,"order":2,"path":"/ManagedServices/DeveloperTools/cli","type":"INTERNAL","uiRouterKey":"cli-2","slug":"managed-services-developer-tools-cli","external":false,"related":{"id":187,"title":"CLI","path":"/cli/","scheduledAt":null,"createdAt":"2022-05-03T08:37:17.214Z","updatedAt":"2024-08-22T05:35:23.543Z","publishedAt":"2022-05-03T11:43:09.246Z","locale":"en","__contentType":"api::page.page","navigationItemId":626,"__templateName":"Generic"},"items":[],"description":"Deploy and manage your infrastructure directly from the command line"},{"id":627,"title":"Terraform","menuAttached":false,"order":3,"path":"/ManagedServices/DeveloperTools/terraform","type":"INTERNAL","uiRouterKey":"terraform-1","slug":"managed-services-developer-tools-terraform","external":false,"related":{"id":40,"title":"Terraform","path":"/terraform/","scheduledAt":null,"createdAt":"2022-04-20T14:37:30.508Z","updatedAt":"2023-11-15T08:32:57.793Z","publishedAt":"2022-04-28T17:05:15.208Z","locale":"en","__contentType":"api::page.page","navigationItemId":627,"__templateName":"Generic"},"items":[],"description":"Securely and efficiently provision and manage Infrastructure as Code with Terraform"}],"description":""}],"description":""},{"id":597,"title":"Solutions","menuAttached":false,"order":7,"path":"/Solutions","type":"WRAPPER","uiRouterKey":"solutions-2","slug":"solutions-2","external":false,"items":[{"id":628,"title":"Industries","menuAttached":false,"order":1,"path":"/Solutions/Industries","type":"WRAPPER","uiRouterKey":"industries-1","slug":"solutions-industries","external":false,"items":[{"id":629,"title":"Artificial Intelligence","menuAttached":false,"order":1,"path":"https://www.scaleway.com/en/ai-solutions/","type":"EXTERNAL","uiRouterKey":"artificial-intelligence","slug":{},"external":true,"description":""},{"id":630,"title":"Public Sector","menuAttached":false,"order":2,"path":"/Solutions/Industries/PublicSector","type":"INTERNAL","uiRouterKey":"public-sector","slug":"solutions-industries-public-sector","external":false,"related":{"id":986,"title":"Public sector solutions","path":"/public-sector-solutions/","scheduledAt":null,"createdAt":"2023-10-20T14:23:52.057Z","updatedAt":"2024-09-30T17:00:38.498Z","publishedAt":"2023-11-30T14:58:23.419Z","locale":"en","__contentType":"api::page.page","navigationItemId":630,"__templateName":"Generic"},"items":[],"description":""},{"id":631,"title":"Gaming","menuAttached":false,"order":3,"path":"/Solutions/Industries/Gaming","type":"INTERNAL","uiRouterKey":"gaming-1","slug":"solutions-industries-gaming","external":false,"related":{"id":1024,"title":"Gaming Cloud Solutions","path":"/gaming-cloud-solutions/","scheduledAt":null,"createdAt":"2023-11-29T17:06:47.458Z","updatedAt":"2024-09-24T13:29:47.657Z","publishedAt":"2023-12-13T16:53:50.074Z","locale":"en","__contentType":"api::page.page","navigationItemId":631,"__templateName":"Generic"},"items":[],"description":""},{"id":633,"title":"Media and Entertainment","menuAttached":false,"order":4,"path":"/Solutions/Industries/MediaandEntertainment","type":"INTERNAL","uiRouterKey":"media-and-entertainment","slug":"solutions-industries-mediaand-entertainment","external":false,"related":{"id":1048,"title":"Media and Entertainment","path":"/media-and-entertainment/","scheduledAt":null,"createdAt":"2023-12-13T16:23:27.055Z","updatedAt":"2024-09-24T13:30:40.809Z","publishedAt":"2024-01-02T18:08:08.725Z","locale":"en","__contentType":"api::page.page","navigationItemId":633,"__templateName":"Generic"},"items":[],"description":""},{"id":632,"title":"Retail and E-commerce","menuAttached":false,"order":5,"path":"/Solutions/Industries/Retail","type":"INTERNAL","uiRouterKey":"retail-and-e-commerce-2","slug":"solutions-industries-retail","external":false,"related":{"id":1105,"title":"E-commerce retail Solutions","path":"/e-commerce-retail-solutions/","scheduledAt":null,"createdAt":"2024-02-28T09:44:45.583Z","updatedAt":"2024-09-24T13:12:26.843Z","publishedAt":"2024-04-02T14:56:24.762Z","locale":"en","__contentType":"api::page.page","navigationItemId":632,"__templateName":"Generic"},"items":[],"description":""},{"id":634,"title":"Startup Program","menuAttached":false,"order":6,"path":"/Solutions/Industries/Startup","type":"INTERNAL","uiRouterKey":"startup-program-1","slug":"solutions-industries-startup","external":false,"related":{"id":82,"title":"Startup program","path":"/startup-program/","scheduledAt":null,"createdAt":"2022-04-27T19:14:18.251Z","updatedAt":"2024-08-27T13:22:49.823Z","publishedAt":"2022-05-11T15:19:00.591Z","locale":"en","__contentType":"api::page.page","navigationItemId":634,"__templateName":"Generic"},"items":[],"description":""},{"id":794,"title":"Financial Services","menuAttached":false,"order":7,"path":"/Solutions/Industries/FinancialServices","type":"INTERNAL","uiRouterKey":"financial-services","slug":"solutions-industries-financial-services","external":false,"related":{"id":1381,"title":"Financial services solutions","path":"/financial-services-solutions/","scheduledAt":null,"createdAt":"2024-08-06T12:19:51.917Z","updatedAt":"2024-11-12T09:58:52.666Z","publishedAt":"2024-08-06T12:31:25.580Z","locale":"en","__contentType":"api::page.page","navigationItemId":794,"__templateName":"Generic"},"items":[],"description":""},{"id":826,"title":"Industrial","menuAttached":false,"order":8,"path":"/Solutions/Industries/Industrial","type":"INTERNAL","uiRouterKey":"industrial","slug":"solutions-industries-industrial","external":false,"related":{"id":1411,"title":"Industrial solutions","path":"/industrial-solutions/","scheduledAt":null,"createdAt":"2024-10-02T10:14:37.728Z","updatedAt":"2024-11-08T16:36:55.075Z","publishedAt":"2024-10-03T16:29:42.042Z","locale":"en","__contentType":"api::page.page","navigationItemId":826,"__templateName":"Generic"},"items":[],"description":""}],"description":""},{"id":635,"title":"Use Cases","menuAttached":false,"order":2,"path":"/Solutions/usecases","type":"WRAPPER","uiRouterKey":"use-cases","slug":"solutions-usecases","external":false,"items":[{"id":638,"title":"Cloud Storage Solutions","menuAttached":false,"order":1,"path":"/Solutions/usecases/cloudstorage","type":"INTERNAL","uiRouterKey":"cloud-storage-solutions","slug":"solutions-usecases-cloudstorage","external":false,"related":{"id":595,"title":"Cloud Storage Solutions","path":"/cloud-storage-solutions/","scheduledAt":null,"createdAt":"2022-12-19T13:31:12.676Z","updatedAt":"2024-10-25T13:40:34.304Z","publishedAt":"2023-01-31T10:48:28.580Z","locale":"en","__contentType":"api::page.page","navigationItemId":638,"__templateName":"Generic"},"items":[],"description":""},{"id":637,"title":"Kubernetes Solutions","menuAttached":false,"order":2,"path":"/Solutions/usecases/kub-sol","type":"INTERNAL","uiRouterKey":"kubernetes-solutions-1","slug":"solutions-usecases-kub-sol","external":false,"related":{"id":616,"title":"Kubernetes Solutions","path":"/kubernetes-solutions/","scheduledAt":null,"createdAt":"2023-01-10T16:25:48.652Z","updatedAt":"2024-11-20T16:45:40.105Z","publishedAt":"2023-03-28T07:49:24.834Z","locale":"en","__contentType":"api::page.page","navigationItemId":637,"__templateName":"Generic"},"items":[],"description":""},{"id":636,"title":"Serverless Applications","menuAttached":false,"order":3,"path":"/Solutions/usecases/ServerlessApplications","type":"INTERNAL","uiRouterKey":"serverless-applications-1","slug":"solutions-usecases-serverless-applications","external":false,"related":{"id":780,"title":"Build Scalable Applications With Serverless","path":"/build-scalable-applications-with-serverless/","scheduledAt":null,"createdAt":"2023-04-12T08:42:06.395Z","updatedAt":"2024-05-15T13:59:21.827Z","publishedAt":"2023-05-12T06:59:34.924Z","locale":"en","__contentType":"api::page.page","navigationItemId":636,"__templateName":"Generic"},"items":[],"description":""}],"description":""},{"id":639,"title":"Web Hosting","menuAttached":false,"order":3,"path":"/Solutions/WebHosting","type":"WRAPPER","uiRouterKey":"web-hosting-3","slug":"solutions-web-hosting","external":false,"items":[{"id":640,"title":"Managed Web Hosting","menuAttached":false,"order":1,"path":"/Solutions/WebHosting/ManagedWebHosting","type":"INTERNAL","uiRouterKey":"managed-web-hosting-1","slug":"solutions-web-hosting-managed-web-hosting","external":false,"related":{"id":827,"title":"Managed Web Hosting","path":"/managed-web-hosting/","scheduledAt":null,"createdAt":"2023-05-15T09:39:39.531Z","updatedAt":"2024-08-28T06:42:02.109Z","publishedAt":"2023-05-15T12:31:13.810Z","locale":"en","__contentType":"api::page.page","navigationItemId":640,"__templateName":"Generic"},"items":[],"description":""},{"id":641,"title":"Dedicated Web Hosting","menuAttached":false,"order":2,"path":"/Solutions/WebHosting/DedicatedWebHosting","type":"INTERNAL","uiRouterKey":"dedicated-web-hosting","slug":"solutions-web-hosting-dedicated-web-hosting","external":false,"related":{"id":798,"title":"Dedicated Web Hosting","path":"/dedicated-web-hosting/","scheduledAt":null,"createdAt":"2023-04-25T09:15:11.185Z","updatedAt":"2024-08-28T06:37:46.212Z","publishedAt":"2023-05-29T08:11:44.369Z","locale":"en","__contentType":"api::page.page","navigationItemId":641,"__templateName":"Generic"},"items":[],"description":""}],"description":""}],"description":""},{"id":744,"title":"Resources","menuAttached":false,"order":8,"path":"/Resources","type":"WRAPPER","uiRouterKey":"resources-2","slug":"resources-3","external":false,"items":[{"id":746,"title":"Ecosystem","menuAttached":false,"order":1,"path":"/Resources/Ecosystem","type":"WRAPPER","uiRouterKey":"ecosystem","slug":"resources-ecosystem","external":false,"items":[{"id":751,"title":"All products","menuAttached":false,"order":1,"path":"/Resources/Ecosystem/All_products","type":"INTERNAL","uiRouterKey":"all-products-2","slug":"resources-ecosystem-all-products","external":false,"related":{"id":223,"title":"All Products","path":"/all-products/","scheduledAt":null,"createdAt":"2022-05-09T13:56:36.517Z","updatedAt":"2024-10-28T10:43:19.295Z","publishedAt":"2022-05-09T14:37:46.378Z","locale":"en","__contentType":"api::page.page","navigationItemId":751,"__templateName":"Generic"},"items":[],"description":""},{"id":828,"title":"Product updates","menuAttached":false,"order":2,"path":"/Resources/Ecosystem/Productupdates","type":"INTERNAL","uiRouterKey":"product-updates","slug":"resources-ecosystem-productupdates","external":false,"related":{"id":1451,"title":"Product updates","path":"/product-updates/","scheduledAt":null,"createdAt":"2024-10-28T16:25:15.626Z","updatedAt":"2024-10-30T16:22:06.602Z","publishedAt":"2024-10-30T16:21:39.156Z","locale":"en","__contentType":"api::page.page","navigationItemId":828,"__templateName":"Generic"},"items":[],"description":""},{"id":750,"title":"Betas","menuAttached":false,"order":3,"path":"/Resources/Ecosystem/betas","type":"INTERNAL","uiRouterKey":"betas","slug":"resources-ecosystem-betas","external":false,"related":{"id":90,"title":"Betas","path":"/betas/","scheduledAt":null,"createdAt":"2022-04-28T14:06:08.789Z","updatedAt":"2024-11-05T16:26:58.483Z","publishedAt":"2022-04-28T14:39:18.717Z","locale":"en","__contentType":"api::page.page","navigationItemId":750,"__templateName":"Generic"},"items":[],"description":""},{"id":747,"title":"Changelog","menuAttached":false,"order":4,"path":"https://www.scaleway.com/en/docs/changelog/","type":"EXTERNAL","uiRouterKey":"changelog-2","slug":{},"external":true,"description":""},{"id":758,"title":"Blog","menuAttached":false,"order":5,"path":"https://www.scaleway.com/en/blog/","type":"EXTERNAL","uiRouterKey":"blog-2","slug":{},"external":true,"description":""}],"description":""},{"id":745,"title":"Community","menuAttached":false,"order":2,"path":"/Resources/Community","type":"WRAPPER","uiRouterKey":"community","slug":"resources-community","external":false,"items":[{"id":748,"title":"Slack Community","menuAttached":false,"order":1,"path":"https://slack.scaleway.com/","type":"EXTERNAL","uiRouterKey":"slack-community-2","slug":{},"external":true,"description":""},{"id":749,"title":"Feature Requests","menuAttached":false,"order":2,"path":"https://feature-request.scaleway.com/","type":"EXTERNAL","uiRouterKey":"feature-requests-2","slug":{},"external":true,"description":""},{"id":757,"title":"Scaleway Learning","menuAttached":false,"order":3,"path":"/Resources/Community/Scaleway_Learning","type":"INTERNAL","uiRouterKey":"scaleway-learning-2","slug":"resources-community-scaleway-learning","external":false,"related":{"id":597,"title":"Scaleway Learning","path":"/scaleway-learning/","scheduledAt":null,"createdAt":"2022-12-20T08:57:37.886Z","updatedAt":"2024-08-22T15:58:41.554Z","publishedAt":"2023-01-02T21:14:10.049Z","locale":"en","__contentType":"api::page.page","navigationItemId":757,"__templateName":"Generic"},"items":[],"description":""}],"description":""},{"id":752,"title":"Company","menuAttached":false,"order":3,"path":"/Resources/Company","type":"WRAPPER","uiRouterKey":"company-1","slug":"resources-company","external":false,"items":[{"id":756,"title":"Events","menuAttached":false,"order":1,"path":"/Resources/Company/Events","type":"INTERNAL","uiRouterKey":"events-1","slug":"resources-company-events","external":false,"related":{"id":699,"title":"Events","path":"/events/","scheduledAt":null,"createdAt":"2023-03-13T09:14:30.830Z","updatedAt":"2024-11-21T14:08:26.020Z","publishedAt":"2023-03-13T09:14:41.552Z","locale":"en","__contentType":"api::page.page","navigationItemId":756,"__templateName":"Generic"},"items":[],"description":""},{"id":796,"title":"Marketplace","menuAttached":false,"order":2,"path":"https://www.scaleway.com/en/marketplace/","type":"EXTERNAL","uiRouterKey":"marketplace","slug":{},"external":true,"description":""},{"id":755,"title":"Careers","menuAttached":false,"order":3,"path":"/Resources/Company/Careers","type":"INTERNAL","uiRouterKey":"careers-1","slug":"resources-company-careers","external":false,"related":{"id":766,"title":"Careers","path":"/careers/","scheduledAt":null,"createdAt":"2023-03-31T14:17:38.589Z","updatedAt":"2024-07-16T10:08:23.648Z","publishedAt":"2024-02-12T15:39:28.684Z","locale":"en","__contentType":"api::page.page","navigationItemId":755,"__templateName":"Generic"},"items":[],"description":""},{"id":753,"title":"About us","menuAttached":false,"order":4,"path":"/Resources/Company/Aboutus","type":"INTERNAL","uiRouterKey":"about-us-1","slug":"resources-company-aboutus","external":false,"related":{"id":195,"title":"About us","path":"/about-us/","scheduledAt":null,"createdAt":"2022-05-03T13:05:13.546Z","updatedAt":"2023-12-14T09:00:58.075Z","publishedAt":"2022-05-11T12:26:40.217Z","locale":"en","__contentType":"api::page.page","navigationItemId":753,"__templateName":"Generic"},"items":[],"description":""},{"id":788,"title":"Labs","menuAttached":false,"order":5,"path":"https://labs.scaleway.com/","type":"EXTERNAL","uiRouterKey":"labs-4","slug":{},"external":true,"description":""},{"id":754,"title":"Customer Testimonials","menuAttached":false,"order":6,"path":"/Resources/Company/customer-testimonials","type":"INTERNAL","uiRouterKey":"customer-testimonials","slug":"resources-company-customer-testimonials","external":false,"related":{"id":294,"title":"Customer testimonials","path":"/customer-testimonials/","scheduledAt":null,"createdAt":"2022-05-19T15:33:42.418Z","updatedAt":"2024-07-08T12:41:04.663Z","publishedAt":"2022-05-19T15:37:23.202Z","locale":"en","__contentType":"api::page.page","navigationItemId":754,"__templateName":"Generic"},"items":[],"description":""}],"description":""}],"description":""},{"id":598,"title":"Pricing","menuAttached":false,"order":9,"path":"/pricing","type":"INTERNAL","uiRouterKey":"pricing-2","slug":"pricing-1","external":false,"related":{"id":1236,"title":"Pricing","path":"/pricing/","scheduledAt":null,"createdAt":"2024-05-14T07:33:54.370Z","updatedAt":"2024-09-30T10:00:47.281Z","publishedAt":"2024-05-14T13:19:03.795Z","locale":"en","__contentType":"api::page.page","navigationItemId":598,"__templateName":"Generic"},"items":[],"description":""}],"topBarNavigationItems":[{"id":425,"title":"Docs","menuAttached":false,"order":1,"path":"https://www.scaleway.com/en/docs/","type":"EXTERNAL","uiRouterKey":"docs","slug":{},"external":true},{"id":427,"title":"Contact","menuAttached":false,"order":3,"path":"https://www.scaleway.com/en/contact/","type":"EXTERNAL","uiRouterKey":"contact-2","slug":{},"external":true,"description":""}],"MOTD":{"id":7803,"label":"NEW: Dedicated GPU power with Dedibox GPU!","url":null,"page":{"data":{"id":1454,"attributes":{"title":"GPU","path":"/dedibox/gpu/","scheduledAt":null,"createdAt":"2024-10-31T10:01:24.876Z","updatedAt":"2024-11-22T10:20:26.906Z","publishedAt":"2024-11-07T07:38:37.573Z","locale":"en"}}}},"ctaList":{"dediboxCTAList":[{"id":6611,"label":"Log in","url":"https://console.online.net/en/login","page":{"data":null}},{"id":6612,"label":"Sign up","url":"https://console.online.net/en/user/subscribe","page":{"data":null}}],"defaultCTAList":[{"id":6610,"label":"Log in","url":"https://console.scaleway.com/login","page":{"data":null}},{"id":6609,"label":"Sign up","url":"https://console.scaleway.com/register","page":{"data":null}}]}},"footer":[{"id":276,"title":"Products","menuAttached":false,"order":1,"path":"/products","type":"WRAPPER","uiRouterKey":"products","slug":"products-2","external":false,"items":[{"id":283,"title":"All Products","menuAttached":false,"order":1,"path":"/products/AllProducts","type":"INTERNAL","uiRouterKey":"all-products","slug":"products-all-products","external":false,"related":{"id":223,"title":"All Products","path":"/all-products/","scheduledAt":null,"createdAt":"2022-05-09T13:56:36.517Z","updatedAt":"2024-10-28T10:43:19.295Z","publishedAt":"2022-05-09T14:37:46.378Z","locale":"en","__contentType":"api::page.page","navigationItemId":283,"__templateName":"Generic"},"items":[],"description":""},{"id":759,"title":"Betas","menuAttached":false,"order":2,"path":"/products/betas","type":"INTERNAL","uiRouterKey":"betas-1","slug":"products-betas","external":false,"related":{"id":90,"title":"Betas","path":"/betas/","scheduledAt":null,"createdAt":"2022-04-28T14:06:08.789Z","updatedAt":"2024-11-05T16:26:58.483Z","publishedAt":"2022-04-28T14:39:18.717Z","locale":"en","__contentType":"api::page.page","navigationItemId":759,"__templateName":"Generic"},"items":[],"description":""},{"id":281,"title":"Bare Metal","menuAttached":false,"order":3,"path":"/products/BareMetal","type":"INTERNAL","uiRouterKey":"bare-metal-2","slug":"products-bare-metal","external":false,"related":{"id":961,"title":"Bare Metal","path":"/bare-metal/","scheduledAt":null,"createdAt":"2023-09-27T07:45:06.975Z","updatedAt":"2024-04-02T15:19:04.661Z","publishedAt":"2023-10-17T12:08:02.344Z","locale":"en","__contentType":"api::page.page","navigationItemId":281,"__templateName":"Generic"},"items":[],"description":""},{"id":284,"title":"Dedibox","menuAttached":false,"order":4,"path":"/products/Dedibox","type":"INTERNAL","uiRouterKey":"dedibox-4","slug":"products-dedibox","external":false,"related":{"id":29,"title":"Dedibox","path":"/dedibox/","scheduledAt":null,"createdAt":"2022-04-19T15:29:02.488Z","updatedAt":"2024-11-22T10:20:26.181Z","publishedAt":"2022-04-28T17:05:07.122Z","locale":"en","__contentType":"api::page.page","navigationItemId":284,"__templateName":"Generic"},"items":[],"description":""},{"id":282,"title":"Elastic Metal","menuAttached":false,"order":5,"path":"/products/ElasticMetal","type":"INTERNAL","uiRouterKey":"elastic-metal-4","slug":"products-elastic-metal","external":false,"related":{"id":87,"title":"Elastic Metal","path":"/elastic-metal/","scheduledAt":null,"createdAt":"2022-04-28T12:45:28.696Z","updatedAt":"2024-11-08T15:01:56.485Z","publishedAt":"2022-04-28T13:22:46.501Z","locale":"en","__contentType":"api::page.page","navigationItemId":282,"__templateName":"Generic"},"items":[],"description":""},{"id":285,"title":"Compute Instances","menuAttached":false,"order":6,"path":"/products/Compute","type":"INTERNAL","uiRouterKey":"compute-instances","slug":"products-compute","external":false,"related":{"id":655,"title":"Virtual Instances","path":"/virtual-instances/","scheduledAt":null,"createdAt":"2023-02-20T10:48:52.279Z","updatedAt":"2024-08-28T07:01:50.413Z","publishedAt":"2023-02-28T08:32:03.960Z","locale":"en","__contentType":"api::page.page","navigationItemId":285,"__templateName":"Generic"},"items":[],"description":""},{"id":286,"title":"GPU","menuAttached":false,"order":7,"path":"/products/GPu","type":"INTERNAL","uiRouterKey":"gpu-6","slug":"products-g-pu","external":false,"related":{"id":1025,"title":"GPU Instances","path":"/gpu-instances/","scheduledAt":null,"createdAt":"2023-11-30T13:15:51.769Z","updatedAt":"2024-11-19T16:38:15.121Z","publishedAt":"2023-12-12T12:52:20.083Z","locale":"en","__contentType":"api::page.page","navigationItemId":286,"__templateName":"Generic"},"items":[],"description":""},{"id":287,"title":"Containers","menuAttached":false,"order":8,"path":"/products/Containers","type":"INTERNAL","uiRouterKey":"containers-6","slug":"products-containers","external":false,"related":{"id":465,"title":"Containers","path":"/containers/","scheduledAt":null,"createdAt":"2022-07-29T15:09:20.535Z","updatedAt":"2024-08-28T07:05:23.005Z","publishedAt":"2023-02-27T13:53:48.270Z","locale":"en","__contentType":"api::page.page","navigationItemId":287,"__templateName":"Generic"},"items":[],"description":""},{"id":288,"title":"Object Storage","menuAttached":false,"order":9,"path":"/products/ObjectStorage","type":"INTERNAL","uiRouterKey":"object-storage-4","slug":"products-object-storage","external":false,"related":{"id":652,"title":"Object Storage","path":"/object-storage/","scheduledAt":null,"createdAt":"2023-02-16T09:44:56.414Z","updatedAt":"2024-10-25T13:10:50.377Z","publishedAt":"2023-03-07T18:05:15.061Z","locale":"en","__contentType":"api::page.page","navigationItemId":288,"__templateName":"Generic"},"items":[],"description":""},{"id":289,"title":"Block Storage","menuAttached":false,"order":10,"path":"/products/BlockStorage","type":"INTERNAL","uiRouterKey":"block-storage-4","slug":"products-block-storage","external":false,"related":{"id":141,"title":"Block Storage","path":"/block-storage/","scheduledAt":null,"createdAt":"2022-05-02T08:20:39.280Z","updatedAt":"2024-10-30T16:13:44.480Z","publishedAt":"2022-05-02T08:28:12.783Z","locale":"en","__contentType":"api::page.page","navigationItemId":289,"__templateName":"Generic"},"items":[],"description":""}],"description":""},{"id":275,"title":"Resources","menuAttached":false,"order":2,"path":"/resources","type":"WRAPPER","uiRouterKey":"resources","slug":"resources-3","external":false,"items":[{"id":290,"title":"Documentation","menuAttached":false,"order":1,"path":"https://www.scaleway.com/en/docs/","type":"EXTERNAL","uiRouterKey":"documentation","slug":{},"external":true,"description":""},{"id":292,"title":"Changelog","menuAttached":false,"order":2,"path":"https://www.scaleway.com/en/docs/changelog/","type":"EXTERNAL","uiRouterKey":"changelog","slug":{},"external":true,"description":""},{"id":291,"title":"Blog","menuAttached":false,"order":3,"path":"https://www.scaleway.com/en/blog/","type":"EXTERNAL","uiRouterKey":"blog","slug":{},"external":true,"description":""},{"id":293,"title":"Feature Requests","menuAttached":false,"order":4,"path":"https://feature-request.scaleway.com/","type":"EXTERNAL","uiRouterKey":"feature-requests","slug":{},"external":true,"description":""},{"id":321,"title":"Slack Community","menuAttached":false,"order":5,"path":"https://slack.scaleway.com/","type":"EXTERNAL","uiRouterKey":"slack-community-2","slug":{},"external":true,"description":""}],"description":""},{"id":280,"title":"Contact","menuAttached":false,"order":3,"path":"/Contact","type":"WRAPPER","uiRouterKey":"contact-2","slug":"contact-4","external":false,"items":[{"id":294,"title":"Create a ticket","menuAttached":false,"order":1,"path":"https://console.scaleway.com/support/create/","type":"EXTERNAL","uiRouterKey":"create-a-ticket","slug":{},"external":true,"description":""},{"id":296,"title":"Report Abuse","menuAttached":false,"order":2,"path":"https://console.scaleway.com/support/abuses/create/","type":"EXTERNAL","uiRouterKey":"report-abuse","slug":{},"external":true,"description":""},{"id":295,"title":"Status","menuAttached":false,"order":3,"path":"https://status.scaleway.com/","type":"EXTERNAL","uiRouterKey":"status","slug":{},"external":true,"description":""},{"id":298,"title":"Dedibox Console online.net","menuAttached":false,"order":4,"path":"https://console.online.net/fr/login","type":"EXTERNAL","uiRouterKey":"dedibox-console-online-net","slug":{},"external":true,"description":""},{"id":407,"title":"Support plans","menuAttached":false,"order":5,"path":"/Contact/Support","type":"INTERNAL","uiRouterKey":"support-plans","slug":"contact-support","external":false,"related":{"id":493,"title":"Assistance","path":"/assistance/","scheduledAt":null,"createdAt":"2022-09-26T15:14:28.440Z","updatedAt":"2024-08-28T07:19:37.841Z","publishedAt":"2022-10-03T12:20:34.441Z","locale":"en","__contentType":"api::page.page","navigationItemId":407,"__templateName":"Generic"},"items":[],"description":""},{"id":409,"title":"Brand resources","menuAttached":false,"order":6,"path":"https://ultraviolet.scaleway.com/6dd9b5c45/p/62b4e2-ultraviolet","type":"EXTERNAL","uiRouterKey":"brand-resources","slug":{},"external":true,"description":""}],"description":""},{"id":436,"title":"Company","menuAttached":false,"order":4,"path":"/scw","type":"WRAPPER","uiRouterKey":"company","slug":"scw","external":false,"items":[{"id":440,"title":"About us","menuAttached":false,"order":1,"path":"/scw/About-us","type":"INTERNAL","uiRouterKey":"about-us","slug":"scw-about-us","external":false,"related":{"id":195,"title":"About us","path":"/about-us/","scheduledAt":null,"createdAt":"2022-05-03T13:05:13.546Z","updatedAt":"2023-12-14T09:00:58.075Z","publishedAt":"2022-05-11T12:26:40.217Z","locale":"en","__contentType":"api::page.page","navigationItemId":440,"__templateName":"Generic"},"items":[],"description":""},{"id":441,"title":"Events","menuAttached":false,"order":2,"path":"/scw/events","type":"INTERNAL","uiRouterKey":"events","slug":"scw-events","external":false,"related":{"id":699,"title":"Events","path":"/events/","scheduledAt":null,"createdAt":"2023-03-13T09:14:30.830Z","updatedAt":"2024-11-21T14:08:26.020Z","publishedAt":"2023-03-13T09:14:41.552Z","locale":"en","__contentType":"api::page.page","navigationItemId":441,"__templateName":"Generic"},"items":[],"description":""},{"id":798,"title":"Marketplace","menuAttached":false,"order":3,"path":"https://www.scaleway.com/en/marketplace/","type":"EXTERNAL","uiRouterKey":"marketplace-2","slug":{},"external":true,"description":""},{"id":439,"title":"Environment ","menuAttached":false,"order":4,"path":"/scw/environment","type":"INTERNAL","uiRouterKey":"environment","slug":"scw-environment","external":false,"related":{"id":59,"title":"Environmental leadership ","path":"/environmental-leadership/","scheduledAt":null,"createdAt":"2022-04-26T08:30:15.289Z","updatedAt":"2024-11-09T10:51:38.014Z","publishedAt":"2022-04-28T17:12:24.574Z","locale":"en","__contentType":"api::page.page","navigationItemId":439,"__templateName":"Generic"},"items":[],"description":""},{"id":790,"title":"Social Responsibility","menuAttached":false,"order":5,"path":"/scw/SocialResponsibility","type":"INTERNAL","uiRouterKey":"social-responsibility","slug":"scw-social-responsibility","external":false,"related":{"id":184,"title":"Social responsibility","path":"/social-responsibility/","scheduledAt":null,"createdAt":"2022-05-03T07:48:38.038Z","updatedAt":"2024-08-28T07:08:11.382Z","publishedAt":"2022-05-03T13:08:48.890Z","locale":"en","__contentType":"api::page.page","navigationItemId":790,"__templateName":"Generic"},"items":[],"description":""},{"id":438,"title":"Security","menuAttached":false,"order":6,"path":"/scw/security","type":"INTERNAL","uiRouterKey":"security-4","slug":"scw-security","external":false,"related":{"id":190,"title":"Security and resilience","path":"/security-and-resilience/","scheduledAt":null,"createdAt":"2022-05-03T10:22:40.696Z","updatedAt":"2024-08-28T08:56:56.744Z","publishedAt":"2022-05-11T12:39:01.810Z","locale":"en","__contentType":"api::page.page","navigationItemId":438,"__templateName":"Generic"},"items":[],"description":""},{"id":782,"title":"Shared Responsibility Model","menuAttached":false,"order":7,"path":"/scw/Model","type":"INTERNAL","uiRouterKey":"shared-responsibility-model","slug":"scw-model","external":false,"related":{"id":1180,"title":"Shared Responsibility Model","path":"/shared-responsibility-model/","scheduledAt":null,"createdAt":"2024-04-04T15:54:36.614Z","updatedAt":"2024-11-18T13:28:57.006Z","publishedAt":"2024-04-04T15:56:39.573Z","locale":"en","__contentType":"api::page.page","navigationItemId":782,"__templateName":"Generic"},"items":[],"description":""},{"id":442,"title":"News","menuAttached":false,"order":8,"path":"/scw/news","type":"INTERNAL","uiRouterKey":"news","slug":"scw-news","external":false,"related":{"id":263,"title":"News","path":"/news/","scheduledAt":null,"createdAt":"2022-05-19T10:28:45.212Z","updatedAt":"2022-05-31T07:47:17.728Z","publishedAt":"2022-05-19T10:29:13.394Z","locale":"en","__contentType":"api::page.page","navigationItemId":442,"__templateName":"Generic"},"items":[],"description":""},{"id":443,"title":"Careers","menuAttached":false,"order":9,"path":"/scw/career/","type":"INTERNAL","uiRouterKey":"careers","slug":"scw-career","external":false,"related":{"id":766,"title":"Careers","path":"/careers/","scheduledAt":null,"createdAt":"2023-03-31T14:17:38.589Z","updatedAt":"2024-07-16T10:08:23.648Z","publishedAt":"2024-02-12T15:39:28.684Z","locale":"en","__contentType":"api::page.page","navigationItemId":443,"__templateName":"Generic"},"items":[],"description":""},{"id":445,"title":"Scaleway Learning","menuAttached":false,"order":10,"path":"/scw/learning","type":"INTERNAL","uiRouterKey":"scaleway-learning","slug":"scw-learning","external":false,"related":{"id":597,"title":"Scaleway Learning","path":"/scaleway-learning/","scheduledAt":null,"createdAt":"2022-12-20T08:57:37.886Z","updatedAt":"2024-08-22T15:58:41.554Z","publishedAt":"2023-01-02T21:14:10.049Z","locale":"en","__contentType":"api::page.page","navigationItemId":445,"__templateName":"Generic"},"items":[],"description":""},{"id":444,"title":"Client Success Stories","menuAttached":false,"order":11,"path":"/scw/clientstor/","type":"INTERNAL","uiRouterKey":"client-success-stories","slug":"scw-clientstor","external":false,"related":{"id":294,"title":"Customer testimonials","path":"/customer-testimonials/","scheduledAt":null,"createdAt":"2022-05-19T15:33:42.418Z","updatedAt":"2024-07-08T12:41:04.663Z","publishedAt":"2022-05-19T15:37:23.202Z","locale":"en","__contentType":"api::page.page","navigationItemId":444,"__templateName":"Generic"},"items":[],"description":""},{"id":437,"title":"Labs","menuAttached":false,"order":12,"path":"https://labs.scaleway.com/en/","type":"EXTERNAL","uiRouterKey":"labs","slug":{},"external":true,"description":""}],"description":""}],"pageType":"post"},"__N_SSG":true},"page":"/blog/[slug]","query":{"slug":"building-jitsi-solution-powered-by-scaleway"},"buildId":"85BYxc5vA-nbO8Fs_1Ijf","isFallback":false,"gsp":true,"locale":"en","locales":["default","en","fr"],"defaultLocale":"default","scriptLoader":[]}</script></body></html>