{"componentChunkName":"component---src-templates-project-template-js","path":"/projects/clouddesk-ami-automation-platform","result":{"data":{"project":{"title":"CloudDesk - AMI Automation Platform","slug":"clouddesk-ami-automation-platform","description":"Built an AMI creation and management platform with a point-and-click UI for generating Ansible files. Automated the full storage lifecycle: EBS to snapshot, snapshot to S3, S3 to Glacier, Glacier to Deep Archive. Designed multi-region fault-tolerant architecture with DevSecOps pipeline.","caseStudy":"## Stack & Architecture\n\nBuilt with React, AWS Amplify, DynamoDB, Ansible, AWS S3, AWS Glacier. Delivered 2020-08–present.\n\n<!-- Auto-drafted from profile data. Add problem/approach detail as needed. -->\n","gallery":[],"date_start":"2020-08","date_end":null,"hours":null,"client":null,"tags":["cloud","devops","automation"],"outcomes":["Built point-and-click UI for Ansible file generation","Automated full storage lifecycle from EBS through Glacier Deep Archive","Multi-region fault-tolerant architecture with DevSecOps pipeline"],"tech_stack":["React","AWS Amplify","DynamoDB","Ansible","AWS S3","AWS Glacier"],"links":[{"label":"Live","url":"https://master.d1encb3qrxor38.amplifyapp.com/"}],"image":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='206'%20viewBox='0%200%20400%20206'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20100v100h30a5715%205715%200%2000190%201l5%201v-6c0-6%200-6%203-7%203-2%203-2%206-1%203%202%203%202%203%209l1%209%208-1%2016-1c8%201%209%201%209-3l-12%202c-2%200-2%200-2-9v-10l6%203%206%203%206-3c7-3%207-4%203-6l-3-4c0-2-1-3-2-3-2-1-3-2-3-5s1-4%202-3l2-1c1-1%200-1-1-1-3%200-4-3-2-4%204-4%204-5%204-48l-1-41%203-2%203-1v3c-1%203%200%203%204%202%202-1%202%200%202%2023v24l-5%203-5%203%206%204%207%203%205-3c7-4%207-4%202-7l-5-3V80l7%204c8%205%208%205%2016%200l7-4v20c0%2020%200%2021%202%2021l5%204c4%203%204%203%202%204-2%202-2%202-5%200-4-3-4-3-4%201%200%203%200%203%203%202%202-1%204%200%2011%204%206%204%209%206%2010%205l1-8c2-9%203-8-10-15-5-3-7-3-8-3-1%201-1-1-1-6v-8l6%203c6%204%206%204%2012%200l5-3a430%20430%200%20010%2067c-3%201-3%209%201%2011%203%201%204%201%209-2l6-3v21l-11%206-10%205h12l28-2%2015-1v-3l1-102V0H0v100M347%208l-1%208%201%207h41V8l-20-1-21%201m-53%2046l-1%208c0%206%200%207%202%208%205%203%209%200%205-4-2-1-2-4%200-2%202%201%201-4%200-5l-2-2c1-1-4-4-4-3m60%2090l1%2022%205%204%206%203v-51l-3%202h-6l-3-2v22m21%2019c-2%201-2%203-2%2014v13l8-5%207-4v-8c0-9%200-9-4-6-3%201-6%202-4%200%201-1%201-5-1-6l-4%202'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.941747572815534,"src":"/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/ee604/project-2.png","srcSet":"/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/69585/project-2.png 200w,\n/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/497c6/project-2.png 400w,\n/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/ee604/project-2.png 800w","srcWebp":"/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/58556/project-2.webp","srcSetWebp":"/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/61e93/project-2.webp 200w,\n/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/1f5c5/project-2.webp 400w,\n/static/8e722fedb7ac70e1a58b1dc1cd43d6ec/58556/project-2.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}},"stack_icons":[{"name":"React","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='28'%20height='24'%20viewBox='0%200%2028%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M6%202L5%206l-2%204c-4%202-4%204-1%206%202%201%203%202%203%204%201%204%204%205%206%203h4c4%202%206%201%206-3%200-2%201-3%203-4%203-1%203-4-1-7l-2-2c1-5-2-7-6-5-1%202-2%202-4%200H6'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":23,"height":20,"src":"/static/b1ac6b31209a966fdef0a91802cc67d8/dba72/react.png","srcSet":"/static/b1ac6b31209a966fdef0a91802cc67d8/dba72/react.png 1x","srcWebp":"/static/b1ac6b31209a966fdef0a91802cc67d8/e3c56/react.webp","srcSetWebp":"/static/b1ac6b31209a966fdef0a91802cc67d8/e3c56/react.webp 1x"}}}},{"name":"AWS Amplify","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2012v12h25V0H0v12m10-5L9%209l-3%205c-3%205-2%206%207%206%209-1%208%200%205-8-3-6-5-7-8-5'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":20,"height":20,"src":"/static/f4012fab51c9b609de0b09c1254ddc28/dba72/aws-amplify.png","srcSet":"/static/f4012fab51c9b609de0b09c1254ddc28/dba72/aws-amplify.png 1x","srcWebp":"/static/f4012fab51c9b609de0b09c1254ddc28/e3c56/aws-amplify.webp","srcSetWebp":"/static/f4012fab51c9b609de0b09c1254ddc28/e3c56/aws-amplify.webp 1x"}}}},{"name":"DynamoDB","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2012v12h25V12l-1-9v3l-3-3c-3-3-3-3-12-3H0v12m8-8c-2%201-3%201-3%208%200%208%201%2011%203%208l5-1%203%201h-3c-5%202-6%202-3%202%205%200%207-2%207-5l2-6c2-2%202-2%201-3l-1-1c0-2-1-2-7-3H8'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":20,"height":20,"src":"/static/82defa6954b6e11e8d81c1bc0e0e5106/dba72/dynamodb.png","srcSet":"/static/82defa6954b6e11e8d81c1bc0e0e5106/dba72/dynamodb.png 1x","srcWebp":"/static/82defa6954b6e11e8d81c1bc0e0e5106/e3c56/dynamodb.webp","srcSetWebp":"/static/82defa6954b6e11e8d81c1bc0e0e5106/e3c56/dynamodb.webp 1x"}}}},{"name":"Ansible","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M1%201v22c2%202%2020%201%2022-1s3-22%201-21H1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":24,"height":24,"src":"/static/1397eb2f3797c6d95021039d8ad84e9d/6d1ba/ansible.png","srcSet":"/static/1397eb2f3797c6d95021039d8ad84e9d/6d1ba/ansible.png 1x,\n/static/1397eb2f3797c6d95021039d8ad84e9d/a9c35/ansible.png 1.5x,\n/static/1397eb2f3797c6d95021039d8ad84e9d/559c9/ansible.png 2x","srcWebp":"/static/1397eb2f3797c6d95021039d8ad84e9d/f8bad/ansible.webp","srcSetWebp":"/static/1397eb2f3797c6d95021039d8ad84e9d/f8bad/ansible.webp 1x,\n/static/1397eb2f3797c6d95021039d8ad84e9d/f81b6/ansible.webp 1.5x,\n/static/1397eb2f3797c6d95021039d8ad84e9d/804d1/ansible.webp 2x"}}}},{"name":"AWS S3","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2012v12h25V12c0-7-1-9-1-6%200%207%200%207-2%205-2-1-2-1-1%201l-1%203-1%203c0%202-1%203-6%203-7%200-7%200-8-9-1-6%200-8%205-9%204%200%204%200%202-2L5%200H0v12'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":20,"height":20,"src":"/static/aeecd41e51f030856d95a6b2606de3da/dba72/aws-s3.png","srcSet":"/static/aeecd41e51f030856d95a6b2606de3da/dba72/aws-s3.png 1x","srcWebp":"/static/aeecd41e51f030856d95a6b2606de3da/e3c56/aws-s3.webp","srcSetWebp":"/static/aeecd41e51f030856d95a6b2606de3da/e3c56/aws-s3.webp 1x"}}}},{"name":"AWS Glacier","icon":{"childImageSharp":{"fixed":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2012v12h25V12c0-7-1-9-1-6%200%207%200%207-2%206-2-2-2-2-2%203s0%206-2%206c-3%200-4-3-2-5s2-2%200-2l-5-3c-4-3-5-3-4%202%200%205%201%207%206%207%202%201%202%201-2%201-5%200-5-1-6-10-1-6%200-7%206-8%208-1%204-3-6-3H0v12'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","width":20,"height":20,"src":"/static/a981c579071cdb1a0ad8559db463be9d/dba72/aws-glacier.png","srcSet":"/static/a981c579071cdb1a0ad8559db463be9d/dba72/aws-glacier.png 1x","srcWebp":"/static/a981c579071cdb1a0ad8559db463be9d/e3c56/aws-glacier.webp","srcSetWebp":"/static/a981c579071cdb1a0ad8559db463be9d/e3c56/aws-glacier.webp 1x"}}}}]}},"pageContext":{"slug":"clouddesk-ami-automation-platform"}},"staticQueryHashes":["3724428426"]}