<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cognivtech</title>
	<atom:link href="https://blog.cognivtech.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.cognivtech.com</link>
	<description></description>
	<lastBuildDate>Fri, 10 Apr 2026 07:38:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://blog.cognivtech.com/wp-content/uploads/2025/06/cropped-cogniv-logo-32x32.png</url>
	<title>Cognivtech</title>
	<link>https://blog.cognivtech.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Zero Downtime, Zero Compromise: How We Moved a Live Platform from DigitalOcean to AWS ECS Fargate</title>
		<link>https://blog.cognivtech.com/zero-downtime-zero-compromise-how-we-moved-a-live-platform-from-digitalocean-to-aws-ecs-fargate/</link>
					<comments>https://blog.cognivtech.com/zero-downtime-zero-compromise-how-we-moved-a-live-platform-from-digitalocean-to-aws-ecs-fargate/#respond</comments>
		
		<dc:creator><![CDATA[Karthick]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 07:17:03 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=486</guid>

					<description><![CDATA[Phase 1: The Starting Point — DigitalOcean Hosting  Infrastructure Overview  Customer initial production environment was hosted on DigitalOcean Droplets — Linux-based virtual machines running the application directly on the host OS. While DigitalOcean offered simplicity and low initial cost, this setup quickly revealed significant limitations as customer scaled its client operations.  Challenges Encountered  Operational Bottlenecks  Client feedback highlighted [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong><span class="TextRun SCXW31004457 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW31004457 BCX0" data-ccp-parastyle="heading 2">Phase 1: The Starting Point — </span><span class="NormalTextRun SpellingErrorV2Themed SCXW31004457 BCX0" data-ccp-parastyle="heading 2">DigitalOcean</span><span class="NormalTextRun SCXW31004457 BCX0" data-ccp-parastyle="heading 2"> Hosting</span></span><span class="EOP Selected SCXW31004457 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:120}"> </span></strong></p>
<p><strong>Infrastructure Overview </strong></p>
<p><span data-contrast="none">Customer initial production environment was hosted on </span><b><span data-contrast="none">DigitalOcean Droplets</span></b><span data-contrast="none"> — Linux-based virtual machines running the application directly on the host OS. While DigitalOcean offered simplicity and low initial cost, this setup quickly revealed significant limitations as customer scaled its client operations.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><span data-contrast="none">Challenges Encountered</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:120}"> </span></p>
<p><b><span data-contrast="none">Operational Bottlenecks</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Client feedback highlighted noticeable delays in receiving critical application updates, raising concerns about responsiveness and SLA adherence.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Latency issues were observed in application response times and data loading, directly impacting end-user satisfaction.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><b><span data-contrast="none">Infrastructure Rigidity</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">DigitalOcean supports only Linux-based environments, limiting the flexibility needed for applications that may require a Windows-compatible runtime.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Container orchestration capabilities were absent, making it difficult to manage application dependencies consistently across environments.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><b><span data-contrast="none">Manual Deployment Burden</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Deployments relied entirely on manual scripts and custom tooling.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Each release cycle required 1–2 engineers dedicating </span><b><span data-contrast="none">6–7 hours per week</span></b><span data-contrast="none"> solely for deployment oversight and maintenance.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">This manual approach introduced a high risk of human error and created deployment inconsistencies across environments.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"><br />
</span></li>
</ul>
<p><strong>Phase 2: Migration to AWS EC2 </strong></p>
<p><span data-contrast="none">Why EC2?</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:120}"> </span></p>
<p><span data-contrast="none">As a first step toward modernization, Cogniv Technologies recommended migrating the customer workload to </span><b><span data-contrast="none">AWS EC2 (Elastic Compute Cloud)</span></b><span data-contrast="none">. This move provided our customer with enterprise-grade infrastructure, deeper managed service integrations, and the foundation needed to adopt containerization in the next phase.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><span data-contrast="none">What Changed</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">The application was rehosted on EC2 instances within a properly architected </span><b><span data-contrast="none">AWS VPC</span></b><span data-contrast="none">, with security groups, subnets, and a NAT Gateway enforcing network isolation and security best practices.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="none">AWS RDS for MySQL</span></b><span data-contrast="none"> replaced the self-managed database, offloading patching, backup automation, and storage scaling to AWS — allowing the team to focus on application development rather than database administration.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="none">AWS CloudTrail</span></b><span data-contrast="none"> was enabled to capture a full audit trail of API activity across the account, supporting compliance and operational governance from day one.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><b><span data-contrast="none">Amazon CloudWatch</span></b><span data-contrast="none"> was configured for centralized logging, metrics collection, and alerting across all services.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="5" data-aria-level="1"><b><span data-contrast="none">AWS Route 53</span></b><span data-contrast="none"> was used for DNS management, enabling reliable domain routing and health-check-based failover.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong>Improvements Gained </strong></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Eliminated DigitalOcean&#8217;s Linux-only platform constraint, opening the path to broader runtime support.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Gained access to the full AWS service ecosystem for future integrations.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">Centralized monitoring and auditing replaced fragmented, manual log management.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="none">Database reliability improved significantly with RDS automated backups and multi-AZ capability.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong>Remaining Gaps </strong></p>
<p><span data-contrast="none">While the EC2 migration addressed infrastructure maturity, several challenges persisted:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Applications still ran directly on EC2 instances without containerization, meaning environment inconsistencies between development and production remained.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Deployment was still largely manual, continuing to consume significant engineering time.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">Scaling required manual intervention or basic Auto Scaling configurations, without fine-grained container-level resource management.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong> Phase 3: Containerization with Docker on EC2 </strong></p>
<p><strong>Adopting Docker </strong></p>
<p>To address environment consistency and dependency management, Cogniv Technologies led the effort to containerize the customer application using Docker. All application components were packaged into Docker images, with container images stored securely in Amazon ECR (Elastic Container Registry)<span data-contrast="none">.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>What Changed </strong></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Application workloads were containerized and deployed as Docker containers running on EC2 instances.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Amazon ECR served as the private image registry, replacing any ad-hoc image storage and ensuring version-controlled, immutable container artifacts.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">Docker Compose was used to manage multi-container deployments locally and in staging environments, improving developer workflow consistency.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong>Benefits Unlocked </strong></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="none">Environment Parity</span></b><span data-contrast="none">: Containers encapsulate all application dependencies, eliminating the classic &#8220;works on my machine&#8221; problem across development, staging, and production.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="none">Faster Onboarding</span></b><span data-contrast="none">: New engineers could spin up the full application stack locally using a single Docker command.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="none">Image Versioning</span></b><span data-contrast="none">: ECR enabled strict version control of container images, making rollbacks straightforward.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong>Remaining Challenges </strong></p>
<p><span data-contrast="none">Despite containerization benefits, managing Docker containers on EC2 still required:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Manual EC2 instance management — patching, capacity planning, and instance health monitoring.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">No native service discovery, making inter-container communication in a microservices setup cumbersome.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">Scaling containers still required EC2-level intervention, not container-level auto-scaling.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="none">The deployment process, though improved, still lacked full automation and required engineer oversight.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong> Phase 4: Full Modernization — AWS ECS Fargate with CI/CD Automation </strong></p>
<p><strong>The Final Architecture </strong></p>
<p><span data-contrast="none">To eliminate the remaining infrastructure management overhead and fully automate the software delivery lifecycle, Cogniv Technologies migrated customer to </span><b><span data-contrast="none">AWS ECS Fargate</span></b><span data-contrast="none">  a serverless container orchestration service. This final phase consolidated all prior improvements into a cohesive, production-grade, fully managed architecture.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Core Solution Components </strong></p>
<p><strong>ECS Fargate — Serverless Container Hosting </strong></p>
<p><span data-contrast="none">AWS ECS Fargate removes the need to provision or manage EC2 instances. Customer&#8217;s containers run in a fully managed serverless environment where AWS handles host-level patching, capacity, and scaling infrastructure.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="none">Blue/Green Deployment</span></b><span data-contrast="none"> strategy was implemented via AWS CodeDeploy, enabling zero-downtime releases by running two identical environments in parallel and seamlessly shifting traffic only after the new version passes health checks.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Deployment efficiency improved by approximately </span><b><span data-contrast="none">99%</span></b><span data-contrast="none">, with zero downtime recorded across all production releases post-migration.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">ECS Service Discovery allows containers to communicate seamlessly within the VPC, enabling a clean microservices communication pattern without hardcoded endpoints.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong>AWS CodePipeline — Fully Automated CI/CD </strong></p>
<p><span data-contrast="none">A complete CI/CD pipeline was built using </span><b><span data-contrast="none">AWS CodePipeline</span></b><span data-contrast="none">, </span><b><span data-contrast="none">CodeBuild</span></b><span data-contrast="none">, and </span><b><span data-contrast="none">CodeDeploy</span></b><span data-contrast="none">, automating the entire software delivery lifecycle from code commit to production deployment.</span></p>
<p><b><span data-contrast="none">Deployment Metrics Post-Automation:</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">End-to-end deployment duration: </span><b><span data-contrast="none">~8 minutes</span></b><span data-contrast="none"> from code commit to live traffic</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Engineering time saved: </span><b><span data-contrast="none">~3 hours per week</span></b><span data-contrast="none"> per engineer</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">Deployment downtime: </span><b><span data-contrast="none">0%</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="none">Manual deployment steps: </span><b><span data-contrast="none">Eliminated entirely</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><strong>AWS API Gateway — Centralized API Management </strong></p>
<p><span data-contrast="none">API Gateway acts as the unified entry point for all backend services, handling:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="none">Authentication and authorization enforcement</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="none">Request and response transformation</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="none">Throttling and rate limiting to prevent abuse</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="none">Caching for improved response performance</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="5" data-aria-level="1"><span data-contrast="none">Centralized API lifecycle management</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<p><span data-contrast="none">This replaced direct EC2/container endpoint exposure, significantly improving the security posture and providing a consistent, manageable interface to customers distributed services.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Amazon RDS — Fully Managed Relational Database </strong></p>
<p><span data-contrast="none">Amazon RDS for MySQL continued from Phase 2, now more deeply integrated within the VPC and ECS networking fabric. AWS manages automated backups, software patching, storage auto-scaling, and failover — freeing the engineering team entirely from database infrastructure concerns.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>AWS CloudTrail — Governance and Audit </strong></p>
<p><span data-contrast="none">CloudTrail captures a comprehensive, tamper-evident log of all API activity across the AWS environment. Events are stored in Amazon S3 for long-term archiving and integrated with CloudWatch for real-time security alerting — supporting internal compliance, operational auditing, and external regulatory requirements.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Amazon CloudWatch — Unified Observability </strong></p>
<p><span data-contrast="none">CloudWatch provides centralized monitoring across all services — ECS task metrics, RDS performance, API Gateway request rates, and CodePipeline execution status. Proactive alerting ensures the team is notified of anomalies before they impact end users.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Lessons Learned </strong></p>
<p><strong>Containerization Standardizes the Delivery Pipeline </strong></p>
<p><span data-contrast="none">Adopting Docker and Amazon ECS introduced consistency across development, staging, and production environments. Packaging applications as immutable container images eliminated environment drift and made rollbacks trivially straightforward — simply redeploy the previous ECR image version.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Incremental Migration Reduces Risk </strong></p>
<p><span data-contrast="none">Rather than a single &#8220;lift-and-shift&#8221; migration, customer&#8217;s phased approach — DigitalOcean → EC2 → Docker → ECS Fargate — allowed each improvement to be validated before the next was introduced. This minimized risk, maintained continuity of client service, and allowed the engineering team to build confidence at each stage.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Automation Is a Force Multiplier </strong></p>
<p><span data-contrast="none">Implementing CI/CD with CodePipeline transformed how customers delivers software. What previously required hours of manual engineer effort now executes in eight minutes without human intervention. The elimination of manual steps directly reduced deployment errors and freed engineers to focus on product development rather than release management.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16448509,&quot;335559738&quot;:120,&quot;335559739&quot;:120}"> </span></p>
<p><strong>Serverless Containers Are the Right Abstraction for Most Teams </strong></p>
<p><span data-contrast="none">ECS Fargate proved that managing EC2 infrastructure is unnecessary overhead for application teams. By abstracting away host-level concerns, Fargate allowed customer&#8217;s engineers to operate at the container level the right abstraction for modern application delivery.</span></p>
<p><strong>Final Architecture Diagram:</strong></p>
<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-488" src="https://blog.cognivtech.com/wp-content/uploads/2026/04/Hashconnect-Architecture.jpg" alt="" width="1180" height="882" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/zero-downtime-zero-compromise-how-we-moved-a-live-platform-from-digitalocean-to-aws-ecs-fargate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Monitoring Website Uptime with Prometheus, Blackbox Exporter, and Grafana on AWS EC2</title>
		<link>https://blog.cognivtech.com/monitoring-website-uptime-with-prometheus-blackbox-exporter-and-grafana-on-aws-ec2/</link>
					<comments>https://blog.cognivtech.com/monitoring-website-uptime-with-prometheus-blackbox-exporter-and-grafana-on-aws-ec2/#respond</comments>
		
		<dc:creator><![CDATA[Karthick]]></dc:creator>
		<pubDate>Sun, 30 Nov 2025 10:26:37 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=382</guid>

					<description><![CDATA[Executive Summary In today’s digital-first world, ensuring that your website and APIs are available and performing well is critical. A few minutes of downtime can result in lost customers, revenue, and trust. This blog explains how to set up Prometheus, Blackbox Exporter, and Grafana on an AWS EC2 instance to continuously monitor website uptime, SSL [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2 data-start="433" data-end="455"><span style="font-size: 20px;">Executive Summary</span></h2>
<p data-start="456" data-end="881">In today’s digital-first world, ensuring that your website and APIs are available and performing well is critical. A few minutes of downtime can result in lost customers, revenue, and trust. This blog explains how to set up <strong data-start="680" data-end="694">Prometheus</strong>, <strong data-start="696" data-end="717">Blackbox Exporter</strong>, and <strong data-start="723" data-end="734">Grafana</strong> on an AWS EC2 instance to continuously monitor website uptime, SSL certificate validity, and response times with visual dashboards and alerts.</p>
<p data-start="456" data-end="881"><strong><span style="font-size: 20px;">Problem</span></strong></p>
<p data-start="901" data-end="1114">Businesses often face challenges in knowing when their websites or applications go down. Traditional monitoring tools can be expensive or complex to set up, leaving gaps in visibility. Without proper monitoring:</p>
<ul data-start="1115" data-end="1271">
<li data-start="1115" data-end="1169">
<p data-start="1117" data-end="1169">Downtime may go unnoticed until reported by users.</p>
</li>
<li data-start="1170" data-end="1215">
<p data-start="1172" data-end="1215">SSL certificates can expire unexpectedly.</p>
</li>
<li data-start="1216" data-end="1271">
<p data-start="1218" data-end="1271">Page load delays or DNS failures remain undetected.</p>
</li>
</ul>
<p data-start="1273" data-end="1408">The need for a <strong data-start="1288" data-end="1342">reliable, open-source, and cost-effective solution</strong> to track website availability and performance metrics is clear.</p>
<h2 data-start="1415" data-end="1428"><span style="font-size: 20px;">Solution</span></h2>
<p data-start="1429" data-end="1628">By combining <strong data-start="1442" data-end="1456">Prometheus</strong> for time-series data collection, <strong data-start="1490" data-end="1511">Blackbox Exporter</strong> for probing website endpoints, and <strong data-start="1547" data-end="1558">Grafana</strong> for visualization, you can build a robust monitoring solution that:</p>
<ul data-start="1629" data-end="1865">
<li data-start="1629" data-end="1687">
<p data-start="1631" data-end="1687">Continuously checks website uptime and response codes.</p>
</li>
<li data-start="1688" data-end="1743">
<p data-start="1690" data-end="1743">Monitors SSL expiry to prevent unexpected downtime.</p>
</li>
<li data-start="1744" data-end="1804">
<p data-start="1746" data-end="1804">Tracks latency, DNS resolution, and HTTP response times.</p>
</li>
<li data-start="1805" data-end="1865">
<p data-start="1807" data-end="1865">Provides real-time dashboards and alerting capabilities.</p>
</li>
</ul>
<p data-start="1867" data-end="1965">This solution is deployed on a <strong data-start="1898" data-end="1926">Linux-based Ec2 instance</strong> and uses entirely open-source tools.</p>
<h2 data-start="1972" data-end="1990"><span style="font-size: 20px;">Prerequisites</span></h2>
<p data-start="1991" data-end="2040">Before starting, ensure you have the following:</p>
<ul data-start="2041" data-end="2372">
<li data-start="2041" data-end="2119">
<p data-start="2043" data-end="2119">An <strong data-start="2046" data-end="2066">AWS EC2 instance</strong> (Ubuntu or Amazon Linux 2) with at least 2 GB RAM.</p>
</li>
<li data-start="2120" data-end="2168">
<p data-start="2122" data-end="2168">A domain or set of URLs you want to monitor.</p>
</li>
<li data-start="2169" data-end="2212">
<p data-start="2171" data-end="2212">Access to the EC2 instance via <strong data-start="2202" data-end="2209">SSH</strong>.</p>
</li>
<li data-start="2213" data-end="2251">
<p data-start="2215" data-end="2251">Basic knowledge of Linux commands.</p>
</li>
<li data-start="2252" data-end="2372">
<p data-start="2254" data-end="2372">Ports <strong data-start="2260" data-end="2268">9090</strong> (Prometheus), <strong data-start="2283" data-end="2291">9115</strong> (Blackbox Exporter), and <strong data-start="2317" data-end="2325">3000</strong> (Grafana) allowed in the EC2 Security Group.</p>
</li>
</ul>
<h2 data-start="2379" data-end="2394"><span style="font-size: 20px;">Challenges</span></h2>
<p data-start="2395" data-end="2435">While implementing, you may encounter:</p>
<ul data-start="2436" data-end="2772">
<li data-start="2436" data-end="2528">
<p data-start="2438" data-end="2528">Firewall and Security Group restrictions preventing access to Grafana or Prometheus.</p>
</li>
<li data-start="2529" data-end="2617">
<p data-start="2531" data-end="2617">Incorrect scrape configurations in Prometheus resulting in no metrics collected.</p>
</li>
<li data-start="2618" data-end="2685">
<p data-start="2620" data-end="2685">CORS or SSL certificate errors when probing HTTPS websites.</p>
</li>
<li data-start="2686" data-end="2772">
<p data-start="2688" data-end="2772">Grafana authentication and datasource setup issues if not properly configured.</p>
</li>
</ul>
<h2 data-start="2779" data-end="2792"><span style="font-size: 20px;">Scenario</span></h2>
<p data-start="2793" data-end="2971">Consider a financial services company that needs to ensure its customer-facing portal and API endpoints are always online. Using Prometheus and Blackbox Exporter, they want to:</p>
<ul data-start="2972" data-end="3165">
<li data-start="2972" data-end="3025">
<p data-start="2974" data-end="3025">Monitor their website URLs.</p>
</li>
<li data-start="3026" data-end="3094">
<p data-start="3028" data-end="3094">Receive early warnings if the SSL certificate is nearing expiry.</p>
</li>
<li data-start="3095" data-end="3165">
<p data-start="3097" data-end="3165">Visualize uptime history and response times in Grafana dashboards.</p>
</li>
</ul>
<p><strong><span style="font-size: 20px;">Step-by-Step Solution</span></strong></p>
<p><strong>1. Install Prometheus</strong></p>
<p><strong>Comments:</strong></p>
<p>sudo useradd &#8211;no-create-home &#8211;shell /bin/false prometheus<br />
sudo mkdir /etc/prometheus /var/lib/prometheus<br />
sudo apt update &amp;&amp; sudo apt install wget tar -y</p>
<p>cd /tmp<br />
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz<br />
tar -xvf prometheus-2.53.0.linux-amd64.tar.gz<br />
cd prometheus-2.53.0.linux-amd64/</p>
<p>sudo cp prometheus promtool /usr/local/bin/<br />
sudo cp -r consoles console_libraries /etc/prometheus/<br />
sudo cp prometheus.yml /etc/prometheus/prometheus.yml<br />
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus</p>
<p><strong>Create Prometheus service:</strong></p>
<p>[Unit]<br />
Description=Prometheus<br />
Wants=network-online.target<br />
After=network-online.target</p>
<p>[Service]<br />
User=prometheus<br />
ExecStart=/usr/local/bin/prometheus \<br />
&#8211;config.file=/etc/prometheus/prometheus.yml \<br />
&#8211;storage.tsdb.path=/var/lib/prometheus \<br />
&#8211;web.listen-address=:9090 \<br />
&#8211;web.enable-lifecycle</p>
<p>[Install]<br />
WantedBy=multi-user.target</p>
<p><strong>Enable and start:</strong></p>
<p>sudo systemctl daemon-reexec<br />
sudo systemctl enable prometheus<br />
sudo systemctl start prometheus</p>
<p><strong>2. Install Blackbox Exporter</strong></p>
<p>cd /tmp<br />
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz<br />
tar -xvf blackbox_exporter-0.25.0.linux-amd64.tar.gz<br />
cd blackbox_exporter-0.25.0.linux-amd64/</p>
<p>sudo cp blackbox_exporter /usr/local/bin/<br />
sudo mkdir /etc/blackbox_exporter<br />
sudo cp blackbox.yml /etc/blackbox_exporter/</p>
<p><strong>Create Blackbox service file as like below:</strong></p>
<p>[Unit]<br />
Description=Blackbox Exporter<br />
After=network.target</p>
<p>[Service]<br />
ExecStart=/usr/local/bin/blackbox_exporter \<br />
&#8211;config.file=/etc/blackbox_exporter/blackbox.yml<br />
Restart=always</p>
<p>[Install]<br />
WantedBy=multi-user.target</p>
<p><strong>Enable and start:</strong></p>
<p>sudo systemctl daemon-reexec<br />
sudo systemctl enable blackbox_exporter<br />
sudo systemctl start blackbox_exporter</p>
<p><strong>3. Configure Prometheus to Use Blackbox Exporter</strong></p>
<p>Edit <code data-start="5182" data-end="5214">/etc/prometheus/prometheus.yml</code>:</p>
<p>scrape_configs:<br />
&#8211; job_name: &#8216;blackbox&#8217;<br />
metrics_path: /probe<br />
params:<br />
module: [http_2xx]<br />
static_configs:<br />
&#8211; targets:<br />
&#8211; https://example.com<br />
&#8211; https://google.com<br />
relabel_configs:<br />
&#8211; source_labels: [__address__]<br />
target_label: __param_target<br />
&#8211; source_labels: [__param_target]<br />
target_label: instance<br />
&#8211; target_label: __address__<br />
replacement: localhost:9115</p>
<p><strong>Restart Prometheus:</strong></p>
<p>sudo systemctl restart prometheus</p>
<p><strong>4. Install Grafana</strong></p>
<p>sudo apt-get install -y apt-transport-https software-properties-common<br />
wget -q -O &#8211; https://packages.grafana.com/gpg.key | sudo apt-key add &#8211;<br />
sudo add-apt-repository &#8220;deb https://packages.grafana.com/oss/deb stable main&#8221;<br />
sudo apt-get update<br />
sudo apt-get install grafana -y<br />
sudo systemctl enable grafana-server<br />
sudo systemctl start grafana-server</p>
<p><strong>Access Grafana:</strong></p>
<p>http://&lt;EC2_PUBLIC_IP&gt;:3000</p>
<p data-start="6178" data-end="6214">(Default login: <strong data-start="6194" data-end="6211">admin / admin</strong>)</p>
<p data-start="6178" data-end="6214"><strong>5. Add Prometheus Datasource in Grafana</strong></p>
<ul data-start="6267" data-end="6402">
<li data-start="6267" data-end="6327">
<p data-start="6269" data-end="6327">Go to <strong data-start="6275" data-end="6325">Configuration → Data sources → Add data source</strong></p>
</li>
<li data-start="6328" data-end="6353">
<p data-start="6330" data-end="6353">Select <strong data-start="6337" data-end="6351">Prometheus</strong></p>
</li>
<li data-start="6354" data-end="6386">
<p data-start="6356" data-end="6386">URL: <code data-start="6361" data-end="6384">http://localhost:9090</code></p>
</li>
<li data-start="6387" data-end="6402">
<p data-start="6389" data-end="6402">Save &amp; Test</p>
</li>
</ul>
<p><strong>6. Import a Ready-made Blackbox Dashboard</strong></p>
<ul data-start="6457" data-end="6582">
<li data-start="6457" data-end="6490">
<p data-start="6459" data-end="6490">Go to <strong data-start="6465" data-end="6488">Dashboards → Import</strong></p>
</li>
<li data-start="6491" data-end="6523">
<p data-start="6493" data-end="6523">Enter Dashboard ID: <strong data-start="6513" data-end="6521">7587</strong></p>
</li>
<li data-start="6524" data-end="6561">
<p data-start="6526" data-end="6561">Select your Prometheus datasource</p>
</li>
<li data-start="6562" data-end="6582">
<p data-start="6564" data-end="6582">Click <strong data-start="6570" data-end="6580">Import</strong></p>
</li>
</ul>
<p data-start="6584" data-end="6626">You’ll now see uptime metrics including:</p>
<ul data-start="6627" data-end="6713">
<li data-start="6627" data-end="6647">
<p data-start="6629" data-end="6647">Status (UP/DOWN)</p>
</li>
<li data-start="6648" data-end="6668">
<p data-start="6650" data-end="6668">HTTP status code</p>
</li>
<li data-start="6669" data-end="6683">
<p data-start="6671" data-end="6683">SSL expiry</p>
</li>
<li data-start="6684" data-end="6713">
<p data-start="6686" data-end="6713">Response time and latency</p>
</li>
</ul>
<h2 data-start="6720" data-end="6735"><span style="font-size: 20px;">Conclusion</span></h2>
<p data-start="6736" data-end="7012">With this setup, you now have a <strong data-start="6768" data-end="6807">complete uptime monitoring solution</strong> using Prometheus, Blackbox Exporter, and Grafana on AWS EC2. This ensures you’re always aware of your website’s availability, SSL health, and performance without relying on expensive commercial tools.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/monitoring-website-uptime-with-prometheus-blackbox-exporter-and-grafana-on-aws-ec2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Press Release</title>
		<link>https://blog.cognivtech.com/cogniv-technologies-and-nunnari-labs-announce-strategic-collaboration-to-deliver-ai-powered-cloud-solutions-for-enterprises/</link>
					<comments>https://blog.cognivtech.com/cogniv-technologies-and-nunnari-labs-announce-strategic-collaboration-to-deliver-ai-powered-cloud-solutions-for-enterprises/#respond</comments>
		
		<dc:creator><![CDATA[Karthick]]></dc:creator>
		<pubDate>Thu, 27 Nov 2025 08:26:56 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=439</guid>

					<description><![CDATA[Cogniv Technologies and Nunnari Labs Announce Strategic Collaboration to Deliver AI-Powered Cloud Solutions for Enterprises Partnership combines Cogniv’s cloud and managed services expertise with Nunnari’s AIfirst product engineering capabilities to accelerate digital transformation. Coimbatore, India &#8211; November 21, 2025 Coimbatore based Cogniv Technologies and Nunnari Labs today jointly announced a strategic collaboration to co-create and [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2><span style="font-size: 18px;"><strong>Cogniv Technologies and Nunnari Labs Announce Strategic Collaboration to Deliver AI-Powered Cloud Solutions for Enterprises</strong></span></h2>
<p>Partnership combines Cogniv’s cloud and managed services expertise with Nunnari’s AIfirst product engineering capabilities to accelerate digital transformation.</p>
<p><em><strong>Coimbatore, India &#8211; November 21, 2025</strong></em></p>
<p>Coimbatore based Cogniv Technologies and Nunnari Labs today jointly announced a strategic collaboration to co-create and deliver enterprise-grade AI solutions built on secure, scalable cloud infrastructure.</p>
<p>The partnership will focus on bridging a critical gap many organizations face today —turning AI experimentation into operational reality. Together, the two firms will deliver a unified framework that makes it easier for businesses to design, deploy, and manage AI solutions that perform at scale.</p>
<h3>What This Means for Clients</h3>
<p>As artificial intelligence moves from experimentation to enterprise adoption, many organizations find themselves stuck between innovation and execution. Models may work in controlled environments, but scaling them securely, cost-eGectively, and in sync with existing systems remains a major hurdle.</p>
<p>The collaboration between Nunnari Labs and Cogniv Technologies aims to close that gap. Nunnari brings the depth of AI research, model development, and product engineering, while Cogniv provides the cloud backbone, DevOps discipline, and managed operations needed to make those AI systems run reliably at scale. Together, they oGer enterprises a practical path to bring AI into the core of their business &#8211; one that ensures performance in the real world, not just in prototypes.</p>
<p>For clients, this means dependable AI that integrates smoothly with their cloud environments, scales with demand, and adheres to the highest standards of transparency, security, and sustainability. More than just accelerating deployment, the partnership helps organizations translate innovation into measurable business outcomes.</p>
<h3>The Collaboration</h3>
<p>Through this partnership, both companies will jointly design and deploy solution accelerators across sectors such as manufacturing, healthcare, retail, and logistics. Clients will benefit from integrated oGerings that combine AI model development, cloud architecture, edge deployment, and ongoing managed services under one unified framework.</p>
<p><strong><em>“Our partnership with Nunnari Labs is a strategic leap towards turning innovative AI concepts into real enterprise impact,” said Jeswanth Vijay, CEO, Cogniv Technologies. &#8220;</em></strong><strong><em>Cogniv’s cloud and data expertise, combined with Nunnari’s cutting-edge AI engineering, will empower clients to scale AI solutions seamlessly. This is about transforming experimentation into execution and delivering future-ready AI Solution for business growth.”</em></strong></p>
<p>Nunnari Labs’ core focuses on inclusive AI aligned with global standards like OECD.AI and NIST, adding a strong ethical dimension to the collaboration. Together, the two companies will help enterprises modernize infrastructure, automate operations, and embed intelligence into business processes without compromising on data security, transparency, or performance.</p>
<p><span style="font-size: 16px;"><strong><em>“At Nunnari Labs, our goal has always been to make advanced AI accessible, enterpriseready, and responsible. Partnering with Cogniv Technologies is a natural extension of that mission. Cogniv’s strength in cloud transformation perfectly complements our AI engineering expertise, allowing us to create solutions that are both scalable and impactful. Together, we’re building a future-ready ecosystem where cloud and AI converge to deliver real value for enterprises,” said Navaneeth Malingan, Founder &amp; CEO, Nunnari Labs.</em></strong></span></p>
<p>The timing of this collaboration reflects a broader market shift. As enterprises increasingly adopt GenAI, automation, and data-driven decision frameworks, the need for dependable infrastructure and ethical AI design has never been greater.</p>
<p>Both companies plan to launch joint solution frameworks and proof-of-concept projects in early 2026, followed by client onboarding and industry-specific AI accelerators blending innovation with accountability.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<h3>About Cogniv Technologies</h3>
<p>Cogniv Technologies is a technology consulting and services firm focused on cloud transformation, managed services, and DevOps. The company helps enterprises modernize their IT infrastructure, improve scalability, and ensure 24/7 reliability through customized cloud and automation solutions.</p>
<p>Learn more at <a href="http://www.cognivtech.com">www.cognivtech.com</a>.</p>
<h3>About Nunnari Labs</h3>
<p>Nunnari Labs is an AI-first R&amp;D and product engineering company dedicated to creating intelligent, sustainable, and human-centric technology solutions. With expertise spanning AI/ML, computer vision, MLOps, and intelligent industrial automation, the company works with global enterprises and research partners to turn advanced AI concepts into scalable business products.</p>
<p>Learn more at <a href="http://www.nunnarilabs.com">www.nunnarilabs.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/cogniv-technologies-and-nunnari-labs-announce-strategic-collaboration-to-deliver-ai-powered-cloud-solutions-for-enterprises/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>From Kitchen to Cloud: How we Modernized with AWS Elastic Container Service</title>
		<link>https://blog.cognivtech.com/from-kitchen-to-cloud-how-sanikas-restaurant-modernized-with-aws-elastic-beanstalk/</link>
					<comments>https://blog.cognivtech.com/from-kitchen-to-cloud-how-sanikas-restaurant-modernized-with-aws-elastic-beanstalk/#respond</comments>
		
		<dc:creator><![CDATA[Karthick]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 12:39:18 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=364</guid>

					<description><![CDATA[The Challenge: Building a Digital Foundation Customer team faced several hurdles at the start of their digital journey: Uncertainty around hosting platforms Scalability limitations and potential downtime Lack of automated deployment and monitoring tools Security vulnerabilities due to manual configurations These challenges threatened to delay their online launch and compromise user experience during peak hours. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>The Challenge: Building a Digital Foundation</strong></p>
<p>Customer team faced several hurdles at the start of their digital journey:</p>
<ul>
<li>Uncertainty around hosting platforms</li>
<li>Scalability limitations and potential downtime</li>
<li>Lack of automated deployment and monitoring tools</li>
<li>Security vulnerabilities due to manual configurations</li>
</ul>
<p>These challenges threatened to delay their online launch and compromise user experience during peak hours.</p>
<p><strong>The Solution: AWS Elastic Container Service + CI/CD Automation</strong></p>
<p>To overcome these obstacles, Cogniv Technologies implemented a fully automated, cloud native solution using AWS Elastic Container Service and a CI/CD pipeline</p>
<p><img decoding="async" class="alignnone size-full wp-image-480" src="https://blog.cognivtech.com/wp-content/uploads/2025/11/Screenshot-2025-12-22-182325.png" alt="" width="1280" height="749" /></p>
<p><strong>How the Partner Resolved the Customer Challenge</strong></p>
<p><strong>Designed a Fully Automated 3-Tier Architecture </strong></p>
<p>Utilized AWS CloudFormation to provision infrastructure as code. Included a secure VPC, application layer (Elastic Container Service), and database layer (Amazon RDS).</p>
<p><strong>Implemented Secure Networking:</strong></p>
<p>Deployed resources within a custom VPC for isolated and secure network access.Placed the RDS database in private subnets to protect sensitive data.</p>
<p><strong>Deployed Scalable Application Hosting:</strong></p>
<p>Used AWS Elastic Container Service to host the Dockerized application. Enabled automatic scaling, load balancing, and health monitoring.</p>
<p><strong> Integrated GitHub for Source Control:</strong></p>
<p>Enabled seamless version control and collaboration. Ensured traceability and transparency in code change</p>
<p><strong>Established CI/CD Pipeline:</strong></p>
<p>Configured AWS CodePipeline and CodeBuild for automated builds and deployments. Enabled continuous integration and delivery with minimal manual intervention.</p>
<p><strong>Streamlined Deployment Workflow:</strong></p>
<p>Automated the entire release process from code commit to production deployment. Reduced downtime and manual errors, ensuring consistent and reliable updates.</p>
<p><strong>Enhanced Operational Efficiency:</strong></p>
<p>Eliminated manual overhead, allowing the team to focus on innovation. Improved deployment speed and system reliability.</p>
<p><strong>DevOps in Action: Practices That Powered the Transformation</strong></p>
<p>Version Control: GitHub integration enabled seamless collaboration and change tracking.</p>
<p>CI/CD Pipelines: Automated deployment workflows ensured rapid, reliable software delivery.</p>
<p>Infrastructure as Code (IaC): AWS CloudFormation enabled consistent, version-controlled environment provisioning.</p>
<p><strong>Technical Results:</strong></p>
<p>&#8211; 85% faster deployments  from days to minutes<br />
&#8211; Zero downtime during deployments<br />
&#8211; 90% reduction in human error through automation<br />
&#8211; 100% infrastructure consistency with IaC<br />
&#8211; Improved scalability during peak traffic<br />
&#8211; Shift from maintenance to innovation for the dev team</p>
<p>&nbsp;</p>
<p><strong>Lessons Learned:</strong></p>
<p>&#8211; Plan network architecture early to ensure security and scalability.</p>
<p>&#8211; Automate everything — from infrastructure to deployments.</p>
<p>&#8211; Use managed services to reduce complexity and operational overhead.</p>
<p>&#8211; Integrate monitoring and security from the start.</p>
<p><strong>About the Partner: Cogniv Technologies</strong></p>
<p>Cogniv Technologies is an AWS Advanced Tier Partner specializing in:</p>
<p>&#8211; Cloud-native architecture</p>
<p>&#8211; DevOps and CI/CD automation</p>
<p>&#8211; FinOps and cloud cost optimization</p>
<p>Their customer-first approach and deep AWS expertise made them the ideal partner for Sanika’s digital transformation.</p>
<p><strong>Conclusion:</strong></p>
<p>Customer successfully transitioned from a manually managed setup to a modern, scalable cloud platform. With AWS and Cogniv Technologies, they now deliver a seamless digital experience that matches the excellence of their in-person dining  setting the stage<br />
for future growth and innovation.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/from-kitchen-to-cloud-how-sanikas-restaurant-modernized-with-aws-elastic-beanstalk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Transforming EdTech with AWS: How Customer Scaled with Microservices on Amazon EKS</title>
		<link>https://blog.cognivtech.com/transforming-edtech-with-aws-how-vidysea-scaled-with-microservices-on-amazon-eks/</link>
					<comments>https://blog.cognivtech.com/transforming-edtech-with-aws-how-vidysea-scaled-with-microservices-on-amazon-eks/#respond</comments>
		
		<dc:creator><![CDATA[adminaravind]]></dc:creator>
		<pubDate>Mon, 17 Nov 2025 16:33:23 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[CICD]]></category>
		<category><![CDATA[EKS]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=324</guid>

					<description><![CDATA[In the fast-evolving world of EdTech, agility, scalability, and reliability are non-negotiable. Vidysea, a platform dedicated to guiding professionals through their higher education journey, recognized this early. As their user base expanded and application complexity grew, they needed a robust infrastructure to match their ambitions. Here&#8217;s how they transformed their architecture with the help of [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In the fast-evolving world of EdTech, agility, scalability, and reliability are non-negotiable. Vidysea, a platform dedicated to guiding professionals through their higher education journey, recognized this early. As their user base expanded and application complexity grew, they needed a robust infrastructure to match their ambitions. Here&#8217;s how they transformed their architecture with the help of AWS and Cogniv Technologies.</p>
<h2>The Challenge: From Static Hosting to Scalable Infrastructure</h2>
<p>Initially hosted on Vercel and later AWS Amplify, Vidysea faced growing pains:<br />
&#8211; Performance bottlenecks during peak usage<br />
&#8211; Limited autoscaling for backend services<br />
&#8211; Manual infrastructure management leading to downtime<br />
&#8211; Deployment inefficiencies slowing down feature delivery</p>
<p>These challenges highlighted the need for a more scalable, resilient, and automated solution.</p>
<h2>The Solution: Migrating to Amazon EKS with Cogniv Technologies</h2>
<p>To meet these demands, Vidysea partnered with Cogniv Technologies, an AWS Advanced Tier Partner, to re-architect their platform using Amazon Elastic Kubernetes Service (EKS).</p>
<h3>Key Components of the Solution:</h3>
<p>&#8211; <strong>Microservices Architecture:</strong> Transitioned from monolithic to containerized microservices using Docker and EKS.<br />
&#8211; <strong>CI/CD Pipelines:</strong> Automated deployments with GitHub-integrated pipelines for faster, error-free releases.<br />
&#8211; <strong>Container Registry:</strong> Used Amazon ECR for secure and scalable image storage.<br />
&#8211; <strong>Database Management:</strong> Leveraged Amazon RDS for PostgreSQL to ensure high availability and simplified scaling.<br />
&#8211; <strong>Security &amp; Monitoring:</strong> Integrated AWS WAF, CloudWatch, and ALB for robust security and observability</p>
<p><strong>Solution and AWS Architecture Design:</strong></p>
<p>Cogniv Technologies collaborated closely with Vidysea to devise a customized product strategy aligned with their DevOps goals. Harnessing AWS&#8217;s best practices, we architected a resilient infrastructure to support Vidysea&#8217; microservices architecture and facilitate future enhancements.</p>
<p><img decoding="async" class="alignnone size-full wp-image-325" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/Vidysea-Architecture-1.jpg" alt="" width="841" height="751" /></p>
<p>&nbsp;</p>
<p><strong>Key DevOps Practices Implemented:</strong></p>
<p><strong>Version Control</strong></p>
<ul>
<li>Integrated GitHub for managing application code.</li>
<li>Enabled seamless collaboration and meticulous change tracking.</li>
<li>Ensured transparency and accountability throughout development.</li>
</ul>
<h3>Continuous Integration (CI) and Continuous Delivery (CD)</h3>
<ul>
<li>Established CI/CD pipelines for automated build, package, and deployment.</li>
<li>Enabled rapid and reliable delivery of microservices to Amazon EKS.</li>
<li>Reduced manual errors and accelerated release cycles.</li>
</ul>
<h3>Containerization</h3>
<ul>
<li>Adopted Docker for consistent deployment environments.</li>
<li>Used Amazon EKS for scalable container orchestration.</li>
<li>Stored Docker images in AWS Elastic Container Registry (ECR) for simplified deployment and environment consistency.</li>
</ul>
<h2>AWS Services in Action</h2>
<table width="0">
<tbody>
<tr>
<td width="288">                               Service</td>
<td width="371">                                         Role</td>
</tr>
<tr>
<td width="288">                  Amazon EKS</td>
<td width="371">Orchestrates containerized workloads with high availability</td>
</tr>
<tr>
<td width="288">                  Amazon RDS</td>
<td width="371">Manages PostgreSQL databases with automated backups</td>
</tr>
<tr>
<td width="288">                  Amazon S3</td>
<td width="371">Stores application assets and backups securely</td>
</tr>
<tr>
<td width="288">                  Amazon EC2</td>
<td width="371">Provides scalable compute resources</td>
</tr>
<tr>
<td width="288">                  AWS WAF</td>
<td width="371">Protects against common web exploits</td>
</tr>
<tr>
<td width="288">                  Amazon ECR</td>
<td width="371">Hosts Docker images for seamless deployment</td>
</tr>
<tr>
<td width="288">                  CloudWatch</td>
<td width="371">Monitors application health and performance</td>
</tr>
</tbody>
</table>
<h2>Technical Results</h2>
<p>The transformation delivered measurable improvements:<br />
&#8211; 90% reduction in deployment time<br />
&#8211; 2x increase in deployment frequency (up to 10/day)<br />
&#8211; 75% less manual intervention, reducing human error<br />
&#8211; 20 hours/week saved per engineer<br />
&#8211; 60% faster time-to-market for new features</p>
<p>&nbsp;</p>
<p><em><strong><span style="font-size: 18px;" data-olk-copy-source="MessageBody"><span style="font-size: 24px;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<span style="font-family: 'arial black', 'avant garde';">&#8220;</span></span></span></strong></em></p>
<p><em><strong><span style="font-size: 18px;" data-olk-copy-source="MessageBody">Cogniv Tech transformed our deployment process &#8211; fast, reliable, and always available when needed   </span></strong></em></p>
<p><strong style="font-size: 18px; color: #d61e3a;"><em>-Manish Kumar </em></strong></p>
<p><strong style="font-size: 18px; color: #d61e3a; margin-bottom: -10px;"><em><span style="font-size: 18px;">Director ,Vidysea</span> </em></strong></p>
<p>&nbsp;</p>
<h2>Lessons Learned</h2>
<p>&#8211; Containerization is key: Moving to Docker and EKS enabled better scalability and fault isolation.<br />
&#8211; Automation accelerates innovation: CI/CD pipelines drastically improved deployment speed and reliability.<br />
&#8211; Cloud-native architecture pays off: The shift to microservices empowered Vidysea to respond faster to user needs and security threats.</p>
<h2>Cost Comparison: Amplify vs. EKS</h2>
<p>&nbsp;</p>
<table>
<tbody>
<tr>
<td width="192">Setup</td>
<td width="192">Monthly Cost</td>
<td width="192">Annual Cost</td>
</tr>
<tr>
<td width="192">AWS Amplify (Legacy)</td>
<td width="192">$74.71</td>
<td width="192">—</td>
</tr>
<tr>
<td width="192">AWS EKS (New)</td>
<td width="192">$383.74</td>
<td width="192">$4,604.88</td>
</tr>
</tbody>
</table>
<h2>About the Partner: Cogniv Technologies</h2>
<p>Cogniv Technologies brings deep AWS expertise, industry knowledge, and a customer-first approach. As an AWS Advanced Tier Partner they specialize in:<br />
&#8211; Cloud-native architecture<br />
&#8211; DevOps and automation<br />
&#8211; FinOps and cost optimization</p>
<h2>Conclusion</h2>
<p>Vidysea’s journey from static hosting to a dynamic, microservices-driven platform on AWS EKS is a testament to the power of cloud transformation. With Cogniv Technologies as their guide, they’ve built a future-ready platform that scales with their mission: empowering learners worldwide.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/transforming-edtech-with-aws-how-vidysea-scaled-with-microservices-on-amazon-eks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Centralized Code Quality Management with SonarQube: Installation and GitHub Integration</title>
		<link>https://blog.cognivtech.com/centralized-code-quality-management-with-sonarqube-installation-and-github-integration/</link>
					<comments>https://blog.cognivtech.com/centralized-code-quality-management-with-sonarqube-installation-and-github-integration/#respond</comments>
		
		<dc:creator><![CDATA[Karthick]]></dc:creator>
		<pubDate>Fri, 07 Nov 2025 06:31:21 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=387</guid>

					<description><![CDATA[Executive Summary: In today’s fast-paced software development environment, maintaining high code quality and security is vital. SonarQube is an industry-leading continuous inspection tool that enables teams to automatically detect coding issues and vulnerabilities early in the development cycle. This article details a step-by-step guide to installing and setting up SonarQube with PostgreSQL on Ubuntu 20.04 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1 id="executive-summary" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Executive Summary:</span></h1>
<p>In today’s fast-paced software development environment, maintaining high code quality and security is vital. SonarQube is an industry-leading continuous inspection tool that enables teams to automatically detect coding issues and vulnerabilities early in the development cycle. This article details a step-by-step guide to installing and setting up SonarQube with PostgreSQL on Ubuntu 20.04 LTS, empowering your development teams to improve code quality through automated analysis.</p>
<h1 id="challenges" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Challenges:</span></h1>
<p>As development teams grow, so does the complexity of codebases. Manual reviews become less effective at scaling code quality controls, and issues such as technical debt, code smells, security vulnerabilities, and inconsistent coding practices can go unnoticed until they cause significant setbacks. Teams also need tools that integrate seamlessly with their existing CI/CD pipelines and version control systems, such as GitHub.</p>
<h1 id="scenario" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Scenario:</span></h1>
<p>Your company’s DevOps team is tasked with implementing a centralized code quality solution that integrates with your development workflows, particularly GitHub, and offers automated, detailed feedback on every code push. The goal is to set up a robust and scalable instance of SonarQube, making it easy for developers to analyze their projects and take action on identified issues.</p>
<h1 id="problem" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Problem:</span></h1>
<p class="my-0 py-2">Without an effective system for continuous code analysis:</p>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2">Teams lack visibility into code quality.</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2">Security vulnerabilities can slip into production code.</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2">It’s difficult to enforce coding standards and best practices.</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2">Manual code reviews become a bottleneck.</p>
</li>
</ul>
<h1 id="solution" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Solution:</span></h1>
<p>Setting up a dedicated SonarQube server using Docker or a regular instance provides an automated and user-friendly platform for code quality management. Connected with a PostgreSQL database, SonarQube will continuously analyze code, identify bugs, code smells, and security flaws, and report them via a web UI accessible to your development teams</p>
<h1 id="prerequisites" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Prerequisites:</span></h1>
<p class="my-0 py-2">Before starting the installation, ensure:</p>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2"><strong>Operating System:</strong> Ubuntu 20.04 LTS (or compatible)</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2"><strong>Access Level:</strong> Sudo privileges</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2"><strong>Network Access:</strong> Ability to access GitHub and download packages</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2"><strong>Java:</strong> OpenJDK 17 must be installed</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2"><strong>System Resources:</strong> At least 2 vCPUs and 4GB RAM for SonarQube</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2"><strong>Other:</strong> Internet connection, wget, unzip, and adequate disk spac</p>
</li>
</ul>
<h1 id="implementation" class="font-display first:mt-xs mb-2 mt-4 text-lg font-[500] leading-[1.5em] lg:text-xl dark:font-[475]"><span style="font-size: 20px;">Implementation:</span></h1>
<p>Below is a step-by-step breakdown for setting up SonarQube with PostgreSQL:</p>
<p><strong>1. Update System Packages</strong></p>
<p><span class="token token">sudo</span> <span class="token token">apt-get</span> update</p>
<p><span class="token token">sudo</span> <span class="token token">apt-get</span> upgrade -y</p>
<p><strong>2. Install Java (OpenJDK 17)</strong></p>
<p><span class="token token">sudo</span> <span class="token token">apt-get</span> <span class="token token">install</span> openjdk-17-jdk -y</p>
<p>java -version</p>
<p><strong>3. Install wget &amp; unzip</strong></p>
<p>sudo apt-get install wget unzip -y</p>
<p><strong>4. Install &amp; Configure PostgreSQL</strong></p>
<p>Add PostgreSQL repository and install:</p>
<p>sudo sh -c &#8216;echo &#8220;deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main&#8221; &gt;&gt; /etc/apt/sources.list.d/pgdg.list&#8217;<br />
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O &#8211; | sudo apt-key add &#8211;<br />
sudo apt-get install postgresql postgresql-contrib -y</p>
<p>Start &amp; enable service:</p>
<p>sudo systemctl start postgresql<br />
sudo systemctl enable postgresql</p>
<p>Create a SonarQube user and database:</p>
<p><!--StartFragment --></p>
<p><span class="cf0">sudo</span><span class="cf0"> -u </span><span class="cf0">postgres</span> <span class="cf0">createuser</span><span class="cf0"> sonar</span></p>
<p><span class="cf0">sudo</span><span class="cf0"> -u </span><span class="cf0">postgres</span> <span class="cf0">psql</span></p>
<p><span class="cf0">ALTER USER sonar WITH ENCRYPTED PASSWORD &#8216;sonar@123&#8217;;</span></p>
<p><span class="cf0">CREATE DATABASE </span><span class="cf0">sonarqube</span><span class="cf0"> OWNER sonar;</span></p>
<p><span class="cf0">GRANT ALL PRIVILEGES ON DATABASE </span><span class="cf0">sonarqube</span><span class="cf0"> TO sonar;</span></p>
<p><span class="cf0">\q</span><!--EndFragment --></p>
<p><strong>5. Download &amp; Install SonarQube</strong></p>
<p>cd /opt<br />
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.0.65466.zip<br />
sudo unzip sonarqube-9.9.0.65466.zip<br />
sudo mv sonarqube-9.9.0.65466 sonarqube</p>
<p><strong>6. Configure SonarQube</strong></p>
<p>Create user and group, set permissions:</p>
<p>sudo groupadd sonar<br />
sudo useradd -c &#8220;SonarQube user&#8221; -d /opt/sonarqube -g sonar sonar<br />
sudo chown -R sonar:sonar /opt/sonarqube</p>
<p>Edit SonarQube config for database access:</p>
<p># In /opt/sonarqube/conf/sonar.properties<br />
sonar.jdbc.username=sonar<br />
sonar.jdbc.password=sonar@123<br />
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube</p>
<p>Set RUN_AS_USER in sonar.sh:</p>
<p>RUN_AS_USER=sonar</p>
<p><strong>7. Start SonarQube</strong></p>
<p>sudo su sonar<br />
cd /opt/sonarqube/bin/linux-x86-64/<br />
./sonar.sh start</p>
<p>Check logs and status as needed.</p>
<p><strong>8. Set Up as a Systemd Service</strong></p>
<p>Create and edit <code>/etc/systemd/system/sonar.service</code>:</p>
<p>[Unit]<br />
Description=SonarQube service<br />
After=syslog.target network.target</p>
<p>[Service]<br />
Type=forking</p>
<p>ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start<br />
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop</p>
<p>User=sonar<br />
Group=sonar<br />
Restart=always</p>
<p>LimitNOFILE=65536<br />
LimitNPROC=4096</p>
<p>[Install]<br />
WantedBy=multi-user.target</p>
<p><strong>9. Access SonarQube Web UI</strong></p>
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Navigate to <code>http://&lt;your-server-ip&gt;:9000</code> in your browser.</p>
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Default credentials:</p>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Username: <code>admin</code></p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">Password: <code>admin</code><br />
(Update the password at first login!)</li>
</ul>
<h2 class="mb-2 mt-4 text-base font-[500] first:mt-0 dark:font-[475]"><span style="font-size: 20px;"><img loading="lazy" decoding="async" class="size-full wp-image-388 alignleft" src="https://blog.cognivtech.com/wp-content/uploads/2025/08/Screenshot-2025-08-07-114610.png" alt="" width="572" height="251" /></span></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-389" src="https://blog.cognivtech.com/wp-content/uploads/2025/08/Screenshot-2025-08-07-115044.png" alt="" width="747" height="406" /></p>
<h2 class="mb-2 mt-4 text-base font-[500] first:mt-0 dark:font-[475]"><span style="font-size: 20px;">Integrating with GitHub</span></h2>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Create a new project in SonarQube.</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Generate an authentication token via the UI.</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">In your GitHub repository&#8217;s <strong>Settings &gt; Secrets</strong>, add:</p>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2"><code>SONAR_TOKEN</code> (your generated token)</p>
</li>
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2"><code>SONAR_HOST_URL</code> (e.g., <code>http://&lt;your-server-ip&gt;:9000</code>)</p>
</li>
</ul>
</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-390" src="https://blog.cognivtech.com/wp-content/uploads/2025/08/Screenshot-2025-08-07-115346.png" alt="" width="807" height="332" /></p>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Add a <code>sonar-project.properties</code> file to your repository.</p>
</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-391" src="https://blog.cognivtech.com/wp-content/uploads/2025/08/Screenshot-2025-08-07-115508.png" alt="" width="744" height="179" /></p>
<ul class="marker:text-quiet list-disc">
<li class="py-0 my-0 prose-p:pt-0 prose-p:pb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:pb-2 [&amp;&gt;p]:my-0">
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Add or update your GitHub Actions workflow (<code>.github/workflows/build.yml</code>) to include SonarQube analysis.</p>
</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-392" src="https://blog.cognivtech.com/wp-content/uploads/2025/08/Screenshot-2025-08-07-115652.png" alt="" width="831" height="395" /></p>
<p class="my-0 py-2 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2">Every push to your main branch will now trigger code analysis, with results available in the SonarQube dashboard.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-393" src="https://blog.cognivtech.com/wp-content/uploads/2025/08/Screenshot-2025-08-07-115811.png" alt="" width="822" height="409" /></p>
<p><span style="font-size: 20px;"><strong>Final Thoughts:</strong></span></p>
<p>With this setup, your teams gain immediate, actionable feedback on code quality and security, promoting cleaner code and faster delivery. This SonarQube server becomes a cornerstone of your DevOps toolchain, catalyzing better collaboration and continuous improvement.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/centralized-code-quality-management-with-sonarqube-installation-and-github-integration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Manual Snapshot in AWS OpenSearch</title>
		<link>https://blog.cognivtech.com/manual-snapshot-implementation-in-amazon-opensearch-service/</link>
					<comments>https://blog.cognivtech.com/manual-snapshot-implementation-in-amazon-opensearch-service/#comments</comments>
		
		<dc:creator><![CDATA[Karthick]]></dc:creator>
		<pubDate>Sat, 01 Nov 2025 07:16:18 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[Manualsnapshot]]></category>
		<category><![CDATA[Opensearch]]></category>
		<guid isPermaLink="false">https://blog.cognivtech.com/?p=335</guid>

					<description><![CDATA[Executive:   Amazon OpenSearch Service provides robust mechanisms for snapshot backups, which are essential for disaster recovery, migrations, and compliance. While automated snapshots are handled internally by AWS, there are use cases where manual snapshots become necessary to meet custom requirements, especially during cross-cloud migrations or external recovery strategies.  The Challenge:  One of our clients [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4><b><span data-contrast="auto">Executive: </span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}"> </span></h4>
<p><span data-contrast="auto">Amazon OpenSearch Service provides robust mechanisms for snapshot backups, which are essential for disaster recovery, migrations, and compliance. While automated snapshots are handled internally by AWS, there are use cases where manual snapshots become necessary to meet custom requirements, especially during cross-cloud migrations or external recovery strategies.</span><span data-ccp-props="{}"> </span></p>
<h4><b><span data-contrast="auto">The Challenge:</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}"> </span></h4>
<p><span data-contrast="auto">One of our clients faced a limitation with OpenSearch’s def</span><span data-contrast="auto">ault automated snapshot feature.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h4><b><span data-contrast="auto">Scenario:</span></b></h4>
<p><span data-contrast="auto"> The client was preparing to migrate from AWS to Azure, and while OpenSearch automated snapshots were available, they did not meet the granularity or portability required for such a transition.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h4><b><span data-contrast="auto">Problem:</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></h4>
<p><span data-contrast="auto">Automated snapshots are stored in an AWS-managed repository. </span><span data-contrast="auto">Direct access or export of these snapshots outside AWS is not supported.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span><span data-contrast="auto">The client needed full control over the snapshots, including the ability to store and manage them in a customer-owned S3 bucket.</span></p>
<h4><strong>The Solution:</strong></h4>
<p><span data-contrast="auto">To overcome this limitation, Cogniv implemented a manual snapshot strategy using OpenSearch&#8217;s snapshot APIs, with the snapshots stored in a custom-managed Amazon S3 bucket.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Full ownership and visibility of backup data</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">Greater flexibility for cross-cloud migration</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">The ability to script, schedule, and manage snapshots as needed</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<h4><strong>Prerequisites:</strong></h4>
<ul data-start="145" data-end="537">
<li data-start="145" data-end="244">
<p data-start="147" data-end="244">An S3 bucket must be created in the same AWS region where the OpenSearch domain is provisioned.</p>
</li>
<li data-start="245" data-end="324">
<p data-start="247" data-end="324">An EC2 instance should be running in the same VPC as the OpenSearch domain.</p>
</li>
<li data-start="325" data-end="422">
<p data-start="327" data-end="422">The EC2 instance must have an IAM role attached with permissions to access S3 and OpenSearch.</p>
</li>
<li data-start="423" data-end="537">
<p data-start="425" data-end="537">Access to the Dev Tools section in the OpenSearch Dashboard is required to register and trigger snapshots.</p>
</li>
</ul>
<h4><b><span data-contrast="auto">Implementation of manual snapshot: </span></b><span data-ccp-props="{}"> </span></h4>
<h4><b><span data-contrast="auto">Step 1 : Creating a required IAM Role </span></b><span data-ccp-props="{}"> </span></h4>
<p><b><span data-contrast="auto">Create an IAM role with below two policies  </span></b><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">         </span></b><span data-contrast="auto">Policy Name: PutToOpenSearchAndPassRolePolicy &amp; </span>S3FullAccessToSpecificBucketPolicy</p>
<p><b><span data-contrast="auto">Policy 1 &#8211; PutToOpenSearchAndPassRolePolicy</span></b><span data-contrast="auto">                       </span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">Description:</span></b><br />
<span data-contrast="auto"> This policy allows a principal to upload data to an Amazon OpenSearch Service domain using HTTP PUT and to pass a designated IAM role. This is typically used in scenarios where a service needs to write logs or data to OpenSearch and assumes a role for execution.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-ccp-props="{}"> </span><span data-contrast="auto">This policy is for interacting with an Amazon OpenSearch domain and passing an IAM role:</span><br />
<span data-contrast="auto">{</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;Version&#8221;: &#8220;2012-10-17&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;Statement&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Effect&#8221;: &#8220;Allow&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Action&#8221;: &#8220;iam:PassRole&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Resource&#8221;: &#8220;arn:aws:iam::&lt;account-id&gt;:role/&lt;role-name&gt;&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        },</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Effect&#8221;: &#8220;Allow&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Action&#8221;: &#8220;es:ESHttpPut&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Resource&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;arn:aws:es:&lt;region&gt;:&lt;account-id&gt;:domain/&lt;domain-name&gt;/*&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        }</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">}</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="none">Policy-2 : S3FullAccessToSpecificBucketPolicy</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:319,&quot;335559739&quot;:319}"> </span></p>
<p><b><span data-contrast="auto">Description:</span></b><br />
<span data-contrast="auto"> Grants permission to list, read, upload, and delete objects in a specific Amazon S3 bucket. This is commonly used for services or applications that manage file storage within a single bucket.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">{</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;Version&#8221;: &#8220;2012-10-17&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;Statement&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Effect&#8221;: &#8220;Allow&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Action&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;s3:ListBucket&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            ],</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Resource&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;arn:aws:s3:::&lt;bucket-name&gt;&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        },</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Effect&#8221;: &#8220;Allow&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Action&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;s3:GetObject&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;s3:PutObject&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;s3:DeleteObject&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            ],</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Resource&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;arn:aws:s3:::&lt;bucket-name&gt;/*&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        }</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">}</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            </span></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-336" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/IAM-policy.png" alt="" width="1477" height="109" /></p>
<h4><b><span data-contrast="auto"> Step 2 : Update the trust policy of the created IAM role</span></b><span data-ccp-props="{}"> </span></h4>
<p><span data-contrast="auto">{</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;Version&#8221;: &#8220;2012-10-17&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;Statement&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Sid&#8221;: &#8220;&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Effect&#8221;: &#8220;Allow&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Principal&#8221;: {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                &#8220;Service&#8221;: [</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                    &#8220;es.amazonaws.com&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                    &#8220;ec2.amazonaws.com&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">                ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            },</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">            &#8220;Action&#8221;: &#8220;sts:AssumeRole&#8221;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        }</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    ]</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">}</span><span data-ccp-props="{}"> </span></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-337" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/Trust-relation.png" alt="" width="1541" height="548" /></p>
<h4><b><span data-contrast="auto">Step 3 : Mapping IAM Role ARN in OpenSearch Dashboard</span></b><span data-ccp-props="{}"> </span></h4>
<p><span data-contrast="auto">     To allow OpenSearch to use the IAM role for snapshot operations, map the created IAM Role ARN to the relevant security roles within the OpenSearch Dashboard.</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">Navigation Path: </span></b><span data-contrast="auto">Menu → Management → Security → Roles</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">Instructions:</span></b><span data-ccp-props="{&quot;335559685&quot;:0}"> </span></p>
<p><b><span data-contrast="auto">Map to manage_snapshots Role:</span></b></p>
<ol>
<li><span data-contrast="auto">In the Roles view, search for the role named manage_snapshots[predefined role]</span></li>
</ol>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-338" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/Mapped-users-1.png" alt="" width="1319" height="561" /></p>
<p><span class="NormalTextRun SCXW32386493 BCX0">     2. Select the role and </span><span class="NormalTextRun SCXW32386493 BCX0">locate</span><span class="NormalTextRun SCXW32386493 BCX0"> the section </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW32386493 BCX0">titled </span><span class="NormalTextRun SCXW32386493 BCX0">Mapped users</span></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-339" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/Mapped-users-2.png" alt="" width="1913" height="803" /></p>
<p>3. <span class="TextRun SCXW49050206 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW49050206 BCX0">Click Edit and add the ARN of the IAM role created for snapshot access.</span></span><span class="EOP SCXW49050206 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-342" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/mapped-user-3-1.png" alt="" width="991" height="467" /></p>
<p><b><span data-contrast="auto">Map to all_access Role:</span></b><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="%2." data-font="Calibri" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559683&quot;:1,&quot;335559684&quot;:-1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,4,46],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%2.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="2"><span data-contrast="auto">Similarly, search for the role named all_access.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="%2." data-font="Calibri" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559683&quot;:1,&quot;335559684&quot;:-1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,4,46],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%2.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="2"><span data-contrast="auto">Select the role and locate both the Mapped users and Backend roles sections.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="%2." data-font="Calibri" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559683&quot;:1,&quot;335559684&quot;:-1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,4,46],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%2.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="2"><span data-contrast="auto">Click Edit for each section and add the same IAM Role ARN.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></li>
</ul>
<ul>
<li data-leveltext="%2." data-font="Calibri" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559683&quot;:1,&quot;335559684&quot;:-1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,4,46],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%2.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="2"><span data-contrast="auto">Save the changes.</span></li>
</ul>
<p><span class="TextRun SCXW203657559 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW203657559 BCX0">This mapping ensures that the IAM role has the necessary permissions to interact with OpenSearch and manage snapshot operations via the REST API or CLI.</span></span></p>
<h4><b><span data-contrast="auto">Step 4 : Create a s3 bucket on which the manual snapshot should be stored and keep the bucket as public</span></b><span data-ccp-props="{}"> </span></h4>
<h4><b><span data-contrast="auto">Step 5 : Register OpenSearch Snapshot Repository via Python</span></b><span data-contrast="auto"> </span></h4>
<p><span data-contrast="auto">This guide describes how to install the required dependencies and execute a Python script to register a snapshot repository in the OpenSearch Dashboard via its REST API.</span></p>
<p><span data-contrast="auto"><strong>Installation Commands :</strong> </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Run the following commands on your EC2 or server to set up the environment:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">sudo yum install -y python3</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">sudo yum install -y python3-pip </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">pip3 install boto3</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">pip3 install requests</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">pip3 install requests_aws4auth</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">Script : </span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">This script uses the boto3, requests, and requests_aws4auth libraries to register an S3 snapshot repository in Amazon OpenSearch Service.</span><span data-ccp-props="{}"> </span></p>
<p><span data-ccp-props="{}">i</span><span data-contrast="auto">mport boto3</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">import requests</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">from requests_aws4auth import AWS4Auth</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto"> host = &#8216;</span><a href="https://%3Cyour-opensearch-domain-endpoint%3E/"><span data-contrast="auto">https://&lt;your-opensearch-domain-endpoint&gt;/</span></a><span data-contrast="auto">&#8216; </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">region = &#8216;&lt;aws-region&gt;&#8217;                              </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">service = &#8216;es&#8217;</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">credentials = boto3.Session().get_credentials()</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">awsauth = AWS4Auth(</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    credentials.access_key,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    credentials.secret_key,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    region,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    service,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    session_token=credentials.token</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">)</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto"> path = &#8216;/_snapshot/&lt;repository-name&gt;&#8217; </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">url = host + path</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto"> payload = {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;type&#8221;: &#8220;s3&#8221;,</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    &#8220;settings&#8221;: {</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        &#8220;bucket&#8221;: &#8220;&lt;your-s3-bucket-name&gt;&#8221;,                 </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        &#8220;region&#8221;: &#8220;&lt;aws-region&gt;&#8221;,                          </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">        &#8220;role_arn&#8221;: &#8220;arn:aws:iam::&lt;account-id&gt;: role/&lt;role-name&gt;&#8221;  </span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">    }</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">}</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">headers = {&#8220;Content-Type&#8221;: &#8220;application/json&#8221;}</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">r = requests.put(url, auth=awsauth, json=payload, headers=headers)</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto"> print(r.status_code)</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">print(r.text)</span></p>
<p><span data-contrast="auto">Run this script to register OpenSearch snapshot Repository</span><span data-ccp-props="{}"> </span></p>
<h3><b><span data-contrast="auto">Step 6 : Execute a Manual Snapshot Backup</span></b><span data-ccp-props="{}"> </span></h3>
<p><span data-contrast="auto">To initiate a manual snapshot backup of your OpenSearch indices, use the following REST API command from the OpenSearch Dashboard (Dev Tools )</span></p>
<p><b><span data-contrast="auto">Command Syntax: </span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">PUT /_snapshot/&lt;your-snapshot-repo-name&gt;/&lt;snapshot-name&gt;</span><span data-ccp-props="{}"> </span></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-343" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/Snapshot-command.png" alt="" width="1455" height="638" /></p>
<p><span class="TextRun SCXW154576574 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW154576574 BCX0">To check the </span><span class="NormalTextRun SCXW154576574 BCX0">status,</span><span class="NormalTextRun SCXW154576574 BCX0"> use the following command and run it in the dev tools</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW154576574 BCX0"><span class="SCXW154576574 BCX0"> </span><br class="SCXW154576574 BCX0" /></span><span class="LineBreakBlob BlobObject DragDrop SCXW154576574 BCX0"><span class="SCXW154576574 BCX0"> </span><br class="SCXW154576574 BCX0" /></span><strong><span class="TextRun SCXW154576574 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW154576574 BCX0">Command Syntax: </span></span></strong></p>
<p><span class="TextRun SCXW154576574 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW154576574 BCX0"> GET /_snapshot/_status</span></span><span class="EOP SCXW154576574 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-344" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/Status.png" alt="" width="1919" height="776" /></p>
<p><span class="TextRun SCXW70665138 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW70665138 BCX0">After running these command manual snapshot will be created and stored in the created s3 </span><span class="NormalTextRun SCXW70665138 BCX0">bucket</span></span><span class="EOP SCXW70665138 BCX0" data-ccp-props="{}"> </span></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-345" src="https://blog.cognivtech.com/wp-content/uploads/2025/06/s3-bucket.png" alt="" width="1487" height="627" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.cognivtech.com/manual-snapshot-implementation-in-amazon-opensearch-service/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
