{"componentChunkName":"component---src-templates-blog-post-js","path":"/post/automate-deployment-to-aws-with-github-actions","result":{"data":{"headerImage":{"childImageSharp":{"fluid":{"aspectRatio":3.3992537313432836,"src":"/static/b72d38f0a9a131a445c0798c8f11b233/85c19/blog-post-intro.png","srcSet":"/static/b72d38f0a9a131a445c0798c8f11b233/c95ef/blog-post-intro.png 911w,\n/static/b72d38f0a9a131a445c0798c8f11b233/6d938/blog-post-intro.png 1822w,\n/static/b72d38f0a9a131a445c0798c8f11b233/85c19/blog-post-intro.png 3635w","srcWebp":"/static/b72d38f0a9a131a445c0798c8f11b233/bbedc/blog-post-intro.webp","srcSetWebp":"/static/b72d38f0a9a131a445c0798c8f11b233/8f106/blog-post-intro.webp 911w,\n/static/b72d38f0a9a131a445c0798c8f11b233/4b1a2/blog-post-intro.webp 1822w,\n/static/b72d38f0a9a131a445c0798c8f11b233/bbedc/blog-post-intro.webp 3635w","sizes":"(max-width: 3635px) 100vw, 3635px"}}},"relatedPosts":{"nodes":[{"fields":{"slug":"/blog-aws-kubernetes/"},"frontmatter":{"url":"aws-kubernetes/part-1","title":"The State of Kubernetes in AWS: Persistent Data Storage, Application Engineering and More","description":"When it comes to orchestrating containerized workloads, there are several options in the market, with [Kubernetes](https://kubernetes.io) being the most adopted and sought-after solution.","tags":["AWS","Kubernetes"],"date":"2022-12-20T16:44:23.317Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/eb8228db77951dd583fd607fb3b3d3bd/836e2/kubernetes-and-aws.jpg","srcSet":"/static/eb8228db77951dd583fd607fb3b3d3bd/6e81a/kubernetes-and-aws.jpg 120w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/fbe0e/kubernetes-and-aws.jpg 240w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/836e2/kubernetes-and-aws.jpg 480w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/94285/kubernetes-and-aws.jpg 720w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/b1cc5/kubernetes-and-aws.jpg 960w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/097fa/kubernetes-and-aws.jpg 1920w","srcWebp":"/static/eb8228db77951dd583fd607fb3b3d3bd/35871/kubernetes-and-aws.webp","srcSetWebp":"/static/eb8228db77951dd583fd607fb3b3d3bd/83552/kubernetes-and-aws.webp 120w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/2b5a3/kubernetes-and-aws.webp 240w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/35871/kubernetes-and-aws.webp 480w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/9754a/kubernetes-and-aws.webp 720w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/fcc10/kubernetes-and-aws.webp 960w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/30cf3/kubernetes-and-aws.webp 1920w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/kubernetes-node-management/"},"frontmatter":{"url":"karpenter","title":"Karpenter - A New Way to Manage Kubernetes Node Groups","description":"One of the most common discussions that happen when adopting Kubernetes is around autoscaling. You can autoscale your workloads horizontally or vertically, but the main challenge has always been the nodes.\n","tags":["Kubernetes","AWS"],"date":"2022-01-20T00:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.9047619047619047,"src":"/static/e0d4e328e64d982af16b722b7165263b/b460a/aws-karpenter.png","srcSet":"/static/e0d4e328e64d982af16b722b7165263b/d966b/aws-karpenter.png 120w,\n/static/e0d4e328e64d982af16b722b7165263b/67196/aws-karpenter.png 240w,\n/static/e0d4e328e64d982af16b722b7165263b/b460a/aws-karpenter.png 480w,\n/static/e0d4e328e64d982af16b722b7165263b/9a8d7/aws-karpenter.png 720w,\n/static/e0d4e328e64d982af16b722b7165263b/6e898/aws-karpenter.png 960w,\n/static/e0d4e328e64d982af16b722b7165263b/6050d/aws-karpenter.png 1200w","srcWebp":"/static/e0d4e328e64d982af16b722b7165263b/35871/aws-karpenter.webp","srcSetWebp":"/static/e0d4e328e64d982af16b722b7165263b/83552/aws-karpenter.webp 120w,\n/static/e0d4e328e64d982af16b722b7165263b/2b5a3/aws-karpenter.webp 240w,\n/static/e0d4e328e64d982af16b722b7165263b/35871/aws-karpenter.webp 480w,\n/static/e0d4e328e64d982af16b722b7165263b/9754a/aws-karpenter.webp 720w,\n/static/e0d4e328e64d982af16b722b7165263b/fcc10/aws-karpenter.webp 960w,\n/static/e0d4e328e64d982af16b722b7165263b/9000d/aws-karpenter.webp 1200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/aws-kubernetes-part-2/"},"frontmatter":{"url":"aws-kubernetes/part-2","title":"The Current State of Kubernetes on AWS: Kubernetes Security, Scalability, Performance Engineering & More, Part 2","description":"In the first part of our two-part post on the current state of Kubernetes in AWS, we discussed how Kubernetes can help you handle stateful workloads with persistent data storage and standardize your application and data engineering approaches.","tags":["AWS","Kubernetes"],"date":"2021-12-09T08:30:41.061Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/dddeb31efb8e1c04a57b32e10aa14653/836e2/kubernetes-security.jpg","srcSet":"/static/dddeb31efb8e1c04a57b32e10aa14653/6e81a/kubernetes-security.jpg 120w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/fbe0e/kubernetes-security.jpg 240w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/836e2/kubernetes-security.jpg 480w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/94285/kubernetes-security.jpg 720w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/b1cc5/kubernetes-security.jpg 960w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/097fa/kubernetes-security.jpg 1920w","srcWebp":"/static/dddeb31efb8e1c04a57b32e10aa14653/35871/kubernetes-security.webp","srcSetWebp":"/static/dddeb31efb8e1c04a57b32e10aa14653/83552/kubernetes-security.webp 120w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/2b5a3/kubernetes-security.webp 240w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/35871/kubernetes-security.webp 480w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/9754a/kubernetes-security.webp 720w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/fcc10/kubernetes-security.webp 960w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/30cf3/kubernetes-security.webp 1920w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/smb-cloud-adoption/"},"frontmatter":{"url":"smb-cloud-adoption","title":"How to Streamline & Accelerate Your SMB Cloud Adoption","description":"The most successful businesses in today's fast-changing, digitally fueled society are those who take advantage of innovation and are data-driven. However, small and midsize businesses (SMBs) typically have fewer resources to fund the significant upfront investment that is often required to innovate, putting them at a disadvantage.","tags":["AWS","SMB","Cloud Adoption solution"],"date":"2021-10-20T19:15:51.989Z","image":{"childImageSharp":{"fluid":{"aspectRatio":2.3076923076923075,"src":"/static/f00f7616828543f0112e7c8aa9c08b01/836e2/smb-cloud-adoption.jpg","srcSet":"/static/f00f7616828543f0112e7c8aa9c08b01/6e81a/smb-cloud-adoption.jpg 120w,\n/static/f00f7616828543f0112e7c8aa9c08b01/fbe0e/smb-cloud-adoption.jpg 240w,\n/static/f00f7616828543f0112e7c8aa9c08b01/836e2/smb-cloud-adoption.jpg 480w,\n/static/f00f7616828543f0112e7c8aa9c08b01/94285/smb-cloud-adoption.jpg 720w,\n/static/f00f7616828543f0112e7c8aa9c08b01/b1cc5/smb-cloud-adoption.jpg 960w,\n/static/f00f7616828543f0112e7c8aa9c08b01/097fa/smb-cloud-adoption.jpg 1920w","srcWebp":"/static/f00f7616828543f0112e7c8aa9c08b01/35871/smb-cloud-adoption.webp","srcSetWebp":"/static/f00f7616828543f0112e7c8aa9c08b01/83552/smb-cloud-adoption.webp 120w,\n/static/f00f7616828543f0112e7c8aa9c08b01/2b5a3/smb-cloud-adoption.webp 240w,\n/static/f00f7616828543f0112e7c8aa9c08b01/35871/smb-cloud-adoption.webp 480w,\n/static/f00f7616828543f0112e7c8aa9c08b01/9754a/smb-cloud-adoption.webp 720w,\n/static/f00f7616828543f0112e7c8aa9c08b01/fcc10/smb-cloud-adoption.webp 960w,\n/static/f00f7616828543f0112e7c8aa9c08b01/30cf3/smb-cloud-adoption.webp 1920w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/infrastructure-as-code-database-development/"},"frontmatter":{"url":"Infrastructure-as-Code-Database-Development","title":"Infrastructure as Code and Continuous Delivery Makes Database Development Easy","description":"Infrastructure as Code (IAC), Continuous Integration and Continuous Delivery (CI/CD) are becoming part of the standard pattern for delivering application code into production environments.","tags":["DevOps"],"date":"2021-09-22T23:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.6901408450704225,"src":"/static/bdf67201acba9fc07a64dcbb4a2c588e/836e2/blog-image-jeff2.jpg","srcSet":"/static/bdf67201acba9fc07a64dcbb4a2c588e/6e81a/blog-image-jeff2.jpg 120w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/fbe0e/blog-image-jeff2.jpg 240w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/836e2/blog-image-jeff2.jpg 480w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/94285/blog-image-jeff2.jpg 720w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/8d28e/blog-image-jeff2.jpg 941w","srcWebp":"/static/bdf67201acba9fc07a64dcbb4a2c588e/35871/blog-image-jeff2.webp","srcSetWebp":"/static/bdf67201acba9fc07a64dcbb4a2c588e/83552/blog-image-jeff2.webp 120w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/2b5a3/blog-image-jeff2.webp 240w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/35871/blog-image-jeff2.webp 480w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/9754a/blog-image-jeff2.webp 720w,\n/static/bdf67201acba9fc07a64dcbb4a2c588e/d8d9a/blog-image-jeff2.webp 941w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/public-sector-cloud-adoption/"},"frontmatter":{"url":"public-sector-cloud-adoption","title":"How to Transform Your Public Sector Organization with Cloud Adoption      ","description":"Whether you work in government, education, non-profit, or healthcare, we know that your public sector organization is unique - and so are its challenges, from budgetary restrictions to significant governance, security and compliance requirements.","tags":["Public Sector","AWS"],"date":"2021-08-12T20:38:56.252Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.791044776119403,"src":"/static/c010c944ab047a7187b81b6ba82a74b9/836e2/shutterstock_1724551933.jpg","srcSet":"/static/c010c944ab047a7187b81b6ba82a74b9/6e81a/shutterstock_1724551933.jpg 120w,\n/static/c010c944ab047a7187b81b6ba82a74b9/fbe0e/shutterstock_1724551933.jpg 240w,\n/static/c010c944ab047a7187b81b6ba82a74b9/836e2/shutterstock_1724551933.jpg 480w,\n/static/c010c944ab047a7187b81b6ba82a74b9/94285/shutterstock_1724551933.jpg 720w,\n/static/c010c944ab047a7187b81b6ba82a74b9/b1cc5/shutterstock_1724551933.jpg 960w,\n/static/c010c944ab047a7187b81b6ba82a74b9/4af19/shutterstock_1724551933.jpg 6518w","srcWebp":"/static/c010c944ab047a7187b81b6ba82a74b9/35871/shutterstock_1724551933.webp","srcSetWebp":"/static/c010c944ab047a7187b81b6ba82a74b9/83552/shutterstock_1724551933.webp 120w,\n/static/c010c944ab047a7187b81b6ba82a74b9/2b5a3/shutterstock_1724551933.webp 240w,\n/static/c010c944ab047a7187b81b6ba82a74b9/35871/shutterstock_1724551933.webp 480w,\n/static/c010c944ab047a7187b81b6ba82a74b9/9754a/shutterstock_1724551933.webp 720w,\n/static/c010c944ab047a7187b81b6ba82a74b9/fcc10/shutterstock_1724551933.webp 960w,\n/static/c010c944ab047a7187b81b6ba82a74b9/d486d/shutterstock_1724551933.webp 6518w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/automate-deployment-to-aws-with-github-actions/"},"frontmatter":{"url":"automate-deployment-to-aws-with-github-actions","title":"Automate Deployment to AWS with GitHub Actions","description":"In previous posts we have looked at the popularity of GitOps and a number of tools available to implement GitOps. Among the tools there are GitHub Actions. Given the popularity of GitHub in both enterprises and open-sourced communities, let's walk through how to set up the new feature; GitHub Actions.","tags":["AWS","DevOps"],"date":"2020-02-18T17:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/671506745a2600616b877b8ba95908eb/836e2/github-actions-blog.jpg","srcSet":"/static/671506745a2600616b877b8ba95908eb/6e81a/github-actions-blog.jpg 120w,\n/static/671506745a2600616b877b8ba95908eb/fbe0e/github-actions-blog.jpg 240w,\n/static/671506745a2600616b877b8ba95908eb/836e2/github-actions-blog.jpg 480w,\n/static/671506745a2600616b877b8ba95908eb/94285/github-actions-blog.jpg 720w,\n/static/671506745a2600616b877b8ba95908eb/b1cc5/github-actions-blog.jpg 960w,\n/static/671506745a2600616b877b8ba95908eb/41bee/github-actions-blog.jpg 5200w","srcWebp":"/static/671506745a2600616b877b8ba95908eb/35871/github-actions-blog.webp","srcSetWebp":"/static/671506745a2600616b877b8ba95908eb/83552/github-actions-blog.webp 120w,\n/static/671506745a2600616b877b8ba95908eb/2b5a3/github-actions-blog.webp 240w,\n/static/671506745a2600616b877b8ba95908eb/35871/github-actions-blog.webp 480w,\n/static/671506745a2600616b877b8ba95908eb/9754a/github-actions-blog.webp 720w,\n/static/671506745a2600616b877b8ba95908eb/fcc10/github-actions-blog.webp 960w,\n/static/671506745a2600616b877b8ba95908eb/a7c71/github-actions-blog.webp 5200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/setting-up-a-multi-tenant-aws-eks-cluster/"},"frontmatter":{"url":"setting-up-a-multi-tenant-aws-eks-cluster","title":"Setting up a Multi-tenant Amazon EKS cluster: a few things to consider","description":"MyOps prides itself in heavy use of cloud-native technology, and Kubernetes is often the primary platform of choice to run containerized workloads. In this blog we discuss using name space, network policies, Integrating AWS IAM to EKS cluster/workloads, isolation techniques and much more.","tags":["Kubernetes","AWS"],"date":"2019-12-12T17:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.7647058823529411,"src":"/static/242e9209b664bee2a7dc6b090d3a07e1/836e2/setting-up-multi-tenant-aws-eks-cluster.jpg","srcSet":"/static/242e9209b664bee2a7dc6b090d3a07e1/6e81a/setting-up-multi-tenant-aws-eks-cluster.jpg 120w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/fbe0e/setting-up-multi-tenant-aws-eks-cluster.jpg 240w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/836e2/setting-up-multi-tenant-aws-eks-cluster.jpg 480w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/94285/setting-up-multi-tenant-aws-eks-cluster.jpg 720w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/b1cc5/setting-up-multi-tenant-aws-eks-cluster.jpg 960w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/e147c/setting-up-multi-tenant-aws-eks-cluster.jpg 5760w","srcWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/35871/setting-up-multi-tenant-aws-eks-cluster.webp","srcSetWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/83552/setting-up-multi-tenant-aws-eks-cluster.webp 120w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/2b5a3/setting-up-multi-tenant-aws-eks-cluster.webp 240w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/35871/setting-up-multi-tenant-aws-eks-cluster.webp 480w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/9754a/setting-up-multi-tenant-aws-eks-cluster.webp 720w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/fcc10/setting-up-multi-tenant-aws-eks-cluster.webp 960w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/b4d70/setting-up-multi-tenant-aws-eks-cluster.webp 5760w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/walkthrough-ecs-local/"},"frontmatter":{"url":"walkthrough-ecs-local","title":"Walkthrough - ECS Local: Bringing ECS to your local environment","description":"As someone who works with AWS on a day-to-day basis, It's important to stay up to date with all the changes and new features of the different services on the platform. That's how one recent announcement caught my eye - The new capability of local testing of ECS.","tags":["Kubernetes","AWS"],"date":"2019-09-17T16:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":2.142857142857143,"src":"/static/12224681f2fd40bf0749423e29cf8d0c/836e2/technology-education-information-handover.jpg","srcSet":"/static/12224681f2fd40bf0749423e29cf8d0c/6e81a/technology-education-information-handover.jpg 120w,\n/static/12224681f2fd40bf0749423e29cf8d0c/fbe0e/technology-education-information-handover.jpg 240w,\n/static/12224681f2fd40bf0749423e29cf8d0c/836e2/technology-education-information-handover.jpg 480w,\n/static/12224681f2fd40bf0749423e29cf8d0c/94285/technology-education-information-handover.jpg 720w,\n/static/12224681f2fd40bf0749423e29cf8d0c/b1cc5/technology-education-information-handover.jpg 960w,\n/static/12224681f2fd40bf0749423e29cf8d0c/0ff54/technology-education-information-handover.jpg 1200w","srcWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/35871/technology-education-information-handover.webp","srcSetWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/83552/technology-education-information-handover.webp 120w,\n/static/12224681f2fd40bf0749423e29cf8d0c/2b5a3/technology-education-information-handover.webp 240w,\n/static/12224681f2fd40bf0749423e29cf8d0c/35871/technology-education-information-handover.webp 480w,\n/static/12224681f2fd40bf0749423e29cf8d0c/9754a/technology-education-information-handover.webp 720w,\n/static/12224681f2fd40bf0749423e29cf8d0c/fcc10/technology-education-information-handover.webp 960w,\n/static/12224681f2fd40bf0749423e29cf8d0c/9000d/technology-education-information-handover.webp 1200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/opsguru-amazon-web-services-advanced-consulting-partner/"},"frontmatter":{"url":"myops-amazon-web-services-advanced-consulting-partner","title":"MyOps: Amazon Web Services Advanced Consulting Partner","description":"Today, MyOps is pleased to announce that we have achieved AWS Advanced Partner Status through the AWS Partner Network. We'd like to take a moment to thank all of our wonderful customers who've helped us reach this milestone.","tags":["MyOps","AWS"],"date":"2019-03-25T16:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":0.975609756097561,"src":"/static/732bddd179ceda2c32090e23b910667f/b460a/aws-partner.png","srcSet":"/static/732bddd179ceda2c32090e23b910667f/d966b/aws-partner.png 120w,\n/static/732bddd179ceda2c32090e23b910667f/67196/aws-partner.png 240w,\n/static/732bddd179ceda2c32090e23b910667f/b460a/aws-partner.png 480w,\n/static/732bddd179ceda2c32090e23b910667f/9a8d7/aws-partner.png 720w,\n/static/732bddd179ceda2c32090e23b910667f/6e898/aws-partner.png 960w,\n/static/732bddd179ceda2c32090e23b910667f/6050d/aws-partner.png 1200w","srcWebp":"/static/732bddd179ceda2c32090e23b910667f/35871/aws-partner.webp","srcSetWebp":"/static/732bddd179ceda2c32090e23b910667f/83552/aws-partner.webp 120w,\n/static/732bddd179ceda2c32090e23b910667f/2b5a3/aws-partner.webp 240w,\n/static/732bddd179ceda2c32090e23b910667f/35871/aws-partner.webp 480w,\n/static/732bddd179ceda2c32090e23b910667f/9754a/aws-partner.webp 720w,\n/static/732bddd179ceda2c32090e23b910667f/fcc10/aws-partner.webp 960w,\n/static/732bddd179ceda2c32090e23b910667f/9000d/aws-partner.webp 1200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}}]},"socials":{"frontmatter":{"socials":{"linkedin":"https://www.linkedin.com/company/myops-yael","github":"https://github.com/opsguru-israel"}}},"markdownRemark":{"html":"<p>In previous posts we have looked at the <a href=\"/post/gitops-why-is-it-relevant-now\">popularity of GitOps</a> and <a href=\"/post/gitops-the-growing-landscape-of-tools\">a number of tools</a> available to implement GitOps. Among the tools there are GitHub Actions. Given the popularity of GitHub in both enterprises and open-sourced communities, let's walk through how to set up GitHub Actions.</p>\n<p>GitHub Actions is a new feature from GitHub that allows you to use serverless compute resources to build binaries, perform tests, execute deployments or just run any Linux or Windows commands without having to raise servers.</p>\n<p>Let's demonstrate how easy it is to use, what the possibilities are and how you can create a fully functional CI/CD Pipeline in minutes.</p>\n<p>With GitHub Actions Workflows you can automate tests, builds and deployments.</p>\n<p>In order to enable GitHub Actions Workflows, all you need is to add a Workflow file into your repository. Workflow file is a YAML file located in the folder ./github/workflows/.</p>\n<p>For example you can see we have a Workflow file called my-pipeline.yaml under .github/workflows/</p>\n<p><img src=\"/img/blog-ad-1.jpg\" alt=\"Workflow file\"></p>\n<p>Let's explore a simple Workflow file to understand the syntax. By the way, if you are familiar with Ansible Playbooks and Dockerfile syntax, you will find it to be very similar.</p>\n<p><img src=\"/img/blog-ad-2.jpg\" alt=\"A screenshot of GitHub Actions Workflow called My-Future-CICD-Pipeline\"></p>\n<p>Here we have one GitHub Actions Workflow called My-Future-CICD-Pipeline that consists of two jobs my<em>testing and my</em>deploy, and we configured jobs dependency so only when job my<em>testing finishes running, job my</em>deploy begins execution.</p>\n<p><br>\nThis Workflow file will start on trigger Push to Master Branch, basically when this workflow should be executed</p>\n<p><br>\nConsider having a few of the workflow files, for example:</p>\n<ul>\n<li>lint_validation.yml, which will be executed on every Pull Request</li>\n<li>deploy<em>to</em>staging.yml, which will be executed on Push to staging branch</li>\n<li>deploy<em>to</em>prod.yml, which will be executed on Push to master branch</li>\n</ul>\n<p><br>\nWe are using GitHub Action VM Runner ubuntu-latest to execute our workflow, but you can use any other available options.</p>\n<p><img src=\"/img/blog-ad-3.jpg\" alt=\"GitHub Action VM Runner\"></p>\n<p>The first step on each job configured is to check out the repository where this workflow is located, such that the entire repository code will be available on VM Runner for our validation, testing, compiling or any other code manipulation.</p>\n<p><br>\nWe have configured Environment Variables on three different levels:</p>\n<ol>\n<li>Top Global Level - variables available to all jobs and all steps in this Workflow file</li>\n<li>Job Level - variables available to all steps in this job</li>\n<li>Step Level - variable available only to this step</li>\n</ol>\n<p><br>\nHow does it feel now? Looks familiar and not as Groovy for Jenkins right?</p>\n<p><br>\nIt will include this file in our repository and perform any push to master, this workflow will be executed.</p>\n<p><img src=\"/img/blog-ad-4.jpg\" alt=\"A screenshot of GitHub workflow actions repository.\"></p>\n<p>If you click on the name of your Workflow (My-Future-CICD-Pipeline) you will be able to see that status of all Jobs and Steps:</p>\n<p><img src=\"/img/blog-ad-5.jpg\" alt=\"A screenshot of GitHub workflow jobs and steps screen.\"></p>\n<p><img src=\"/img/blog-ad-6.jpg\" alt=\"A screenshot of GitHub workflow testing actions screen.\"></p>\n<p>As you can see, all steps have passed.</p>\n<p>Well we didn't do anything special here, it was just an example for basic understanding. Notice we had set up the workflow step \"Test aws cli installation,\" where we verify if the aws cli is available. A passing status of this step means that aws cli is pre-installed on this VM Runner machine. We can use awscli to deploy our code from repository to AWS.</p>\n<p>Let's make this happen! For this workflow to work though, we need to configure AWS credentials, which will be used to interact with our AWS account.</p>\n<p>GitHub Repository Secrets</p>\n<p>GitHub Repository supports secrets. They are secret environment variables that are fully encrypted. You will never see the values of those secrets once they are added. The secret environment variables can be accessed from any part of any workflow in this repository.</p>\n<p>Let's define our AWS credentials as GitHub repository secrets:</p>\n<ul>\n<li>Create AWS IAM User with appropriate permissions for deployment tasks</li>\n<li>Generate AWS<em>ACCESS</em>KEY and AWS<em>SECRET</em>KEY.</li>\n</ul>\n<p>Now let's store your AWS secrets in GitHub.</p>\n<p>In your GitHub repository</p>\n<ul>\n<li>Go to Settings -> Secrets</li>\n<li>Click Add a new secret.</li>\n<li>Give it a name MY<em>AWS</em>ACCESS_KEY</li>\n<li>Paste the content of your key and click Add Secret.</li>\n<li>Add another secret and give it the name MY<em>AWS</em>SECRET_KEY</li>\n<li>Paste the content of your key and click Add Secret.</li>\n</ul>\n<p><br>\nFinally you should have something very similar to this:</p>\n<p><img src=\"/img/blog-ad-7.jpg\" alt=\"A screenshot of GitHub sectrets screen.\"></p>\n<p>Simple GitHub Actions for deploy Python Flask application to AWS</p>\n<p>Ok, now as we already know the basics, let's create a brand new workflow file that will create a deployment package of Python flask application from our repository code and will deploy it to AWS.</p>\n<p>First we need to set our AWS credentials for authentication, and then</p>\n<p>we will use aws cli commands to deploy our application to AWS ElasticBeanstalk environment.</p>\n<p>Pre-requisites:</p>\n<ul>\n<li>IAM User's Access Key and Secret Key with permission to write and read to S3 and ElasticBeanstalk FullAccess.</li>\n<li>S3 bucket - where we will store our deployment packages.</li>\n<li>ElasticBeanstalk environment to which we will upload and deploy our new package.</li>\n</ul>\n<p>Here is a full CI/CD Pipeline for deployment of Flask application to AWS</p>\n<p><img src=\"/img/blog-ad-8.jpg\" alt=\"A screenshot of a full CI/CD Pipeline for deployment of Flask application to AWS\"></p>\n<p>We now have two Jobs:</p>\n<ol>\n<li>my<em>ci</em>part, which create deployment package and store our artifact in S3</li>\n<li>my<em>cd</em>part, which create new application version and deploy this version to AWS</li>\n</ol>\n<p><br>\nAs you can see we have to configure AWS credentials in each Job separately as each job executed on isolated runner, in the first job we need AWS credentials to copy our artifact to S3, and in the second job we need AWS credentials to create and deploy new version.</p>\n<p><br>\nThis example is universal, which you can use in your own environment, just replace Global Environment Variables values to match your setup.</p>\n<p>Conclusion</p>\n<p>GitHub Action is a pretty new feature that has recently been made generally available. This feature simplifies automation that you need to set up to manage deployment from specific repositories. Also it's serverless you don't need to set up extraneous services like Jenkins and you have 2000 free minutes each month. If your repository is public, you have unlimited running time.</p>\n<p><img src=\"/img/blog-ad-9.jpg\" alt=\"A screenshot of GitHub Action pay as you go pricing model.\"></p>\n<p>A lot of new GitHub Actions that were developed by the open source community have already been published and featured at GitHub that you can readily deploy. At the same time you can create your own.</p>\n<p>GitHub Actions is still very new, but it has a lot of potential. The above is a simple example, but it can be configured to something considerably more complex.</p>\n<p>What are your CI/CD needs? How are you deploying your services into production automatically? We are always available to help you with your delivery needs. Please contact us at <a href=\"mailto:info@myops.co.il\">info@myops.co.il</a></p>","frontmatter":{"url":"automate-deployment-to-aws-with-github-actions","seo":{"title":"Automate Deployment to AWS with GitHub Actions","description":"In previous posts we have looked at the popularity of GitOps and a number of tools available to implement GitOps. Among the tools there are GitHub Actions. Given the popularity of GitHub in both enterprises and open-sourced communities, let's walk through how to set up the new feature; GitHub Actions.","canonical":null,"image":{"childImageSharp":{"fluid":{"aspectRatio":1.4970059880239521,"src":"/static/671506745a2600616b877b8ba95908eb/724c8/github-actions-blog.jpg","srcSet":"/static/671506745a2600616b877b8ba95908eb/84d81/github-actions-blog.jpg 250w,\n/static/671506745a2600616b877b8ba95908eb/f0719/github-actions-blog.jpg 500w,\n/static/671506745a2600616b877b8ba95908eb/724c8/github-actions-blog.jpg 1000w,\n/static/671506745a2600616b877b8ba95908eb/d79bd/github-actions-blog.jpg 1500w,\n/static/671506745a2600616b877b8ba95908eb/a66ad/github-actions-blog.jpg 2000w,\n/static/671506745a2600616b877b8ba95908eb/41bee/github-actions-blog.jpg 5200w","srcWebp":"/static/671506745a2600616b877b8ba95908eb/36ebb/github-actions-blog.webp","srcSetWebp":"/static/671506745a2600616b877b8ba95908eb/1d872/github-actions-blog.webp 250w,\n/static/671506745a2600616b877b8ba95908eb/4e6d4/github-actions-blog.webp 500w,\n/static/671506745a2600616b877b8ba95908eb/36ebb/github-actions-blog.webp 1000w,\n/static/671506745a2600616b877b8ba95908eb/fd45d/github-actions-blog.webp 1500w,\n/static/671506745a2600616b877b8ba95908eb/6e77b/github-actions-blog.webp 2000w,\n/static/671506745a2600616b877b8ba95908eb/a7c71/github-actions-blog.webp 5200w","sizes":"(max-width: 1000px) 100vw, 1000px","maxHeight":667,"maxWidth":1000}}}},"title":"Automate Deployment to AWS with GitHub Actions","date":"2020-02-18T17:00:00.000Z","tags":["AWS","DevOps"],"author":{"name":"MyOps","photo":{"extension":"png","publicURL":"/static/3ff870573bc56665ee67e3cf3f5fc163/logo-small.png","childImageSharp":{"fluid":{"aspectRatio":0.8759124087591241,"src":"/static/3ff870573bc56665ee67e3cf3f5fc163/b460a/logo-small.png","srcSet":"/static/3ff870573bc56665ee67e3cf3f5fc163/d966b/logo-small.png 120w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/67196/logo-small.png 240w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/b460a/logo-small.png 480w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/eec14/logo-small.png 596w","srcWebp":"/static/3ff870573bc56665ee67e3cf3f5fc163/35871/logo-small.webp","srcSetWebp":"/static/3ff870573bc56665ee67e3cf3f5fc163/83552/logo-small.webp 120w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/2b5a3/logo-small.webp 240w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/35871/logo-small.webp 480w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/c0cb3/logo-small.webp 596w","sizes":"(max-width: 480px) 100vw, 480px"}}}},"image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/671506745a2600616b877b8ba95908eb/8c3c2/github-actions-blog.jpg","srcSet":"/static/671506745a2600616b877b8ba95908eb/15aed/github-actions-blog.jpg 300w,\n/static/671506745a2600616b877b8ba95908eb/a07a5/github-actions-blog.jpg 600w,\n/static/671506745a2600616b877b8ba95908eb/8c3c2/github-actions-blog.jpg 1200w,\n/static/671506745a2600616b877b8ba95908eb/cd33f/github-actions-blog.jpg 1800w,\n/static/671506745a2600616b877b8ba95908eb/1c8c6/github-actions-blog.jpg 2400w,\n/static/671506745a2600616b877b8ba95908eb/e17d9/github-actions-blog.jpg 5200w","srcWebp":"/static/671506745a2600616b877b8ba95908eb/e7405/github-actions-blog.webp","srcSetWebp":"/static/671506745a2600616b877b8ba95908eb/4fec1/github-actions-blog.webp 300w,\n/static/671506745a2600616b877b8ba95908eb/483a3/github-actions-blog.webp 600w,\n/static/671506745a2600616b877b8ba95908eb/e7405/github-actions-blog.webp 1200w,\n/static/671506745a2600616b877b8ba95908eb/7f800/github-actions-blog.webp 1800w,\n/static/671506745a2600616b877b8ba95908eb/7acea/github-actions-blog.webp 2400w,\n/static/671506745a2600616b877b8ba95908eb/07c28/github-actions-blog.webp 5200w","sizes":"(max-width: 1200px) 100vw, 1200px"}}}}}},"pageContext":{"id":"3ab9aab3-a6e5-53ec-8c9c-9ab3559bd7bb","categories":["AWS","DevOps"]}},"staticQueryHashes":["2022990323","639612397"]}