{"id":20828375,"url":"https://github.com/codewithmuh/react-aws-eks-github-actions","last_synced_at":"2025-04-10T04:14:44.224Z","repository":{"id":216628844,"uuid":"741591431","full_name":"codewithmuh/react-aws-eks-github-actions","owner":"codewithmuh","description":"We plan to utilize GitHub Actions and Terraform to deploy our React project on AWS EKS.","archived":false,"fork":false,"pushed_at":"2024-09-20T01:41:51.000Z","size":456,"stargazers_count":8,"open_issues_count":4,"forks_count":23,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T04:14:38.025Z","etag":null,"topics":["amazon-web-services","aws-eks","cicd","cicd-pipeline","deep-learning","devops-workflow","docker","github-actions","kubectl","kubernetes-cluster","react","reactjs","slack","sonarqube","terraform"],"latest_commit_sha":null,"homepage":"https://youtube.com/@codewithmuh","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codewithmuh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2024-01-10T17:57:45.000Z","updated_at":"2024-12-20T16:39:41.000Z","dependencies_parsed_at":"2024-01-17T10:56:58.313Z","dependency_job_id":null,"html_url":"https://github.com/codewithmuh/react-aws-eks-github-actions","commit_stats":null,"previous_names":["codewithmuh/react-aws-eks-github-actions"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithmuh%2Freact-aws-eks-github-actions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithmuh%2Freact-aws-eks-github-actions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithmuh%2Freact-aws-eks-github-actions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithmuh%2Freact-aws-eks-github-actions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codewithmuh","download_url":"https://codeload.github.com/codewithmuh/react-aws-eks-github-actions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248154999,"owners_count":21056543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["amazon-web-services","aws-eks","cicd","cicd-pipeline","deep-learning","devops-workflow","docker","github-actions","kubectl","kubernetes-cluster","react","reactjs","slack","sonarqube","terraform"],"created_at":"2024-11-17T23:14:41.500Z","updated_at":"2025-04-10T04:14:44.196Z","avatar_url":"https://github.com/codewithmuh.png","language":"HCL","readme":"### Hit the Star! ⭐\nIf you are planning to use this repo for reference, please hit the star. Thanks!\n\n# Deploy React Applications on AWS EKS using GitHub Actions and Terraform.\nWe plan to utilize GitHub Actions and Terraform to deploy our React project on AWS EKS.\n\n![readme (11)](https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/f4d89609-e506-4d10-b733-578202e27d6e)\n\n## Overview:\nWe will deploy React Application on aws Elastic Kubernetes(EKS). We will use Github actions for the ci/cd pipeline. We will use EC2 as the self-hosted runner for our GitHub Actions. We will integrate Sonarcube for code analysis and Trivy Image scan to scan our docker images. Also, we will integrate slack to get Build/deployment notifications.\n\n### Youtube Video Tutorial: https://www.youtube.com/live/HkGMxxjBt8g?si=PzSJEGwPrJmn8yli\n## Support\n\u003ca href=\"https://www.buymeacoffee.com/codewithmuh\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/default-yellow.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\u003c/a\u003e\n\n### Prerequisite\nYou should have basic Knowledge of AWS services, Docker, Kubernetes, and GitHub Actions.\n\n### Table of Content/Steps:\n**1.** Create an AWS EC2 Instance and an IAM Role \n\n**2.** Add a Self Hosted Runner To AWS EC2\n   \n**3.** Docker Installation and Running SonarQube Container\n\n**4.** Integrate SonarQube with GitHub Actions\n\n**5.** Installation of tools (Java JDK, Terraform, Trivy, Kubectl, Node.js, NPM, AWS CLI)\n\n**6.** Provision AWS EKS With Terraform\n\n**7.** Dockerhub and Trivy Image Scan Setup\n\n**8.** Deploy Application(image) to AWS EKS\n\n**9.** Integrate Slack Notifications\n\n**10.** Running Final/Complete Github actions Workflow\n\n**11.** Delete the infrastructure (To Avoid Extra Billing, if you are just using it for learning Purposes)\n\n### Step 01:  Create an AWS EC2 Instance and an IAM Role \n\n#### Create IAM Role\n\nYou have to Navigate to **AWS Console**.\n\n\u003cimg width=\"1557\" alt=\"Screenshot 2024-01-10 at 1 46 32 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/dde7560a-7366-4dc4-8628-21e6c27fa4f2\"\u003e\n\n\n\u003cbr/\u003e\n\nThen Search/Enter **IAM**\n\n\u003cbr/\u003e\n\n\u003cimg width=\"1612\" alt=\"Screenshot 2024-01-10 at 1 48 17 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/d1763507-622a-4e22-a4ea-00cab115ecf5\"\u003e\n\n\u003cbr/\u003e\n\nClick **Roles**\n\n\u003cbr/\u003e\n\n\u003cimg width=\"1612\" alt=\"Screenshot 2024-01-10 at 1 50 14 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/542841cc-5f05-41d8-892f-dba00056890a\"\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e \n\nThen Click **Create role**\n\n\u003cbr/\u003e\n\n\u003cimg width=\"1728\" alt=\"Screenshot 2024-01-10 at 1 56 03 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/38016a29-8358-499b-8783-6febdc82e16f\"\u003e\n\n\u003cbr/\u003e \n\u003cbr/\u003e\n\nNow Click **AWS Service**, And Then Click **Choose a service or use case**\n\n\u003cbr/\u003e\n\u003cbr/\u003e \n\n\u003cimg width=\"1670\" alt=\"Screenshot 2024-01-10 at 1 57 20 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/7a49baaf-9df0-4f74-a10a-e1abcea86885\"\u003e\n\n\u003cbr/\u003e\n\nNow Click **EC2** and Click **NEXT**\n\n\u003cbr/\u003e\n\n\u003cimg width=\"1624\" alt=\"Screenshot 2024-01-10 at 1 58 03 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/a2a59d66-135c-45fc-bed7-a62db0246be5\"\u003e\n\n\u003cbr/\u003e \n\u003cbr/\u003e\n\nClick the **Search** Fileds, Then Add permissions Policies\n\n\u003cbr/\u003e\n\n\u003cimg width=\"1652\" alt=\"Screenshot 2024-01-10 at 2 16 39 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/1a761f3d-1529-49b5-a911-672dd51885cc\"\u003e\n\n\u003cbr/\u003e \n\u003cbr/\u003e\n\nAdd These **Four Policies**:\n\n1.  EC2 full access\n2.  AmazonS3FullAccess\n3.  AmazonEKSClusterPolicy\n4.  AdministratorAccess\n\n\u003cimg width=\"1196\" alt=\"Screenshot 2024-01-11 at 6 55 41 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/ec891586-603a-4764-ad91-367f77c4b072\"\u003e   \n\n\u003cbr/\u003e \n\u003cbr/\u003e \n\n\nClick NEXT and Then click the **Role Name** Field.\n\nType **cicd-jenkins**\n\nClick **Create role**\n\n\u003cbr/\u003e \n\n\u003cimg width=\"1671\" alt=\"Screenshot 2024-01-10 at 2 07 55 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/eceb084b-ebf7-448c-9dcb-422412d3ea2b\"\u003e\n\n\u003cbr/\u003e \n\u003cbr/\u003e \n\n\n**Note** We will use/attach this AIM Role during AWS EC2 instance Creation.\n\n#### Create AWS EC2 Instance\nTo launch an AWS EC2 instance running Ubuntu 22.04 via the AWS Management Console, start by signing in to your AWS account and accessing the EC2 dashboard. Click on \"Launch Instances\" and proceed through the steps. In \"Step 1,\" select \"Ubuntu 22.04\" as the AMI, and in \"Step 2,\" opt for \"t2.medium\" as the instance type. Configure instance details, storage, tags, and security group settings according to your requirements. Additionally, attach the previously created IAM role in the advanced details. Review the settings, create or select a key pair for secure access, and then launch the instance. Once launched, utilize the associated key pair to connect via SSH for access, ensuring the security of your connection. (Look at image Below)\n\n\u003cbr/\u003e \n\u003cbr/\u003e \n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-10 at 5 40 06 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/82726782-2ba8-4913-a14d-3cf4cafdcc33\"\u003e\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-10 at 5 40 25 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/a6bac162-eb7a-4f3e-b845-0e1adce8a690\"\u003e\n\n\n\n### Step 02: Add a Self Hosted Runner To AWS EC2\nNow Go to GitHub Repository and  click on **Settings -\u003e Actions -\u003e Runners**\n\nClick on New self-hosted runner\n\n\u003cimg width=\"1134\" alt=\"Screenshot 2024-01-10 at 1 35 16 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/0e79f558-b4b2-4a24-8251-7e209e728681\"\u003e\n\n\n\n\u003cbr/\u003e\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-10 at 5 50 48 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/2b8f00f7-9a32-468a-b57a-6ff024dc8984\"\u003e\n\n\u003cbr/\u003e \n\nNow select Linux and Architecture X64\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-10 at 5 54 09 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/508da348-e371-48e1-be9d-b6d042970470\"\u003e\n\n\nUse the below commands to add a self-hosted runner\n\n**Note:** In pic Commads are related to my account, Use your commands, it appears on your GitHub  self-hosted runner Page. \n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-10 at 5 55 47 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/3a142431-ec5e-4bff-8924-2ae7900deb11\"\u003e\n\n\n\nNow SSH to your AWS instance to connect with your Instance.\n\nAnd Past/Run these commands.\n\n  ```bash\n  mkdir actions-runner \u0026\u0026 cd actions-runner\n  ```\n\u003cimg width=\"765\" alt=\"Screenshot 2024-01-10 at 6 02 16 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/ac459382-abc1-447b-a1aa-b54ac164db5e\"\u003e\n\n\nCommand \"mkdir actions-runner \u0026\u0026 cd actions-runner\" serves to generate a fresh directory named \"actions-runner\" within the present working directory. Subsequently, it swiftly switches the current working directory to this newly created \"actions-runner\" directory. This approach streamlines file organization and facilitates executing successive actions within the newly formed directory without the need for separate navigation.\n\nDownload the latest runner package\n\n```bash\ncurl -o actions-runner-linux-x64-2.311.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.311.0/actions-runner-linux-x64-2.311.0.tar.gz\n```\n\n\u003cimg width=\"942\" alt=\"Screenshot 2024-01-10 at 6 07 25 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/4629710b-6bdf-4012-b9c3-8899cf8a9e51\"\u003e\n\n\nValidate the hash.\n\n```bash\necho \"29fc8cf2dab4c195bb147384e7e2c94cfd4d4022c793b346a6175435265aa278  actions-runner-linux-x64-2.311.0.tar.gz\" | shasum -a 256 -c\n```\n\n\u003cimg width=\"937\" alt=\"Screenshot 2024-01-10 at 6 10 55 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/fa9890c6-3b20-48fe-9275-2b2a94964219\"\u003e\n\n\nNow Extract the installer\n\n```bash\ntar xzf ./actions-runner-linux-x64-2.311.0.tar.gz\n```\n\nCreate the runner and start the configuration experience\n\n```bash\n./config.sh --url https://github.com/codewithmuh/react-aws-eks-github-actions --token AMFXNTP3IVE6IAZSWO3ZEGDFT2QV6\n```\n\n\u003cimg width=\"926\" alt=\"Screenshot 2024-01-10 at 6 16 09 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/e46f9064-2b21-4179-b9af-06406b1d0f1b\"\u003e\n\n\nIf you have provide multiple labels use commas for each label.\n\nThe last step, run it!\n\n```bash\n./run.sh\n```\n\u003cimg width=\"613\" alt=\"Screenshot 2024-01-10 at 6 17 33 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/c522bc91-d861-4349-84cf-3500788dbae4\"\u003e\n\n\nLet's close Runner for now.\n\n```bash\nctrl + c  # To close Run this Command.\n```\n\n\n\n\n### Step 03:  Docker Installation and Running SonarQube Container\nConnect with your Instance using SSH or Putty.(The Method you are using). If already connected, ignore.\n\nRun these commands\n\n```bash\nsudo apt-get update\nsudo apt install docker.io -y\nsudo usermod -aG docker ubuntu\nnewgrp docker\nsudo chmod 777 /var/run/docker.sock\n```\n\nNow We will Pull SonarQube Docker Image and run the SonarQube Container.\n\n**Note** Make sure to add a port in the security group of your instance.\n\n```bash\ndocker run -d --name sonar -p 9000:9000 sonarqube:lts-community\n```\n\n\u003cimg width=\"947\" alt=\"Screenshot 2024-01-10 at 6 31 19 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/6b8e9af9-369c-4d19-b1ac-0fdd9d24e136\"\u003e\n\n\n\u003cimg width=\"953\" alt=\"Screenshot 2024-01-10 at 6 32 50 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/710edbed-5093-4411-97e2-2a365b8eade5\"\u003e\n\n\nNow copy the IP address of Your EC2 instance\n\n```bash\n\u003cEC2-PUBLIC-IP:9000\u003e\n```\n\n\u003cimg width=\"625\" alt=\"Screenshot 2024-01-10 at 6 36 04 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/57782074-5a76-42e5-81bf-a34d7e4189a2\"\u003e\n\nNow Login with these creds.\n\n```bash\nlogin admin\npassword admin\n```\n\nNow Update your Sonarqube password.\n\n\n\u003cimg width=\"639\" alt=\"Screenshot 2024-01-10 at 6 38 58 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/c2638f04-5df8-489c-8746-ebf65fa874fa\"\u003e\n\n\n\nThis is the Sonarqube dashboard.\n\n\u003cimg width=\"1269\" alt=\"Screenshot 2024-01-10 at 6 40 16 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/e0dcf4a0-2697-4829-aab1-fbd8ffdd17a5\"\u003e\n\n\n### Step 04: Integrate SonarQube with GitHub Actions\nIntegrating SonarQube with GitHub Actions allows you to automatically analyze your code for quality and security as part of your continuous integration pipeline.We already have Sonarqube up and running\n\nNow On Sonarqube Dashboard click on Manually\n\n\u003cimg width=\"1279\" alt=\"Screenshot 2024-01-10 at 6 42 53 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/6a836594-a32d-430c-8ac5-1fd07a406fa8\"\u003e\n\n\nOn the Next Page, You have to provide the name of your project and provide a branch name. The Click on SetUp Button.\n\n\u003cimg width=\"1269\" alt=\"Screenshot 2024-01-10 at 6 44 58 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/2f705b5c-5ba1-48d9-b1fd-47d6b7e9dcd5\"\u003e\n\n\nOn the Next Page, You have to click on \"With GitHub Actions\"\n\n\u003cimg width=\"1277\" alt=\"Screenshot 2024-01-10 at 6 47 12 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/2e4308d9-c4fe-4087-850b-0ca36a261331\"\u003e\n\n\nThis will provide an overview of the project and provide some instructions to integrate.\n\n\u003cimg width=\"1277\" alt=\"Screenshot 2024-01-10 at 6 49 02 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/9f36e302-13da-4305-acff-f6425a529040\"\u003e\n\n\nNow Let's open your Giuthub Repository. \n\nNow Click on Settings. (if you are using my repo, make sure you have forked it)\n\n\u003cimg width=\"1280\" alt=\"Screenshot 2024-01-10 at 7 34 09 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/6918bada-4af9-4ef3-8aa1-acfcdc427365\"\u003e\n\n\n\nClick on Secrets and variables and then click on actions.\n\n\u003cimg width=\"1277\" alt=\"Screenshot 2024-01-10 at 7 40 03 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/ce27fcd5-0058-4e07-b4d4-f7de73b2413e\"\u003e\n\n\nIt will open a page, Clock on **New Repository secret**.\n\n\u003cimg width=\"1278\" alt=\"Screenshot 2024-01-10 at 7 41 05 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/73e15994-2ef0-4bb3-90ff-c389bb1868d1\"\u003e\n\n\nNow Go to your Sonarqube dashboard\n\nCopy SONAR_TOKEN and click on Generate Token\n\n\u003cimg width=\"1270\" alt=\"Screenshot 2024-01-10 at 8 00 42 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/2afb8ebf-96e1-4446-997a-5bf0dbc2da80\"\u003e\n\n\nClick on Generate\n\n\u003cimg width=\"705\" alt=\"Screenshot 2024-01-10 at 8 02 41 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/1dd5bb1c-3f32-4214-89ea-2d0110fb79ed\"\u003e\n\n\n\nLet's copy the Token and add it to GitHub secrets\n\n\n\u003cimg width=\"835\" alt=\"Screenshot 2024-01-10 at 8 03 34 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/6d2145b5-b73e-4e3e-b910-9ebdbabe12e8\"\u003e\n\n\nNow Go back to GitHub and Paste the copied name for the secret and token\n\nName: SONAR_TOKEN\n\nSecret: Paste Your Token and click on Add secret\n\n\u003cimg width=\"1250\" alt=\"Screenshot 2024-01-10 at 8 05 26 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/e930e589-92f9-48f9-a800-6d38f96f451e\"\u003e\n\n\nNow go back to the Sonarqube Dashboard\n\nCopy the Name and Value\n\n\u003cimg width=\"1276\" alt=\"Screenshot 2024-01-10 at 8 06 09 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/d53b22d4-8224-4a09-8e85-5223e7e0614d\"\u003e\n\nGo to GitHub now and paste-like this and click on add secret\n\n\u003cimg width=\"1229\" alt=\"Screenshot 2024-01-10 at 8 07 25 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/a856f7f0-161d-410d-895b-53166bd396a0\"\u003e\n\n\n\nOur Sonarqube secrets are added and you can see it.\n\n\n\u003cimg width=\"1220\" alt=\"Screenshot 2024-01-10 at 8 07 57 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/68bdeb7e-e3f6-43d2-8c56-f6e2738716e2\"\u003e\n\n\n\nGo to Sonarqube Dashboard and click on continue\n\n\u003cimg width=\"1272\" alt=\"Screenshot 2024-01-10 at 8 09 43 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/c759439e-8116-4c43-a32f-7e9881a0dcf5\"\u003e\n\n\nNow create your Workflow for your Project. In my case, I am using React Js. That's why I am selecting Other.\n\n\u003cimg width=\"1272\" alt=\"Screenshot 2024-01-10 at 8 09 43 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/f87fc350-9566-433a-a375-192cd8ab9d9d\"\u003e\n\n\nNow it Generates and workflow for my Project\n\n**Note:** Make sure to use your files for this Section.\n\nGo back to GitHub. click on Add file and then create a new file\n\n\u003cimg width=\"1263\" alt=\"Screenshot 2024-01-10 at 8 10 25 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/182c70e7-d440-4c4c-9cbb-19dde5d88abd\"\u003e\n\n\nGo back to the Sonarqube dashboard and copy the file name and content\n\n\u003cimg width=\"916\" alt=\"Screenshot 2024-01-10 at 8 12 07 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/b1812f28-f682-46d0-b46c-68f81affdcbb\"\u003e\n\n\nAdd in GitHub like this (Look at image)\n\n\u003cimg width=\"1267\" alt=\"Screenshot 2024-01-10 at 8 13 31 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/3d2b49ef-67be-4b32-a010-6e5b34cbfaa7\"\u003e\n\n\nLet's add our workflow\n\nTo do that click on Add file and then click on Create a new file\n\n\u003cimg width=\"1263\" alt=\"Screenshot 2024-01-10 at 8 10 25 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/dcb600be-e92f-466c-8b98-99c88cb6059e\"\u003e\n\n\nHere is the file name\n\n```bash\n.github/workflows/sonar.yml  #you can use any name I am using sonar.yml\n```\n\n\nCopy content and add it to the file\n\n```bash\nname: Sonar Code Review Workflow\n\non:\n  push:\n    branches:\n      - main\n\n\njobs:\n  build:\n    name: Build\n    runs-on: self-hosted\n    steps:\n      - uses: actions/checkout@v2\n        with:\n          fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis\n      - uses: sonarsource/sonarqube-scan-action@master\n        env:\n          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}\n          SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}\n      # If you wish to fail your job when the Quality Gate is red, uncomment the\n      # following lines. This would typically be used to fail a deployment.\n      # - uses: sonarsource/sonarqube-quality-gate-action@master\n      #   timeout-minutes: 5\n      #   env:\n      #     SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}\n```\n\n\u003cimg width=\"992\" alt=\"Screenshot 2024-01-10 at 8 16 17 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/4a733d20-d012-46bc-a374-bf633f545836\"\u003e\n\n\nClick on commit changes\n\n\u003cimg width=\"1270\" alt=\"Screenshot 2024-01-10 at 8 16 59 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/ae20cee1-355e-4de4-be62-3217923e6ecd\"\u003e\n\n\n\nNow workflow is created.\n\nStart again GitHub actions runner from the Ec2 instance\nRun These Commands\n\n```bash\ncd actions-runner\n./run.sh\n```\n\nClick on Actions now\n\n\nNow it's automatically started the workflow\n\n\u003cimg width=\"972\" alt=\"Screenshot 2024-01-10 at 8 19 23 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/a74f8c0d-42f3-4aa2-99e5-d6dd6a3b64e4\"\u003e\n\n\n\nLet's click on Build and see what are the steps involved\n\n\u003cimg width=\"1121\" alt=\"Screenshot 2024-01-10 at 8 20 55 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/1a1c6a99-c6cd-457c-8697-33a205ba834a\"\u003e\n\n\nClick on Run Sonarsource and you can do this after the build completion\n\n\u003cimg width=\"775\" alt=\"Screenshot 2024-01-10 at 8 22 19 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/b598f61d-b27e-4a0a-abbf-8f0232befdbe\"\u003e\n\n\nBuild complete.\n\nGo to the Sonarqube dashboard and click on projects and you can see the analysis\n\n\u003cimg width=\"1278\" alt=\"Screenshot 2024-01-10 at 8 23 26 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/52a8dd42-4c53-4a65-844e-d8a333d6ac6d\"\u003e\n\n\nIf you want to see the full report, click on issues.\n\n### Step 05: Installation of tools (Java JDK, Terraform, Trivy, Kubectl, Node.js, NPM, AWS CLI)\n\nUse this script to automate the installation of these tools.\n\nCreate script on Your aws ec2.\n\n```bash\nvim  run.sh\n```\n\nCopy the Below given content\n\n```bash\n#!/bin/bash\nsudo apt update -y\nsudo touch /etc/apt/keyrings/adoptium.asc\nsudo wget -O /etc/apt/keyrings/adoptium.asc https://packages.adoptium.net/artifactory/api/gpg/key/public\necho \"deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main\" | sudo tee /etc/apt/sources.list.d/adoptium.list\nsudo apt update -y\nsudo apt install temurin-17-jdk -y\n/usr/bin/java --version\n\n# Install Trivy\nsudo apt-get install wget apt-transport-https gnupg lsb-release -y\nwget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg \u003e /dev/null\necho \"deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main\" | sudo tee -a /etc/apt/sources.list.d/trivy.list\nsudo apt-get update\nsudo apt-get install trivy -y\n\n# Install Terraform\nsudo apt install wget -y\nwget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg\necho \"deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main\" | sudo tee /etc/apt/sources.list.d/hashicorp.list\nsudo apt update \u0026\u0026 sudo apt install terraform\n\n# Install AWS CLI \ncurl \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\nsudo apt-get install unzip -y\nunzip awscliv2.zip\nsudo ./aws/install\n\n# Install kubectl\nsudo apt update\nsudo apt install curl -y\ncurl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\nsudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\nkubectl version --client\n\n\n# Install Node.js 16 and npm\ncurl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource-archive-keyring.gpg\necho \"deb [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_16.x focal main\" | sudo tee /etc/apt/sources.list.d/nodesource.list\nsudo apt update\nsudo apt install -y nodejs\n\n```\n\nNow Run this script:\n\n```bash\nchmod +x run.sh\n\n./run.sh\n```\n\n\nNow Check if these tools are installed or not. By checking Their versions.\n\n```bash\nkubectl version\naws --version\njava --version\ntrivy --version\nterraform --version\nnode -v\n```\n\n### Part 06: Provision AWS EKS With Terraform\n\nNote: Before starting this part 06, Make sure Terraform and AWS CLI are installed and an aws account is configured on your system. You can see my [article](https://medium.com/@codewithmuh/installing-and-configuring-terraform-and-aws-cli-preparing-your-environment-for-infrastructure-as-1be1d3d0e92) to get aws and terraform installation and configuration done.\n\n\nNow let's clone repo:\n\n```bash\nhttps://github.com/codewithmuh/react-aws-eks-github-actions.git\ncd react-aws-eks-github-actions\ncd terraform-eks\n```\n\nThis will change your directory to terraform-eks files.\n\nNow Change your s3 bucket in the backend file. (You can create S3 Bucket on AWS S3)\n\nNow initialize the terraform.\n\n```bash\nterraform init\n```\n\n\u003cimg width=\"1095\" alt=\"Screenshot 2024-01-10 at 9 51 07 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/e008ec6a-504c-411d-8d54-5c65267363bd\"\u003e\n\n\n\nNow validate the configurations and syntax of all files.\n\n```bash\nterraform validate\n```\n\n\u003cimg width=\"605\" alt=\"Screenshot 2024-01-10 at 9 54 29 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/718f9727-1c43-4792-a916-77a15fd3f120\"\u003e\n\n\nNow Plan and apply your infrastructure.\n\n```bash\nterraform plan\nterraform apply\n```\n\n\u003cimg width=\"1204\" alt=\"Screenshot 2024-01-10 at 9 57 37 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/852e41d3-7507-40d7-a51f-a8ed09b21a2b\"\u003e\n\n\nIt can take up to 10 Minutes to create your AWS EKS cluster.\n\nYou can check by going to aws EKS service.\n\n\u003cimg width=\"1213\" alt=\"Screenshot 2024-01-10 at 10 14 31 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/0a391216-66c4-4a2b-81c6-af9ca89da27b\"\u003e\n\nAlso, check your Node Grpup EC2 Instance, by going to EC2 Dashboard.\n\n\u003cimg width=\"1256\" alt=\"Screenshot 2024-01-10 at 10 15 25 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/bfc92120-34b8-441f-b9f6-4d59ead699d9\"\u003e\n\n\n### Part 07: Dockerhub and Trivy Image Scan Setup\n\nNow you have to create a Personal Access token for your Dockerhub account.\n\nGo to docker hub and click on your profile --\u003e Account settings --\u003e security --\u003e New access token\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 3 14 48 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/0eda48fe-8846-44e5-8d31-9484bc89801c\"\u003e\n\n\u003cimg width=\"1728\" alt=\"Screenshot 2024-01-11 at 3 16 47 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/01387808-b200-4ba1-bba8-a5c2504d3a15\"\u003e\n\nCopy This Token.\n\n\u003cimg width=\"1728\" alt=\"Screenshot 2024-01-11 at 3 17 22 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/0d04f726-5db6-4926-af08-ccefc4e5ac8d\"\u003e\n\nAdd this Token to your Github actions Secret.\n\n\u003cimg width=\"1728\" alt=\"Screenshot 2024-01-11 at 3 19 28 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/aa180559-88aa-4518-be58-88066b4e49b9\"\u003e\n\nAlso, add another secret of your dockerhub username.\n\n\u003cimg width=\"1724\" alt=\"Screenshot 2024-01-11 at 3 20 09 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/0d0a87dd-e0e5-4174-809b-1b2b3d277f57\"\u003e\n\nNow create a new workflow with the name build.yaml . Make sure to replace the username and image name with yours.\n\n```bash\nname: Code Build Workflow\n\non:\n    workflow_run:\n      workflows: \n        - Sonar Code Review Workflow\n      types:\n        - completed\n        \njobs:\n  build:\n    name: Build\n    runs-on: self-hosted\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v2\n\n      - name: Docker build and push\n        run: |\n          docker build -t react-aws-eks-github-actions .\n          docker tag react-aws-eks-github-actions codewithmuh/react-aws-eks-github-actions:latest\n          docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }}\n          docker push codewithmuh/react-aws-eks-github-actions:latest\n        env:\n          DOCKER_CLI_ACI: 1\n```\n\n\u003cimg width=\"1728\" alt=\"Screenshot 2024-01-11 at 3 34 04 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/49d0962d-001b-4d25-928a-6b9691ad5007\"\u003e\n\nNow you can check image is pushed to your Dockerhub Account.\n\n\u003cimg width=\"1724\" alt=\"Screenshot 2024-01-11 at 3 34 29 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/2ebb27ab-7d21-4fa5-8a08-8382ca83f132\"\u003e\n\n\nNow add another Workflow for the docker image scan, using the name 'trivy.yml'. Use the content below, but make sure to replace the image with your one.\n\n\n```bash\nname: Trivy Image Scan Workflow\n\non:\n    workflow_run:\n      workflows: \n        - Code Build Workflow\n      types:\n        - completed\n  \njobs:\n    build:\n      name: Docker Image Scan\n      runs-on: self-hosted\n      steps:\n        - name: Checkout Repository\n          uses: actions/checkout@v2\n\n        - name: Pull the Docker image\n          run: docker pull codewithmuh/react-aws-eks-github-actions:latest\n\n  \n        - name: Trivy image scan\n          run: trivy image codewithmuh/react-aws-eks-github-actions:latest\n\n```\n\nHere is the output of the build.\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 4 51 28 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/5f5315e3-74d5-4490-9b7b-17c2b69fb32f\"\u003e\n\n```bash\n\nNow add these lines into build.yml steps, so we can test image on our aws ec2 instance.\n\n   - name: Pull the Docker image On AWS EC2 For Testing\n        run: docker pull sevenajay/tic-tac-toe:latest\n      \n\n      - name: Stop and remove existing container\n        run: |\n            docker stop react-aws-eks-github-actions || true\n            docker rm react-aws-eks-github-actions || true\n  \n      - name: Run the container on AWS EC2 for testing\n        run: docker run -d --name react-aws-eks-github-actions -p 3000:3000 codewithmuh/react-aws-eks-github-actions:latest\n  \n\n```\n\nWhen Build is completed , visit the websiet in your browser.\n\nNote: Make sure port 3000 is added on your Ec2.\n\n\n```bash\n\"Your_EC2_IP:3000\"\n```\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 27 04 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/9e777278-d9c9-438a-9d41-086f558ac1f6\"\u003e\n\nIf it's not working, Try to pull an image on your system and check for errors. Fix them then build the GitHub actions again.\n\n### Part 08: Deploy Application(image) to AWS EKS\n\nNow create our final deploy.yml file to deploy on aws eks.\n\nAnd Paste this content there. (Do not commit yet, commit it after part  09)\n\n**Note**. Make sure to repalce cluster name and region nname with your one.\n\n```bash\n\nname: Deploy To EKS\n\non:\n    workflow_run:\n      workflows: \n        - Code Build Workflow\n      types:\n        - completed\n  \njobs:\n    build:\n      name: Docker Image Scan\n      runs-on: self-hosted\n      steps:\n        - name: Checkout Repository\n          uses: actions/checkout@v2\n\n        - name: Pull the Docker image\n          run: docker pull codewithmuh/react-aws-eks-github-actions:latest\n\n  \n        - name: Update kubeconfig\n          run: aws eks --region us-west-1 update-kubeconfig --name EKS_cluster_codewithmuh\n  \n        - name: Deploy to EKS\n          run: kubectl apply -f deployment-service.yml\n\n```\nThis will updates the kubeconfig to configure kubectl to work with an Amazon EKS cluster in the region with the name of your cluster, Also deploys Kubernetes resources defined in the deployment-service.yml file to the Amazon EKS cluster using kubectl apply.\n\n\n### Part 09: Integrate Slack Notifications\n\nNo Go to Your Slack and create a new channel for notifications.\n\nNow Click on your slack account name --\u003e settings \u0026 Administration --\u003e Manage Apps\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 47 08 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/56bd24f5-f055-462f-9491-45828588edba\"\u003e\n\nt will open a new tab, select build now\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 48 09 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/e65abe0e-e89d-449f-93c5-a3396eda62f8\"\u003e\n\n\nNow Click on Create an app\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 48 35 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/d7bee46f-c338-485f-a7db-8239ca1409d3\"\u003e\n\nSelect from scratch\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 49 04 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/c7c4b802-4f08-462f-91cf-34c1adcdf0a1\"\u003e\n\nProvide a name for the app and select workspace and create\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 49 54 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/af85162c-b5eb-4a48-b13c-0cf5f8b1ca54\"\u003e\n\nSelect Incoming webhooks\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 50 30 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/6d1f446e-9fcb-46a2-98e6-5eec644f7f3a\"\u003e\n\nNow Set incoming webhooks to on\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 51 03 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/189fa346-e0eb-4ecf-a76d-8a81652c4c32\"\u003e\n\nClick on Add New webhook to workspace\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 51 38 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/563d3cc3-a81a-4e5e-9e68-27d23b5a2d5d\"\u003e\n\nSelect Your channel that created for notifications and allow\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 52 12 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/9a028aaa-55f5-4ce1-b16e-2d3c4bf2e0e4\"\u003e\n\nIt will generate a webhook URL copy it\n\n\u003cimg width=\"1496\" alt=\"Screenshot 2024-01-11 at 5 53 14 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/f0b87569-cc5b-4207-8893-4a9f520a82df\"\u003e\n\n\nNow come back to GitHub and click on settings\n\nGo to secrets --\u003e actions --\u003e new repository secret and add\n\n\u003cimg width=\"1489\" alt=\"Screenshot 2024-01-11 at 5 56 01 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/ea05fc0a-1cea-43ae-b349-ff08a75dff0a\"\u003e\n\n\nAdd the below code to the deploy.yml workflow and commit and the workflow will start.\n\n```bash\n\n      - name: Send a Slack Notification\n        if: always()\n        uses: act10ns/slack@v1\n        with:\n          status: ${{ job.status }}\n          steps: ${{ toJson(steps) }}\n          channel: '#git'\n        env:\n          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n\n```\n\nThis step sends a Slack notification. It uses the act10ns/slack action and is configured to run \"always,\" which means it runs regardless of the job status. It sends the notification to the specified Slack channel using the webhook URL stored in secrets.\n\n\nIf you get this error, Try to configure aws cli on the ec2 instance to resolve this matter.\n\n\u003cimg width=\"1355\" alt=\"Screenshot 2024-01-11 at 8 57 56 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/9f83d0e3-81b8-49a0-82ec-8e3d54f63c6e\"\u003e\n\nNow our build is completed.\n\n\u003cimg width=\"1341\" alt=\"Screenshot 2024-01-11 at 9 17 57 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/69a5cdea-b740-4a2d-8d64-288f11688192\"\u003e\n\n\nAnd here is the Slack notification.\n\n\u003cimg width=\"1167\" alt=\"Screenshot 2024-01-11 at 9 14 47 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/9bea4559-64f0-49db-8054-6b57ba7583b6\"\u003e\n\n\nLet’s go to the Ec2 ssh connection\n\nRn this command.\n\n```bash\nkubectl get all\n```\n\nOpen the port in the security group for the Node group instance.\n\nAfter that copy the external IP and paste it into the browser\n\u003cimg width=\"1419\" alt=\"Screenshot 2024-01-11 at 9 23 10 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/9a6ac287-90de-451e-bc85-af71c35d5f51\"\u003e\n\nHere is the Output: The website is Live.\n\n\u003cimg width=\"1377\" alt=\"Screenshot 2024-01-11 at 9 23 35 PM\" src=\"https://github.com/codewithmuh/react-aws-eks-github-actions/assets/51082957/dec57ac6-922e-4803-b30c-224264129227\"\u003e\n\n### Part 10: Delete the infrastructure (To Avoid Extra Billing, if you are just using it for learning Purposes)\n\nTo destroy, Follow these Steps:\n\n1. comment this line run: kubectl apply -f deployment-service.yml in deploy.yaml, adn add this line run: kubectl delete -f deployment-service.yml . You can say it replacement between lines. It will delete the container and delete the Kubernetes deployment.\n\n2. Stop the self-hosted runner.\n\n3. To delete the Eks cluster\n   \n```bash\ncd /home/ubuntu\ncd Project_root_folder\ncd terraform-eks\nterraform destroy --auto-approve\n```\n\nThen Delete ths dockerhub token. Once cluster is destroyed, delete the ec2 instance and iam role.\n\n\n## Acknowledgements\nSpecial thanks to codewithmuh for creating this incredible Devops Project and simplifying the CI/CD process.\n\n\n\n\n","funding_links":["https://www.buymeacoffee.com/codewithmuh"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodewithmuh%2Freact-aws-eks-github-actions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodewithmuh%2Freact-aws-eks-github-actions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodewithmuh%2Freact-aws-eks-github-actions/lists"}