{"id":16813176,"url":"https://github.com/jmhbnz/cloud-native-bootcamp","last_synced_at":"2026-04-15T08:32:26.430Z","repository":{"id":139608784,"uuid":"266654790","full_name":"jmhbnz/cloud-native-bootcamp","owner":"jmhbnz","description":"A choose your own adventure style cloud native bootcamp, created for Summer of Tech NZ. Designed to be run over a two hour session.","archived":false,"fork":false,"pushed_at":"2026-02-20T22:47:49.000Z","size":456,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-22T15:48:25.998Z","etag":null,"topics":["aws","cloud","docker","gcp","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jmhbnz.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-25T01:18:35.000Z","updated_at":"2024-05-06T05:20:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"02d69991-fa2d-434a-abd7-25eba554c044","html_url":"https://github.com/jmhbnz/cloud-native-bootcamp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jmhbnz/cloud-native-bootcamp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmhbnz%2Fcloud-native-bootcamp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmhbnz%2Fcloud-native-bootcamp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmhbnz%2Fcloud-native-bootcamp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmhbnz%2Fcloud-native-bootcamp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmhbnz","download_url":"https://codeload.github.com/jmhbnz/cloud-native-bootcamp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmhbnz%2Fcloud-native-bootcamp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31833827,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T07:17:56.427Z","status":"ssl_error","status_checked_at":"2026-04-15T07:17:30.007Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","cloud","docker","gcp","kubernetes"],"created_at":"2024-10-13T10:25:08.690Z","updated_at":"2026-04-15T08:32:26.405Z","avatar_url":"https://github.com/jmhbnz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# -*- ii: ii; -*-\n#+TITLE: ANZ Cloud Native Bootcamp\n#+AUTHOR: James Blair\n#+EMAIL: james.blair@anz.com\n#+DATE: [2020-05-09 Sat]\n\nWelcome to the first ANZ Cloud Native Bootcamp for 2020! \n\n** TODO Setting the scene\nSCHEDULED: \u003c2020-05-18 Mon 10:05\u003e\n\n*** TODO Introductions\n\nFirstly some quick introductions, my name is James Blair. I'm an Automation Lead at ANZ New Zealand based in Wellington. I've been in the tech industry for eight years, most of that working within government at Inland Revenue and joined ANZ just over a year ago.\n\nTo introduce this session, I first want to go back to a particular, nostalgic memory of my childhood which is reading Goosebumps choose your own adventure novels by R.L. Stine. We all remember these right?\n\n[[./images/goosebumps.jpg]]\n\nOk so rest assured my goal for the session today isn't to scare you! However I am hoping we can go on something like an adventure, as we explore cloud native together, so what I've done is set this workshop up in a choose your own adventure style, with a series of decisions along the way.\n\nThese decisions will relate to how we approach developing an application, and on which cloud provider(s) we deploy that application. \n\nAs a final note this is intended to be a brief introductory session run over two hours so is intentionally light on detail or nuance in a lot of areas. If you are already a cloud native expert then this probably won't be the session for you.\n\n\n*** TODO Rules of engagement\n\nBefore we begin, for this style of workshop to run smoothly, we need to cover some key messages:\n\n - *Everyone participates* - At each step of this adventure, we all need to collectively vote on the next step we take. To do that we'll be using the polls feature in zoom. Let's test that now to ensure it works for everyone. Additionally as we progress through our journey there will be opportunities to get hands on.\n\n - *Asking questions* - The aim of this session is to be as interactive as possible, please don't hold questions to the end, I'm happy to answer questions as we go :) \n\n - *Resources* - All materials from this workshop will be publicly available on my gitlab and a link provided in chat at the end of our session.\n\n - *Technology* - For demonstrations and hands on segments we will always be working as one group. To navigate through our adventure and run code we'll be using a technique called [[https://en.wikipedia.org/wiki/Literate_programming][literate programming]] which for some quick history was formed by Donald Knuth in 1984. Essentially what this involves is using a development environment such as ~emacs~ with ~org-mode~ to weave our adventure and choices into the flow of processes and code we work through. Additionally we'll be using a tool called ~tmate~ which will allow us to all pair together and share the same development environment and terminals. I've taken to calling what we'll be doing today /*literate pair programming*/.\n\n   \n*** TODO Demonstration of literate programming \n\nI'm going to change my screen layout now in Zoom so you can see what I call our pairing \"left eye\" and \"right eye\" which are just terminals. The left eye runs our ~emacs~ development environment. The right eye is the terminal we will be actually running our commands and code in.\n\nLet's take this opportunity to test connectivity with ~tmate~.  Can you all please:\n\n- Open two new browser windows and arrange them side by side\n- Navigate to the left eye [[https://tmate.io/t/x]]\n- Navigate to the right eye [[https://tmate.io/t/x]]\n- In the right eye type ~echo [your first name]~\n\n\n*** TODO Questions before we begin\n\nAgain before we start our journey, does anyone have any questions or have any issues connecting with ~tmate~?\n\n    \n** TODO Starting our adventure\nSCHEDULED: \u003c2020-05-18 Mon 10:20\u003e\n\nSo here you are, a week into a new Summer of Tech internship at ANZ and you've been assigned to one of our cloud squads. You've been tasked with helping to migrate an internal application into a scalable cloud native service that can be run on a public cloud provider such as Google or AWS.\n\nThe application in question is a basic pdf conversion app written in python which is currently running on a virtual machine on premises.\n\nTo get underway you [[What cloud native means][start by looking up what \"cloud native\" means]]\n\n\n** TODO What cloud native means\nSCHEDULED: \u003c2020-05-18 Mon 10:25\u003e\n\nYou make a start by looking up what \"cloud native\" means, finding your way to the [[https://github.com/cncf/toc/blob/master/DEFINITION.md][definition]] approved by the [[https://www.cncf.io/][Cloud Native Computing Foundation]] in 2018:\n\n#+begin_quote\n\"Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.\n\nThese techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.\n\nThe Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.\"\n#+end_quote\n\nA wordy official definition, so from my perspective, when I'm talking about cloud native computing generally what we're talking about is code that runs in [[https://www.docker.com/][docker]] containers, is orchestrated by [[https://kubernetes.io/][kubernetes]] and runs on a public cloud provider like Google or Amazon Web Services.\n\nNow that you've had a look at what cloud native means you [[Why cloud native is important][take a look at why it's important]].\n\n\n** TODO Why cloud native is important :decision:\nSCHEDULED: \u003c2020-05-18 Mon 10:30\u003e\n\nFollowing some brief research you find it's not enough to just \"lift and shift\" a business application to simply operate in the cloud. Instead to take advantage of the scalability and elasticity of the cloud the business application needs to be re-architected to ensure that cloud is a core part of the design process.\n\nYou know you could really easily spin up a virtual machine in the cloud and manually install python in order to run our application, but you know that would not make the application cloud native. Along the way you find a great meme on that topic:\n \n[[./images/dilbert.jpg]]\n\nMemes aside, it's time to make a start on re-architecting our application to be cloud native. You know you could transform the application to use serverless infrastructure, or you could run the application in a container on a managed kubernetes cluster, do you:\n\n- [[Going serverless][1 - Decide to go with serverless]]\n- [[Going kubernetes][2 - Decide to go with kubernetes]]\n\n\n** TODO Going serverless\nSCHEDULED: \u003c2020-05-18 Mon 10:35\u003e\n\nServerless architecture is taking off across the globe. You know that it's easy way deploy single functions to any of the major cloud providers.\n\nOne of the common misconceptions is that serverless is only for simple code functions, major cloud providers now support running [[https://cloud.google.com/blog/products/application-development/5-principles-for-cloud-native-architecture-what-it-is-and-how-to-master-it][stateless]] containers in a serverless fashion as well.\n \n[[./images/serverless.jpg]]\n\nMemes aside, it's time to make a start, you know that the first step to running an application like this serverless is getting your application [[Building a docker container image][built into a docker container image]].\n\n\n** TODO Going kubernetes\nSCHEDULED: \u003c2020-05-18 Mon 10:35\u003e\n\nKubernetes (aka k8s) is the open source container orchestration system that is becoming ubiquitous across the planet, it was original created by Google and released in 2015 alongside the creation of the [[https://cncf.io][Cloud Native Computing Foundation]]. \n\nYou know it can automate the deployment, management and scaling of container based applications so you figure it would be a good option for moving our business application to a cloud native architecture. \n\nTaking a look at an overview [[https://www.cloudtp.com/doppler/managed-container-services-vs-bring-your-own-container-stack/][article]] you know all the major cloud providers offer a managed kubernetes service and there are also on premise kubernetes solutions available so containers can now be easily run in the cloud or on premises.\n\n[[./images/kubernetes.jpg]]\n \nMemes aside, it's time to make a start, you know that the first step to running an application on kubernetes is getting your application [[Building a docker container image][built into a docker container image]].\n\n\n** TODO Building a docker container image :decision:\nSCHEDULED: \u003c2020-05-18 Mon 10:40\u003e\n\nYou make a start on building a docker image for your application. For a quick refresher you take a quick look at some context on what a container is.\n\n#+NAME: Container description\n#+begin_quote\n\"Containers are a way to package software (e.g. web server, proxy, batch process worker) so that you can run your code and all of its dependencies in a resource isolated process. You might be thinking, \"Wait, isn't that a virtual machine (VM)?\" Containers virtualize the operating system, while VMs virtualize the hardware. Containers provide isolation, portability and repeatability, so your developers can easily spin up an environment and start building without the heavy lifting. More importantly, containers ensure your code runs in the same way anywhere, so if it works on your laptop, it will also work in production.\"\n- Source [[https://github.com/aws-samples/amazon-ecs-mythicalmysfits-workshop/tree/master/workshop-1][aws github]].\n#+end_quote\n\nOur first step to building a docker container image is creating a [[https://docs.docker.com/engine/reference/builder/][Dockerfile]]. A quick look at the docs explains what a Dockerfile is.\n\n#+NAME: Dockerfile description\n#+begin_quote\n\"Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.\"\n#+end_quote\n\nTo make a start on creating a dockerfile you clone down the existing application code to take a look.\n\n#+NAME: Clone the current application\n#+begin_src tmate\n# Clone the existing application\ngit clone https://gitlab.jamma.life/jmhbnz/cloud-native-bootcamp.git /tmp/cloud-native-bootcamp\n\n# Navigate to the cloned folder\ncd /tmp/cloud-native-bootcamp/pdf-app\n\n# Look at the contents of the folder\nls -l \n#+end_src\n\nYou can see one of your squad members had already started drafting a Dockerfile, however they had been pulled to another project and could not finish it.  Let's take a look at that [[./pdf-app/Dockerfile][Dockerfile]].\n\nReview the contents of the file and you'll see a few comments indicating what still needs to be done. Comments are denoted by a \"#\".\n\nOnce you finish the Dockerfile you decide it's time to give it a test, that's where the [[https://docs.docker.com/engine/reference/commandline/build/][docker build]] command comes in so you give it a try. You note the trailing period in the build command which tells docker to look in the current directory for the Dockerfile.\n\n#+NAME: Build the docker image\n#+begin_src tmate\n# Build the docker image\ndocker build -t pdf-app .\n#+end_src\n\nReviewing the ouput of the build you can see the a ~successfully built~ and ~successfully tagged~ message so you know the image built successfully, from here do you\n\n- [[Testing a docker container image locally][1 - Try and test the application locally]]\n- [[Pushing a docker container image][2 - Skip testing and push the image to the cloud]]\n\n\n** TODO Testing a docker container image locally\nSCHEDULED: \u003c2020-05-18 Mon 11:00\u003e\n\nBefore you push the newly created docker container image to a cloud registry you decide to run it locally to test that the application runs successfully. You take a look at the docs for the [[https://docs.docker.com/engine/reference/run/][docker run]] command to run the image.  \n\nYou find that you need to specific the ~-p~ parameter to provide a port that the python web server running in the container will be accessible on.\n\n#+NAME: Run the container image\n#+begin_src tmate\ndocker run -d --name \"pdf-app\" -p 3000:3000 pdf-app\n#+end_src\n\nYou can tell that the application is running successfully by looking at the logs and seeing that no errors are present and also using the ~docker ps~ command to verify that the container is running.\n\n#+NAME: Review container logs\n#+begin_src tmate\n# Check the container logs\ndocker logs pdf-app\n\n# Check the container state\ndocker ps -f name=pdf-app\n#+end_src\n\nAnother test you can run is ensuring that the pdf conversion service still works.  You know the service works by using the [[https://www.tutorialspoint.com/http/http_methods.htm][HTTP POST method]] to send a non pdf file to the application.  The application should respond to the POST request with a converted PDF file.\n\nYou know that the application is running locally on port ~3000~ so let's try POSTing a word document to it using the ~curl~ command.\n\n#+NAME: Convert a file to pdf\n#+begin_src tmate\n# Navigate to the example files folder\ncd ../files\n\n# Show what is in the files directory before the test\nls -l\n \n# Post a word file to the convert endpoint\ncurl -o Memo.pdf -F format=pdf -F 'file=@Important Memo.docx' http://localhost:3000/convert \n\n# Show what is in the files directory after the test\nls -l\n#+end_src\n\nAfter finishing testing you clean up by stopping and removing the locally running container.\n\n#+NAME: Stop the running container\n#+begin_src tmate\n# Stop the running container\ndocker stop pdf-app\n\n# Remove the container\ndocker rm pdf-app\n#+end_src\n\nWith some local testing complete you feel confident to [[Pushing a docker container image][push your newly built container image to the cloud]].\n\n\n** TODO Pushing a docker container image :decision:\nSCHEDULED: \u003c2020-05-18 Mon 11:15\u003e\n\nAfter building the container image you decide it's time to push it to the cloud, you have the choice of pushing it to the container registries in Amazon Web Services or Google Cloud Platform, you decide on:\n\n - [[Google Container Registry][1 - Google Container Registry]]\n - [[Amazon Elastic Container Registry][2 - Amazon Elastic Container Registry]]\n - [[3 - Both!?]]\n\n*** TODO Google Container Registry :decision:\n\nDoing some reading online you come across the [[https://cloud.google.com/container-registry/docs/pushing-and-pulling][documentation for pushing images to Google Container Registry]]. This outlines that after configuring our local docker to authenticate with Google Container Registry we can then tag a local image with a ~[HOSTNAME]/[PROJECT-ID]/[IMAGE]~.\n\nYou can see that the standard hostname for Google Container Registry is ~gcr.io~, you have a project ID in Google Cloud already of ~cloud-native-bootcamp-277000~ and our image is called ~pdf-app~, so you tag the image with the following command.\n\n#+NAME: Tag image for Google Container Registry and push\n#+begin_src tmate\n# Configure authentication for docker \necho \"y\" | gcloud auth configure-docker\n\n# Tag our local image\ndocker tag pdf-app gcr.io/cloud-native-bootcamp-277000/pdf-app\n\n# Push the image\ndocker push gcr.io/cloud-native-bootcamp-277000/pdf-app\n#+end_src\n\nYou can see output confirming all layers of the image have been pushed so know that the command was successfull.  Checking the [[https://console.cloud.google.com/gcr/images/cloud-native-bootcamp-277000/GLOBAL/pdf-app?gcrImageListsize=30][Google Cloud Console]] you can also see the image is now pushed.\n\nNow that you have a container image pushed to the cloud ready to be deployed, you have second thoughts on your earlier decision, are you certain you want to:\n\n - [[Deploy a kubernetes cluster][1 - Deploy the container on kubernetes]]\n - [[Deploy a serverless application][2 - Deploy the container serverless]]\n\n\n*** TODO Amazon Elastic Container Registry :decision:\n\nLooking at the [[https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html][documentation for AWS Elastic Container Registry]] you see the step by step commands for using the registry via the command line. This involves setting up authentication, creating a repostitory and then pushing an image.\n\n#+NAME: Tag image for AWS Elastic Container Registry and push\n#+begin_src tmate\n# Configure authentication for docker\naws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 088596787314.dkr.ecr.us-east-1.amazonaws.com \n\n# Create a repository\naws ecr create-repository \\\n    --repository-name pdf-app \\\n    --image-scanning-configuration scanOnPush=false \\\n    --region us-east-1\n\n# Tag our local image\ndocker tag pdf-app 088596787314.dkr.ecr.us-east-1.amazonaws.com/pdf-app\n \n# Push the image\ndocker push 088596787314.dkr.ecr.us-east-1.amazonaws.com/pdf-app\n#+end_src\n\nYou can see the output confirming all layers of the image have been pushed so know that the command was successful. Checking the [[https://console.aws.amazon.com/ecr/repositories/pdf-app/?region=us-east-1][AWS Console]] you can also see that we have an image pushed.\n\nNow that you have a container image pushed to the cloud ready to be deployed, you have second thoughts on your earlier decision, are you certain you want to:\n\n - [[Deploy a kubernetes cluster][1 - Deploy the container on kubernetes]]\n - [[Deploy a serverless application][2 - Deploy the container serverless]]\n\n\n** TODO Deploy a kubernetes cluster :decision:\nSCHEDULED: \u003c2020-05-18 Mon 11:15\u003e\n\nAfter pushing your newly created container image to the cloud, you're ready to spin up a k8s cluster to deploy the image into. Before you get to far into that you decide it's time to refresh on [[https://en.wikipedia.org/wiki/Kubernetes][what kubernetes is]] before you proceed.\n\nNow that you know what kubernetes is you know you have the choice of running the cluster in either Amazon Web Services or Google Cloud Platform, after evaluating the options you decide on:\n\n - [[Google Kubernetes Engine][1 - Google Kubernetes Engine]]\n - [[Amazon Elastic Kubernetes Service][2 - Amazon Elastic Kubernetes Service]]\n\n*** TODO Google Kubernetes Engine :decision:\n\nTaking a look at the [[https://cloud.google.com/kubernetes-engine/][overview of Google Kubernetes Engine]] you can see it is a fully managed kubernetes service, with automated upgrades and high availability, perfect for your important business application.\n\nThis is the first kubernetes cluster you've created so you're faced with a dilemma, do you create it manually using the [[https://console.cloud.google.com/][Google Cloud Console]] web interface, or in an automated way with the [[https://cloud.google.com/sdk/][Google Cloud SDK Command Line]]? \n\n - [[Google Cloud Console][1 - Create the cluster manually with Google Cloud Console]]\n - [[Google Cloud SDK Command Line][2 - Google Cloud SDK Command Line]]\n\n**** TODO Google Cloud Console\n\nGiven this is the first time you've deployed a kubernetes cluster on Google Cloud Platform you decide to step through it manually in the [[https://console.cloud.google.com][web console]]. \n\n1. After loading up the console you navigate to *Kubernetes Engine \u003e Clusters* in the left hand menu underneath the *Compute* header.\n\n2. Once the clusters page has loaded you click *Create Cluster* and update the cluster name to ~company-cluster~ and specify he region as ~australia-southeast1-a~.  Keeping all other settings at their defaults you click *Create* at the bottom of the page.\n\n3. After waiting several minutes you can see the cluster has been created successfully. Clicking into the cluster you click on the *Nodes* tab to see that all three cluster nodes area ~Ready~ status.\n\nWith a cluster up and running you're ready to [[Deploy an app on kubernetes]]!\n\n\n**** TODO Google Cloud SDK Command Line\n\nYou're keen to ensure anything you do today will be easy to recreate in future and be easily automated so you decide to create the cluster with the command line.\n\nTaking a look at the [[https://cloud.google.com/kubernetes-engine/docs/how-to/creating-a-cluster#gcloud][cluster creation docs]] you can see an example gcloud command so you decide to give that a go...\n\n#+NAME: Create and check gke cluster\n#+begin_src tmate\n# Create the cluster\ngcloud container clusters create company-cluster --zone australia-southeast1-a\n\n# Obtain cluster credentials\ngcloud container clusters get-credentials company-cluster --zone australia-southeast1-a\n\n# List nodes in cluster\nkubectl get nodes\n\n# List pods in cluster\nkubectl get pods\n#+end_src\n\nWith a cluster up and running you're ready to [[Deploy an app on kubernetes]]!\n\n\n*** TODO Amazon Elastic Kubernetes Service :decision:\n\nTaking a look at the [[https://aws.amazon.com/eks/][overview of Amazon Elastic Kubernetes Service] you can see it is a fully managed kubernetes service with high availability and strong integration with a host of other AWS services.\n\nThis is the first cluster you've created so you're faced with a dilemma, do you create it manually using the [[https://aws.amazon.com/console][AWS Web Console]], or in an automated fashion with the [[https://aws.amazon.com/cli/][AWS Command Line Interface]]?\n\n - [[Amazon Web Services Console][1 - Create the cluster manually with the Amazon Web Services Console]]\n - [[Amazon Web Services Command Line Interface][2 - Create the cluster automatically with the Amazon Web Services CLI]]\n\n**** TODO Amazon Web Services Console\n\nGiven this is the first time you've deployed an ecs cluster on AWS you decide to step through it manually in the [[https://aws.amazon.com/console][web console]]. \n\n1. After loading up the console you search for *eks* and click into *Elastic Kubernetes Service* in the results.\n\n2. You enter the cluster name ~company-cluster~ in the textbox on the right hand side and click *Create Cluster*.\n\n3. You leave all settings at their default and click *Next* through to the confirmation screen then click *Create*.\n\n4. After a brief wait you can see that the cluster is running, clicking through to the *Compute* tab you're surprised to see no cluster nodes showing!?\n\nFaced with unexpected complexity you decide to [[Google Kubernetes Engine][take Google Kubernetes Engine for a spin]].\n\n\n**** TODO Amazon Web Services Command Line Interface\n\nYou're keen to ensure anything you do today will be easy to recreate in future and be easily automated so you decide to create the cluster with the command line.\n\nTaking a look at the [[https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html][cluster creation docs]] you can see an example aws cli command so you decide to give that a go...\n\n#+NAME: Create and check eks cluster\n#+begin_src tmate\n# Create the cluster\naws eks --region us-east-1 create-cluster \\\n   --name company-cluster \\\n   --role-arn arn:aws:iam::088596787314:role/EKSTest \\\n   --resources-vpc-config \\\n   subnetIds=subnet-cdb35492,subnet-a59e7f84\n\n# Create a kubeconfig entry for the cluster\naws eks --region us-east-1 update-kubeconfig --name company-cluster\n\n# Check the cluster nodes\nkubectl get nodes\n#+end_src\n\nFaced with unexpected complexity you decide to [[Google Kubernetes Engine][take Google Kubernetes Engine for a spin]].\n\n\n** TODO Deploy a serverless application\nSCHEDULED: \u003c2020-05-18 Mon 11:15\u003e\n\n\nComing soon! For now you return to [[Deploy a kubernetes cluster]].\n\n\n** TODO Deploy an app on kubernetes\nSCHEDULED: \u003c2020-05-18 Mon 11:30\u003e\n\nNow that our image is in a cloud container registry, and we have a functional kubernetes cluster ready to go, let's create a gke deployment for our important pdf conversion application.\n\nTaking a look at the [[https://console.cloud.google.com/kubernetes/workload/deploy?cluster=company-cluster\u0026location=australia-southeast1-a\u0026project=cloud-native-bootcamp-277000][web console]] you can see an option available to create a deployment, so you decide to give that a go.  After selecting the pdf-app image and providing an application name you click *Deploy*.  After a short wait you can see a pod is up and running :)\n\n\n** TODO Teardown cloud resources\nSCHEDULED: \u003c2020-05-18 Mon 11:55\u003e\n\nTo prevent unintended costs you know it's always important to ensure any cloud resources you have deployed that are not neccessary should be turned off or deleted.\n\nLet's tear down the cloud resources we deployed.\n\n#+NAME: Teardown kubernetes clusters\n#+begin_src tmate\n# Teardown google kubernetes engine cluster\ngcloud container clusters delete company-cluster --zone=australia-southeast1-a --quiet\n\n# Teardown amazon elastic kubernetes service cluster\n#aws eks --region us-east-1 delete-cluster --name company-cluster\n#+end_src\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmhbnz%2Fcloud-native-bootcamp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmhbnz%2Fcloud-native-bootcamp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmhbnz%2Fcloud-native-bootcamp/lists"}