{"componentChunkName":"component---src-templates-blog-post-js","path":"/post/walkthrough-ecs-local","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":"/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":"/gitops-why-is-it-relevant-now/"},"frontmatter":{"url":"gitops-why-is-it-relevant-now","title":"GitOps - Why is it Relevant Now?","description":"There seems to have been a lot of talk about GitOps just recently. This impression is certainly reinforced by the sessions and booths during KubeCon San Diego late 2019. Regardless of the discipline or services, GitOps was the keyword that was constantly repeated.","tags":["Kubernetes"],"date":"2020-01-21T17:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.3333333333333333,"src":"/static/602b397bd0ef200acbf6007f11c2f3f5/836e2/shutterstock_1019460151-1-.jpg","srcSet":"/static/602b397bd0ef200acbf6007f11c2f3f5/6e81a/shutterstock_1019460151-1-.jpg 120w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/fbe0e/shutterstock_1019460151-1-.jpg 240w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/836e2/shutterstock_1019460151-1-.jpg 480w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/94285/shutterstock_1019460151-1-.jpg 720w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/b1cc5/shutterstock_1019460151-1-.jpg 960w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/405f0/shutterstock_1019460151-1-.jpg 4856w","srcWebp":"/static/602b397bd0ef200acbf6007f11c2f3f5/35871/shutterstock_1019460151-1-.webp","srcSetWebp":"/static/602b397bd0ef200acbf6007f11c2f3f5/83552/shutterstock_1019460151-1-.webp 120w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/2b5a3/shutterstock_1019460151-1-.webp 240w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/35871/shutterstock_1019460151-1-.webp 480w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/9754a/shutterstock_1019460151-1-.webp 720w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/fcc10/shutterstock_1019460151-1-.webp 960w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/cdeed/shutterstock_1019460151-1-.webp 4856w","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":"/opensource-data-lakes-for-the-hybrid-cloud-designing-an-oss-datalake/"},"frontmatter":{"url":"opensource-data-lakes-for-the-hybrid-cloud-designing-an-oss-datalake","title":"OpenSource Data Lake for the Hybrid Cloud - Part 2: Designing an OSS DataLake","description":"In part 1 of this series, we answered the question of WHY Open Source components are often an attractive option when building a data lake of any significant size. In this second installment, we describe HOW to cost-effectively build a data lake out of Open Source components.","tags":["Kubernetes","Big Data"],"date":"2019-08-27T16:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.6,"src":"/static/107087aec2d3327919bcfb2ab38201da/836e2/datalake-p2.jpg","srcSet":"/static/107087aec2d3327919bcfb2ab38201da/6e81a/datalake-p2.jpg 120w,\n/static/107087aec2d3327919bcfb2ab38201da/fbe0e/datalake-p2.jpg 240w,\n/static/107087aec2d3327919bcfb2ab38201da/836e2/datalake-p2.jpg 480w,\n/static/107087aec2d3327919bcfb2ab38201da/94285/datalake-p2.jpg 720w,\n/static/107087aec2d3327919bcfb2ab38201da/b1cc5/datalake-p2.jpg 960w,\n/static/107087aec2d3327919bcfb2ab38201da/32638/datalake-p2.jpg 6399w","srcWebp":"/static/107087aec2d3327919bcfb2ab38201da/35871/datalake-p2.webp","srcSetWebp":"/static/107087aec2d3327919bcfb2ab38201da/83552/datalake-p2.webp 120w,\n/static/107087aec2d3327919bcfb2ab38201da/2b5a3/datalake-p2.webp 240w,\n/static/107087aec2d3327919bcfb2ab38201da/35871/datalake-p2.webp 480w,\n/static/107087aec2d3327919bcfb2ab38201da/9754a/datalake-p2.webp 720w,\n/static/107087aec2d3327919bcfb2ab38201da/fcc10/datalake-p2.webp 960w,\n/static/107087aec2d3327919bcfb2ab38201da/85285/datalake-p2.webp 6399w","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>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.</p>\n<p>I am particularly interested in ECS local testing because it is a feature that bridges a known gap. In recent years, containers have become increasingly popular. Without a doubt Kubernetes has been the leading standard for containers deployment. Whilst Kubernetes is feature-rich and powerful, it attracts users because the same Kubernetes can be run locally on a developer's desktop.</p>\n<p>When developing a feature, I want to be able to test it as quickly and quietly as possible. A tool that allows me to perform rapid and quiet testing while I am trying to figure things out is very helpful. Being able to deploy onto Kubernetes means that I can test the same manifests locally, making sure that all changes can be tested before the deployments are scrutinized by my peers and potentially impact shared resources, it gives me confidence that I am not wasting my teams' resources and time.</p>\n<p>ECS was first announced in 2013 and has been the go-to tool for containers orchestration on AWS (as evidenced by the number of new features on the public containers roadmap). While others can get on the heated -- and even religious -- debate on the virtue of Kubernetes vs ECS, the straightforwardness of ECS, the tight and intuitive integration of ECS with the other AWS features, is very attractive. For someone who is heavily leveraging AWS, and needs some container orchestration for part of workloads, more often than not ECS is sufficient.</p>\n<p>Until now, it has been challenging to encourage developers to work closely with ECS, because developers cannot test their work unless they deploy directly onto AWS ECS clusters that are running on AWS. Prior to this release, it is necessary to raise an ECS cluster on AWS and test the task definitions on the cloud to verify ECS workloads. Whilst this makes sense for feature integration and performance testing, it is a significant entry barrier for early development. Not every developer will have direct access to ECS resources, and to follow through with the CI/CD workflow for every minute change tends to be too slow for feedback. To workaround the overhead, developers often choose to develop with docker-compose, and leave the ECS testing for a later state. This delay can make deployments more error-prone and ECS more difficult to adopt. With the new feature, the barrier for ECS adoption seems to be significantly reduced.</p>\n<p>The new ECS feature supports testing of network modes, secrets, volumes and credentials without the requirement of launching an ECS Task or an ECS Service on AWS and doing everything locally on the work-station. This is achieved by ecs-cli, which is a wrapper of Docker and Docker Compose that simulates a fully functional ECS environment via a special container. With this wrapper, the user can locally get mock endpoints and resources available to test tasks and verify application functionality.</p>\n<h2>Pre-requisites</h2>\n<p>The usual tools associated with a container-based development environment still apply; namely, Docker and Docker Compose. On top of that; installing ecs-cli command line tool.</p>\n<p>Valid AWS credentials are required too:</p>\n<ul>\n<li>Install Docker: <a href=\"https://docs.docker.com/install/\">https://docs.docker.com/install/</a></li>\n<li>Install Docker Compose: <a href=\"https://docs.docker.com/compose/install/\">https://docs.docker.com/compose/install/</a></li>\n<li>Install AWS ecs-cli: <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html\">https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html</a></li>\n<li>Export your AWS ACCESS KEY and AWS SECRET KEY to Environment variables:</li>\n</ul>\n<p>For this walkthrough, I have created several ECR Repositories:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxx\nexport AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\nexport AWS_DEFAULT_REGION=us-west-1</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span></span></pre></div>\n<p><img src=\"/img/picture-1.jpg\" alt=\"A screenshot of ECR Repositorties.\"></p>\n<p>In each repository, there are several images e.g. app2</p>\n<p><img src=\"/img/picture-2.jpg\"></p>\n<p>The same images are accessible on the command line with ecs-cli command line tool. For example, the following will list the available images, along with respective metadata.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">ecs-cli images</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><img src=\"/img/picture-3.jpg\"></p>\n<p>In order to pull the images from the ECR to my workstation I need AWS credentials and <a href=\"https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_AWSCLI.html\">Docker authenticatication with the remote repository</a>. The following command will initiate and perform login from my local machine to ECR</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">$(aws ecr get-login --no-include-email --region us-west-1)</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>Before local execution of ECS takes place, I need to define the run-time parameters for the containers, such as the memory and CPU requirements and the ports opened. This is done in the ECS task definition. While the task definitions need to be created on AWS initially, I can download the task definition as JSON file to my local machine or use remote task definitions for local testing. For my test application (<strong>app-main</strong>), I have already created several versions of a task definition on ECS.</p>\n<p><img src=\"/img/picture-4.jpg\"></p>\n<h2>The ecs-cli Walkthrough</h2>\n<p>ecs-cli for local testing have only 4 subcommands for now:</p>\n<p><img src=\"/img/picture-5.jpg\"></p>\n<h3>Launching a Task</h3>\n<p>The following command will locally launch a Docker container based on a task definition:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">ecs-cli local up --task-def-remote app-main:6</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><strong>app-main</strong> is the name of the task-definition and <strong>6</strong> is the revision of the task definition - If the version is omitted, the <strong>latest</strong> version will be used.</p>\n<p>Trying out with the latest version of my task definition.</p>\n<p><img src=\"/img/picture-6.jpg\"></p>\n<p><strong><em>and voilà!</em></strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">ecs-cli local up</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>did a few things:</p>\n<ol>\n<li>Wrote <strong><code class=\"language-text\">docker-compose.ecs-local.yaml</code></strong> file</li>\n<li>Wrote an additional <code class=\"language-text\">docker-compose.ecs-local.override.yml</code> file</li>\n<li>Created local network <code class=\"language-text\">ecs-local-network</code> for containers</li>\n<li>Pulled Image <strong><code class=\"language-text\">amazon/amazon-ecs-local-container-endpoints</code></strong></li>\n<li>Used <code class=\"language-text\">docker-compose</code> binary to start the relevant containers as described in our Task Definition</li>\n<li>Pulled a corresponding Image of the relevant container from ECR</li>\n<li>Created Container <strong><code class=\"language-text\">ecslocal-lab_app-main_1</code></strong></li>\n</ol>\n<h3>Examining the Running Task</h3>\n<p>ECS Local uses the Docker Compose installed on the local machine to create network for containers and provision those containers. The information is captured at the generated <code class=\"language-text\">docker-compose.ecs-local.yaml</code> file. The <code class=\"language-text\">ecs-local.yaml</code> file acts as the local counterpart of the task definition that is stored on AWS.</p>\n<p>Content of docker-compose.ecs-local.yml</p>\n<p><img src=\"/img/picture-7.jpg\"></p>\n<p>Another file <code class=\"language-text\">docker-compose.ecs-local.override.yml</code> created is used to define a single container that emulates how credentials are exposed to a running container.</p>\n<p>Content of <code class=\"language-text\">docker-compose.ecs-local.override.yml</code></p>\n<p><img src=\"/img/picture-8.jpg\"></p>\n<p>At examining the running processes with ecs-cli, I can see that my test application is running.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">ecs-cli local ps --all</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><img src=\"/img/picture-9.jpg\"></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">docker ps --all</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>However, if I repeat the above using native docker command, an additional container running alongside the application container is found:</p>\n<p><img src=\"/img/picture-10.jpg\"></p>\n<p>The abstracted <strong><code class=\"language-text\">amazon-ecs-local-container-endpoints</code></strong> container is essentially a mock service that simulates AWS endpoints with configured ECS Task IAM Role in the task definition.</p>\n<p>The above also shows that the application container is running on port 32771 and forwarding traffic to port 80 on the container itself. Port 80 is open because it is defined as such in the task definition.</p>\n<p>With this set-up, I can now access the container in two ways,</p>\n<p>Via Local network IP address by running</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">docker network inspect ecs-local-network</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><img src=\"/img/picture-11.jpg\"></p>\n<p>and</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">curl http://169.254.170.3</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><img src=\"/img/picture-12.jpg\"></p>\n<p>Via the assigned Port on the local machine by running</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">ifconfig</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>to get our local IP address in network <strong><code class=\"language-text\">ecs-local-network</code></strong></p>\n<p><img src=\"/img/picture-13.jpg\"></p>\n<p>then calling against the address and assigned port</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">curl 169.254.170.1:32771</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><img src=\"/img/picture-14.jpg\"></p>\n<p>The container in concern is a trivial example for a container, therefore testing it is straightforward. But imagine a complex task where multiple containers are running, instead of needing to emulate the task definition locally with a docker-compose (which would be thrown away once the troubleshooting is done) there is now an AWS provided tool that translates the task definition to something that can run locally, therefore bridging some of the difficulty of making ECS usable beyond AWS.</p>\n<h3>Stopping the Task</h3>\n<p>Once I have my local troubleshooting of ECS, I can stop all running containers and delete local network quite easily by another ecs-cli local command:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">ecs-cli local down --all</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p><img src=\"/img/picture-15.jpg\"></p>\n<h2>Observations and Musings</h2>\n<p>When I first heard about ECS local testing, I thought that AWS was stepping into the right direction, to make ECS more accessible to developers. When AWS published ECS CLI a few years ago, it seemed to be following the precedents set by competitors such as Heroku, to make the containers deployment an easy one-step process. The unenviable position for ECS, however, is that while it is not as complex Kubernetes, it is not as straightforward as other developer-friendly services such as Elastic Beanstalk. ECS appears after all, to be targeting infrastructure teams to run containers easily without the complexity, but it lacks the intuitiveness for developers to adopt it readily and enthusiastically. The local testing option of ECS appears to be an attempt to draw developers closer to the service, by emulating the environment locally, and therefore supporting local work and experiment.</p>\n<p>It may be too early to give a full verdict to the ECS local testing functionality. As the prerequisites for ECS local are still heavily based on the cloud e.g. task definitions on ECS and containers being uploaded already to ECR, it is still arguably not ready for developers who are completely new to the containers ecosystem. However, it is certainly useful to gain some local understanding of the inner workings of ECS. I look forward to new features being introduced with the local tool, and maybe examples on how to best leverage it.</p>\n<p>It is noteworthy that ecs-cli can be used for Fargate development as well. As Fargate is the serverless version of ECS, and is expected to marry the best of containers (in terms of duration, flexibility of resource allocations) and serverless (in terms of simplicity and lack of cluster management), perhaps ecs-local is another way to approach a serverless future.</p>\n<h2>Conclusion</h2>\n<p>We have seen that <code class=\"language-text\">ecs-cli local</code> is a useful wrapper for Docker and Docker Compose, which you can leverage to quickly and efficiently test your ECS Task Definition configurations locally without actually deploying your task to a remote ECS Cluster.</p>\n<p>This enables quick and more efficient development &#x26; test cycles and is overall a great addition to the evolving AWS ECS ecosystem.</p>\n<p>Interested in hearing more about our containers expertise?</p>\n<p>Contact us at <a href=\"mailto:info@myops.co.il\">info@myops.co.il</a></p>\n<p>- Written by <a href=\"https://ca.linkedin.com/in/denis-astahov\">Denis Astahov</a></p>","frontmatter":{"url":"walkthrough-ecs-local","seo":{"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.","canonical":null,"image":{"childImageSharp":{"fluid":{"aspectRatio":2.1186440677966103,"src":"/static/12224681f2fd40bf0749423e29cf8d0c/724c8/technology-education-information-handover.jpg","srcSet":"/static/12224681f2fd40bf0749423e29cf8d0c/84d81/technology-education-information-handover.jpg 250w,\n/static/12224681f2fd40bf0749423e29cf8d0c/f0719/technology-education-information-handover.jpg 500w,\n/static/12224681f2fd40bf0749423e29cf8d0c/724c8/technology-education-information-handover.jpg 1000w,\n/static/12224681f2fd40bf0749423e29cf8d0c/0ff54/technology-education-information-handover.jpg 1200w","srcWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/36ebb/technology-education-information-handover.webp","srcSetWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/1d872/technology-education-information-handover.webp 250w,\n/static/12224681f2fd40bf0749423e29cf8d0c/4e6d4/technology-education-information-handover.webp 500w,\n/static/12224681f2fd40bf0749423e29cf8d0c/36ebb/technology-education-information-handover.webp 1000w,\n/static/12224681f2fd40bf0749423e29cf8d0c/9000d/technology-education-information-handover.webp 1200w","sizes":"(max-width: 1000px) 100vw, 1000px","maxHeight":471,"maxWidth":1000}}}},"title":"Walkthrough - ECS Local: Bringing ECS to your local environment","date":"2019-09-17T16:00:00.000Z","tags":["Kubernetes","AWS"],"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":2.127659574468085,"src":"/static/12224681f2fd40bf0749423e29cf8d0c/8c3c2/technology-education-information-handover.jpg","srcSet":"/static/12224681f2fd40bf0749423e29cf8d0c/15aed/technology-education-information-handover.jpg 300w,\n/static/12224681f2fd40bf0749423e29cf8d0c/a07a5/technology-education-information-handover.jpg 600w,\n/static/12224681f2fd40bf0749423e29cf8d0c/8c3c2/technology-education-information-handover.jpg 1200w","srcWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/e7405/technology-education-information-handover.webp","srcSetWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/4fec1/technology-education-information-handover.webp 300w,\n/static/12224681f2fd40bf0749423e29cf8d0c/483a3/technology-education-information-handover.webp 600w,\n/static/12224681f2fd40bf0749423e29cf8d0c/e7405/technology-education-information-handover.webp 1200w","sizes":"(max-width: 1200px) 100vw, 1200px"}}}}}},"pageContext":{"id":"380b685c-4d58-57b4-b7e0-5d2bdc1eabc5","categories":["Kubernetes","AWS"]}},"staticQueryHashes":["2022990323","639612397"]}