<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nehemiah Cheburet</title>
    <description>The latest articles on DEV Community by Nehemiah Cheburet (@nehemiah_cheburet_298053c).</description>
    <link>https://dev.to/nehemiah_cheburet_298053c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3663682%2F3acb081f-a849-4e0f-b0ec-ae1bb39025b0.png</url>
      <title>DEV Community: Nehemiah Cheburet</title>
      <link>https://dev.to/nehemiah_cheburet_298053c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nehemiah_cheburet_298053c"/>
    <language>en</language>
    <item>
      <title>How a Tier-1 Bank Can Use AWS Managed Services Without Losing Cloud Exit Optionality</title>
      <dc:creator>Nehemiah Cheburet</dc:creator>
      <pubDate>Thu, 30 Jul 2026 19:46:54 +0000</pubDate>
      <link>https://dev.to/nehemiah_cheburet_298053c/how-a-tier-1-bank-can-use-aws-managed-services-without-losing-cloud-exit-optionality-ek3</link>
      <guid>https://dev.to/nehemiah_cheburet_298053c/how-a-tier-1-bank-can-use-aws-managed-services-without-losing-cloud-exit-optionality-ek3</guid>
      <description>&lt;p&gt;Cloud migration is usually assessed through security, availability, performance and cost. Portability often comes later, when an organisation needs to change providers, satisfy a regulator or renegotiate a major contract.&lt;/p&gt;

&lt;p&gt;For KenyaBank, portability must be designed in from the start.&lt;/p&gt;

&lt;p&gt;KenyaBank is a Tier-1 Kenyan commercial bank serving about 4.2 million customers through 68 branches. It is modernising a legacy core banking environment running on Oracle WebLogic and Oracle Database in its Westlands data centre. The target architecture introduces AWS services such as Amazon Aurora PostgreSQL, Amazon DynamoDB, Amazon EventBridge, Amazon MSK, AWS IAM Identity Center, AWS Systems Manager and AWS CloudFormation.&lt;/p&gt;

&lt;p&gt;These services reduce infrastructure work and speed up delivery, but each one creates a different level of AWS dependency.&lt;/p&gt;

&lt;p&gt;The useful question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does the architecture contain vendor lock-in?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Almost every cloud architecture does.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is the lock-in understood, controlled and justified by the business value it provides?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This article reviews five AWS-specific dependencies in KenyaBank's target architecture, estimates the effort required to replace each one and assigns an overall portability score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current and Target Context
&lt;/h2&gt;

&lt;p&gt;KenyaBank's current environment includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A monolithic Java EE core banking application&lt;/li&gt;
&lt;li&gt;Oracle WebLogic application servers&lt;/li&gt;
&lt;li&gt;A 3.8 TB Oracle 11g database&lt;/li&gt;
&lt;li&gt;A legacy internet banking application&lt;/li&gt;
&lt;li&gt;Local teller servers in 68 branches&lt;/li&gt;
&lt;li&gt;On-premises Microsoft Active Directory&lt;/li&gt;
&lt;li&gt;MPLS connectivity between branches and the Westlands data centre&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The target architecture uses the Strangler Fig pattern to modernise gradually. Internet banking will be containerised, the database will move towards Aurora PostgreSQL, and applications will increasingly communicate through events and managed messaging services.&lt;/p&gt;

&lt;p&gt;This improves scalability and resilience, but it also introduces AWS-specific APIs, data models and operations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbqsd2x28u0sxzm36uhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbqsd2x28u0sxzm36uhy.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Vendor Lock-In Means Here
&lt;/h2&gt;

&lt;p&gt;Vendor lock-in exists when moving an application, its data or its operations away from a provider would require significant time, cost or redesign.&lt;/p&gt;

&lt;p&gt;For this assessment, lock-in is grouped into three types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API lock-in&lt;/td&gt;
&lt;td&gt;Application code depends on provider-specific SDKs, APIs, event formats or behaviours.&lt;/td&gt;
&lt;td&gt;Code built around DynamoDB &lt;code&gt;PutItem&lt;/code&gt;, &lt;code&gt;Query&lt;/code&gt; and &lt;code&gt;UpdateItem&lt;/code&gt; cannot simply point to PostgreSQL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data lock-in&lt;/td&gt;
&lt;td&gt;Data is stored in a model or format that is hard to reproduce elsewhere.&lt;/td&gt;
&lt;td&gt;DynamoDB partition keys, indexes, access patterns and consistency behaviour may need redesign.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational lock-in&lt;/td&gt;
&lt;td&gt;Deployment, identity, monitoring, patching or support processes depend on provider tools.&lt;/td&gt;
&lt;td&gt;An app may be portable, but the operating model may need to be rebuilt.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Scoring Method
&lt;/h2&gt;

&lt;p&gt;Each dependency is assessed using five factors:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Application coupling&lt;/td&gt;
&lt;td&gt;How much code uses AWS-specific APIs?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data coupling&lt;/td&gt;
&lt;td&gt;How difficult is the data to export and remodel?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure coupling&lt;/td&gt;
&lt;td&gt;Can the deployment definition run elsewhere?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational coupling&lt;/td&gt;
&lt;td&gt;Must procedures and skills be rebuilt?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replacement availability&lt;/td&gt;
&lt;td&gt;Is there a mature portable alternative?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Portability is scored from 1 to 5:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Interpretation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Highly proprietary; substantial redesign required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Significant lock-in; migration would be difficult&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Moderate lock-in; migration is feasible with planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Mostly portable; limited provider-specific changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Highly portable; based mainly on open standards&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Exit effort is expressed in engineering effort, not cost, because a financial estimate would require details such as table count, event volume, test coverage, staff rates and recovery requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependency 1: Amazon DynamoDB
&lt;/h2&gt;

&lt;p&gt;KenyaBank plans to use DynamoDB for session storage. This is attractive because DynamoDB provides managed scaling, high availability and low-latency key-value access without database server administration.&lt;/p&gt;

&lt;p&gt;It is also the strongest source of lock-in in the assessed architecture.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assessment&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lock-in type&lt;/td&gt;
&lt;td&gt;API and data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portability score&lt;/td&gt;
&lt;td&gt;2/5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estimated exit effort&lt;/td&gt;
&lt;td&gt;High, about 12-20 person-weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Justification&lt;/td&gt;
&lt;td&gt;Partly justified&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DynamoDB applications often depend on partition keys, sort keys, secondary indexes, conditional writes, TTL attributes, streams, capacity behaviour and AWS SDK models. Exporting the records is only the first step. KenyaBank would still need to design a target schema, translate data types, recreate indexes and expiration behaviour, rewrite the data-access layer, migrate active sessions, test performance and cut over without invalidating customer sessions.&lt;/p&gt;

&lt;p&gt;For ordinary session storage, DynamoDB may create more coupling than necessary. Redis, PostgreSQL or MongoDB could provide a more portable model depending on the session requirements. Redis is especially worth testing because it supports short-lived session workloads and can run across cloud and self-managed environments.&lt;/p&gt;

&lt;p&gt;Recommended control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate whether the expected session volume genuinely requires DynamoDB.&lt;/li&gt;
&lt;li&gt;Place a repository interface between application code and DynamoDB.&lt;/li&gt;
&lt;li&gt;Keep business logic dependent on &lt;code&gt;SessionRepository&lt;/code&gt;, not the AWS SDK.&lt;/li&gt;
&lt;li&gt;Maintain alternative implementations such as &lt;code&gt;RedisSessionRepository&lt;/code&gt; or &lt;code&gt;PostgreSqlSessionRepository&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This will not remove data migration work, but it reduces the amount of application code that must change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependency 2: Amazon EventBridge
&lt;/h2&gt;

&lt;p&gt;EventBridge can route business and operational events between loosely coupled components. It is useful for AWS service integration, but it can become risky if core banking events are defined around EventBridge itself.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assessment&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lock-in type&lt;/td&gt;
&lt;td&gt;API and operational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portability score&lt;/td&gt;
&lt;td&gt;2/5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estimated exit effort&lt;/td&gt;
&lt;td&gt;Medium to high, about 8-14 person-weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Justification&lt;/td&gt;
&lt;td&gt;Yes, at AWS integration boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Coupling can appear in the EventBridge event envelope, &lt;code&gt;PutEvents&lt;/code&gt; calls, event-pattern syntax, rule-to-target configuration, IAM permissions, dead-letter handling, Scheduler usage and AWS-specific target integrations.&lt;/p&gt;

&lt;p&gt;If producers publish raw EventBridge events directly, a move to Kafka, Google Cloud Pub/Sub or another event platform would require changes across many applications. Consumers may also become dependent on fields such as &lt;code&gt;source&lt;/code&gt;, &lt;code&gt;detail-type&lt;/code&gt;, &lt;code&gt;account&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt; and &lt;code&gt;detail&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The control is to separate the business event from the transport. KenyaBank should use a portable event specification such as CloudEvents and treat EventBridge as one possible delivery mechanism.&lt;/p&gt;

&lt;p&gt;Recommended control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standardise domain events using CloudEvents.&lt;/li&gt;
&lt;li&gt;Publish through an internal &lt;code&gt;EventPublisher&lt;/code&gt; interface.&lt;/li&gt;
&lt;li&gt;Keep AWS SDK calls inside adapters.&lt;/li&gt;
&lt;li&gt;Store schemas in a provider-neutral repository.&lt;/li&gt;
&lt;li&gt;Avoid placing business rules only in EventBridge rule definitions.&lt;/li&gt;
&lt;li&gt;Use EventBridge mainly for AWS-native operational events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependency 3: AWS CloudFormation
&lt;/h2&gt;

&lt;p&gt;CloudFormation gives KenyaBank repeatable AWS deployments, change tracking and automated infrastructure management. The problem is that CloudFormation templates use AWS-specific resource types such as &lt;code&gt;AWS::S3::Bucket&lt;/code&gt; and &lt;code&gt;AWS::EC2::VPC&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assessment&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lock-in type&lt;/td&gt;
&lt;td&gt;Operational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portability score&lt;/td&gt;
&lt;td&gt;2/5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estimated exit effort&lt;/td&gt;
&lt;td&gt;Medium, about 8-16 person-weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Justification&lt;/td&gt;
&lt;td&gt;Not for the long-term target state&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The deployed resources may use standard technologies, but the infrastructure definition cannot run directly on Azure, Google Cloud or on-premises platforms. Coupling increases with intrinsic functions, nested stacks, StackSets, exports, transforms, Lambda-backed custom resources and CloudFormation-specific pipelines.&lt;/p&gt;

&lt;p&gt;Moving from CloudFormation to Terraform or OpenTofu would require stack inventory, resource mapping, state import, dependency rewrites, non-production testing, production safeguards and careful retirement of stacks without deleting live resources.&lt;/p&gt;

&lt;p&gt;The risk is not rewriting YAML. The risk is transferring control of running infrastructure without accidental replacement or deletion.&lt;/p&gt;

&lt;p&gt;Recommended control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Terraform or OpenTofu for new infrastructure.&lt;/li&gt;
&lt;li&gt;Create modules around capabilities, not individual resources.&lt;/li&gt;
&lt;li&gt;Keep environment values separate from reusable modules.&lt;/li&gt;
&lt;li&gt;Stop adding new CloudFormation custom resources.&lt;/li&gt;
&lt;li&gt;Apply deletion protection and lifecycle safeguards before importing production resources.&lt;/li&gt;
&lt;li&gt;Retain CloudFormation templates until rollback is no longer needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependency 4: AWS IAM Identity Center
&lt;/h2&gt;

&lt;p&gt;IAM Identity Center provides workforce access across AWS accounts. KenyaBank plans to connect its existing Active Directory environment using SAML 2.0 and SCIM, with permission sets assigned to teams such as Banking Operations, Technology Operations, Development and Audit.&lt;/p&gt;

&lt;p&gt;This dependency is more acceptable because the identity federation interfaces are based on open standards.&lt;/p&gt;

</description>
      <category>vpc</category>
      <category>aws</category>
      <category>architecture</category>
      <category>networking</category>
    </item>
    <item>
      <title>How a Tier-1 bank can benefit from AWS-managed services without making a future cloud exit unnecessarily difficult</title>
      <dc:creator>Nehemiah Cheburet</dc:creator>
      <pubDate>Wed, 29 Jul 2026 19:14:36 +0000</pubDate>
      <link>https://dev.to/nehemiah_cheburet_298053c/how-a-tier-1-bank-can-benefit-from-aws-managed-services-without-making-a-future-cloud-exit-1hc3</link>
      <guid>https://dev.to/nehemiah_cheburet_298053c/how-a-tier-1-bank-can-benefit-from-aws-managed-services-without-making-a-future-cloud-exit-1hc3</guid>
      <description>&lt;p&gt;Cloud migration decisions are often evaluated through the lenses of security, availability, performance and cost. Portability is usually considered much later—sometimes only when an organisation needs to change providers, meet a new regulatory requirement or negotiate a major contract renewal.&lt;/p&gt;

&lt;p&gt;For KenyaBank, portability cannot be an afterthought.&lt;/p&gt;

&lt;p&gt;The bank is undertaking an 18-month programme to modernise a legacy core banking environment currently running on Oracle WebLogic and Oracle Database in its Westlands data centre. The target architecture introduces AWS services including Amazon Aurora PostgreSQL, Amazon DynamoDB, Amazon EventBridge, Amazon MSK, AWS IAM Identity Center, AWS Systems Manager and AWS CloudFormation.&lt;br&gt;
These services reduce infrastructure-management overhead and accelerate delivery. However, each managed service creates a different degree of dependency on AWS.&lt;/p&gt;

&lt;p&gt;The real question is therefore not:&lt;/p&gt;

&lt;p&gt;“Does the architecture contain vendor lock-in?”&lt;/p&gt;

&lt;p&gt;Almost every cloud architecture does.&lt;/p&gt;

&lt;p&gt;A more useful question is:&lt;/p&gt;

&lt;p&gt;“Is the lock-in understood, controlled and justified by the business value it provides?”&lt;/p&gt;

&lt;p&gt;This article audits five AWS-specific dependencies in KenyaBank’s target architecture, estimates the effort required to replace each one and assigns the overall architecture a portability score.&lt;br&gt;
KenyaBank is a Tier-1 Kenyan commercial bank serving approximately 4.2 million customers through 68 branches.&lt;/p&gt;

&lt;p&gt;Its existing environment includes:&lt;/p&gt;

&lt;p&gt;A monolithic Java EE core banking application&lt;br&gt;
Oracle WebLogic application servers&lt;br&gt;
A 3.8 TB Oracle 11g database&lt;br&gt;
A legacy internet-banking application&lt;br&gt;
Local teller servers in 68 branches&lt;br&gt;
An on-premises Microsoft Active Directory environment&lt;br&gt;
MPLS connectivity between branches and the Westlands data centre&lt;/p&gt;

&lt;p&gt;The target architecture uses the Strangler Fig pattern to extract capabilities from the monolith gradually. Internet banking will be containerised, the database will move towards Aurora PostgreSQL, and applications will increasingly communicate through events and managed messaging services.&lt;/p&gt;

&lt;p&gt;This gives KenyaBank a more scalable and resilient platform, but it also introduces several AWS-specific interfaces, data models and operational processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbqsd2x28u0sxzm36uhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbqsd2x28u0sxzm36uhy.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is cloud vendor lock-in?&lt;/p&gt;

&lt;p&gt;Vendor lock-in occurs when moving an application, its data or its operational processes away from a provider would require significant time, cost or redesign.&lt;/p&gt;

&lt;p&gt;Lock-in is not a single condition. For this assessment, it is divided into three categories.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;API lock-in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;API lock-in occurs when application code depends directly on a provider-specific SDK, API, event format or service behaviour.&lt;/p&gt;

&lt;p&gt;For example, application code written around DynamoDB operations such as PutItem, Query and UpdateItem cannot simply be pointed at PostgreSQL.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data lock-in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Data lock-in occurs when data is stored using a proprietary model or format that is difficult to reproduce in another platform.&lt;/p&gt;

&lt;p&gt;The challenge is not always exporting the raw records. It may involve translating partition keys, indexes, access patterns, relationships, transactions and consistency behaviour.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Operational lock-in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Operational lock-in occurs when an organisation’s deployment, identity, monitoring, patching or support processes depend on provider-specific tooling.&lt;/p&gt;

&lt;p&gt;The application may remain technically portable, but the operating model must be rebuilt before it can run elsewhere.&lt;/p&gt;

&lt;p&gt;The portability-scoring method&lt;/p&gt;

&lt;p&gt;Each dependency is assessed using five factors:&lt;/p&gt;

&lt;p&gt;Factor  Question&lt;br&gt;
Application coupling    How much code uses AWS-specific APIs?&lt;br&gt;
Data coupling   How difficult is it to export and remodel the data?&lt;br&gt;
Infrastructure coupling Can the deployment definition run elsewhere?&lt;br&gt;
Operational coupling    Must procedures and skills be rebuilt?&lt;br&gt;
Replacement availability    Is there a mature portable alternative?&lt;/p&gt;

&lt;p&gt;The portability scale is defined as follows:&lt;/p&gt;

&lt;p&gt;Score   Interpretation&lt;br&gt;
1   Highly proprietary; substantial redesign required&lt;br&gt;
2   Significant lock-in; migration would be difficult&lt;br&gt;
3   Moderate lock-in; migration is feasible with planning&lt;br&gt;
4   Mostly portable; limited provider-specific adjustments&lt;br&gt;
5   Highly portable; based mainly on open standards&lt;/p&gt;

&lt;p&gt;Exit effort is expressed in engineering effort rather than a fixed monetary amount. A defensible financial estimate would require application size, event volume, table count, test coverage, staff rates and recovery requirements that are not provided in the scenario.&lt;/p&gt;

&lt;p&gt;The estimates assume a multidisciplinary team containing cloud, application, database, security and testing specialists.&lt;/p&gt;

&lt;p&gt;Dependency 1: Amazon DynamoDB&lt;br&gt;
How KenyaBank uses it&lt;/p&gt;

&lt;p&gt;The proposed architecture uses DynamoDB for session storage. This is attractive because DynamoDB provides managed scaling, high availability and low-latency key-value access without requiring KenyaBank to manage database servers.&lt;/p&gt;

&lt;p&gt;It is also the strongest source of lock-in in the assessed architecture.&lt;/p&gt;

&lt;p&gt;Nature of the lock-in&lt;/p&gt;

&lt;p&gt;Classification: API lock-in and data lock-in&lt;br&gt;
Portability score: 2 out of 5&lt;br&gt;
Estimated exit effort: High — approximately 12–20 person-weeks&lt;/p&gt;

&lt;p&gt;DynamoDB applications are normally designed around:&lt;/p&gt;

&lt;p&gt;Partition and sort keys&lt;br&gt;
DynamoDB-specific query operations&lt;br&gt;
Global and local secondary indexes&lt;br&gt;
Conditional writes&lt;br&gt;
Time-to-live attributes&lt;br&gt;
DynamoDB Streams&lt;br&gt;
Provisioned or on-demand capacity behaviour&lt;br&gt;
AWS SDK request and response models&lt;/p&gt;

&lt;p&gt;Although DynamoDB tables are flexible, that flexibility does not make them automatically portable. The table design is typically based on application access patterns rather than relational normalisation.&lt;/p&gt;

&lt;p&gt;AWS supports full and incremental table exports to Amazon S3. These exports do not consume table read capacity, but the supported export formats are DynamoDB JSON and Amazon Ion—not a ready-made PostgreSQL schema. AWS documentation: DynamoDB export to S3&lt;/p&gt;

&lt;p&gt;Exporting the records is therefore only the beginning. KenyaBank would still need to:&lt;/p&gt;

&lt;p&gt;Choose a replacement platform.&lt;br&gt;
Design the target schema.&lt;br&gt;
Translate DynamoDB-specific data types.&lt;br&gt;
Recreate indexes and expiration behaviour.&lt;br&gt;
Rewrite the repository or data-access layer.&lt;br&gt;
Migrate active sessions.&lt;br&gt;
Validate performance and consistency.&lt;br&gt;
Run the old and new stores in parallel.&lt;br&gt;
Cut over without invalidating customer sessions.&lt;/p&gt;

&lt;p&gt;Possible alternatives&lt;/p&gt;

&lt;p&gt;Potential alternatives include:&lt;/p&gt;

&lt;p&gt;Redis for short-lived customer sessions&lt;br&gt;
PostgreSQL for durable relational session records&lt;br&gt;
MongoDB for document-oriented access&lt;br&gt;
A Kubernetes-compatible Redis deployment&lt;br&gt;
A managed Redis service available from multiple providers&lt;/p&gt;

&lt;p&gt;For temporary session data, Redis would normally provide a more portable model than DynamoDB because its commands and client libraries are available across cloud and self-managed environments.&lt;/p&gt;

&lt;p&gt;Is the lock-in justified?&lt;/p&gt;

&lt;p&gt;Partly.&lt;/p&gt;

&lt;p&gt;DynamoDB is justified when KenyaBank needs very high scale, predictable low latency and minimal database administration. However, using it for ordinary session storage may create more coupling than necessary.&lt;/p&gt;

&lt;p&gt;The bank should first validate whether the expected session volume genuinely requires DynamoDB. If not, a portable Redis-based implementation may provide enough performance while reducing exit complexity.&lt;br&gt;
Recommended control&lt;/p&gt;

&lt;p&gt;KenyaBank should implement a repository interface between application code and DynamoDB:&lt;/p&gt;

&lt;p&gt;SessionRepository&lt;br&gt;
 ├── DynamoDbSessionRepository&lt;br&gt;
 ├── RedisSessionRepository&lt;br&gt;
 └── PostgreSqlSessionRepository&lt;/p&gt;

&lt;p&gt;The business logic should depend on SessionRepository, not directly on the AWS SDK. This will not eliminate data migration, but it will reduce the amount of application code that must be rewritten.&lt;/p&gt;

&lt;p&gt;Dependency 2: Amazon EventBridge&lt;br&gt;
How KenyaBank uses it&lt;/p&gt;

&lt;p&gt;EventBridge can route business and operational events between loosely coupled application components. Rules match events and deliver them to configured targets.&lt;br&gt;
AWS describes an EventBridge event bus as a router that receives events and delivers them to one or more destinations. Rules use AWS-specific event patterns to inspect event metadata and detail fields. AWS documentation: EventBridge event patterns&lt;/p&gt;

&lt;p&gt;Nature of the lock-in&lt;/p&gt;

&lt;p&gt;Classification: API and operational lock-in&lt;br&gt;
Portability score: 2 out of 5&lt;br&gt;
Estimated exit effort: Medium to high — approximately 8–14 person-weeks&lt;/p&gt;

&lt;p&gt;Coupling may develop in several places:&lt;/p&gt;

&lt;p&gt;The EventBridge event envelope&lt;br&gt;
PutEvents API calls&lt;br&gt;
AWS SDK integrations&lt;br&gt;
Event-pattern syntax&lt;br&gt;
Event bus policies&lt;br&gt;
Rule-to-target configuration&lt;br&gt;
Dead-letter queue configuration&lt;br&gt;
IAM permissions&lt;br&gt;
EventBridge Scheduler&lt;br&gt;
AWS-specific target integrations&lt;br&gt;
If business applications publish raw EventBridge events directly, a move to Kafka, Google Cloud Pub/Sub or another event platform will require changes to every producer.&lt;/p&gt;

&lt;p&gt;Consumers may also depend on fields such as source, detail-type, account, region and detail.&lt;/p&gt;

&lt;p&gt;Exit approach&lt;/p&gt;

&lt;p&gt;A controlled exit would require KenyaBank to:&lt;/p&gt;

&lt;p&gt;Inventory event buses, schemas, rules and targets.&lt;br&gt;
Define a provider-neutral event contract.&lt;br&gt;
Introduce an event-publishing abstraction.&lt;br&gt;
Translate existing events into the new format.&lt;br&gt;
Recreate routing and filtering rules.&lt;br&gt;
Implement retry and dead-letter handling.&lt;br&gt;
Run dual publishing during transition.&lt;br&gt;
reconcile missed or duplicated events.&lt;br&gt;
Retire EventBridge rules after validation.&lt;br&gt;
Is the lock-in justified?&lt;/p&gt;

&lt;p&gt;Yes, but only at the integration boundary.&lt;br&gt;
EventBridge is valuable for AWS service integration and operational automation. It can significantly reduce the code required to connect AWS services.&lt;/p&gt;

&lt;p&gt;For core banking domain events, however, the event itself should not be defined by EventBridge.&lt;/p&gt;

&lt;p&gt;KenyaBank should use a portable event specification such as CloudEvents and treat EventBridge as one possible transport.&lt;/p&gt;

&lt;p&gt;A portable business event might look like this:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "specversion": "1.0",&lt;br&gt;
  "type": "ke.kenyabank.payment.completed.v1",&lt;br&gt;
  "source": "/core-banking/payments",&lt;br&gt;
  "id": "a03ac2f8-5e51-4c51-95d5-7714be667350",&lt;br&gt;
  "time": "2026-07-29T09:30:00Z",&lt;br&gt;
  "datacontenttype": "application/json",&lt;br&gt;
  "data": {&lt;br&gt;
    "paymentReference": "PAY-104582",&lt;br&gt;
    "status": "COMPLETED"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The same logical event could be transported through EventBridge, Amazon MSK or another cloud’s event service.&lt;/p&gt;

&lt;p&gt;Recommended control&lt;br&gt;
Standardise domain events using CloudEvents.&lt;br&gt;
Publish through an internal event interface.&lt;br&gt;
Keep AWS SDK calls inside adapters.&lt;br&gt;
Store event schemas in a provider-neutral repository.&lt;br&gt;
Avoid placing business rules exclusively in EventBridge rule definitions.&lt;br&gt;
Use EventBridge mainly for AWS-native operational events.&lt;br&gt;
Dependency 3: AWS CloudFormation&lt;br&gt;
How KenyaBank uses it&lt;/p&gt;

&lt;p&gt;CloudFormation defines AWS infrastructure as YAML or JSON templates. It gives KenyaBank repeatable deployments, change tracking and automated infrastructure management.&lt;/p&gt;

&lt;p&gt;However, CloudFormation templates use AWS-specific resource identifiers such as AWS::S3::Bucket and AWS::EC2::VPC. AWS documents these service-specific resource and property definitions in its CloudFormation resource reference. AWS documentation: CloudFormation resource syntax.&lt;/p&gt;

&lt;p&gt;Nature of the lock-in&lt;/p&gt;

&lt;p&gt;Classification: Operational lock-in&lt;br&gt;
Portability score: 2 out of 5&lt;br&gt;
Estimated exit effort: Medium — approximately 8–16 person-weeks&lt;/p&gt;

&lt;p&gt;The deployed resources may use standard technologies, but the infrastructure definition cannot be applied directly to Azure, Google Cloud or an on-premises platform.&lt;/p&gt;

&lt;p&gt;Coupling increases when templates use:&lt;/p&gt;

&lt;p&gt;AWS-specific resource types&lt;br&gt;
Intrinsic functions such as Ref and Fn::GetAtt&lt;br&gt;
Nested stacks&lt;br&gt;
CloudFormation exports&lt;br&gt;
StackSets&lt;br&gt;
AWS-specific transforms&lt;br&gt;
Lambda-backed custom resources&lt;br&gt;
CloudFormation deployment pipelines&lt;/p&gt;

&lt;p&gt;Custom resources create additional coupling because they can invoke Lambda or SNS-based provisioning logic. AWS documentation: CloudFormation custom resources&lt;br&gt;
Exit approach&lt;/p&gt;

&lt;p&gt;Migrating from CloudFormation to Terraform or OpenTofu would involve:&lt;/p&gt;

&lt;p&gt;Inventorying all stacks and nested stacks.&lt;br&gt;
Mapping resources into the target tool.&lt;br&gt;
Rewriting parameters, outputs and dependencies.&lt;br&gt;
Importing existing infrastructure into the new state.&lt;br&gt;
Comparing both infrastructure definitions.&lt;br&gt;
Testing changes in a non-production account.&lt;br&gt;
Freezing CloudFormation changes during transition.&lt;br&gt;
Transferring resource ownership in controlled phases.&lt;br&gt;
Retiring stacks without deleting live resources.&lt;/p&gt;

&lt;p&gt;The main risk is not reproducing the YAML syntax. It is safely transferring control of already-running infrastructure without accidental replacement or deletion.&lt;/p&gt;

&lt;p&gt;Is the lock-in justified?&lt;/p&gt;

&lt;p&gt;Not for the long-term target state.&lt;/p&gt;

&lt;p&gt;CloudFormation is a capable option for AWS-only environments, but KenyaBank’s portability objective favours Terraform.&lt;br&gt;
The bank does not need to replace every existing template immediately. A phased six-month migration would be safer:&lt;/p&gt;

&lt;p&gt;Month 1: inventory and prioritisation&lt;br&gt;
Month 2: Terraform/OpenTofu standards and modules&lt;br&gt;
Months 3–4: non-production migration&lt;br&gt;
Month 5: production resource import&lt;br&gt;
Month 6: validation and CloudFormation retirement&lt;br&gt;
Recommended control&lt;br&gt;
Use Terraform or OpenTofu for new infrastructure.&lt;br&gt;
Create modules around architectural capabilities rather than individual resources.&lt;br&gt;
Keep environment values separate from reusable modules.&lt;br&gt;
Prohibit new CloudFormation custom resources during the transition.&lt;br&gt;
Apply deletion protection and lifecycle safeguards before importing production resources.&lt;br&gt;
Retain CloudFormation templates until rollback is no longer necessary.&lt;br&gt;
Dependency 4: AWS IAM Identity Center&lt;br&gt;
How KenyaBank uses it&lt;/p&gt;

&lt;p&gt;IAM Identity Center provides workforce access to multiple AWS accounts. KenyaBank intends to connect its existing Active Directory environment using SAML 2.0 and SCIM, with permission sets assigned to teams such as Banking Operations, Technology Operations, Development and Audit.&lt;/p&gt;

&lt;p&gt;This dependency is more nuanced than DynamoDB because its identity-federation interfaces use open standards.&lt;/p&gt;

&lt;p&gt;AWS IAM Identity Center supports SAML 2.0 for authentication and SCIM for user and group provisioning. An identity provider that implements these standards is expected to interoperate with IAM Identity Center. AWS documentation: SAML and SCIM federation&lt;/p&gt;

&lt;p&gt;Nature of the lock-in&lt;/p&gt;

&lt;p&gt;Classification: Primarily operational lock-in&lt;br&gt;
Portability score: 3 out of 5&lt;br&gt;
Estimated exit effort: Medium — approximately 6–12 person-weeks&lt;br&gt;
The following elements are relatively portable:&lt;/p&gt;

&lt;p&gt;User identities retained in Active Directory&lt;br&gt;
SAML-based authentication&lt;br&gt;
SCIM-based provisioning&lt;br&gt;
Group membership&lt;br&gt;
General role-based access principles&lt;/p&gt;

&lt;p&gt;The AWS-specific components include:&lt;/p&gt;

&lt;p&gt;Permission sets&lt;br&gt;
AWS account assignments&lt;br&gt;
IAM policies&lt;br&gt;
AWS Organizations integration&lt;br&gt;
AWS account and organisational-unit mappings&lt;br&gt;
AWS-specific attributes and session controls&lt;/p&gt;

&lt;p&gt;Permission sets determine the level of access users and groups receive in AWS accounts. These permissions cannot be transferred directly to another cloud because other providers use different resource and policy models. AWS documentation: IAM Identity Center permission sets&lt;br&gt;
Exit approach&lt;/p&gt;

&lt;p&gt;Moving to another platform would require KenyaBank to:&lt;/p&gt;

&lt;p&gt;Retain Active Directory or another independent identity provider as the system of record.&lt;br&gt;
Integrate the target platform through SAML or OpenID Connect.&lt;br&gt;
Recreate user and group provisioning.&lt;br&gt;
Translate AWS permission sets into target-cloud roles.&lt;br&gt;
Replace IAM policy conditions.&lt;br&gt;
test privileged and emergency access.&lt;br&gt;
validate separation of duties.&lt;br&gt;
update access-review and audit procedures.&lt;br&gt;
Is the lock-in justified?&lt;/p&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;The lock-in is acceptable because the authoritative identities remain outside AWS and federation relies on standard protocols. KenyaBank receives centralised access management across its AWS accounts without making AWS the permanent system of record for workforce identities.&lt;/p&gt;

&lt;p&gt;Recommended control&lt;br&gt;
Keep Active Directory as the authoritative identity store.&lt;br&gt;
Group users by business function, not by AWS service.&lt;br&gt;
Document every permission-set mapping.&lt;br&gt;
Export permission definitions into version control.&lt;br&gt;
Maintain a cloud-neutral access matrix.&lt;br&gt;
Test emergency access independently of normal federation.&lt;br&gt;
Avoid manually creating long-lived IAM users.&lt;/p&gt;

&lt;p&gt;This approach allows the bank to retain a portable identity-governance model even though cloud permissions remain provider-specific.&lt;br&gt;
Dependency 5: AWS Systems Manager&lt;br&gt;
How KenyaBank uses it&lt;/p&gt;

&lt;p&gt;KenyaBank intends to manage EC2 instances and 68 branch servers through AWS Systems Manager.&lt;/p&gt;

&lt;p&gt;Systems Manager hybrid activations allow on-premises servers, virtual machines and edge devices to register as managed nodes. Those machines then use the SSM Agent to communicate with AWS Systems Manager. AWS documentation: Systems Manager hybrid environments&lt;/p&gt;

&lt;p&gt;This gives the bank centralised inventory, patching, command execution, automation and audit history without requiring SSH access or bastion hosts.&lt;/p&gt;

&lt;p&gt;Nature of the lock-in&lt;/p&gt;

&lt;p&gt;Classification: Operational lock-in&lt;br&gt;
Portability score: 2 out of 5&lt;br&gt;
Estimated exit effort: Medium to high — approximately 10–18 person-weeks&lt;/p&gt;

&lt;p&gt;The servers themselves remain portable, but the management processes become AWS-specific.&lt;/p&gt;

&lt;p&gt;Coupling includes:&lt;/p&gt;

&lt;p&gt;SSM Agent registration&lt;br&gt;
Hybrid activation codes&lt;br&gt;
IAM service roles&lt;br&gt;
Patch baselines&lt;br&gt;
Maintenance windows&lt;br&gt;
State Manager associations&lt;br&gt;
Run Command documents&lt;br&gt;
Automation runbooks&lt;br&gt;
Inventory and compliance reports&lt;br&gt;
Parameter Store integration&lt;br&gt;
CloudWatch and EventBridge automation&lt;/p&gt;

&lt;p&gt;The greater the number of SSM documents and automated remediation workflows, the greater the exit effort.&lt;/p&gt;

&lt;p&gt;Exit approach&lt;/p&gt;

&lt;p&gt;Potential replacements include:&lt;/p&gt;

&lt;p&gt;Ansible Automation Platform&lt;br&gt;
Red Hat Satellite&lt;br&gt;
Canonical Landscape&lt;br&gt;
Microsoft Configuration Manager&lt;br&gt;
Azure Arc&lt;br&gt;
Google Anthos&lt;br&gt;
Kubernetes-based management where appropriate&lt;/p&gt;

&lt;p&gt;Migration would require:&lt;/p&gt;

&lt;p&gt;Deploying the replacement agent or configuring agentless access.&lt;br&gt;
Recreating the server inventory.&lt;br&gt;
Translating patch baselines.&lt;br&gt;
Rebuilding maintenance schedules.&lt;br&gt;
Rewriting automation documents.&lt;br&gt;
Replacing IAM-based authorisation.&lt;br&gt;
Reconstructing audit and compliance reporting.&lt;br&gt;
Operating both platforms during transition.&lt;br&gt;
Deregistering the servers from Systems Manager&lt;/p&gt;

&lt;p&gt;Is the lock-in justified?&lt;/p&gt;

&lt;p&gt;Yes for the AWS estate; only partly for branch servers.&lt;/p&gt;

&lt;p&gt;Systems Manager is a strong fit for EC2 because it integrates naturally with IAM, CloudTrail, Patch Manager and AWS automation.&lt;/p&gt;

&lt;p&gt;Using it for all branch infrastructure provides consistency, but it makes the operational model AWS-dependent even when the servers are physically located outside AWS.&lt;/p&gt;

&lt;p&gt;For a regulated bank, that trade-off may still be justified if the centralised audit trail and reduced reliance on SSH materially improve security.&lt;/p&gt;

&lt;p&gt;Recommended control&lt;br&gt;
Write automation in scripts or Ansible where practical.&lt;br&gt;
Keep SSM documents thin and use them to invoke portable scripts.&lt;br&gt;
Store scripts in version control.&lt;br&gt;
Maintain an independent configuration-management database.&lt;br&gt;
Export compliance results into the bank’s central reporting platform.&lt;br&gt;
Document how servers would be managed if Systems Manager were unavailable.&lt;br&gt;
Test replacement management tooling on a small branch-server sample.&lt;/p&gt;

&lt;p&gt;Consolidated portability assessment&lt;br&gt;
Dependency  Primary lock-in Portability Exit effort Is it justified?&lt;br&gt;
DynamoDB session store  API and data    2/5 High    Partly&lt;br&gt;
Amazon EventBridge  API and operational 2/5 Medium–high   Yes, at AWS integration boundaries&lt;br&gt;
AWS CloudFormation  Operational 2/5 Medium  No for the long-term target&lt;br&gt;
IAM Identity Center Operational 3/5 Medium  Yes&lt;br&gt;
AWS Systems Manager Operational 2/5 Medium–high   Yes, with controls&lt;/p&gt;

&lt;p&gt;[Screenshot placeholder: KenyaBank dependency and exit-effort matrix]&lt;/p&gt;

&lt;p&gt;Dependencies that improve portability&lt;/p&gt;

&lt;p&gt;Not every AWS-managed service creates the same level of risk.&lt;/p&gt;

&lt;p&gt;Two choices in the KenyaBank architecture make the environment more portable.&lt;/p&gt;

&lt;p&gt;Amazon MSK&lt;/p&gt;

&lt;p&gt;Amazon MSK runs open-source Apache Kafka and supports existing Kafka clients, tools and plugins. AWS documentation: What is Amazon MSK?&lt;/p&gt;

&lt;p&gt;If KenyaBank uses standard Kafka APIs, portable schemas and open-source connectors, producers and consumers can move to another Kafka distribution with relatively limited application changes.&lt;/p&gt;

&lt;p&gt;AWS-specific authentication, monitoring, replication and control-plane automation can still create operational coupling, but the data plane is substantially more portable than EventBridge.&lt;/p&gt;

&lt;p&gt;Estimated portability: 4 out of 5.&lt;/p&gt;

&lt;p&gt;Amazon Aurora PostgreSQL&lt;/p&gt;

&lt;p&gt;Aurora PostgreSQL is PostgreSQL-compatible and supports standard PostgreSQL tools. AWS documents migration options including pg_dump, pg_restore and AWS DMS. AWS documentation: Migrating Aurora PostgreSQL data&lt;br&gt;
Portability decreases if KenyaBank depends on Aurora-specific capabilities such as:&lt;/p&gt;

&lt;p&gt;Aurora Global Database&lt;br&gt;
Aurora Serverless scaling behaviour&lt;br&gt;
Cluster endpoints&lt;br&gt;
Aurora-specific replicas&lt;br&gt;
Backtrack or other engine-specific functions&lt;br&gt;
AWS-specific monitoring and failover automation&lt;/p&gt;

&lt;p&gt;If the database schema, SQL and drivers remain PostgreSQL-standard, the exit path is still considerably easier than leaving a proprietary database model.&lt;/p&gt;

&lt;p&gt;Estimated portability: 4 out of 5.&lt;/p&gt;

&lt;p&gt;Overall portability score: 3 out of 5&lt;/p&gt;

&lt;p&gt;KenyaBank’s proposed architecture receives an overall portability score of:&lt;/p&gt;

&lt;p&gt;3/5 — Moderately portable&lt;/p&gt;

&lt;p&gt;The score is not a simple average of the five dependencies. It considers their architectural importance and the effect of existing mitigation opportunities.&lt;/p&gt;

&lt;p&gt;The architecture earns a moderate score because:&lt;/p&gt;

&lt;p&gt;Aurora PostgreSQL provides a PostgreSQL-compatible exit path.&lt;br&gt;
Amazon MSK is based on open-source Apache Kafka.&lt;br&gt;
SAML and SCIM reduce identity coupling.&lt;br&gt;
Containers make the application runtime relatively portable.&lt;br&gt;
The Strangler Fig pattern supports incremental change.&lt;/p&gt;

&lt;p&gt;The score is prevented from reaching 4 or 5 because:&lt;/p&gt;

&lt;p&gt;Session management depends on DynamoDB’s proprietary data model.&lt;br&gt;
Domain events risk becoming coupled to EventBridge.&lt;br&gt;
Infrastructure is described using CloudFormation.&lt;br&gt;
Branch operations depend heavily on Systems Manager.&lt;br&gt;
AWS-specific IAM and automation remain embedded in the operating model.&lt;/p&gt;

&lt;p&gt;The architecture is therefore portable in principle, but exiting AWS would still require a planned transformation programme rather than a simple redeployment.&lt;/p&gt;

&lt;p&gt;Recommended portability-improvement plan&lt;/p&gt;

&lt;p&gt;KenyaBank does not need to avoid managed services. It needs to isolate their use.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduce application adapters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Applications should call internal interfaces rather than AWS SDKs directly.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;p&gt;SessionRepository&lt;br&gt;
EventPublisher&lt;br&gt;
SecretProvider&lt;br&gt;
ObjectStorageClient&lt;br&gt;
IdentityClaimsMapper&lt;/p&gt;

&lt;p&gt;Each interface can have an AWS implementation today and another implementation in the future.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adopt portable event contracts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Core banking events should use:&lt;/p&gt;

&lt;p&gt;CloudEvents envelopes&lt;br&gt;
JSON Schema, Avro or Protobuf contracts&lt;br&gt;
Versioned domain-event names&lt;br&gt;
Provider-neutral metadata&lt;br&gt;
A schema-compatibility policy&lt;/p&gt;

&lt;p&gt;EventBridge and MSK should transport events without owning their business meaning.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move infrastructure definitions towards Terraform or OpenTofu&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CloudFormation stacks should be replaced gradually. Production resources should be imported carefully rather than recreated.&lt;/p&gt;

&lt;p&gt;This change improves infrastructure portability, although the resources defined may still be AWS-specific.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use PostgreSQL-compatible features by default&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aurora-specific capabilities should require an architecture decision record explaining:&lt;/p&gt;

&lt;p&gt;The business benefit&lt;br&gt;
The portability impact&lt;br&gt;
The alternative considered&lt;br&gt;
The exit approach&lt;br&gt;
The trigger for reassessment&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep identity outside the cloud provider&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Active Directory should remain the workforce identity authority. IAM Identity Center should provide AWS access federation rather than become the only identity repository.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep operational scripts portable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Systems Manager runbooks should invoke scripts that can also run through Ansible or another orchestration platform.&lt;/p&gt;

&lt;p&gt;The bank should avoid encoding every operational procedure entirely inside SSM documents.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Test the exit plan&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A portability strategy is only credible if it is tested.&lt;/p&gt;

&lt;p&gt;KenyaBank should run an annual portability exercise that:&lt;/p&gt;

&lt;p&gt;Restores a sample Aurora schema into standard PostgreSQL&lt;br&gt;
Consumes an MSK topic using a non-AWS Kafka client&lt;br&gt;
Replays EventBridge events into an alternative broker&lt;br&gt;
Deploys one Terraform/OpenTofu-managed environment&lt;br&gt;
Manages one branch server using an alternative tool&lt;br&gt;
Exports a sample DynamoDB table and transforms its data&lt;/p&gt;

&lt;p&gt;Final assessment&lt;/p&gt;

&lt;p&gt;KenyaBank should not reject AWS-managed services merely because they introduce lock-in.&lt;/p&gt;

&lt;p&gt;DynamoDB, EventBridge, IAM Identity Center and Systems Manager can reduce operational effort and improve availability, security and delivery speed. Those benefits may be more valuable than complete portability.&lt;/p&gt;

&lt;p&gt;The most important finding is that not all lock-in is equally risky.&lt;/p&gt;

&lt;p&gt;DynamoDB creates the greatest application and data portability concern. CloudFormation and Systems Manager create substantial operational dependence. IAM Identity Center is a more acceptable dependency because it integrates through SAML and SCIM, while Aurora PostgreSQL and Amazon MSK offer stronger portability foundations through PostgreSQL and Apache Kafka compatibility.&lt;/p&gt;

&lt;p&gt;The recommended decision is therefore to continue with AWS, while introducing architectural boundaries around proprietary services.&lt;/p&gt;

&lt;p&gt;KenyaBank does not need a platform that can move to another cloud overnight. It needs a platform whose dependencies are visible, whose business benefits are understood and whose exit paths remain technically achievable.&lt;/p&gt;

&lt;p&gt;That is the difference between unmanaged vendor lock-in and a deliberate cloud strategy.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloudcomputing</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>How to Auto-Merge Branches on Every Push Using GitHub Actions</title>
      <dc:creator>Nehemiah Cheburet</dc:creator>
      <pubDate>Sun, 12 Jul 2026 09:50:14 +0000</pubDate>
      <link>https://dev.to/nehemiah_cheburet_298053c/how-to-auto-merge-branches-on-every-push-using-github-actions-1ee5</link>
      <guid>https://dev.to/nehemiah_cheburet_298053c/how-to-auto-merge-branches-on-every-push-using-github-actions-1ee5</guid>
      <description>&lt;p&gt;We’ve all been there: you are working out of a develop branch, things are moving fast, and you want your production-ready main branch to stay instantly synced without the hassle of opening, reviewing, and manually clicking "Merge" on a Pull Request every single time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkonypnjhwgzo1vzafht0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkonypnjhwgzo1vzafht0.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are working on a solo project or running an internal staging-to-production pipeline where strict PR reviews aren't necessary, you can fully automate this with a lightweight GitHub Actions workflow.&lt;/p&gt;

&lt;p&gt;In this quick guide, we’ll set up a workflow that automatically merges develop into main every single time you push code.&lt;/p&gt;

&lt;p&gt;Step 1: Create the Workflow File&lt;br&gt;
GitHub Actions looks for automation scripts inside a special directory in your repository. You can create this file locally or directly through the GitHub web interface.&lt;/p&gt;

&lt;p&gt;Create a file at this exact path:&lt;/p&gt;

&lt;p&gt;.github/workflows/auto-merge.yml&lt;/p&gt;

&lt;p&gt;And paste the following YAML configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Auto Merge Develop to Main

on:
  push:
    branches:
      - develop

jobs:
  merge-to-main:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Fetches full history so git can handle the merge properly

      - name: Configure Git Bot
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"

      - name: Merge develop into main
        run: |
          git checkout main
          git merge origin/develop --no-ff -m "chore: automatic merge develop to main [skip ci]"
          git push origin main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: If you are creating this via the GitHub web interface, make sure you commit this file directly to your develop branch so the trigger can find it!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Step 2: Fix the "Permission Denied" Gotcha&lt;br&gt;
If you skip this step, your workflow will trigger, but it will immediately fail with a permission error. By default, GitHub Actions has read-only access to your repository. Because our script needs to write (push) code back to main, we have to elevate its permissions.&lt;/p&gt;

&lt;p&gt;Head over to your repository on GitHub.&lt;/p&gt;

&lt;p&gt;Click the Settings tab at the top.&lt;/p&gt;

&lt;p&gt;On the left sidebar, click Actions &amp;gt; General.&lt;/p&gt;

&lt;p&gt;Scroll all the way to the bottom to Workflow permissions.&lt;/p&gt;

&lt;p&gt;Switch the toggle to Read and write permissions and hit Save.&lt;/p&gt;

&lt;p&gt;Step 3: Test the Magic&lt;/p&gt;

&lt;p&gt;To see it in action, make a small change to a file on your local develop branch, commit it, and push it up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "feat: testing auto merge"
git push origin develop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, click on the Actions tab in your GitHub repository. You’ll see the "Auto Merge Develop to Main" workflow running. Within a few seconds, it will complete, and your main branch will be perfectly updated.&lt;/p&gt;

&lt;p&gt;(Don't forget to run git pull on your local machines to keep everything synced!)&lt;/p&gt;

&lt;p&gt;⚠️ A Quick Reality Check&lt;br&gt;
Before you throw this into every repo you own, keep two edge cases in mind:&lt;/p&gt;

&lt;p&gt;Merge Conflicts: If someone pushes a hotfix directly to main, this script will fail when a conflict occurs. If that happens, the automation stops safely. You'll just need to merge main back into develop manually on your machine, resolve the conflict, and push to develop again.&lt;/p&gt;

&lt;p&gt;Branch Protection Rules: If your main branch requires signed commits, approval reviews, or passing status checks before a merge, this native Git push will be blocked by GitHub. To bypass that, you would need to generate a Personal Access Token (PAT) with repository write access and substitute it for the default ${{ secrets.GITHUB_TOKEN }}.&lt;/p&gt;

&lt;p&gt;Happy automating! Drop a comment below if you run into any issues setting this up.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to create a VPC with Public and Private Subnets (NAT Gateway and Bastion Host)</title>
      <dc:creator>Nehemiah Cheburet</dc:creator>
      <pubDate>Wed, 14 Jan 2026 19:56:52 +0000</pubDate>
      <link>https://dev.to/nehemiah_cheburet_298053c/how-to-create-a-vpc-with-public-and-private-subnets-nat-gateway-and-bastion-host-4a4</link>
      <guid>https://dev.to/nehemiah_cheburet_298053c/how-to-create-a-vpc-with-public-and-private-subnets-nat-gateway-and-bastion-host-4a4</guid>
      <description>&lt;p&gt;In the world of cloud computing, "default" settings are often the enemy of security. When you launch your first resource on AWS, it’s tempting to put everything in a public subnet for the sake of simplicity. However, in a production environment, exposing your application servers or databases directly to the internet is like leaving your front door wide open in a crowded city.&lt;/p&gt;

&lt;p&gt;The gold standard for cloud networking is the Virtual Private Cloud (VPC) configured with a "Public-Private" split.&lt;/p&gt;

&lt;p&gt;By isolating your sensitive resources in a private subnet, you ensure they are invisible to the public web. But this raises two critical questions:&lt;/p&gt;

&lt;p&gt;How do your private servers get out? (e.g., for software updates or API calls).&lt;/p&gt;

&lt;p&gt;How do you get in? (e.g., for maintenance or troubleshooting).&lt;/p&gt;

&lt;p&gt;The answer lies in two essential components: the NAT Gateway and the Bastion Host.&lt;/p&gt;

&lt;p&gt;In this guide, we will walk through the end-to-end process of building a secure, professional-grade network architecture. We’ll cover everything from CIDR blocks and route tables to configuring the "Jump Box" that keeps your environment both accessible and airtight.&lt;/p&gt;

&lt;p&gt;Whether you are preparing for the AWS Solutions Architect exam or building a secure home for your next big project, this walkthrough will give you the foundational knowledge you need to deploy with confidence.&lt;/p&gt;

&lt;p&gt;**Defining the VPC&lt;br&gt;
**In the AWS Console, when you head to VPC &amp;gt; Your VPCs &amp;gt; Create VPC, you generally have two choices: "VPC only" or "VPC and more." For this guide, let's focus on VPC only to understand the manual configuration of each component.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>vpc</category>
      <category>bastionhost</category>
      <category>natgateway</category>
    </item>
  </channel>
</rss>
