vendor: 2,427 bytes, line 1
1"use strict";(self.webpackChunkgatsby_getting_started_tutorial=self.webpackChunkgatsby_getting_started_tutorial||[]).push([[9070],{9341:function(e,t,n){var a=n(47293);e.exports=function(e,t){var n=[][e];return!!n&&a((function(){n.call(null,t||function(){return 1},1)}))}},41589:function(e,t,n){var a=n(51400),r=n(26244),o=n(86135),i=Array,l=Math.max;e.exports=function(e,t,n){for(var s=r(e),u=a(t,s),c=a(void 0===n?s:n,s),m=i(l(c-u,0)),d=0;u<c;u++,d++)o(m,d,e[u]);return m.length=d,m}},94362:function(e,t,n){var a=n(41589),r=Math.floor,o=function(e,t){var n=e.length,s=r(n/2);return n<8?i(e,t):l(e,o(a(e,0,s),t),o(a(e,s),t),t)},i=function(e,t){for(var n,a,r=e.length,o=1;o<r;){for(a=o,n=e[o];a&&t(e[a-1],n)>0;)e[a]=e[--a];a!==o++&&(e[a]=n)}return e},l=function(e,t,n,a){for(var r=t.length,o=n.length,i=0,l=0;i<r||l<o;)e[i+l]=i<r&&l<o?a(t[i],n[l])<=0?t[i++]:n[l++]:i<r?t[i++]:n[l++];return e};e.exports=o},70648:function(e,t,n){var a=n(51694),r=n(60614),o=n(84326),i=n(5112)("toStringTag"),l=Object,s="Arguments"===o(function(){return arguments}());e.exports=a?o:function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=l(e),i))?n:s?o(t):"Object"===(a=o(t))&&r(t.callee)?"Arguments":a}},86135:function(e,t,n){var a=n(34948),r=n(3070),o=n(79114);e.exports=function(e,t,n){var i=a(t);i in e?r.f(e,i,o(0,n)):e[i]=n}},85117:function(e,t,n){var a=n(66330),r=TypeError;e.exports=function(e,t){if(!delete e[t])throw r("Cannot delete property "+a(t)+" of "+a(e))}},68886:function(e,t,n){var a=n(88113).match(/firefox\/(\d+)/i);e.exports=!!a&&+a[1]},30256:function(e,t,n){var a=n(88113);e.exports=/MSIE|Trident/.test(a)},98008:function(e,t,n){var a=n(88113).match(/AppleWebKit\/(\d+)\./);e.exports=!!a&&+a[1]},51694:function(e,t,n){var a={};a[n(5112)("toStringTag")]="z",e.exports="[object z]"===String(a)},41340:function(e,t,n){var a=n(70648),r=String;e.exports=function(e){if("Symbol"===a(e))throw TypeError("Cannot convert a Symbol value to a string");return r(e)}},2707:function(e,t,n){var a=n(82109),r=n(1702),o=n(19662),i=n(47908),l=n(26244),s=n(85117),u=n(41340),c=n(47293),m=n(94362),d=n(9341),h=n(68886),p=n(30256),g=n(7392),f=n(98008),y=[],b=r(y.sort),w=r(y.push),v=c((function(){y.sort(void 0)})),E=c((function(){y.sort(null)})),C=d("sort"),k=!c((function(){if(g)return g<70;if(!(h&&h>3)){if(p)return!0;if(f)return f<603;var e,t,n,a,r="";for(e=65;e<76;
1e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(a=0;a<47;a++)y.push({k:t+a,v:n})}for(y.sort((function(e,t){return t.v-e.v})),a=0;a<y.length;a++)t=y[a].k.charAt(0),r.charAt(r.length-1)!==t&&(r+=t);return"DGBEFHACIJK"!==r}}));a({target:"Array",proto:!0,forced:v||!E||!C||!k},{sort:function(e){void 0!==e&&o(e);var t=i(this);if(k)return void 0===e?b(t):b(t,e);var n,a,r=[],c=l(t);for(a=0;a<c;a++)a in t&&w(r,t[a]);for(m(r,function(e){return function(t,n){return void 0===n?-1:void 0===t?1:void 0!==e?+e(t,n)||0:u(t)>u(n)?1:-1}}(e)),n=l(r),a=0;a<n;)t[a]=r[a++];for(;a<c;)s(t,a++);return t}})},23452:function(e,t,n){n.r(t),n.d(t,{default:function(){return f}});n(2707);var a=n(11151),r=n(67294),o=n(8478);function i(e){const t=Object.assign({p:"p",h2:"h2",strong:"strong",h3:"h3",a:"a",ol:"ol",li:"li"},(0,a.ah)(),e.components);return r.createElement(r.Fragment,null,r.createElement(t.p,null,"Recently, Terraform has gained a lot of popularity, becoming one of the standards in the infrastructure-as-code (IaC) space. Pulumi and CloudFormation are two other tools that have become well known as IaC has been adopted across the industry to make it easier for maintainers to manage and run their infrastructure across clouds. The basic principle behind IaC is that all of your infrastructure components are defined as code in a repository or any version control system."),"\n",r.createElement(t.p,null,"In this article, weâre going to see how well Terraform, Pulumi, and CloudFormation are able to implement IaC principles. Weâll discuss their pros and cons, including how easy they are to use and extend."),"\n",r.createElement(t.h2,{id:"importance-of-infrastructure-as-code-iac"},"Importance of Infrastructure as Code (IaC)"),"\n",r.createElement(t.p,null,"Large-scale infrastru
1cture can be very difficult to manage, with any changes requiring you to either go to the vendor console or make some API calls. This can get out of hand very easily as your infrastructure scales. IaC solves this by abstracting the steps you have to perform to keep your infrastructure intact. "),"\n",r.createElement(t.p,null,"After defining the state in a code repository, an IaC tool will work in this code repository to configure the changes. You can very easily track these changes using a version control system, with commits describing all the changes made "),"\n",r.createElement(t.p,null,"IaC also saves you from the problem of dependency resolution, plus you donât have to keep track of which components need to be launched and in what order."),"\n",r.createElement(t.h2,{id:"declarative-vs-procedural-way-of-defining-infrastructure"},"Declarative vs. Procedural Way of Defining Infrastructure"),"\n",r.createElement(t.p,null,"The definition of infrastructure as code generally follows a ",r.createElement(t.strong,null,"declarative")," language. You have to define the state of your infrastructure, and the underlying tool will then take care of maintaining this state and keeping your infrastructure in sync. "),"\n",r.createElement(t.p,null,"The ",r.createElement(t.strong,null,"procedural")," way of defining infrastructure must mention the steps needed to reach a particular state. These are generally scripts that execute some commands and APIs to provision the infrastructure."),"\n",r.createElement(t.p,null,"The advantage of a declarative definition is that you donât have to worry about the steps taken, as the actual path is abstracted and executed behind the scenes. This means you donât have to worry about problems like dependency resolution. "),"\n",r.createElement(t.p,null,"What is dependency resolution? Assume you want to create a VM. To do so, you have to launch the NIC first. With IaC, you can define the state for both the NIC and VM, and the tool will make sure to launch the NIC first and then the VM. "),"\n",r.createElement(t.h2,{id:"infrastru
1cture-as-code-iac-tools"},"Infrastructure as Code (IaC) Tools"),"\n",r.createElement(t.h3,{id:"terraform"},"Terraform"),"\n",r.createElement(t.p,null,"Terraform was created and ",r.createElement(t.a,{href:"https://github.com/hashicorp/terraform/releases/tag/v0.1.0"},"open-sourced by HashiCorp in July 2014"),". It follows the ",r.createElement(t.a,{href:"https://www.terraform.io/language/syntax/configuration"},"HashiCorp Configuration Language")," (HCL), which you can use to create and run resources, and is the biggest name in IaC today. Terraform works on a reconciliation model, so whenever there is drift in the defined state, it will try to sync the remote state to the defined state."),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Use case"),": Creating a cloud-agnostic declarative system for launching resources in different clouds and making it standardized."),"\n",r.createElement(t.h3,{id:"pulumi"},"Pulumi"),"\n",r.createElement(t.p,null,"Pulumi was introduced in 2018 and open-sourced. Pulumi is unique because you can define your IaC using the language of your choice, which makes it very easy to get started with your development. "),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Use case"),": Setting up a system where you donât want to use HCL or a domain-specific language, instead writing the IaC in a language youâre accustomed to."),"\n",r.createElement(t.h3,{id:"cloudformation"},"CloudFormation"),"\n",r.createElement(t.p,null,"CloudFormation was released in 2011 by Amazon Web Services and is a very easy way to launch resources on AWS Cloud. You just have to define your configuration in YAML, and AWS CloudFormation will take care of launching the resources behind the scenes. It also follows a declarative language pattern."),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"Use case"),": Creating resources in AWS without the extra hassle of having to learn a new tool; you just define everything in YAML and your resources get launched."),"\n",r.createElement(t.h2,{id:"the-benefits-of-cloud-agnostic-infrastructure-as-code-iac"},"The Benefits of Cloud-Agnostic Infrastructure as Code (IaC)"),"\n",r.createElement(t.p,null,"Generally, IaC should be able to launch resources in multiple clouds to make sure your setup works even if you move to another cloud; simply writing new scripts should allow you to create resources in a new cloud with minimal configuration changes. "),"\n",r.createElement(t.p,null,"While this can be done with Terraform and Pulumi, this is not the case with CloudFormation since itâs tied to AWS, meaning you can launch and configure resources only in AWS. This makes CloudFormation a less than ideal choice as your IaC tool. "),"\n",r.createElement(t.p,null,"Cloud-agnostic tooling is something you should consider to avoid vendor lock-in. This way, if problems arise with one vendor, you can always switch to another cloud provider."),"\n",r.createElement(t.h2,{id:"comparing-terraform-vs-cloudformation-vs-pulumi"},"Comparing Terraform vs. Cloudformation vs. Pulumi"),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Terraform")," and ",r.createElement(t.strong,null,"Pulumi")," both have open-source and enterprise versions. You can easily install and use them both, whereas when it comes to ",r.createElement(t.strong,null,"CloudFormation"),", it is only available as an AWS resource, which comes with the limitations discussed above."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Terraform")," uses HCL to define resources, meaning youâll have to learn this language and use it to write the configuration. ",r.createElement(t.strong,null,"Pulumi")," allows you to use different languages like Python, Node.js, Golang, etc. It can, however, sometimes be hard to maintain standard practices across multiple languages if used in configuration tools like Pulumi. ",r.createElement(t.strong,null,"AWS CloudFormation"),", meanwhile, follows a YAML-based approach to launch and manage resources."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Terraform and Pulumi")," don't have support for a UI or role-based access control, while ",r.createElement(t.strong,null,"CloudFormation")," has both using AWS IAM policies. A UI and RBAC can be very useful for maintaining and auditing your system. You can achieve RBAC somewhat in Terraform with a version control system. Having proper permissions on the Git repo of your co
1de will let you audit everything and keep an eye on who is making any changes."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Terraform and CloudFormation")," use the declarative way of defining resources, while in ",r.createElement(t.strong,null,"Pulumi"),", you will end up writing code to launch resources. You can write these in any supported programming language."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Terraform and Pulumi")," both have support for integration with cloud management platforms. ",r.createElement(t.strong,null,"CloudFormation")," doesnât have any such support, although you can easily manage it from the AWS console. "),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Terraform")," has massive community adoption and is very easy to use with different extensions. Terraform also provides a way of integrating with other vendors by just writing providers for that particular cloud. ",r.createElement(t.strong,null,"Pulumi")," also has a way to extend support for other clouds, but it is not as great as Terraform and its community adoption is very small."),"\n"),"\n",r.createElement(t.h2,{id:"conclusion"},"Conclusion"),"\n",r.createElement(t.p,null,"With the above points in mind, choosing Terraform for your infrastructure can go a long way and is easier to manage. You may have to invest some engineering hours at the start of your project to ensure a standard way of writing the code for your cloud resources, but once you have all this set up, Terraform can scale massively. "),"\n",r.createElement(t.p,null,"Anyone who wants to get things started faster, doesn't want to be connected to a particular cloud, and doesnât want to invest in learning a ",r.createElement(t.a,{href:"https://www.jetbrains.com/mps/concepts/domain-specific-languages/#:~:text=A%20Domain%20Specific%20Language%20is,from%20the%20field%20or%20domain."},"domain-specific language")," for Terraform can opt for Pulumi. "),"\n",r.createElement(t.p,null,"CloudFormation is good if youâre already using AWS Cloud and have no plans to move away from it or span across multiple clouds in the future. "),"\n",r.createElement(t.p,null,"Terraform boasts a strong community, is cloud-agnostic and open-source, and uses the declarative way of defining languages, making it a good choice if you donât have any special use case. "),"\n",r.createElement(t.p,null,r.createElement(t.strong,null,"You may also like:")),"\n",r.createElement(t.p,null,"> [Video] ",r.createElement(t.a,{href:"https://www.youtube.com/watch?v=ZUkwyjP2BDE"},"Best Practices for Using Terraform in Your Developer Pipeline")),"\n",r.createElement(t.p,null,"> [Video] ",r.createElement(t.a,{href:"https://youtu.be/ZUkwyjP2BDE?t=755"},"Pulumi vs. Cloudformation vs. Terraform")),"\n",r.createElement(t.p,null,"> ",r.createElement(t.a,{href:"https://documentation.bunnyshell.com/integrations/terraform/how-to-auto-attach-a-terraform-module-to-an-ephemeral-environment"},"Terraform and Ephemeral Environments with Bunnyshell")),"\n",r.createElement(t.p,null,"> ",r.createElement(t.a,{href:"https://www.bunnyshell.com/blog/cicd-and-bunnyshell-environment-as-a-service-match-made-in-heaven/"},"CI/CD and Bunnyshell EaaS - Match Made in Heaven")),"\n",r.createElement(t.p,null,"> ",r.createElement(t.a,{href:"https://www.bunnyshell.com/trendreports/cicd-application-release-orchestration-trend-report-2022/"},"CI/CD and Application Release Orchestration Trend 2022 Report")))}var l=function(e){void 0===e&&(e={});const{wrapper:t}=Object.assign({},(0,a.ah)(),e.components);return t?r.createElement(t,e,r.createElement(i,e)):i(e)},s=n(11883),u=n(82179),c=n(13438),m=n(31794),d=n(98576);const h={IntroText:o.n1,BlogImage:o.cz,GiphyEmbed:o.vo,HtmlTable:o.BP,LeadGenForm:o.uE,ActionBlock:o.tq,ArticleCTA:u.hL,Callout:u.UW,pre:c.Z},p=e=>{let{cards:t}=e;const{0:n,1:a}=(0,r.useState)(0),o=Math.ceil(t.length/2),i=t.slice(2*n,2*n+2);return r.createElement("div",{className:"blog2-related"},r.createElement("div",{className:"blog2-related__header"},r.createElement("h2",{className:"blog2-related__title"},"Related Articles"),o>1&&r.createElement("div",{className:"blog2-related__nav"},r.createElement("button",{className:"blog2-related__arrow",onClick:()=>a((e=>Math.max(0,e-1))),disabled:0===n,"aria-label":"Previous"},"â"),r.createElement("span",{className:"blog2-related__dots"},Array.from({length:o}).map(((e,t)=>r.createElement("span",{key:t,className:"blog2-related__dot"+(t===n?" active":"")})))),r.createElement("button",{className:"blog2-related__arrow",onClick:()=>a((e=>Math.min(o-1,e+1))),disabled:n===o-1,"aria-label":"Next"},"â"))),r.createElement("div",{className:"blog2-related__grid"},i.map((e=>r.createElement(s.Link,{key:e.url,to:e.url,className:"blog2-related__card"},e.heroImage&&r.createElement("img",{src:e.heroImage,alt:e.title,className:"blog2-related__image",loading:"lazy"}),r.createElement("div",{className:"blog2-related__body"},r.createElement("h3",{className:"blog2-related__card-title"},e.title),e.description&&r.createElement("p",{className:"blog2-related__desc"},e.description)))))))};const g=e=>{let{data:t,children:n}=e;const{mdx:o}=t,i=o.frontmatter,l=m.find((e=>e.uid===i.authorSlug)),c=d.find((e=>e.uid===i.categorySlug)),g=function(e){if(!e||!e.items)return[];const t=[];for(const n of e.items)if(n.url&&n.title&&t.push({id:n.url.replace("#",""),text:n.title,level:2}),n.items)for(const e of n.items)e.url&&e.title&&t.push({id:e.url.replace("#",""),text:e.title,level:3});return t}(o.tableOfContents),f=function(e,t,n){const a="https://www.bunnyshell.com"+e.url,r=[];r.push({"@context":"https://schema.org","@type":"BlogPosting",headline:e.metaTitle||e.title,de
1scription:e.metaDescription||e.description,image:e.heroImage?"https://www.bunnyshell.com"+e.heroImage:void 0,datePublished:e.publishDate?e.publishDate+"T00:00:00+00:00":void 0,dateModified:e.modifiedDate||e.publishDate?(e.modifiedDate||e.publishDate)+"T00:00:00+00:00":void 0,mainEntityOfPage:{"@type":"WebPage","@id":a},author:{"@type":"Person",name:(null==t?void 0:t.name)||"Bunnyshell",url:t?"https://www.bunnyshell.com/blog/author/"+e.authorSlug+"/":"https://www.bunnyshell.com/",jobTitle:(null==t?void 0:t.position)||""},publisher:{"@type":"Organization",name:"Bunnyshell",logo:{"@type":"ImageObject",height:150,url:"https://www.bunnyshell.com/images/bunnyshell.png",width:800}},url:a});const o=[{"@type":"ListItem",position:1,name:"Home",item:"https://www.bunnyshell.com/"},{"@type":"ListItem",position:2,name:"Blog",item:"https://www.bunnyshell.com/blog/"}];if(n?(o.push({"@type":"ListItem",position:3,name:n.name,item:"https://www.bunnyshell.com/blog/"+e.categorySlug+"/"}),o.push({"@type":"ListItem",position:4,name:e.title,item:a})):o.push({"@type":"ListItem",position:3,name:e.title,item:a}),r.push({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:o}),e.faqJson)try{const t=JSON.parse(e.faqJson);t.length>0&&r.push({"@context":"https://schema.org","@type":"FAQPage",mainEntity:t.map((e=>({"@type":"Question",name:e.q,acceptedAnswer:{"@type":"Answer",text:e.a}})))})}catch(i){}return r}(i,l,c),y=i.tags||[],b=t.relatedPosts?t.relatedPosts.nodes.filter((e=>e.frontmatter.url!==i.url)).slice().sort(((e,t)=>{const n=(e.frontmatter.tags||[]).some((e=>y.includes(e)))?1:0;return((t.frontmatter.tags||[]).some((e=>y.includes(e)))?1:0)-n})):[],w=i.relatedLinksJson?JSON.parse(i.relatedLinksJson):[],v=b.map((e=>({label:e.frontmatter.title,href:e.frontmatter.url}))),E=new Set(w.map((e=>e.href))),C=w.concat(v.filter((e=>!E.has(e.href)))).slice(0,6),k=b.slice(0,9).map((e=>({title:e.frontmatter.title,url:e.frontmatter.url,heroImage:e.frontmatter.heroImage,description:e.frontmatter.description}))),I=[];c&&(I.push({label:"All Posts",href:"/blog/"}),I.push({label:c.name,href:"/blog/"+i.categorySlug+"/"}));const T=(i.tags||[]).map((e=>({label:e.replace(/-/g," "),href:"/blog/"+e+"/"})));return r.createElement(u.ZP,{title:i.title,metaTitle:i.metaTitle?i.metaTitle+" | Bunnyshell":void 0,description:i.metaDescription||i.description,url:i.url,heroImage:i.heroImage,ogImage:i.ogImage||"https://www.bunnyshell.com/images/og-image.png",category:(null==c?void 0:c.name)||"Blog",categoryLink:c?"/blog/"+i.categorySlug+"/":"/blog/",publishDate:i.publishDate,modifiedDate:i.modifiedDate,readingTime:"5 min read",author:{name:(null==l?void 0:l.name)||"Bunnyshell",avatar:(null==l?void 0:l.image)||void 0},authorLink:i.authorSlug?"/blog/author/"+i.authorSlug+"/":void 0,sidebarLinks:I,sidebarLabel:"Blog",relatedLinks:C,relatedLabel:"Related Posts",headings:g,variant:"dark",schemaMarkup:f[1],articleSchema:JSON.stringify(f[0]),faqSchema:f[2]?JSON.stringify(f[2]):void 0},i.embedUrl&&(()=>{const e=(i.embedUrl.match(/(?:[?&]v=|youtu\.be\/|\/embed\/)([^?&/]+)/)||[])[1]||(i.embedUrl.includes("youtu")?i.embedUrl.split("/").pop().split("?")[0]:null);if(!e)return null;const t={"@context":"https://schema.org","@type":"VideoObject",name:i.title,description:i.metaDescription||i.description,thumbnailUrl:["https://i.ytimg.com/vi/"+e+"/maxresdefault.jpg"],uploadDate:i.publishDate?i.publishDate+"T00:00:00Z":void 0,contentUrl:"https://www.youtube.com/watch?v="+e,embedUrl:"https://www.youtube.com/embed/"+e,publisher:{"@type":"Organization",name:"Bunnyshell",url:"https://www.bunnyshell.com"}};return r.createElement("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(t)}})})(),r.createElement(a.Zo,{components:h},n),T.length>0&&r.createElement("div",{className:"blog2-tags"},T.map((e=>r.createElement(s.Link,{key:e.href,to:e.href,className:"blog2-tags__tag"},e.label)))),r.createElement("div",{className:"blog2-share"},r.createElement("a",{href:"https://www.facebook.com/sharer/sharer.php?u=https://www.bunnyshell.com"+i.url,target:"_blank",rel:"noreferrer"},r.createElement("svg",{width:"11",height:"20",viewBox:"0 0 11 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},r.createElement("path",{d:"M6.74157 20V10.8777H9.80231L10.2615 7.32156H6.74157V5.05147C6.74157 4.0222 7.02622 3.32076 8.50386 3.32076L10.3854 3.31999V0.13923C10.06 0.0969453 8.94308 0 7.64308 0C4.92848 0 3.07002 1.65697 3.07002 4.69927V7.32156H0V10.8777H3.07002V20H6.74157Z",fill:"#737376"}))),r.createElement("a",{href:"https://www.linkedin.com/cws/share?url=https://www.bunnyshell.com"+i.url,target:"_blank",rel:"noreferrer"},r.createElement("svg",{width:"22",height:"20",viewBox:"0 0 22 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},r.createElement("path",{d:"M5.32262 2.17391C5.32262 3.37478 4.3574 4.34783 3.1661 4.34783C1.9748 4.34783 1.00958 3.37478 1.00958 2.17391C1.00958 0.973913 1.9748 0 3.1661 0C4.3574 0 5.32262 0.973913 5.32262 2.17391ZM5.34001 6.08696H0.992188V20H5.34001V6.08696ZM12.2809 6.08696H7.96088V20H12.2818V12.6965C12.2818 8.63565 17.5244 8.30348 17.5244 12.6965V20H21.8618V11.1904C21.8618 4.33826 14.1035 4.58783 12.2809 7.96087V6.08696Z",fill:"#737376"}))),r.createElement("a",{href:"https://twitter.com/intent/tweet?url=https://www.bunnyshell.com"+i.url+"&text="+encodeURIComponent(i.title)+"&via=bunnyshellcloud",target:"_blank",rel:"noreferrer"},r.createElement("svg",{width:"25",height:"20",viewBox:"0 0 25 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},r.createElement("path",{d:"M7.74055 20C17.0288 20 22.1091 12.3047 22.1091 5.63144C22.1091 5.41287 22.1091 5.19529 22.0943 4.97869C23.0827 4.26381 23.9358 3.37867 24.6138 2.3647C23.6921 2.77309 22.7144 3.04092 21.7133 3.15923C22.7675 2.52812 23.5565 1.53548 23.9335 0.366057C22.9422 0.954283 21.8577 1.36884 20.7268 1.59182C19.9654 0.782212 18.9584 0.246107 17.8616 0.0664704C16.7648 -0.
1113166 15.6394 0.0736804 14.6595 0.598096C13.6797 1.12251 12.8999 1.95526 12.441 2.96748C11.9821 3.9797 11.8695 5.11495 12.1208 6.19756C10.1131 6.09691 8.14894 5.57516 6.35592 4.66618C4.56289 3.7572 2.98106 2.48131 1.71312 0.921344C1.06735 2.03306 0.869557 3.34911 1.16003 4.60154C1.4505 5.85397 2.20739 6.9486 3.27659 7.66257C2.47294 7.63876 1.68681 7.42196 0.984552 7.03049C0.984552 7.05117 0.984552 7.07283 0.984552 7.09449C0.984871 8.26041 1.38848 9.39034 2.12691 10.2926C2.86535 11.1949 3.89315 11.8139 5.03599 12.0448C4.29252 12.2476 3.51247 12.2772 2.75576 12.1315C3.07846 13.1349 3.70671 14.0124 4.55264 14.6412C5.39857 15.27 6.41989 15.6186 7.47374 15.6384C5.68553 17.0438 3.47651 17.8067 1.20214 17.8044C0.800346 17.8037 0.398945 17.7793 0 17.7316C2.3094 19.2136 4.99652 19.9997 7.74055 19.9961",fill:"#737376"})))),k.length>0&&r.createElement(p,{cards:k}))};function f(e){return r.createElement(g,e,r.createElement(l,e))}},8478:function(e,t,n){n.d(t,{tq:function(){return c},cz:function(){return o},vo:function(){return i},BP:function(){return l},n1:function(){return r},uE:function(){return u}});var a=n(67294);var r=e=>{let{children:t}=e;return a.createElement("div",{className:"blog2-intro-text"},t)};var o=e=>{let{src:t,alt:n,caption:r}=e;return a.createElement("div",{className:"blog2-image"},a.createElement("img",{src:t,alt:n||"",loading:"lazy"}),r&&a.createElement("p",{className:"blog2-image__caption"},r))};var i=e=>{let{html:t}=e;if(!t)return null;const n=t.replace(/"/g,'"');return a.createElement("div",{className:"blog2-giphy",dangerouslySetInnerHTML:{__html:n}})};var l=e=>{let{html:t}=e;if(!t)return null;const n=t.replace(/"/g,'"');return a.createElement("div",{className:"blog2-table",dangerouslySetInnerHTML:{__html:n}})},s=n(49315);var u=()=>a.createElement(s.Z,null);var c=e=>{let{title:t,description:n,linkText:r,linkUrl:o}=e;return a.createElement(s.Z,{title:t||"Ship faster starting today.",text:n||"Every PR gets its own environment. Every developer ships faster. 14-day trial, no credit card."})}},31794:function(e){e.exports=JSON.parse('[{"uid":"amin","name":"Amin Al Ali Al Darwish","image":"https://images.prismic.io/bunnyshell-blog/aN66yJ5xUNkB1bII_TTJ2LMBL2-U02DPEZB022-fb67db0d9225-512.jpeg?auto=format,compress&rect=0,0,512,512&w=500&h=500","position":"Solution Architect | CKA, Cloud Infrastructure, IDP, PE, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"calinpopescu","name":"Calin Popescu","image":"https://images.prismic.io/bunnyshell-blog/aDbRcSdWJ-7kSnW1_1721825278771-1-.jpeg?auto=format,compress&rect=0,0,800,800&w=500&h=500","position":"Building the CodeGen to production last mile","bio":"","linkedin":"","twitter":""},{"uid":"alin-dobra","name":"Alin Dobra","image":"https://images.prismic.io/bunnyshell-blog/65e316e1676dc480aae086b2_BunnyshellPhotos0229.jpeg?auto=format%2Ccompress&rect=0%2C0%2C1401%2C1401&w=500&h=500","position":"CEO & Co-Founder, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"alex-oprisan","name":"Alex Oprisan","image":"https://images.prismic.io/bunnyshell-blog/65e31745676dc480aae086b3_1582011432047.jpeg?auto=format%2Ccompress&rect=0%2C0%2C800%2C800&w=500&h=500","position":"Head of Solution Engineering","bio":"","linkedin":"","twitter":""},{"uid":"george-pascale","name":"George Pascale","image":"https://images.prismic.io/bunnyshell-blog/afa4aba6-d8af-44a7-a6b5-16e7dda84802_Frame+8.jpg?auto=compress,format&rect=0,0,1280,1280&w=500&h=500","position":"FrontEnd Developer, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"bunny-team","name":"Bunnyshell team","image":"https://images.prismic.io/bunnyshell-blog/598b54cd-f317-4b70-a6f5-5bfa0e84eddd_Icon+White+on+Blue.png?auto=compress,format&rect=0,0,714,714&w=500&h=500","position":"","bio":"","linkedin":"","twitter":""},{"uid":"roxana-ciobanu","name":"Roxana Ciobanu","image":"https://images.prismic.io/bunnyshell-blog/88bfd80d-b48a-4bd4-98b3-59a2540649ec_roxana.jpg?auto=compress,format&rect=0,0,520,520&w=500&h=500","position":"CTO & Co-Founder, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"sorin-dumitrescu","name":"Sorin Dumitrescu","image":"https://images.prismic.io/bunnyshell-blog/65eb9eee-8c4e-4a7f-99fa-fcdbb44dccd7_sorin.jpg?auto=compress,format&rect=0,0,520,520&w=500&h=500","position":"VP of Engineering, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"cristian-ducu","name":"Cristian Ducu","image":"https://images.prismic.io/bunnyshell-blog/ed7403e8-72b7-4e54-9645-c784e45ba135_cristian_ducu.jpeg?auto=compress,format&rect=0,0,1024,1024&w=500&h=500","position":"Chief Strategy Officer, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"shani-shoham","name":"Shani Shoham","image":"https://images.prismic.io/bunnyshell-blog/e0378dd3-c7e7-45fd-a3ba-26c4a191ad99_shani.jpg?auto=compress,format&rect=0,0,1200,1200&w=500&h=500","position":"Chief Revenue Officer, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"silviu-croitoru","name":"Silviu Croitoru","image":"https://images.prismic.io/bunnyshell-blog/af4fa88e-9a1a-4fb6-b0d4-32fd3460d22b_silviu_croitoru.jpg?auto=compress,format&rect=0,0,1280,1280&w=500&h=500","position":"Chief Product Officer, Bunnyshell","bio":"","linkedin":"","twitter":""},{"uid":"grig-duta","name":"Grig Duta","image":"https://images.prismic.io/bunnyshell-blog/1ed54447-19d7-490b-a968
1-73d6dc438d82_grig.jpg?auto=compress,format&rect=0,0,1280,1280&w=500&h=500","position":"Developer Advocate, Bunnyshell","bio":"","linkedin":"","twitter":""}]')},98576:function(e){e.exports=JSON.parse('[{"uid":"news","name":"News","description":"What\'s new with Bunnyshell? What we\'re preparing next and what happens at Bunnyshell.","image":""},{"uid":"people-bunnyshell","name":"People at Bunnyshell","description":"Discover the #BunnyshellTeam behind the product in this article series.","image":""},{"uid":"remote-development","name":"Remote Development","description":"Remote Development","image":""},{"uid":"devops","name":"DevOps","description":"Read more about what DevOps is and find some good practices around it.","image":""},{"uid":"cloud-computing","name":"Cloud computing","description":"Tools, trends and learnings about Cloud Computing","image":""},{"uid":"eaas","name":"Ephemeral Environments","description":"Follow the Bunnyshell blog to learn about ephemeral environments, the latest trends in delivering software, development, staging, and production environments.","image":""}]')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.