<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Romaric P.</title>
    <description>The latest articles on Forem by Romaric P. (@rophilogene).</description>
    <link>https://forem.com/rophilogene</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F94074%2F4826e598-d8f2-4235-a804-6423fe7828a7.jpg</url>
      <title>Forem: Romaric P.</title>
      <link>https://forem.com/rophilogene</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rophilogene"/>
    <language>en</language>
    <item>
      <title>Stress testing Karpenter with EKS and Qovery</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Tue, 02 Apr 2024 06:46:59 +0000</pubDate>
      <link>https://forem.com/rophilogene/stress-testing-karpenter-with-eks-and-qovery-ng2</link>
      <guid>https://forem.com/rophilogene/stress-testing-karpenter-with-eks-and-qovery-ng2</guid>
      <description>&lt;p&gt;Let’s unroll my tweet (yes, I’m not over saying Tweet even with X), where I stressed Karpenter with EKS and Qovery.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ This is a stress test where I spent 1:30 hour; it’s not a benchmark. I’ll probably run some benchmarking to compare with Kubernetes node-autoscaler at some point, but not today :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30 environments&lt;/li&gt;
&lt;li&gt;Each environment: 3 containerized apps + 2 container databases (Redis and Postgres) with EBS storage&lt;/li&gt;
&lt;li&gt;1 EKS cluster with Karpenter deployed with Qovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re not familiar with &lt;a href="https://karpenter.sh"&gt;Karpenter&lt;/a&gt; — watch my quick intro. But in a nutshell, Karpenter is a better node autoscaler for Kubernetes (say goodbye to wasted compute resources). It is open-source and built by the AWS team. Qovery is an Internal Developer Platform I’m a co-founder) that we’ll use to spin up our EKS cluster with Karpenter.&lt;/p&gt;

&lt;p&gt;Let’s see how things behaved.&lt;/p&gt;

&lt;h2&gt;
  
  
  30 Environments Deployed
&lt;/h2&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/f96a164d66ec453e95cee4941c1d5f6d"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;I created and deployed my 30 environments — and we can see that my apps are scheduled on my cluster. The EC2 nodes are dynamically allocated to the cluster (we can see t3.smallinstances). I don’t even have to choose the instance type. Karpenter is smart to choose the right instance depending on the following criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The workload of my apps&lt;/li&gt;
&lt;li&gt;The instance types available&lt;/li&gt;
&lt;li&gt;The best choice in terms of performance vs. costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s truly a game-changer!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pNQuVp1U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:4800/format:webp/1%2ArlY__3BWCmjffhKJ7eyVjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pNQuVp1U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:4800/format:webp/1%2ArlY__3BWCmjffhKJ7eyVjg.png" alt="Note also that I’ve requested to allocate spot instances. (configurable via Qovery cluster interface)" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note also that I’ve requested to allocate spot instances. (configurable via Qovery cluster interface)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Node Allocation
&lt;/h2&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/cd272c5780ca4704a5767d9545b109eb"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;I changed the CPU and RAM of one app from my env-1 environment to see how Karpenter will reallocate resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From: 250m CPU and 256 MB RAM&lt;/li&gt;
&lt;li&gt;To: 2000m CPU and 8GB RAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It just works nicely, and we can see that Karpenter scheduled a t3a.xlarge instance to handle my app requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cluster Scaled Down
&lt;/h2&gt;

&lt;p&gt;If you are familiar with the default Kubernetes node autoscaler — you know how hard it is to downscale your cluster. For many reasons that I’ll not enumerate here… But in the case of Karpenter. It just works once again!&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/a30432e5556547658c8c3a32bd3024d6"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;I stopped all my environments, and as expected, my cluster is down-scaled in less than 10 minutes as well. So I don’t have wasted resources!&lt;/p&gt;

&lt;h2&gt;
  
  
  Cluster Scaled Up.. Again
&lt;/h2&gt;

&lt;p&gt;I wanted to see the cluster scaling up from 3 nodes to x nodes and see how fast it was... In less than 15 minutes, I got all my nodes provisioned and my 30 environments up and running.&lt;br&gt;
Use Cases&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/8566807bee484ba695d991acc6fe4480"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;At Qovery, we have hundreds of customers running testing environments with our Preview Environment product. Karpenter will solve many issues that they were facing previously. Just to mention a few...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need to allocate a specific node pool size now&lt;/li&gt;
&lt;li&gt;Cluster Scale-down is well handled, and no more resources are wasted (reducing AWS costs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interested in giving it a shot? &lt;a href="https://start.qovery.com"&gt;Sign up to Qovery&lt;/a&gt; and create your EKS cluster with Karpenter :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Kubernetes for Developers</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Sat, 13 Jan 2024 17:02:53 +0000</pubDate>
      <link>https://forem.com/rophilogene/kubernetes-for-developers-mcm</link>
      <guid>https://forem.com/rophilogene/kubernetes-for-developers-mcm</guid>
      <description>&lt;p&gt;In the last 8 years, Kubernetes has emerged as the standard for orchestrating containerized applications. However, its complexity can be a barrier for many developers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: I'm a co-founder of Qovery - but I guarantee it's not a trap! Give it a try to Qovery if you want a very nice developer experience on top of your Kubernetes cluster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705161062856%2F1d4712e1-3113-4720-9a67-e860abb63f7d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705161062856%2F1d4712e1-3113-4720-9a67-e860abb63f7d.jpeg" alt="Kubernetes for Developers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="https://www.qovery.com" rel="noopener noreferrer"&gt;Qovery&lt;/a&gt; - an Internal Developer Platform that can be installed on any Kubernetes cluster to bring a delightful and simplified developer experience. But don't take my word for granted. In this quick step-by-step article, I will show you how to deploy one of my &lt;a href="https://github.com/evoxmusic/ShortMe-URL-Shortener" rel="noopener noreferrer"&gt;GitHub apps&lt;/a&gt; and a Postgres database on my Kubernetes cluster running on GCP. And what's really really cool is that I don't even need to understand how Kubernetes work!&lt;/p&gt;

&lt;h2&gt;
  
  
  Qovery: A Brief Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Qovery?&lt;/strong&gt;&lt;br&gt;
An Internal Developer Platform that abstracts Kubernetes complexities, empowering developers to focus on their code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Benefits:&lt;/strong&gt;    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast and easy installation on any Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;Intuitive open-source interfaces (&lt;a href="https://github.com/Qovery/console" rel="noopener noreferrer"&gt;Web&lt;/a&gt;, &lt;a href="https://github.com/Qovery/qovery-cli" rel="noopener noreferrer"&gt;CLI&lt;/a&gt;, &lt;a href="https://api-doc.qovery.com/" rel="noopener noreferrer"&gt;API&lt;/a&gt;, &lt;a href="https://registry.terraform.io/providers/Qovery/qovery/latest/docs" rel="noopener noreferrer"&gt;Terraform Provider&lt;/a&gt;) for efficient app deployment and &lt;/li&gt;
&lt;li&gt;No Kubernetes expertise is required for developers.&lt;/li&gt;
&lt;li&gt;Highly customizable for Platform Engineers.&lt;/li&gt;
&lt;li&gt;No YAML to write for Developers ;)&lt;/li&gt;
&lt;li&gt;Generous free plan (no credit card required).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who Uses Qovery?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over 60,000 developers and Platform Engineers, valuing its simplicity and efficiency.&lt;/p&gt;
&lt;h2&gt;
  
  
  Deploying an Application on Kubernetes with Qovery
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Set Up Your Qovery Account
&lt;/h3&gt;

&lt;p&gt;Connect to &lt;a href="https://console.qovery.com" rel="noopener noreferrer"&gt;console.qovery.com&lt;/a&gt; and sign in with GitHub, GitLab, or Bitbucket.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149054671%2F028780f9-d2c6-4502-ad01-9b0a5b54f049.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149054671%2F028780f9-d2c6-4502-ad01-9b0a5b54f049.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, give a name to your &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/organization/" rel="noopener noreferrer"&gt;Organization&lt;/a&gt; and Choose the &lt;code&gt;Free&lt;/code&gt; plan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149180129%2F4e24c0c6-7823-43de-bec6-050e594509c0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149180129%2F4e24c0c6-7823-43de-bec6-050e594509c0.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once your organization is created, you should get this view:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149336753%2F98b6fa2e-f0ef-409b-8233-7165cf60de78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149336753%2F98b6fa2e-f0ef-409b-8233-7165cf60de78.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I recommend familiarizing yourself with &lt;a href="https://hub.qovery.com/docs/getting-started/basic-concepts/" rel="noopener noreferrer"&gt;the basic concepts of Qovery&lt;/a&gt; to understand what an organization, cluster, project, or environment is.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Step 2: Connect Your GitHub Repository
&lt;/h3&gt;

&lt;p&gt;You can skip this part if you signed up with your GitHub account. Otherwise, you can connect your GitHub account and permit Qovery to get access to your public and/or private repositories.&lt;/p&gt;

&lt;p&gt;Go to your &lt;code&gt;Organization settings&lt;/code&gt; &amp;gt; &lt;code&gt;Git repositories access&lt;/code&gt; &amp;gt; then, pick the option you want to connect your GitHub account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149695771%2F2281d2c5-1b17-4d78-b9e8-19fce5914180.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705149695771%2F2281d2c5-1b17-4d78-b9e8-19fce5914180.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Install Qovery on Your Kubernetes Cluster
&lt;/h3&gt;

&lt;p&gt;To install Qovery on your Kubernetes cluster, you need to add a cluster into the Qovery interface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705153251491%2F5529dfbb-f5fd-406e-8b3a-94e2b3ae0253.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705153251491%2F5529dfbb-f5fd-406e-8b3a-94e2b3ae0253.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705153326898%2F16a71fd9-daf2-486d-a19c-921626d7b0f5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705153326898%2F16a71fd9-daf2-486d-a19c-921626d7b0f5.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add your Kubeconfig:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705153373170%2F1385d1bc-6a6b-49d8-be1c-e9d6ac58ee4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705153373170%2F1385d1bc-6a6b-49d8-be1c-e9d6ac58ee4e.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Qovery will give you the commands and the generated helm configuration files you can download.&lt;/p&gt;

&lt;p&gt;Then, you need to run the following on your Kubernetes cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add qovery https://helm.qovery.com
helm repo update

helm upgrade &lt;span class="nt"&gt;--install&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; qovery &lt;span class="nt"&gt;-f&lt;/span&gt; values-zXXX.yaml qovery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Congrats! 🥳 Your cluster is connected to Qovery. You can now deploy your apps.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 4: Deploy Your Application
&lt;/h3&gt;

&lt;p&gt;Now, we can deploy our GitHub app on our Kubernetes cluster. Check out this short video and look how fast it is.&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/6d86b6aaea014b5aa673c1ed2d90d355"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;



&lt;p&gt;Here is what I did:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I created an Environment and then I created an Application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I select my app from my GitHub repository&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By default Qovery picks the &lt;code&gt;Dockerfile&lt;/code&gt; at the root of my project but I can change it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I set the CPU to &lt;code&gt;250m&lt;/code&gt; and the RAM to &lt;code&gt;256 MB&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I declared my app port to be &lt;code&gt;5555&lt;/code&gt; and I tick the &lt;code&gt;expose publicly&lt;/code&gt; option -&amp;gt; So my app can be accessible from outside.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I deployed my app and it's accessible publicly (end of video)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is pretty cool, right? It's not over! 😎&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Manage and Monitor Your Application
&lt;/h3&gt;

&lt;p&gt;Qovery provides everything you need to manage (start, stop, restart, redeploy, delete) and check out your applications logs - directly streamed from your Kubernetes cluster. Yes!&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/871912e2051848dcbeb0f186e4ac5761"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;You want to use Datadog or any third-party solutions? No problem.. Everything compatible to Kubernetes is compatible to Qovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Leverage Advanced Qovery Features
&lt;/h3&gt;

&lt;p&gt;I'm pretty sure you ask yourself, ok that's great all of that. But what about configuring your environment variables, your custom domain or even deploy a database... Well it's all covered :)&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/ac5b4c354c134a2db618995d1c8c758a"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;Imagine, you can even securely connect to your database with the Qovery CLI 😎&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~ &lt;span class="nv"&gt;$ &lt;/span&gt;qovery auth
Opening your browser, waiting &lt;span class="k"&gt;for &lt;/span&gt;your authentication...
Info: Success

~ &lt;span class="nv"&gt;$ &lt;/span&gt;qovery port-forward &lt;span class="nt"&gt;-p&lt;/span&gt; 5556:5555
Info: Current context:
Organization | MyOrg
Project      | URL Shortener
Environment  | prod
Service      | DB
Type         | database


Info: Continue with port-forward &lt;span class="nb"&gt;command &lt;/span&gt;using this context ?
Please &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="s2"&gt;"yes"&lt;/span&gt; to validate context: &lt;span class="nb"&gt;yes

&lt;/span&gt;Listening on 127.0.0.1:5432 &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 5432

~ &lt;span class="nv"&gt;$ &lt;/span&gt;psql &lt;span class="nv"&gt;$DATABASE_URL&lt;/span&gt;

psql &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Powerful out-of-the-box features
&lt;/h2&gt;

&lt;p&gt;Here are a list of cool features you get out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-deploy&lt;/strong&gt;: if I do commit and push a change on my GitHub app - it will be automatically redeployed without any downtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clone&lt;/strong&gt;: this is my favorite feature! You can clone your app (or your complete environment) in one click. So, testing a new feature without impacting the original app is easily possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ephemeral Environment&lt;/strong&gt;: For each Pull Request that I open for my app, Qovery will spin up a new environment &lt;/li&gt;
&lt;li&gt;RBAC, GitHub Actions (CI/CD) integration, Logs, Deployment pipeline, env var interpolation, env var as a file, helm deployment, multiple clusters...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are so many cool features that I could write 10 other posts to talk about them exclusively. It's probably something that I'll do if you are interested to learn more about some of them :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Qovery demystifies Kubernetes for developers, making it accessible and manageable without requiring deep expertise. Feel free to &lt;a href="https://www.qovery.com" rel="noopener noreferrer"&gt;try it now&lt;/a&gt; on your Kubernetes cluster - it's free and will always be!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/Qovery/console" rel="noopener noreferrer"&gt;If you like the Qovery web interface - give a star ⭐ - it's open source and coded in React ✨&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Additional Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hub.qovery.com" rel="noopener noreferrer"&gt;Qovery Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discuss.qovery.com" rel="noopener noreferrer"&gt;Community Support and Discussions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>developers</category>
    </item>
    <item>
      <title>Deploy on AWS for FREE - Claim Your $1000 Credits Today!</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Sat, 18 Mar 2023 17:51:36 +0000</pubDate>
      <link>https://forem.com/rophilogene/deploy-on-aws-for-free-claim-your-1000-credits-today-3bdd</link>
      <guid>https://forem.com/rophilogene/deploy-on-aws-for-free-claim-your-1000-credits-today-3bdd</guid>
      <description>&lt;p&gt;Are you working on a side project and looking for a hassle-free way to deploy it on AWS? Look no further! I have some fantastic news for you. &lt;a href="https://www.qovery.com"&gt;Qovery&lt;/a&gt;, an AWS partner, is offering up to $1000 in AWS credits to developers like you. In this article, we'll explore how you can benefit from these credits and deploy your apps with ease using Qovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Qovery?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Promo time 🤗 - but I promise it's not too boring. Keep reading&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As developers, we often dread the process of deploying our applications, especially when it comes to dealing with complex infrastructure and configuration. Qovery aims to eliminate those headaches by providing a delightful developer experience. With Qovery, you don't need any prior AWS knowledge - just a valid Dockerfile, and you're good to go!&lt;/p&gt;

&lt;p&gt;Qovery is trusted by more than 45,000 developers worldwide, and here's why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified Deployment Process: Qovery allows you to deploy your frontend, backend, and even databases without worrying about the underlying infrastructure.&lt;/li&gt;
&lt;li&gt;Dockerfile Compatibility: All you need is a valid Dockerfile, and Qovery takes care of the rest.&lt;/li&gt;
&lt;li&gt;AWS Partnership: As an AWS partner, Qovery offers up to $1000 in credits to help you kick-start your side projects on the AWS platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Eligibility Criteria
&lt;/h2&gt;

&lt;p&gt;To benefit from this fantastic offer, there's just one simple criterion you need to meet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You must have a valid custom email domain (no Gmail, no Outlook, etc.). The domain must also have a landing page (even a small one) explaining your project. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Your $1000 AWS Credits
&lt;/h2&gt;

&lt;p&gt;Ready to deploy your side project on AWS for free? Here's how you can claim your $1000 AWS credits with Qovery:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign Up: &lt;a href="https://start.qovery.com"&gt;Register for a Qovery account&lt;/a&gt; using your GitHub, GitLab, or Bitbucket credentials.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply for the Credits: Complete a simple application form, providing details about your side project and ensuring you meet the eligibility criteria. (Check out your mailbox)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Await Approval: Once your application is reviewed and approved, your $1000 AWS credits will be added to your account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start Deploying: Use your credits to deploy your apps on AWS using Qovery's simplified deployment process.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What's the catch?
&lt;/h3&gt;

&lt;p&gt;We know what you might be thinking - what's the catch? Well, there isn't one! &lt;a href="https://www.qovery.com/blog/aws-joins-qovery-to-support-developers-to-build-on-aws-for-free"&gt;Qovery is an ISV AWS Partner&lt;/a&gt;, and since they work with numerous companies worldwide, AWS has granted them the ISV Activate Partner status. This allows Qovery to provide free credits to developers with serious side projects, like yours. It's a win-win situation - you get to deploy your side projects on AWS for free, and Qovery gets to help passionate developers like you bring their ideas to life.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a credit card?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For Qovery:&lt;/strong&gt; No, you don't! &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For AWS:&lt;/strong&gt; You'll probably need one just to activate your account. But you'll not be charged for the first $1000. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's go?
&lt;/h2&gt;

&lt;p&gt;Don't miss out on this fantastic opportunity to &lt;a href="https://start.qovery.com"&gt;deploy your side projects on AWS for free with Qovery&lt;/a&gt;. Claim your $1000 AWS credits, and join the growing community of developers who are already reaping the benefits of Qovery's delightful developer experience. Give your side projects the boost they deserve and focus on what you love - coding. &lt;/p&gt;

&lt;p&gt;Happy deploying!&lt;/p&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>17 Best DevOps Tools to Use in 2022 for Infrastructure Automation and Monitoring</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Wed, 17 Aug 2022 22:10:35 +0000</pubDate>
      <link>https://forem.com/rophilogene/17-best-devops-tools-to-use-in-2022-for-infrastructure-automation-and-monitoring-1afj</link>
      <guid>https://forem.com/rophilogene/17-best-devops-tools-to-use-in-2022-for-infrastructure-automation-and-monitoring-1afj</guid>
      <description>&lt;p&gt;You must adopt proper infrastructure automation if you want to enable your teams to achieve faster application delivery while eliminating human errors. Automation of servers, deployment environments, configuration management, and deployments play a vital role in getting a competitive advantage for your product. Monitoring both the infrastructure and application is equally important as well.&lt;br&gt;
In this article, we will discuss top tools for infrastructure automation and monitoring. &lt;/p&gt;

&lt;p&gt;Let’s start with Infrastructure as Code (IaC) and Configuration Management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code / Configuration Management
&lt;/h2&gt;

&lt;p&gt;Infrastructure as code (IaC) allows you to provision your cloud infrastructure automatically. Whether it is VMs, databases, cloud networks, security, etc., you can create a JSON or YAML template mentioning all the details and then use it as a blueprint for creating similar environments automatically. Configuration management, on the other hand, does not target the provisioning of any of the infrastructure. It manages the server configuration of a cluster of servers and makes sure that server configuration is automatically maintained in all the servers in the server cluster. Whereas Infrastructure-as-Code automates the infrastructure, configuration management automates the configuration of the servers. Let’s review some of the top tools for IaC and configuration management.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Terraform
&lt;/h3&gt;

&lt;p&gt;Terraform is a vendor-independent infrastructure provisioning tool. It is owned by Hashicorp. It can be used for the automatic creation of any of the cloud services, including networks, services, firewalls, databases, etc. Terraform is so popular because it is not tied to any particular cloud vendor, so you can easily move from one cloud to another. It is open source and has great community support. Terraform code is written in its own domain-specific language called HCL, which means it has a slight learning curve.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Pulumi
&lt;/h3&gt;

&lt;p&gt;Pulumi is also an IaC tool that is similar to terraform. You can provision almost every cloud service using Pulumi. Pulumi has an advantage over Terraform in terms of testing and building the scripts. Unlike Terraform, Pulumi allows you to write its code in any of the modern programming languages like python, java, typescript, etc. That gives you better support for debugging and testing. However, the community support for Pulumi is small as compared to terraform.&lt;br&gt;
Want to know what you should use between Terraform and Pulumi? Read our comparison guide&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Ansible
&lt;/h3&gt;

&lt;p&gt;Ansible is a powerful configuration management tool that is used to automate versioned software component installation, OS configuration tasks, network and firewall configuration, etc. If you have separate sets of servers for staging and production, for example, then ansible can help you write scripts that can be used to automate and manage the server configuration for each of these sets. Ansible scripts are written in Yaml.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Integration
&lt;/h2&gt;

&lt;p&gt;Continuous integration is the practice of frequently combining and merging different developers’ code so that the application build could be tested as often as possible. As soon as you commit the code, the build process runs and creates the build for testing. Some of the best tools for continuous integration are the following:&lt;/p&gt;

&lt;h3&gt;
  
  
  4. CircleCI
&lt;/h3&gt;

&lt;p&gt;CircleCI is a CI/CD platform that helps you build and run build pipelines. Through CircleCI, you can automate the building and testing of your application on every commit. It has a modern and very user-friendly interface. It supports many complex build pipelines. It has both free and paid versions available.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Github Actions
&lt;/h3&gt;

&lt;p&gt;While many companies are already using Github for code hosting, they were looking for the existing code repository to support its own integrated CI/CD workflow. Github Actions is a powerful feature that lets you build, test and deploy your application across different platforms. If you already use Github as your source code repository, your top choice for continuous integration would be Github actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Gitlab CI
&lt;/h3&gt;

&lt;p&gt;Gitlab CI is also a powerful tool for continuous integration. Like Github actions, it uses YAML files and supports docker. The auto DevOps feature of Gitlab helps users with different tasks, including building and testing applications, detecting the code language, deploying the application, and scanning for vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment tools
&lt;/h2&gt;

&lt;p&gt;After the continuous integration of code is done, the next step is continuous deployment and delivery. Let’s review some of the best tools for continuous delivery/deployment, which take care of not just the deployment automation but infrastructure automation as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Harness
&lt;/h3&gt;

&lt;p&gt;Harness is a modern software delivery platform. After the continuous integration is done on your code and the build is ready, Harness will take the build artifacts from “build” stage to “production”. It runs as a SaaS, supports a GitOps style of development, hooks into your Git repository, and has secret management as well. It has excellent integrations with Kubernetes. Harness takes the artifacts, and Kubernetes manifests you provide and deploys them to the desired Kubernetes cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. CodeFresh
&lt;/h3&gt;

&lt;p&gt;Codefresh is an all-in-one solution that implements the whole code pipeline from start to finish. It handles all the aspects of DevOps, from the moment the commit is created until it is deployed to production. It has a powerful set of plugins that includes Helm and many other popular CI/CD tools like Jenkins. It has native support for Kubernetes clusters, not only for deploying applications but also for running pipelines on Kubernetes too.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Helm
&lt;/h3&gt;

&lt;p&gt;Helm is a Kubernetes deployment manager to automate your application’s creation, packaging, configuration, and deployment to Kubernetes clusters. Managing Kubernetes YAML manifest files, even for simple deployment, can be time-consuming and error-prone. Helm makes life easier by creating a single package that can be deployed to your Kubernetes cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Kubernetes
&lt;/h3&gt;

&lt;p&gt;Kubernetes automates the deployment and operations of cloud-native applications at scale. It is the best open-source container orchestration tool in the market. Kubernetes automates container deployments across different infrastructure environments and makes sure all the resources are utilized efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment-as-Service
&lt;/h2&gt;

&lt;p&gt;Environment as service (EaaS) is an emerging category and adopted by many DevOps teams. Through EaaS, you can quickly deploy and facilitate pre-configured environments easily and on demand. On-demand environment is the core of EaaS. An on-demand environment is a full fledge deployment environment that can be provisioned automatically through EaaS. Automatic provisioning of the environment can help you market your product faster, improve mutual collaboration between team members and take your product to the next level through rapid release cycles.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Qovery
&lt;/h2&gt;

&lt;p&gt;Qovery has built a modern platform to deploy on-demand environments on AWS in just a few seconds. Through the “Clone” environment feature, you can create an on-demand replica of your staging, UAT, production, or any other environment with great simplicity. Another killing feature is the Preview Environments, where you can automatically get a replica of your production environment (including applications, databases, and configuration) on every pull request, so you can test your changes confidently without affecting your production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Config/Secret Management
&lt;/h2&gt;

&lt;p&gt;Securing your configuration is a crucial aspect of secure SDLC. Here are some top tools for saving your environment variables and configuration in a secure form.&lt;/p&gt;

&lt;h3&gt;
  
  
  12. Doppler
&lt;/h3&gt;

&lt;p&gt;Doppler is a multi-cloud SecretOps Platform used by developers and security teams to manage their application secrets in a secure manner. It serves as a central source of truth for secrets and app configuration. It supports docker, serverless, and all the cloud vendors. It is the first choice by developers if your application has secrets to be organized by microservices, CI/CD, and multi-cloud deployment platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  13. Vault
&lt;/h3&gt;

&lt;p&gt;Vault is a Secret Manager from Hashicorp, the same company behind Terraform. It has an extensive list of integrations, primarily focusing on authentication and secret storage. It is key-value-based secure storage, and you can secure access to tokens, passwords, certificates, encryption keys, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure Monitoring
&lt;/h2&gt;

&lt;p&gt;Find below some of the top tools for keeping an eye on your cloud infrastructure:&lt;/p&gt;

&lt;h3&gt;
  
  
  14. Grafana
&lt;/h3&gt;

&lt;p&gt;Grafana is an open-source platform for observability and data visualization. It allows you to view your cloud services, infrastructure, and networks through a user-friendly dashboard available online and accessible across all devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  15. Datadog
&lt;/h3&gt;

&lt;p&gt;Datadog is a proprietary SaaS-based analytics and monitoring tool for the DevOps teams. With Datadog, teams can determine performance metrics and event monitoring for your cloud-based infrastructure. Like Grafana, Datadog also supports Kubernetes monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  16. Newrelic
&lt;/h3&gt;

&lt;p&gt;Newrelic is also a SaaS tool that monitors the performance and availability of your applications and infrastructure. Newrelic also provides real-time monitoring of your application. It is the ideal choice if you want detailed performance monitoring of your cloud-based application.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Prometheus
&lt;/h2&gt;

&lt;p&gt;Prometheus is a monitoring tool for your cloud-native environments. It is used for event monitoring and alerting. It is open source and has strong support for Kubernetes monitoring. It is one of the easiest and simpler tools for monitoring your infrastructure and applications.&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;Infrastructure automation is key to success for every DevOps team. It is not easy to pick an infrastructure automation and monitoring tool best suited for your needs. Many factors like cost, skillset, features, UI/UX, etc. play a decisive role in choosing the right tool for your business. The best choice is not to use just one tool. Instead, use a combination of tools suited to your needs.&lt;/p&gt;

&lt;p&gt;At Qovery, we also use many tools as part of the DevOps suite. These include the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure as Code: Terraform&lt;/li&gt;
&lt;li&gt;CI/CD: GitHub Actions, Gitlab CI&lt;/li&gt;
&lt;li&gt;Deployment tools: Helm, Kubernetes&lt;/li&gt;
&lt;li&gt;Environment as a Service: Qovery&lt;/li&gt;
&lt;li&gt;Secret Management: Vault, AWS KMS&lt;/li&gt;
&lt;li&gt;Observability &amp;amp; Monitoring: Datadog, Grafana (including Loki &amp;amp; Promtail), Prometheus (including Alertmanager)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>Deploy Strapi on AWS with Terraform and Qovery</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Fri, 24 Jun 2022 20:42:33 +0000</pubDate>
      <link>https://forem.com/rophilogene/deploy-strapi-on-aws-with-terraform-and-qovery-2927</link>
      <guid>https://forem.com/rophilogene/deploy-strapi-on-aws-with-terraform-and-qovery-2927</guid>
      <description>&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3qTyrZYhtk0"&gt;I recorded a video&lt;/a&gt; to show how to deploy a Strapi application on AWS. It's even simpler than the official way via the strapi documentation since I am using Terraform and Qovery (open-source).&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3qTyrZYhtk0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Complete &lt;a href="https://github.com/Qovery/terraform-examples/examples/deploy-strapi-with-postgresql-on-aws"&gt;Strapi Terraform template&lt;/a&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>aws</category>
    </item>
    <item>
      <title>Deploy an app on AWS with GitHub, Qovery and Terraform</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Sun, 19 Jun 2022 14:09:40 +0000</pubDate>
      <link>https://forem.com/rophilogene/deploy-an-app-on-aws-with-github-qovery-and-terraform-2mfl</link>
      <guid>https://forem.com/rophilogene/deploy-an-app-on-aws-with-github-qovery-and-terraform-2mfl</guid>
      <description>&lt;p&gt;This ready to use tutorial show you how to deploy an application from GitHub on AWS and make it accessible via HTTPS. All of that in just a few lines of Terraform file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Behind the scene
&lt;/h2&gt;

&lt;p&gt;Behind the scene, Qovery will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a full Kubernetes infrastructure on your AWS account (VPC, Security Groups, Subnet, EKS...)&lt;/li&gt;
&lt;li&gt;Create Qovery resources:

&lt;ol&gt;
&lt;li&gt;Organization &lt;code&gt;Terraform Demo&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Project &lt;code&gt;URL Shortener&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Environment &lt;code&gt;production&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Application &lt;code&gt;web app&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Build the &lt;code&gt;web app&lt;/code&gt; application&lt;/li&gt;
&lt;li&gt;Push the &lt;code&gt;web app&lt;/code&gt; container image in your ECR registry&lt;/li&gt;
&lt;li&gt;Deploy it on your EKS cluster (created by Qovery)&lt;/li&gt;
&lt;li&gt;Create an AWS Network Load Balancer&lt;/li&gt;
&lt;li&gt;Generate a TLS certificate for your app&lt;/li&gt;
&lt;li&gt;Expose publicly via HTTPS your application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It will take approximately &lt;strong&gt;20 minutes to create your infrastructure&lt;/strong&gt; and &lt;strong&gt;less than 5 minutes to deploy your application&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone this repository&lt;/li&gt;
&lt;li&gt;Sign in to &lt;a href="https://www.qovery.com"&gt;Qovery&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install the Qovery CLI and generate an API Token with this guide.&lt;/li&gt;
&lt;li&gt;Generate your AWS credentials (&lt;code&gt;Access Key ID&lt;/code&gt; and &lt;code&gt;Secret Access Key&lt;/code&gt;)
with &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"&gt;this guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open you terminal and run the following command by changing the values:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TF_VAR_aws_access_key_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR_AWS_ACCESS_KEY_ID &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;TF_VAR_aws_secret_access_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR_AWS_SECRET_ACCESS_KEY &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;TF_VAR_qovery_access_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR_QOVERY_API_TOKEN &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;TF_VAR_qovery_organization_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR_QOVERY_ORG_ID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Clone my &lt;a href="https://github.com/evoxmusic/ShortMe-URL-Shortener.git"&gt;URL Shortener application&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Edit the &lt;code&gt;main.tf&lt;/code&gt; file and change &lt;code&gt;https://github.com/evoxmusic/ShortMe-URL-Shortener.git&lt;/code&gt; with yours&lt;/li&gt;
&lt;li&gt;You can now run the Terraform commands
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Open your Qovery console to find out the HTTPS URL of your deployed app.&lt;/li&gt;
&lt;li&gt;To tear down your infrastructure and avoid unnecessary cloud costs you can run &lt;code&gt;terraform destroy&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;And here is what happened when running &lt;code&gt;terraform apply&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated
with the following symbols:
  + create

Terraform will perform the following actions:

  # qovery_application.backend will be created
  + resource "qovery_application" "backend" {
      + auto_preview                   = false
      + build_mode                     = "BUILDPACKS"
      + buildpack_language             = "PYTHON"
      + built_in_environment_variables = [
        ] -&amp;gt; (known after apply)
      + cpu                            = 500
      + environment_id                 = (known after apply)
      + environment_variables          = [
          + {
              + id    = (known after apply)
              + key   = "DEBUG"
              + value = "false"
            },
          + {
              + id    = (known after apply)
              + key   = "PORT"
              + value = "3333"
            },
        ]
      + git_repository                 = {
          + branch    = "main"
          + root_path = "/"
          + url       = "https://github.com/evoxmusic/ShortMe-URL-Shortener.git"
        }
      + id                             = (known after apply)
      + max_running_instances          = 1
      + memory                         = 256
      + min_running_instances          = 1
      + name                           = "backend"
      + ports                          = [
          + {
              + external_port       = 443
              + id                  = (known after apply)
              + internal_port       = 3333
              + protocol            = "HTTP"
              + publicly_accessible = true
            },
        ]
      + state                          = "RUNNING"
    }

  # qovery_aws_credentials.my_aws_creds will be created
  + resource "qovery_aws_credentials" "my_aws_creds" {
      + access_key_id     = (sensitive value)
      + id                = (known after apply)
      + name              = "URL Shortener"
      + organization_id   = "67df37d8-6139-42eb-8c60-452395d12222"
      + secret_access_key = (sensitive value)
    }

  # qovery_cluster.my_cluster will be created
  + resource "qovery_cluster" "my_cluster" {
      + cloud_provider    = "AWS"
      + credentials_id    = (known after apply)
      + description       = "Terraform demo cluster"
      + features          = {
          + vpc_subnet = (known after apply)
        }
      + id                = (known after apply)
      + instance_type     = "T3A_MEDIUM"
      + max_running_nodes = 4
      + min_running_nodes = 3
      + name              = "Demo cluster"
      + organization_id   = "67df37d8-6139-42eb-8c60-452395d1c2ab"
      + region            = "us-east-2"
      + state             = "RUNNING"
    }

  # qovery_environment.production will be created
  + resource "qovery_environment" "production" {
      + built_in_environment_variables = [
        ] -&amp;gt; (known after apply)
      + cluster_id                     = (known after apply)
      + id                             = (known after apply)
      + mode                           = "DEVELOPMENT"
      + name                           = "dev"
      + project_id                     = (known after apply)
    }

  # qovery_project.my_project will be created
  + resource "qovery_project" "my_project" {
      + built_in_environment_variables = [
        ] -&amp;gt; (known after apply)
      + description                    = (known after apply)
      + id                             = (known after apply)
      + name                           = "URL Shortener"
      + organization_id                = "67df37d8-6139-42eb-8c60-452395d1c2ab"
    }

Plan: 5 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

qovery_aws_credentials.my_aws_creds: Creating...
qovery_aws_credentials.my_aws_creds: Creation complete after 0s [id=d2cfe19d-6381-4676-99e6-6721182f0c4c]
qovery_cluster.my_cluster: Creating...
qovery_cluster.my_cluster: Still creating... [10s elapsed]
qovery_cluster.my_cluster: Still creating... [20s elapsed]
qovery_cluster.my_cluster: Still creating... [30s elapsed]
qovery_cluster.my_cluster: Still creating... [40s elapsed]
qovery_cluster.my_cluster: Still creating... [50s elapsed]
qovery_cluster.my_cluster: Still creating... [1m0s elapsed]
qovery_cluster.my_cluster: Still creating... [1m10s elapsed]
qovery_cluster.my_cluster: Still creating... [1m20s elapsed]
qovery_cluster.my_cluster: Still creating... [1m30s elapsed]
qovery_cluster.my_cluster: Still creating... [1m40s elapsed]
qovery_cluster.my_cluster: Still creating... [1m50s elapsed]
qovery_cluster.my_cluster: Still creating... [2m0s elapsed]
qovery_cluster.my_cluster: Still creating... [2m10s elapsed]
qovery_cluster.my_cluster: Still creating... [2m20s elapsed]
qovery_cluster.my_cluster: Still creating... [2m30s elapsed]
qovery_cluster.my_cluster: Still creating... [2m40s elapsed]
qovery_cluster.my_cluster: Still creating... [2m50s elapsed]
qovery_cluster.my_cluster: Still creating... [3m0s elapsed]
qovery_cluster.my_cluster: Still creating... [3m10s elapsed]
qovery_cluster.my_cluster: Still creating... [3m20s elapsed]
qovery_cluster.my_cluster: Still creating... [3m30s elapsed]
qovery_cluster.my_cluster: Still creating... [3m40s elapsed]
qovery_cluster.my_cluster: Still creating... [3m50s elapsed]
qovery_cluster.my_cluster: Still creating... [4m0s elapsed]
qovery_cluster.my_cluster: Still creating... [4m10s elapsed]
qovery_cluster.my_cluster: Still creating... [4m20s elapsed]
qovery_cluster.my_cluster: Still creating... [4m30s elapsed]
qovery_cluster.my_cluster: Still creating... [4m40s elapsed]
qovery_cluster.my_cluster: Still creating... [4m50s elapsed]
qovery_cluster.my_cluster: Still creating... [5m0s elapsed]
qovery_cluster.my_cluster: Still creating... [5m10s elapsed]
qovery_cluster.my_cluster: Still creating... [5m20s elapsed]
qovery_cluster.my_cluster: Still creating... [5m30s elapsed]
qovery_cluster.my_cluster: Still creating... [5m40s elapsed]
qovery_cluster.my_cluster: Still creating... [5m50s elapsed]
qovery_cluster.my_cluster: Still creating... [6m0s elapsed]
qovery_cluster.my_cluster: Still creating... [6m10s elapsed]
qovery_cluster.my_cluster: Still creating... [6m20s elapsed]
qovery_cluster.my_cluster: Still creating... [6m30s elapsed]
qovery_cluster.my_cluster: Still creating... [6m40s elapsed]
qovery_cluster.my_cluster: Still creating... [6m50s elapsed]
qovery_cluster.my_cluster: Still creating... [7m0s elapsed]
qovery_cluster.my_cluster: Still creating... [7m10s elapsed]
qovery_cluster.my_cluster: Still creating... [7m20s elapsed]
qovery_cluster.my_cluster: Still creating... [7m30s elapsed]
qovery_cluster.my_cluster: Still creating... [7m40s elapsed]
qovery_cluster.my_cluster: Still creating... [7m50s elapsed]
qovery_cluster.my_cluster: Still creating... [8m0s elapsed]
qovery_cluster.my_cluster: Still creating... [8m10s elapsed]
qovery_cluster.my_cluster: Still creating... [8m20s elapsed]
qovery_cluster.my_cluster: Still creating... [8m30s elapsed]
qovery_cluster.my_cluster: Still creating... [8m40s elapsed]
qovery_cluster.my_cluster: Still creating... [8m50s elapsed]
qovery_cluster.my_cluster: Still creating... [9m0s elapsed]
qovery_cluster.my_cluster: Still creating... [9m10s elapsed]
qovery_cluster.my_cluster: Still creating... [9m20s elapsed]
qovery_cluster.my_cluster: Still creating... [9m30s elapsed]
qovery_cluster.my_cluster: Still creating... [9m40s elapsed]
qovery_cluster.my_cluster: Still creating... [9m50s elapsed]
qovery_cluster.my_cluster: Still creating... [10m0s elapsed]
qovery_cluster.my_cluster: Still creating... [10m10s elapsed]
qovery_cluster.my_cluster: Still creating... [10m20s elapsed]
qovery_cluster.my_cluster: Still creating... [10m30s elapsed]
qovery_cluster.my_cluster: Still creating... [10m40s elapsed]
qovery_cluster.my_cluster: Still creating... [10m50s elapsed]
qovery_cluster.my_cluster: Still creating... [11m0s elapsed]
qovery_cluster.my_cluster: Still creating... [11m10s elapsed]
qovery_cluster.my_cluster: Still creating... [11m20s elapsed]
qovery_cluster.my_cluster: Still creating... [11m30s elapsed]
qovery_cluster.my_cluster: Still creating... [11m40s elapsed]
qovery_cluster.my_cluster: Still creating... [11m50s elapsed]
qovery_cluster.my_cluster: Still creating... [12m0s elapsed]
qovery_cluster.my_cluster: Still creating... [12m10s elapsed]
qovery_cluster.my_cluster: Still creating... [12m20s elapsed]
qovery_cluster.my_cluster: Still creating... [12m30s elapsed]
qovery_cluster.my_cluster: Still creating... [12m40s elapsed]
qovery_cluster.my_cluster: Still creating... [12m50s elapsed]
qovery_cluster.my_cluster: Still creating... [13m0s elapsed]
qovery_cluster.my_cluster: Still creating... [13m10s elapsed]
qovery_cluster.my_cluster: Still creating... [13m20s elapsed]
qovery_cluster.my_cluster: Still creating... [13m30s elapsed]
qovery_cluster.my_cluster: Still creating... [13m40s elapsed]
qovery_cluster.my_cluster: Still creating... [13m50s elapsed]
qovery_cluster.my_cluster: Still creating... [14m0s elapsed]
qovery_cluster.my_cluster: Still creating... [14m10s elapsed]
qovery_cluster.my_cluster: Still creating... [14m20s elapsed]
qovery_cluster.my_cluster: Still creating... [14m30s elapsed]
qovery_cluster.my_cluster: Still creating... [14m40s elapsed]
qovery_cluster.my_cluster: Still creating... [14m50s elapsed]
qovery_cluster.my_cluster: Still creating... [15m0s elapsed]
qovery_cluster.my_cluster: Still creating... [15m10s elapsed]
qovery_cluster.my_cluster: Still creating... [15m20s elapsed]
qovery_cluster.my_cluster: Still creating... [15m30s elapsed]
qovery_cluster.my_cluster: Still creating... [15m40s elapsed]
qovery_cluster.my_cluster: Still creating... [15m50s elapsed]
qovery_cluster.my_cluster: Still creating... [16m0s elapsed]
qovery_cluster.my_cluster: Still creating... [16m10s elapsed]
qovery_cluster.my_cluster: Still creating... [16m20s elapsed]
qovery_cluster.my_cluster: Still creating... [16m30s elapsed]
qovery_cluster.my_cluster: Still creating... [16m40s elapsed]
qovery_cluster.my_cluster: Still creating... [16m50s elapsed]
qovery_cluster.my_cluster: Still creating... [17m0s elapsed]
qovery_cluster.my_cluster: Still creating... [17m10s elapsed]
qovery_cluster.my_cluster: Still creating... [17m20s elapsed]
qovery_cluster.my_cluster: Still creating... [17m30s elapsed]
qovery_cluster.my_cluster: Still creating... [17m40s elapsed]
qovery_cluster.my_cluster: Still creating... [17m50s elapsed]
qovery_cluster.my_cluster: Still creating... [18m0s elapsed]
qovery_cluster.my_cluster: Still creating... [18m10s elapsed]
qovery_cluster.my_cluster: Creation complete after 18m12s [id=782f5b71-5786-4ff6-895a-277cd432dc1e]
qovery_project.my_project: Creating...
qovery_project.my_project: Creation complete after 0s [id=2fa442d0-f798-46f8-9a1a-b33317c507ea]
qovery_environment.production: Creating...
qovery_environment.production: Creation complete after 0s [id=8418d920-c508-4ea2-b669-72b1fedc3a3e]
qovery_application.backend: Creating...
qovery_application.backend: Still creating... [10s elapsed]
qovery_application.backend: Still creating... [20s elapsed]
qovery_application.backend: Still creating... [30s elapsed]
qovery_application.backend: Still creating... [40s elapsed]
qovery_application.backend: Still creating... [50s elapsed]
qovery_application.backend: Still creating... [1m0s elapsed]
qovery_application.backend: Still creating... [1m10s elapsed]
qovery_application.backend: Still creating... [1m20s elapsed]
qovery_application.backend: Still creating... [1m30s elapsed]
qovery_application.backend: Still creating... [1m40s elapsed]
qovery_application.backend: Still creating... [1m50s elapsed]
qovery_application.backend: Still creating... [2m0s elapsed]
qovery_application.backend: Still creating... [2m10s elapsed]
qovery_application.backend: Still creating... [2m20s elapsed]
qovery_application.backend: Creation complete after 2m23s [id=8dd99960-939c-4328-9a38-fdea20d7db8a]

Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope you liked it!&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>aws</category>
    </item>
    <item>
      <title>The ultimate guide to migrate from Heroku to AWS in 1 hour</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Sat, 21 May 2022 12:41:27 +0000</pubDate>
      <link>https://forem.com/rophilogene/the-ultimate-guide-to-migrate-from-heroku-to-aws-in-1-hour-1j1b</link>
      <guid>https://forem.com/rophilogene/the-ultimate-guide-to-migrate-from-heroku-to-aws-in-1-hour-1j1b</guid>
      <description>&lt;p&gt;This guide describes how to migrate your application running on Heroku to AWS with &lt;a href="https://www.qovery.com"&gt;Qovery&lt;/a&gt;. It covers all required steps you need to take to deploy your application on AWS and transfer your data from Heroku Postgres to the database managed by AWS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Qovery is a platform used by more than 22 000 developers to deploy their apps on their AWS account. It's the "Heroku-like" experience on top of AWS.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the final result 😎&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/da31c21f9c104eae9270e4c4db59055e"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mWUFHmMj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/da31c21f9c104eae9270e4c4db59055e-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Assumptions 👨‍🏫
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You have an application on Heroku&lt;/li&gt;
&lt;li&gt;You are familiar with Heroku basics, have a Heroku account and access to Heroku CLI&lt;/li&gt;
&lt;li&gt;You have &lt;a href="https://start.qovery.com"&gt;sign in on Qovery&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You have &lt;a href="https://hub.qovery.com/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/"&gt;set up your AWS account&lt;/a&gt; with Qovery&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Costs 💵
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Qovery installs an EC2 instance (perfect for hobby project) or an EKS cluster (perfect for production) on your AWS account.&lt;/li&gt;
&lt;li&gt;Qovery is free up to 100 deployments/month (see &lt;a href="https://www.qovery.com/pricing"&gt;pricing&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Migration Steps 🪜
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use Buildpacks or Create your Dockerfile&lt;/li&gt;
&lt;li&gt;Create resources on Qovery&lt;/li&gt;
&lt;li&gt;Configure Environment Variables and Secrets&lt;/li&gt;
&lt;li&gt;Copy data from your Heroku databases to your AWS databases&lt;/li&gt;
&lt;li&gt;Deploy your apps&lt;/li&gt;
&lt;li&gt;FAQ by Heroku users&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  1. Create your Dockerfile or Use Buildpacks 🍃
&lt;/h2&gt;

&lt;p&gt;Qovery supports two ways to build and run your application coming from Heroku:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Buildpacks&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both options build a container image that is runnable by a container engine (E.g. Docker). Qovery runs containers on Kubernetes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I will explain how to use Buildpacks. Refer to &lt;a href="https://hub.qovery.com/guides/tutorial/migrate-your-application-from-heroku-to-aws/#1-create-your-dockerfile-or-use-buildpacks"&gt;the original guide&lt;/a&gt; to get instructions to use a Dockerfile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://buildpacks.io/"&gt;Buildpacks&lt;/a&gt; automatically detects the language and the framework your application is using. Buildpacks builds and runs your app. Here is the list of &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/application/#option-1-buildpacks"&gt;supported languages and frameworks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supported languages&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;language&lt;/th&gt;
&lt;th&gt;version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node.JS&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clojure&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gradle&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JVM&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grails&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scala&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Play&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;⚠️ We do recommend using Docker to keep the full control of what's going on behind the scene. Buildpacks is a great technology but difficult to debug when something goes wrong. You can try deploying your apps on AWS with Qovery with Buildpacks, if you do not succeed, we do recommend switching for Docker.&lt;/p&gt;


&lt;h3&gt;
  
  
  Limitations 👀
&lt;/h3&gt;

&lt;p&gt;Here are some limitations due to our Buildpacks implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qovery Buildpacks does not support Procfile with multiple commands at the moment.&lt;/li&gt;
&lt;li&gt;Qovery does not support custom Buildpacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those limitations will be solved in the coming months.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Create resources on Qovery 👩‍💻
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/9246ae68c68f42debc3d5183d2b4f7f8"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tP8ux4xi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/9246ae68c68f42debc3d5183d2b4f7f8-with-play.gif" width="524" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect to the &lt;a href="https://start.qovery.com"&gt;Qovery console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create your &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/organization/"&gt;Organization&lt;/a&gt; and your &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/project/"&gt;Project&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create an environment with the name &lt;code&gt;production&lt;/code&gt; (it can be changed after).&lt;/li&gt;
&lt;li&gt;Create an application and give it a name (you can give the name of your repo if you have no idea)&lt;/li&gt;
&lt;li&gt;Select your app repository from your GitHub, GitLab or Bitbucket.&lt;/li&gt;
&lt;li&gt;Select the branch you want to deploy.&lt;/li&gt;
&lt;li&gt;Select the Build mode for &lt;code&gt;Buildpacks&lt;/code&gt; or &lt;code&gt;Dockerfile&lt;/code&gt; according to what you want.&lt;/li&gt;
&lt;li&gt;Specify the local listening port of your application.&lt;/li&gt;
&lt;li&gt;Click on "create"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congrats! Your application is created 🎉&lt;/p&gt;



&lt;p&gt;⚠️ Your application is created but not deployed yet! You can configure the vCPU, Memory, Environment Variables... before deploying it. If you want to deploy it before finishing the configuration you can click on "Actions" &amp;gt; "Deploy".&lt;/p&gt;



&lt;p&gt;If you deploy an app from a mono-repository, we have a must-read guide for you &lt;a href="https://hub.qovery.com/guides/advanced/monorepository/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Database ⚡️
&lt;/h3&gt;

&lt;p&gt;Here are the steps to deploy your database:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/d7e10be0e5964f6799b158dc631bbbd1"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ByZXCqv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/d7e10be0e5964f6799b158dc631bbbd1-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your &lt;code&gt;production&lt;/code&gt; environment.&lt;/li&gt;
&lt;li&gt;Add your database by clicking on "Add" &amp;gt; "Database".&lt;/li&gt;
&lt;li&gt;Select the database (PostgreSQL, MySQL, MongoDB, Redis..) and the version you want to deploy.&lt;/li&gt;
&lt;li&gt;Select &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/database/#modes"&gt;Managed or Container mode&lt;/a&gt; for your database.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Public&lt;/code&gt; accessibility (set &lt;code&gt;Private&lt;/code&gt; if you don't want to restore your data from an existing Heroku database).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congrats! Your database is created as well 🎉&lt;/p&gt;

&lt;p&gt;If you use MongoDB Atlas, or an existing database on AWS that you want to connect to your application deployed by Qovery. Check out &lt;a href="https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"&gt;our tutorial about VPC peering&lt;/a&gt; and how to securely connect to your existing database.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Configure your Environment Variables and Secrets 🛡
&lt;/h2&gt;

&lt;p&gt;Qovery makes the difference between an &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/environment-variable"&gt;Environment Variable&lt;/a&gt; and a &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/secret/"&gt;Secret&lt;/a&gt;. Basically, a Secret is similar to an Environment Variable but the value is encrypted and can't be revealed. Both are injected as environment variables during the build and the run of your applications.&lt;/p&gt;

&lt;p&gt;To extract your environment variables from Heroku, we recommend using the &lt;a href="https://devcenter.heroku.com/articles/heroku-cli"&gt;Heroku CLI&lt;/a&gt; and exporting all the environment variables and secrets in an .env (dot env) file. Qovery supports the &lt;a href="https://hub.qovery.com/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/"&gt;import of a dot env file&lt;/a&gt; via the Qovery web interface and the Qovery CLI.&lt;/p&gt;



&lt;p&gt;⚠️ If you use Buildpacks for one of your app AND you have indicated a local listening port of your application, you will need to add an environment variable &lt;code&gt;PORT&lt;/code&gt; with the value of your port to make your application starting properly. Otherwise, Qovery will fail to deploy your app!&lt;/p&gt;



&lt;p&gt;&lt;a href="https://devcenter.heroku.com/articles/config-vars#view-current-config-var-values"&gt;Export your environment variable via the Heroku CLI&lt;/a&gt; with the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# To install Heroku CLI: https://devcenter.heroku.com/articles/heroku-cli&lt;/span&gt;
heroku config

GREETINGS: hello world
STRIPE_API_KEY: xxx-yyy-zzz
IS_PRODUCTION: &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you can create your environment variables via the web interface (watch the video below)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/50899d7fa3d84a418f0db69f54f970d3"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e0FpI9_D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/50899d7fa3d84a418f0db69f54f970d3-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or via the &lt;a href="https://hub.qovery.com/docs/using-qovery/interface/cli/"&gt;Qovery CLI&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# auth yourself&lt;/span&gt;
qovery auth

&lt;span class="c"&gt;# selection the app where you want to import your environment variables&lt;/span&gt;
qovery context &lt;span class="nb"&gt;set&lt;/span&gt;

&lt;span class="c"&gt;# import your Heroku environment variables&lt;/span&gt;
heroku config &lt;span class="nt"&gt;--app&lt;/span&gt; &amp;lt;your_heroku_app_name&amp;gt; &lt;span class="nt"&gt;--json&lt;/span&gt; | qovery &lt;span class="nb"&gt;env &lt;/span&gt;import &lt;span class="nt"&gt;--heroku-json&lt;/span&gt;

Qovery: Heroku environment variables import from JSON
? Do you want to import Environment Variables or Secrets? Environment Variables
? What environment variables &lt;span class="k"&gt;do &lt;/span&gt;you want to import?  &lt;span class="o"&gt;[&lt;/span&gt;Use arrows to move, space to &lt;span class="k"&gt;select&lt;/span&gt;, &amp;lt;right&amp;gt; to all, &amp;lt;left&amp;gt; to none, &lt;span class="nb"&gt;type &lt;/span&gt;to filter]
  &lt;span class="o"&gt;[&lt;/span&gt;x]  &lt;span class="nv"&gt;GREETINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hello world
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;  &lt;span class="nv"&gt;STRIPE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;xxx-yyy-zzz
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;x]  &lt;span class="nv"&gt;IS_PRODUCTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true

&lt;/span&gt;Qovery: ✅ Environment Variables successfully imported!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;⚠️ Import sensitive data (E.g. API keys, credentials...) as &lt;code&gt;Secret&lt;/code&gt; and not &lt;code&gt;Environment Variable&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Connect your frontend app to your backend app
&lt;/h3&gt;

&lt;p&gt;To connect your frontend app your backend app we will create an [environment variable alias][docs.using-qovery.configuration.environment-variable#alias-environment-variable].&lt;/p&gt;

&lt;p&gt;Here is how to create a frontend app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/bafbbda93bd64d04afb3189bf4a1a201"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WXx3BihE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/bafbbda93bd64d04afb3189bf4a1a201-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And now how to connect your frontend app with your backend app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/f820925f2175465f9271b97ef414bb42"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MNUZIfHS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/f820925f2175465f9271b97ef414bb42-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also take a look at &lt;a href="https://discuss.qovery.com/t/918"&gt;this forum reply&lt;/a&gt; to learn how to do it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect your backend app to your database
&lt;/h3&gt;

&lt;p&gt;Same as connecting your frontend app to your backend app, you can create an environment variable alias &lt;code&gt;DATABASE_URL&lt;/code&gt; for the &lt;em&gt;built-in&lt;/em&gt; secret finishing with &lt;code&gt;_DATABASE_URL_INTERNAL&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;⚠️ Create an alias on &lt;code&gt;_DATABASE_URL_INTERNAL&lt;/code&gt; and not &lt;code&gt;_DATABASE_URL&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.loom.com/share/59f8368eb3c14796a807c7e39e9c0ab0"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QFl7kSOT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/59f8368eb3c14796a807c7e39e9c0ab0-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Copy data from your Heroku databases to your AWS databases
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Coming soon with &lt;a href="https://www.replibyte.com"&gt;Replibyte&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Deploy your apps!
&lt;/h2&gt;

&lt;p&gt;We are finally ready to deploy my applications on AWS!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/0589d2f2aa4149edb605dc23f4efd23d"&gt;&lt;br&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eTDPTcSw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.loom.com/sessions/thumbnails/0589d2f2aa4149edb605dc23f4efd23d-with-play.gif" width="572" height="360"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watch the final result 😎&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/da31c21f9c104eae9270e4c4db59055e"&gt;https://www.loom.com/share/da31c21f9c104eae9270e4c4db59055e&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ by Heroku users
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How to create a custom domain?
&lt;/h3&gt;

&lt;p&gt;Check out the documentation on &lt;a href="https://hub.qovery.com/guides/getting-started/setting-custom-domain/"&gt;how to configure your custom domain&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to monitor my apps?
&lt;/h3&gt;

&lt;p&gt;We do recommend using &lt;a href="https://www.datadoghq.com"&gt;Datadog&lt;/a&gt; or any other monitoring products for monitoring your apps deployed by Qovery. Check out &lt;a href="https://hub.qovery.com/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/"&gt;our tutorial on how to install Datadog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you have Heroku "Review App" equivalent?
&lt;/h3&gt;

&lt;p&gt;Yes, it's what we call &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/environment/#preview-environment"&gt;Preview Environment&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to rollback?
&lt;/h3&gt;

&lt;p&gt;Check out the &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/application/#update-and-rollback"&gt;app rollback documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How auto-scaling works?
&lt;/h3&gt;

&lt;p&gt;Check out the &lt;a href="https://hub.qovery.com/docs/using-qovery/configuration/application/#auto-scaling"&gt;app auto-scaling documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to manage database migration?
&lt;/h3&gt;

&lt;p&gt;Check out &lt;a href="https://discuss.qovery.com/t/951"&gt;our forum reply&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it possible to get a shell / connect to my app?
&lt;/h3&gt;

&lt;p&gt;Yes, with the Qovery CLI and the command &lt;code&gt;qovery shell&lt;/code&gt;. &lt;a href="https://hub.qovery.com/docs/using-qovery/interface/cli/#shell"&gt;Check out the documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Terraform and Infrastructure as Code?
&lt;/h3&gt;

&lt;p&gt;Absolutely, we have a &lt;a href="https://hub.qovery.com/docs/devops/infrastructure-as-code/terraform/"&gt;Qovery Terraform provider&lt;/a&gt; available.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can I connect my app to MongoDB Atlas?
&lt;/h3&gt;

&lt;p&gt;If you use MongoDB Atlas check out &lt;a href="https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"&gt;our tutorial about VPC peering&lt;/a&gt; and how to securely connect to your existing MongoDB Atlas database.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can I connect my app to an AWS service not managed by Qovery?
&lt;/h3&gt;

&lt;p&gt;If you want to connect your app to an AWS service not managed by Qovery, check out &lt;a href="https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"&gt;our tutorial about VPC peering&lt;/a&gt; and how to securely connect to this AWS service.&lt;/p&gt;




&lt;p&gt;If you have a common question about Qovery, we have a more general &lt;a href="https://hub.qovery.com/docs/useful-resources/faq/"&gt;FAQ section&lt;/a&gt; available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up 👋🏼
&lt;/h2&gt;

&lt;p&gt;Congrats! You have migrated from Heroku to AWS. Feel free to check out our &lt;a href="https://discuss.qovery.com"&gt;forum&lt;/a&gt; and open a thread if you have any question.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>heroku</category>
    </item>
    <item>
      <title>The top 10 AWS architecture built with Qovery in 2022</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Sun, 01 May 2022 06:41:52 +0000</pubDate>
      <link>https://forem.com/rophilogene/the-top-10-aws-architecture-built-with-qovery-in-2022-51b9</link>
      <guid>https://forem.com/rophilogene/the-top-10-aws-architecture-built-with-qovery-in-2022-51b9</guid>
      <description>&lt;p&gt;We are in May 2022, and hundreds of startups have built their infrastructure on AWS using Qovery. Check out &lt;a href="https://www.qovery.com/blog/the-top-10-aws-architecture-built-with-qovery-in-2022"&gt;this guide&lt;/a&gt; where I share the 10 best (and fancy) AWS architectures our users have made.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.qovery.com/blog/the-top-10-aws-architecture-built-with-qovery-in-2022"&gt;https://www.qovery.com/blog/the-top-10-aws-architecture-built-with-qovery-in-2022&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>A tool to seed your dev database with real data</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Thu, 28 Apr 2022 05:20:48 +0000</pubDate>
      <link>https://forem.com/rophilogene/a-tool-to-seed-your-dev-database-with-real-data-5gj5</link>
      <guid>https://forem.com/rophilogene/a-tool-to-seed-your-dev-database-with-real-data-5gj5</guid>
      <description>&lt;p&gt;A bunch of developers and myself have created &lt;a href="https://github.com/qovery/replibyte"&gt;RepliByte&lt;/a&gt; - an open-source tool to seed a development database from a production database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features ⚡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Support data backup and restore for PostgreSQL, MySQL and MongoDB&lt;/li&gt;
&lt;li&gt;Replace sensitive data with fake data&lt;/li&gt;
&lt;li&gt;Works on large database (&amp;gt; 10GB) (read Design)&lt;/li&gt;
&lt;li&gt;Database Subsetting: Scale down a production database to a more reasonable size&lt;/li&gt;
&lt;li&gt;Start a local database with the prod data in a single command&lt;/li&gt;
&lt;li&gt;On-the-fly data (de)compression (Zlib)&lt;/li&gt;
&lt;li&gt;On-the-fly data de/encryption (AES-256)&lt;/li&gt;
&lt;li&gt;Fully stateless (no server, no daemon) and lightweight binary&lt;/li&gt;
&lt;li&gt;Use custom transformers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My motivation
&lt;/h2&gt;

&lt;p&gt;As a developer, creating a fake dataset for running tests is tedious. Plus, it does not reflect the real-world data and painful to keep updated. If you prefer to run your app tests with production data. Then RepliByte is for you as well.&lt;/p&gt;

&lt;p&gt;Available for MacOSX, Linux and Windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/qovery/replibyte"&gt;https://github.com/qovery/replibyte&lt;/a&gt; give a ⭐ if you like it.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>postgres</category>
      <category>mysql</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>How to seed your dev Postgres DB with your prod DB with RepliByte</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Thu, 31 Mar 2022 22:17:15 +0000</pubDate>
      <link>https://forem.com/rophilogene/how-to-seed-your-dev-postgres-db-with-your-prod-db-with-replibyte-2dj8</link>
      <guid>https://forem.com/rophilogene/how-to-seed-your-dev-postgres-db-with-your-prod-db-with-replibyte-2dj8</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://www.qovery.com"&gt;my company&lt;/a&gt;, we build a platform for developers to help them deploying easily their apps on AWS. One major feature that we have is the &lt;a href="https://www.qovery.com/preview-environments"&gt;Preview Environment&lt;/a&gt; - which let any developer to create a full replica environment from the production for every pull request. It's convenient and we had to find a way to clone the apps and the databases with the data included. That's why I created &lt;a href="https://github.com/Qovery/replibyte"&gt;RepliByte&lt;/a&gt; - an open-source tool written in Rust to synchronize cloud databases and hide sensitive data 🔥&lt;/p&gt;

&lt;h2&gt;
  
  
  Backup your prod Postgres DB into S3
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;connection_uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$DATABASE_URL&lt;/span&gt;
  &lt;span class="na"&gt;encryption_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$MY_PRIVATE_ENC_KEY&lt;/span&gt; &lt;span class="c1"&gt;# optional &lt;/span&gt;
&lt;span class="na"&gt;bridge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;bucket&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$BUCKET_NAME&lt;/span&gt;
  &lt;span class="na"&gt;access_key_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$ACCESS_KEY_ID&lt;/span&gt;
  &lt;span class="na"&gt;secret_access_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$AWS_SECRET_ACCESS_KEY&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To run the backup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;replibyte &lt;span class="nt"&gt;-c&lt;/span&gt; prod-conf.yaml backup run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To list your backups&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;replibyte &lt;span class="nt"&gt;-c&lt;/span&gt; prod-conf.yaml backup list

&lt;span class="nb"&gt;type          &lt;/span&gt;name                    size    when                    compressed  encrypted
PostgreSQL    backup-1647706359405    154MB   Yesterday at 03:00 am   &lt;span class="nb"&gt;true        true
&lt;/span&gt;PostgreSQL    backup-1647731334517    152MB   2 days ago at 03:00 am  &lt;span class="nb"&gt;true        true
&lt;/span&gt;PostgreSQL    backup-1647734369306    149MB   3 days ago at 03:00 am  &lt;span class="nb"&gt;true        true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Clean sensitive data
&lt;/h2&gt;

&lt;p&gt;RepliByte provides the Transformers to clean up the sensitive data from your database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Transformers&lt;/span&gt;

Here is a list of all the transformers available.

| id              | description                                                                                        | available |
| --------------- | -------------------------------------------------------------------------------------------------- | --------- |
| transient       | Does not modify the value                                                                          | yes       |
| random          | Randomize value but keep the same length (string only). [AAA]-&amp;gt;[BBB]                               | yes       |
| first-name      | Replace the string value by a first name                                                           | yes       |
| email           | Replace the string value by an email address                                                       | yes       |
| keep-first-char | Keep only the first char for strings and digit for numbers                                         | yes       |
| phone-number    | Replace the string value by a phone number                                                         | yes       |
| credit-card     | Replace the string value by a credit card number                                                   | yes       |
| redacted        | Obfuscate your sensitive data (&amp;gt;3 characters strings only). [4242 4242 4242 4242]-&amp;gt;[424&lt;span class="gs"&gt;********&lt;/span&gt;&lt;span class="ge"&gt;**&lt;/span&gt;] | yes       |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To use the Transformers, you need to edit your configuration file and add them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;connection_uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$DATABASE_URL&lt;/span&gt;
  &lt;span class="na"&gt;encryption_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$MY_PRIVATE_ENC_KEY&lt;/span&gt; &lt;span class="c1"&gt;# optional &lt;/span&gt;
  &lt;span class="na"&gt;transformers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;public&lt;/span&gt;
      &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;employees&lt;/span&gt;
      &lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;last_name&lt;/span&gt;
          &lt;span class="na"&gt;transformer_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;random&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;birth_date&lt;/span&gt;
          &lt;span class="na"&gt;transformer_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;random-date&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;first_name&lt;/span&gt;
          &lt;span class="na"&gt;transformer_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;first-name&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;email&lt;/span&gt;
          &lt;span class="na"&gt;transformer_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;email&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;username&lt;/span&gt;
          &lt;span class="na"&gt;transformer_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;keep-first-char&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;public&lt;/span&gt;
      &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;customers&lt;/span&gt;
      &lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;phone&lt;/span&gt;
          &lt;span class="na"&gt;transformer_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;phone-number&lt;/span&gt;
&lt;span class="na"&gt;bridge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;bucket&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$BUCKET_NAME&lt;/span&gt;
  &lt;span class="na"&gt;access_key_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$ACCESS_KEY_ID&lt;/span&gt;
  &lt;span class="na"&gt;secret_access_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$AWS_SECRET_ACCESS_KEY&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then your sensitive data will be hidden while seeding your dev Postgres DB 👌&lt;/p&gt;

&lt;h2&gt;
  
  
  Seed your dev Postgres DB
&lt;/h2&gt;

&lt;p&gt;To restore a backup, you first need to declare a &lt;code&gt;destination&lt;/code&gt; in your YAML config file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;bridge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;bucket&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$BUCKET_NAME&lt;/span&gt;
  &lt;span class="na"&gt;access_key_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$ACCESS_KEY_ID&lt;/span&gt;
  &lt;span class="na"&gt;secret_access_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$AWS_SECRET_ACCESS_KEY&lt;/span&gt;
&lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;connection_uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$DATABASE_URL&lt;/span&gt;
  &lt;span class="na"&gt;decryption_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$MY_PUBLIC_DEC_KEY&lt;/span&gt; &lt;span class="c1"&gt;# optional&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, you need to run &lt;code&gt;replibyte backup list&lt;/code&gt; to list all the backup available&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;replibyte &lt;span class="nt"&gt;-c&lt;/span&gt; prod-conf.yaml backup list

&lt;span class="nb"&gt;type          &lt;/span&gt;name                    size    when                    compressed  encrypted
PostgreSQL    backup-1647706359405    154MB   Yesterday at 03:00 am   &lt;span class="nb"&gt;true        true
&lt;/span&gt;PostgreSQL    backup-1647731334517    152MB   2 days ago at 03:00 am  &lt;span class="nb"&gt;true        true
&lt;/span&gt;PostgreSQL    backup-1647734369306    149MB   3 days ago at 03:00 am  &lt;span class="nb"&gt;true        true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and &lt;code&gt;replibyte restore&lt;/code&gt; to seed your dev database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;replibyte &lt;span class="nt"&gt;-c&lt;/span&gt; prod-conf.yaml restore &lt;span class="nt"&gt;-v&lt;/span&gt; latest

OR 

replibyte &lt;span class="nt"&gt;-c&lt;/span&gt; prod-conf.yaml restore &lt;span class="nt"&gt;-v&lt;/span&gt; backup-1647706359405
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What else?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;RepliByte is written in Rust and all operations are made on the fly. Meaning no extra disk space is consumed and there is no data leak risk. ⚡️&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RepliByte also supports MongoDB (Thanks to Benny - contributor) 🔥&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complete data synchronization 💪🏼&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Work on different any cloud providers 🌍&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can use multiple transformers to hide your sensitive data 🙈&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designed to backup TB of data 🏆&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Skip data sync for specific tables 👌&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On-the-fly data (de)compression (Zlib) and de/encryption (AES-256)🛡&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;RepliByte is a command line tool that makes database seeding super easy and convenient. I am working on a way to restore a database locally with Docker in one command. More is coming so stay tuned and feel free to share your feedback.&lt;/p&gt;

&lt;p&gt;RepliByte GitHub: &lt;a href="https://github.com/Qovery/replibyte"&gt;https://github.com/Qovery/replibyte&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>replibyte</category>
    </item>
    <item>
      <title>RepliByte - an open-source tool to synchronize PostgreSQL in multiple environments</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Thu, 24 Mar 2022 23:15:27 +0000</pubDate>
      <link>https://forem.com/rophilogene/replibyte-an-open-source-tool-to-synchronize-postgresql-in-multiple-environments-2d32</link>
      <guid>https://forem.com/rophilogene/replibyte-an-open-source-tool-to-synchronize-postgresql-in-multiple-environments-2d32</guid>
      <description>&lt;p&gt;After months of experimenting with different ways of synchronizing databases, I am super excited to announce &lt;a href="https://github.com/Qovery/replibyte"&gt;RepliByte&lt;/a&gt; - an open-source tool to synchronize cloud databases and fake sensitive data - This tool is written in Rust.&lt;/p&gt;

&lt;p&gt;As explained in the README, my primary motivation is to respond to a widespread need that most developers have - cloning the production database into a development database while cleaning the sensitive data. It is precisely the purpose of RepliByte.&lt;/p&gt;

&lt;p&gt;I am still in the early days of development, but you can look at the code and the README. It should be clear enough to help me out in that journey, and why not contribute?!&lt;/p&gt;

&lt;p&gt;RepliByte supports PostgreSQL, MySQL and MongoDB supports is in progress by the community 😎.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;I freshly recorded this short demo explaining what is RepliByte and how to use it.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/IKeLnZvECQw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Happy to have your feedback.&lt;/li&gt;
&lt;li&gt;RepliByte is written in Rust and we are looking for contributors.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>database</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Blazingly Fast Preview Environments for Temporal on Kubernetes</title>
      <dc:creator>Romaric P.</dc:creator>
      <pubDate>Thu, 17 Mar 2022 21:18:37 +0000</pubDate>
      <link>https://forem.com/rophilogene/blazingly-fast-preview-environments-for-temporal-on-kubernetes-4266</link>
      <guid>https://forem.com/rophilogene/blazingly-fast-preview-environments-for-temporal-on-kubernetes-4266</guid>
      <description>&lt;p&gt;&lt;a href="https://temporal.io"&gt;Temporal.io&lt;/a&gt; is a workflow engine that able to coordinate microservices and can be developed by writing code and we can use its parts over and over again with a modular architecture.&lt;/p&gt;

&lt;p&gt;One engineer from &lt;a href="https://www.qovery.com/team"&gt;my team&lt;/a&gt; has written &lt;a href="https://hub.qovery.com/guides/tutorial/deploy-temporal-on-kubernetes/"&gt;this tutorial&lt;/a&gt; explaining how to deploy multiple environments of &lt;a href="https://www.temporal.io"&gt;Temporal&lt;/a&gt; on a Kubernetes cluster This tutorial explains how to get one temporal instance per environment. &lt;/p&gt;

&lt;p&gt;Note: consider using &lt;a href="https://docs.temporal.io/docs/server/namespaces/"&gt;Temporal namespaces&lt;/a&gt; if you do not want to spawn a full temporal cluster per environment. &lt;/p&gt;

&lt;p&gt;Happy reading.&lt;/p&gt;

</description>
      <category>temporal</category>
      <category>kubernetes</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
