<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by TemaBit Fozzy Group on Medium]]></title>
        <description><![CDATA[Stories by TemaBit Fozzy Group on Medium]]></description>
        <link>https://medium.com/@TemaBitFozzyGroup?source=rss-8a4433ce9d9e------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*p3IpGNysgPB3hS1M6aAACQ.jpeg</url>
            <title>Stories by TemaBit Fozzy Group on Medium</title>
            <link>https://medium.com/@TemaBitFozzyGroup?source=rss-8a4433ce9d9e------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 20:16:08 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@TemaBitFozzyGroup/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[From Nexus OSS to AWS CodeArtifact: Lessons in Cost, Scale, and Managed Services]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/from-nexus-oss-to-aws-codeartifact-lessons-in-cost-scale-and-managed-services-188f49dbadc9?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/188f49dbadc9</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[aws-codeartifact]]></category>
            <category><![CDATA[platform-engineering]]></category>
            <category><![CDATA[nexus-oss]]></category>
            <category><![CDATA[cloud-infrastructure]]></category>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Thu, 25 Jun 2026 13:52:16 GMT</pubDate>
            <atom:updated>2026-06-25T15:13:49.075Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Authors: </strong><a href="https://medium.com/u/20d1a76d43fb"><strong>Artem Hrechanychenko</strong></a>, <a href="https://medium.com/u/defed876190f"><strong>Stas Kolenkin</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kSDtyliQOPQxlPrFXWsupQ.png" /></figure><p><em>How a hard API limit of 200,000 requests per day in Sonatype Nexus OSS forced a repository strategy rethink — and how moving language package ecosystems to a managed AWS service replaced a $15,000-per-year Nexus Pro upgrade with a $60–$90 monthly bill</em></p><p>Every platform team running a self-hosted artifact registry eventually hits the same wall. The registry is a silent dependency for every build, deployment, and base-image refresh. The moment it slows down, the entire delivery pipeline slows with it. In a regulated fintech environment, where supply-chain control and build reproducibility are not optional, the wall arrives sooner.</p><p>For us, the wall took the form of HTTP 402 Payment Required.</p><p>This article describes how a single rate limit on our self-hosted Sonatype Nexus OSS instance forced a full re-evaluation of the artifact registry stack. It explains why we chose <strong>AWS CodeArtifact</strong> over the obvious commercial alternatives, and how a $15,000-per-year licensing decision was replaced with a roughly $60–$90 monthly managed-service bill — without sacrificing developer velocity, auditability, or support for the formats AWS does not yet cover.</p><h3><strong>The Challenge: When the Registry Becomes the Bottleneck</strong></h3><p>For years, Nexus Repository OSS served as the single artifact registry for the platform. It hosted every format the engineering organisation depended on: <strong>npm and NuGet</strong> for application packages, PyPI for Python tooling, Docker images for application and base images, APT and YUM for operating-system packages, Helm charts for Kubernetes deployments, and raw GitHub proxies for upstream sources. At peak it served roughly 30 repositories across hosted, proxy, and group types.</p><p>After upgrading to a recent Nexus OSS version, we ran into the hard API limit of 200,000 requests per day introduced in newer OSS releases. For a platform serving nearly 350+ active projects with continuous integration, container rebuilds, scheduled dependency refreshes, and parallel pipeline runners, that ceiling stopped being theoretical:</p><ul><li>CI pipelines started returning HTTP 402 Payment Required mid-build, with no graceful degradation</li><li>Proxy pulls from upstream registries (npmjs.org, NuGet.org, PyPI) stopped working</li><li><strong>npm install, dotnet restore, and pip install</strong> failed deterministically once the daily quota was exhausted</li><li>Pushes of internal packages to hosted repositories were blocked alongside the proxy traffic</li><li>Automatic retries compounded the problem by consuming additional quota</li><li>Recovery required waiting for the daily counter reset — there was no operational workaround once the limit was hit.</li></ul><p>Additional caching layers in front of Nexus could theoretically have absorbed the excess traffic. The operational reality, however, was another stateful service, another point of failure, another set of credentials to rotate, and another item added to the audit trail. In a regulated environment, every component added to the supply chain is also a component that has to be defended during an audit.</p><p>The real question was no longer how to work around the limit, but whether we should be self-hosting this at all.</p><h3><strong>Alternatives Evaluated</strong></h3><p>Four options were on the table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nGaLuBQlQLgBwOKAbo3GQw.png" /></figure><p><strong>In practice</strong>, the real choice was between Nexus Pro and AWS CodeArtifact. JFrog and Pulp were eliminated early: JFrog due to total cost of ownership, and Pulp due to insufficient operational maturity for a fintech context. The decision was captured as an internal Architecture Decision Record before any migration work began.</p><p>The decisive factor was not feature parity. It was the realisation that <strong>the artifact registry is infrastructure, not a product we wanted to operate</strong>. Every hour spent patching Nexus, planning version upgrades, monitoring disk usage, and handling rate-limit incidents was an hour not spent on the EKS platform itself. A managed service shifts that work to AWS.</p><p>The trade-off was explicit and deliberate: CodeArtifact covers the main package ecosystems we depend on through poxy repositories — npm, NuGet, and PyPI — alongside Maven, Cargo, RubyGems, and several others we did not need. It does not support Docker images, APT, YUM, or Helm. We accepted that trade-off by migrating only the formats for which CodeArtifact provides proxy support and keeping Nexus running as a scaled-down fallback for everything else.</p><h3><strong>Architecture Overview: A Two-Tier Registry Model</strong></h3><p>The post-migration design is a deliberate two-tier model where each tier does what it does best.</p><p>At a high level:</p><ul><li>GitLab CI runners on EC2 assume IAM roles to authenticate against <strong>AWS CodeArtifact</strong> for npm, NuGet, and PyPI traffic</li><li>CodeArtifact and its S3 back-end are reached over VPC Interface and Gateway Endpoints, keeping artifact traffic within the AWS network with no internet egress</li><li>The downsized Nexus instance continues to serve Docker images, APT, YUM, Helm, and raw GitHub proxies over the existing private VPC route</li><li>CodeArtifact domains, repositories, and access policies are managed through Terraform alongside the rest of the platform infrastructure</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eoRVQAqiOcP2tjVIEFr38Q.jpeg" /></figure><p>The split between the two tiers is drawn along a clear line:</p><ul><li><strong>AWS CodeArtifact</strong> serves the high-volume language-package formats that were generating the bulk of the traffic that triggered the 402: npm, NuGet, and PyPI. These are the formats every microservice build touches on every pipeline run, several times per pipeline.</li><li><strong>Nexus (downsized)</strong> continues to serve the formats AWS does not yet manage natively: Docker images and proxies (Docker Hub, GitHub Container Registry, Quay, public.ecr.aws, Kubernetes registry, Microsoft images), APT (Debian Bookworm, Trixie, Ubuntu Noble), YUM (Fedora), Helm charts, and raw GitHub proxies.</li></ul><p>Moving the noisy formats to CodeArtifact removed the daily-quota pressure from Nexus. The Nexus instance type could then be reduced, the disk pressure dropped, and the operational risk of a single self-hosted registry was contained to the formats that did not have a managed alternative.</p><p>The design philosophy is straightforward: <strong>delegate to managed services where they exist, self-host only what cannot be delegated, and size each tier to the actual traffic it carries.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MqYwXIFoesY7s0QAGVbEAA.png" /></figure><h3><strong>Migrating Under Pressure: Biggest Consumer First</strong></h3><p>The migration was not executed as a stop-the-world cutover. It could not be — production builds were already failing intermittently.</p><p>Instead, the migration was sequenced by traffic share. The single largest CI consumer of Nexus quota was migrated to CodeArtifact in the first week after the ADR was accepted. That one project, once cut over, removed enough load from Nexus to bring the daily counter back below the 200,000 ceiling. The pressure dropped, builds stopped failing, and the remaining 340+ projects migrated in the following weeks at a normal cadence.</p><p>This sequencing turned out to be the most important operational decision in the entire project. A traditional “migrate everything, then switch” plan would have left the platform broken for weeks. Migrating the heaviest consumer first turned a production incident into a controlled rollout.</p><p>For each project, the migration changed three things:</p><ul><li>The CI pipeline gained an <strong>aws codeartifact login</strong> step, executed with the runner’s IAM role</li><li>Project configuration files (.npmrc, pip.conf, NuGet.config) were rewritten to point at the CodeArtifact repository URL</li><li>The base image used by the runner was updated to include the AWS CLI, so the login step would succeed without per-project installation</li></ul><p>For the developer, the change was visible only as a different repository URL in the project configuration. The authentication, refresh, and credential rotation were all handled by IAM and the CodeArtifact login command. There were no long-lived tokens to manage and no service accounts to rotate.</p><p>Benefits included:</p><ul><li>No further HTTP 402 failures on the migrated formats</li><li>Authentication via IAM roles attached to GitLab runners on EC2, with no long-lived tokens to manage</li><li>Credential rotation handled by AWS, not by the platform team</li><li>Per-project access scoped by IAM policy, auditable through CloudTrail</li><li>Migration could proceed project-by-project without a coordinated downtime window</li></ul><h3><strong>Authentication and Networking: IAM as the Control Plane</strong></h3><p>The most significant operational change was not the registry itself. It was the authentication model.</p><p>Under Nexus, every CI runner used long-lived credentials stored in pipeline variables and rotated them manually. Under CodeArtifact, GitLab runners assume IAM roles and exchange them for short-lived authentication tokens through the <strong>aws codeartifact login </strong>command, which writes the token into the relevant package-manager configuration for the duration of the build.</p><p>The networking model is equally direct. CodeArtifact and its S3 back-end are reached over a <strong>VPC interface</strong> endpoint (<strong>PrivateLink</strong>) for CodeArtifact, plus an <strong>S3 gateway endpoint</strong> for the backing store, keeping all artifact traffic on the AWS backbone. There is no internet egress for package pulls, which both reduces NAT costs and tightens the network audit boundary.</p><p>This matters for three reasons which compound in a regulated environment:</p><ul><li><strong>No long-lived tokens.</strong> A compromised runner credential is bounded by the IAM session, not by manual rotation cadence.</li><li><strong>Audit trail by default.</strong> Every GetAuthorizationToken, every package read, and every package published appears in CloudTrail, tagged with the assuming role. Audit responses go from “we’ll dig through Nexus logs” to “here is the CloudTrail query.”</li><li><strong>Permissions as code.</strong> Repository access is granted through IAM policies managed in Terraform, alongside the rest of the platform’s infrastructure. Adding a new project to the registry is a pull request, not a click in a Nexus admin console.</li></ul><h3><strong>Cost: From License Negotiation to a Utility Bill</strong></h3><p>A common assumption is that managed services are more expensive than self-hosting. For artifact registries at our scale, the opposite is true.</p><p>The Nexus Pro license alone would have cost approximately <strong>$15,000 per year</strong>. That number does not include the EC2 instance, EBS storage, backups, patching effort, version upgrade work, monitoring, or the on-call burden of disk-pressure incidents, all of which we were already paying for under Nexus OSS.</p><p>CodeArtifact, after absorbing the npm, NuGet, and PyPI workload for all ~350 projects, costs us <strong>roughly $60–$90 per month</strong>, billed on storage and request volume. That is about $720–$1,080 per year, against the $15,000 license figure — and that comparison still understates the win because it ignores the EC2 hours and engineering time that left the books at the same time.</p><p>Three structural reasons underlie the cost change:</p><ul><li><strong>Pay-per-request pricing.</strong> Idle repositories cost nothing beyond storage. There is no fixed minimum.</li><li><strong>Native lifecycle policies.</strong> Old versions are pruned automatically, keeping storage costs flat.</li><li><strong>No infrastructure to right-size.</strong> The EC2 instance that Nexus ran on could be downsized once the high-traffic formats left, recovering further compute spend.</li></ul><p>Cost and security are not opposites in this design. The pricing model that makes CodeArtifact cheap is the same model that makes it auditable. Every request is metered; every request is logged.</p><h3><strong>Lessons Learned</strong></h3><p>Several lessons came out of this migration that are worth capturing for any team considering the same move.</p><ul><li><strong>A rate limit is an architectural signal, not just an operational problem.</strong> When a self-hosted service introduces a hard ceiling that breaks production, the right response is rarely to engineer around the ceiling. It is to ask whether self-hosting was the right call in the first place. Caching layers and quota dashboards would have bought time; they would not have removed the underlying ownership cost.</li><li><strong>Migrate the loudest consumer first.</strong> In a 350-project migration triggered by a live incident, sequencing matters more than completeness. Cutting over the single biggest traffic source in week one returned headroom to the old system and bought the time needed to migrate the rest at a normal pace. A stop-the-world cutover would have extended the outage.</li><li><strong>Accept partial managed-service coverage.</strong> CodeArtifact does not support every artifact format. Trying to find a single managed service that covers Docker, APT, YUM, Helm, and language packages would have meant either staying on Nexus or moving to a costlier commercial platform. Splitting the stack — managed for what’s covered, self-hosted for the rest — is a more honest architecture than pretending a single service can do everything.</li><li><strong>IAM replaces a whole category of credential operations.</strong> The largest operational simplification was not the registry itself. It was the disappearance of long-lived tokens and the rotation policies that surround them. In a regulated environment, every long-lived credential is also an audit obligation. Replacing them with short-lived IAM-derived tokens removes that obligation.</li><li><strong>Managed services move work, not eliminate it.</strong> CodeArtifact removed the EC2 patching, the disk monitoring, and the upgrade planning. It did not remove the need to think about access control, repository design, or lifecycle policies. The work is different, not absent.</li></ul><h3><strong>Recommendations for Teams Considering a Similar Move</strong></h3><p>Teams evaluating whether to leave a self-hosted artifact registry behind can reduce risk by adopting a few principles early.</p><p>Start by <strong>inventorying traffic by format</strong>, not by repository count. The format generating the most requests is almost always a language-package proxy, and almost always the one a managed service like CodeArtifact will cover. The migration ROI is concentrated there.</p><p>Treat <strong>the artifact registry as part of the audit boundary</strong>. Every credential, every endpoint, and every log path is part of the supply-chain story for compliance reviewers. Managed services with native IAM and CloudTrail integration shorten that story.</p><p>Adopt <strong>Infrastructure as Code from the first repository</strong>. Manage CodeArtifact domains, repositories, and access policies through Terraform from the start. Click-ops registries become un-auditable registries within a year.</p><p><strong>Sequence the migration by traffic, not by team boundary.</strong> A migration triggered by a production incident is not a tidy project; it is an incident response. Move the biggest consumer first to relieve the pressure on the legacy system, then let the rest follow.</p><p>Finally, <strong>keep the legacy system alive as a downsized fallback</strong> for formats the managed service does not cover. Pretending the old system is gone is a marketing claim. Keeping it operational, smaller, and clearly scoped is an engineering decision.</p><h3><strong>What’s Next</strong></h3><p>The next logical step is to extend the managed-service model to container images. <strong>Amazon Elastic Container Registry (ECR)</strong> is the natural target for the Docker workload still served by Nexus, with <strong>ECR pull-through cache</strong> replacing the upstream proxies for Docker Hub, GitHub Container Registry, Quay, and the public AWS registry. Helm chart distribution moves to ECR’s OCI artifact support in the same step.</p><p>Once Docker leaves Nexus, the remaining Nexus footprint is narrow: APT, YUM, and raw GitHub proxies. At that point, the question of whether to retire Nexus entirely — and replace the remaining formats with a thinner self-hosted alternative or a different managed pattern — becomes worth asking.</p><h3><strong>Conclusion</strong></h3><p>The mandate that started this work was straightforward: keep CI building, keep developers shipping, and do it without writing a $15,000 cheque to retain a self-hosted platform we were already maintaining. The result was not a single replacement product but a deliberate split — a managed AWS service for the formats it covers, a downsized self-hosted instance for the rest, and a clear roadmap for narrowing the self-hosted footprint over time.</p><p>The key takeaway here is that the choice between self-hosted and managed is rarely binary and rarely permanent. It is a question to be re-asked every time the underlying service changes — whether the change is a new rate limit, a new pricing tier, or a new managed alternative. In our case, a single HTTP status code was enough to reopen the question. The answer, this time, was AWS CodeArtifact.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AZOHGPBniP5GwDYnkFaEuA.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=188f49dbadc9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Secure, Internet-Isolated Fintech Platform on AWS]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/building-a-secure-internet-isolated-fintech-platform-on-aws-d76d04a67106?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/d76d04a67106</guid>
            <category><![CDATA[fintech]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Mon, 30 Mar 2026 06:26:24 GMT</pubDate>
            <atom:updated>2026-03-30T07:31:12.287Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Authors: </strong><a href="https://medium.com/u/20d1a76d43fb"><strong>Artem Hrechanychenko</strong></a><strong>, </strong><a href="https://medium.com/u/defed876190f"><strong>Stas Kolenkin</strong></a></p><p><em>Designing a production-grade, zero-internet-access environment with Amazon EKS and AWS managed services</em></p><p>Financial institutions face a structural tension: they are expected to deliver modern, cloud-native applications at speed while operating under some of the industry’s most stringent security and compliance requirements.</p><p>For many fintech and banking platforms, this tension resolves into a clear mandate: production workloads must not have direct internet access. Eliminating internet connectivity significantly reduces the attack surface and helps meet regulatory expectations — but it also raises difficult questions.</p><ul><li>How do you support modern CI/CD pipelines?</li><li>How do you enable fast release cycles?</li><li>How do developers remain productive without direct access to infrastructure?</li></ul><p>This article outlines how we designed and deployed a fully internet-isolated, production-grade fintech platform on AWS, running multiple microservices on Amazon EKS. The result is an environment that meets regulatory and security requirements without compromising operational efficiency or developer velocity.</p><h3>The Challenge: Security Without Slowing Delivery</h3><p>Our client operates mission-critical banking applications and requires a platform with strict constraints:</p><ul><li>No direct internet access for workloads</li><li>No NAT Gateway or Internet Gateway in production VPCs</li><li>Full isolation from corporate and banking networks</li><li>Complete auditability of all changes and network flows</li><li>Support for modern DevOps and GitOps workflows</li></ul><p>At the same time, the platform needed to support external customer-facing services and integrate with internal banking systems, while maintaining tight perimeter controls. Meeting these requirements demanded more than tightening security controls — it required re-thinking network, access, and operational design from first principles.</p><h3>Architecture Overview: A Private, Controlled Core</h3><p>We designed the platform around a private, internet-isolated core. All ingress and egress traffic flows through explicit, controlled entry and exit points, with no implicit connectivity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*vcWVAwVLgmUL2QkFw3XiMw.png" /></figure><p>At a high level:</p><ul><li>External traffic enters through<strong> AWS WAF</strong> and an <strong>Application Load Balancer (ALB)</strong>, protected by <strong>AWS Shield</strong> and TLS certificates managed by <strong>AWS Certificate Manager</strong>.</li><li>Traffic is forwarded to a <strong>Network Load Balancer (NLB)</strong> provisioned by Istio, which handles internal routing into the service mesh.</li><li>Internal services communicate using <strong>Amazon Route 53 Private Hosted Zones</strong>, maintaining clear separation between public and private resolution.</li><li>All outbound traffic exits through <strong>AWS Transit Gateway</strong> and dedicated hardware firewalls, providing a single inspection and logging point.</li></ul><p>There are no NAT Gateways, no Internet Gateways, and no public EKS endpoints. This design ensures every network path is intentional, observable, and auditable.</p><h3>Enforcing Isolation at the Pod Network Layer</h3><p>In regulated environments, isolation cannot rely solely on policy. It must be enforced at the infrastructure level.</p><p>One of our most critical requirements was to ensure that pod IP addresses could never be routed into corporate or banking networks — even accidentally.</p><h3>Using Non-Routable CGNAT Space</h3><p>We configured the VPC CNI plugin to assign pod IP addresses from a non-routable CGNAT range:</p><p><strong>Pod CIDR: 10.0.0.0/16</strong></p><p>This range is intentionally not allocated through AWS IPAM and is not routable across the Transit Gateway. As a result:</p><ul><li>Pod traffic cannot leak into internal networks</li><li>Internal WAN routes never overlap with pod addresses</li><li>Routing boundaries create an additional isolation layer</li><li>The EKS cluster has virtually unlimited pod IP capacity</li></ul><h3><a href="https://docs.aws.amazon.com/eks/latest/best-practices/custom-networking.html">VPC CNI Custom Networking</a></h3><p>To implement this model, we used VPC CNI custom networking with ENIConfig resources per Availability Zone and node group. Each worker node uses an ENIConfig that references dedicated subnets mapped to the 10.0.0.0/.16 range. This configuration allows us to:</p><ul><li>Separate node and pod routing paths</li><li>Maintain deterministic pod egress flow toward the Transit Gateway and firewalls</li><li>Apply strict routing and firewall policies</li><li>Simplify troubleshooting with clean IP separation</li></ul><h3>ENI Prefix Delegation</h3><p>For better scalability, we enabled ENI prefix delegation. Each ENI receives a /28 prefix, providing up to 16 pod IPs per prefix. The benefits:</p><ul><li>Far fewer Amazon EC2 API calls</li><li>Faster pod scheduling and accelerated node scale-out</li><li>Higher pod density per node</li><li>Lower operational overhead</li></ul><h3><a href="https://github.com/aws/amazon-vpc-cni-k8s">Configuration Details</a></h3><p>We run the VPC CNI plugin in custom network configuration mode:</p><p>AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true</p><p>AWS_VPC_K8S_CNI_EXTERNALSNAT=false</p><p>Setting AWS_VPC_K8S_CNI_EXTERNALSNAT=false ensures the node performs SNAT. This enables fully deterministic egress through the firewall while preserving pod identity visibility for the Security Operations Center (SOC) and audit systems.</p><h3>Routing Isolation as a Security Control</h3><p>Because 10.0.0.0/16 is non-routable through Transit Gateway:</p><ul><li>Pod subnets are physically unreachable by internal networks</li><li>No accidental trust relationships can form</li><li>Zero risk of IP overlap with banking systems</li><li>Routing boundaries enforce least privilege by default</li></ul><p>Application egress still works normally. Pod traffic is SNATed on the node, and egress leaves the VPC using the node’s primary VPC IP address. This address is routable through the Transit Gateway and inspected at the hardware firewall.</p><p>This design combines pod-level isolation with controlled egress and full auditability — a hardened network posture aligned with financial regulatory requirements.</p><h3>DNS as a Security Control</h3><p>DNS is often overlooked — but in isolated environments, it becomes a critical control plane.</p><p>Instead of using Amazon Route 53 Resolver for inbound and outbound queries, we deployed EC2-based DNS resolvers with static IPs. These resolvers:</p><ul><li>Host authoritative records for platform-specific internal domain</li><li>Forward queries for broader internal namespaces</li><li>Maintain predictable behavior for firewall rules and monitoring</li></ul><p>This model gives us complete control over DNS behavior, change management, and inspection, while maintaining the benefits of AWS private networking.</p><h3>Access Model: Zero Direct Human Access</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VHdDb_mAqINSyklE9bzJuw.png" /></figure><p>To maintain auditability and reduce risk, we adopted a zero-direct-access model for both production and test environments.</p><ul><li>Developers do not access Amazon EKS clusters directly</li><li>All changes flow through GitOps pipelines using Argo CD</li><li>Amazon EKS API endpoints are private and inaccessible from the internet</li></ul><p>This model simplifies compliance, improves traceability, and removes an entire class of operational risk — while still enabling rapid iteration through automated pipelines.</p><h3>Security Built Into the Platform</h3><p>Security controls are layered and automated throughout the environment:</p><ul><li>AWS WAF and AWS Shield protect external entry points</li><li>Service Control Policies (SCPs) restrict unnecessary AWS API usage</li><li>AWS CloudTrail, AWS Config, and GuardDuty provide continuous auditing</li><li>Encryption is enforced using AWS KMS customer-managed keys</li><li>Automated compliance checks and remediation run continuously</li><li>Scheduled security audits are executed via Prowler</li></ul><p>The platform successfully passed the AWS Foundational Technical Review (FTR) and a dedicated Amazon EKS security audit, validating the architecture against AWS best practices.</p><h3>Automation and CI/CD in a Private World</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*akC9DkQlYKJjskM19hHmJg.png" /></figure><p>Internet isolation does not eliminate CI/CD — it changes how it’s designed.</p><p>All pipelines run on private infrastructure and interact exclusively through VPC endpoints and internal services. Key elements include:</p><ul><li>Golden AMIs built and signed using EC2 Image Builder</li><li>Automated patching and configuration via AWS Systems Manager</li><li>Image scanning and secret detection integrated into CI workflows</li><li>Amazon EKS Pod Identity for secure, token-free IAM access</li></ul><p>The result is a delivery pipeline that is fully automated, fully auditable, and entirely private.</p><h3>FinOps: Making Private Infrastructure Cost-Effective</h3><p>A common misconception is that private environments are inherently expensive. In practice, cost discipline must be intentional.</p><p>We applied FinOps principles from the start:</p><ul><li>Karpenter dynamically right-sizes EKS compute capacity</li><li>AWS Graviton instances reduce compute costs for compatible workloads</li><li>Managed services (ECR, CodeArtifact) replace self-hosted tooling</li><li>Eliminating NAT Gateways significantly reduces egress costs</li><li>AWS Budgets and cost allocation tags provide visibility and control</li></ul><p>Security and cost efficiency are not opposites — when designed together, they reinforce each other.</p><h3>Lessons Learned</h3><p>Several important themes emerged during the design and operation of this platform, each reinforcing the criticality of early architectural decisions in regulated environments.</p><ul><li><strong>Network design comes first.</strong> Operating without Internet Gateways or NAT Gateways fundamentally shapes every downstream decision, from CI/CD pipelines to DNS resolution and service connectivity. Treating the network as an afterthought would have resulted in costly rework. By designing routing, ingress, egress, and VPC endpoints upfront, we were able to build security into the foundation rather than layering it on later.</li><li><strong>GitOps changes culture, not just tooling.</strong> Removing direct human access to clusters improves security and auditability, but it also requires a shift in how teams work. Developers must trust automation and pipelines rather than rely on ad hoc fixes. Clear communication, training, and strong feedback loops were essential to making this transition successful and ensuring teams remained productive.</li><li><strong>DNS is foundational infrastructure.</strong> In an internet-isolated environment, DNS becomes a critical control plane rather than a background service. Taking ownership of DNS behavior increased our operational responsibilities, particularly around availability and scaling, but it also provided predictability, stronger security boundaries, and better alignment with firewall and monitoring requirements.</li><li><strong>Security is a continuous process.</strong> Passing an audit is not the end state. Maintaining a strong security posture requires constant validation, automated controls, and regular testing. Tools like AWS Config, Prowler, and Service Control Policies helped ensure that security expectations were enforced consistently over time, even as the platform evolved.</li><li><strong>Private environments don’t have to be slow or expensive.</strong> With the right architectural choices, automation, and cost controls, a fully private platform can still support fast delivery and remain cost-efficient.</li></ul><p>Technologies such as Karpenter, AWS Graviton, and managed AWS services played a key role in balancing security, performance, and cost.</p><h3>Recommendations for Regulated AWS Environments</h3><p>Teams designing regulated platforms on AWS can reduce risk and complexity by adopting a few foundational practices early in their journey.</p><p>Start by <strong>designing network and access models before building applications</strong>. Decisions around routing, ingress, egress, DNS, and identity have far-reaching implications and are much harder to change once workloads are in production. A clear upfront design creates a stable foundation for both security and scalability.</p><p>Treat <strong>DNS, routing, and identity as first-class security controls</strong>, not just supporting services. In tightly controlled environments, these layers define trust boundaries and determine what can communicate with what. Investing in their design pays dividends in auditability and operational clarity.</p><p>Adopting <strong>GitOps as the primary operational model</strong> significantly reduces human risk while improving traceability. When all changes flow through version-controlled pipelines, audits become simpler, rollbacks become safer, and environments remain consistent.</p><p>Automation should be embedded from day one. <strong>Compliance checks, security audits, and tagging enforcement</strong> are far more effective when they run continuously rather than as periodic manual reviews. Automation helps teams maintain compliance as the platform evolves.</p><p>Finally, <strong>use AWS managed services wherever possible</strong>. Managed services reduce operational overhead, improve reliability, and enable teams to focus on security, compliance, and application delivery rather than on infrastructure maintenance.</p><h3>Conclusion</h3><p>Building a fintech platform on AWS requires balancing security, compliance, and developer velocity. By eliminating direct internet access, using AWS managed services, and automating security and cost controls, we created a resilient, auditable, and cost-efficient environment for highly regulated workloads.</p><p>If you’re working in a similar space, start with network and access design. Integrate security controls into your development process, not as an afterthought. Use services like VPC endpoints, AWS Shield, Amazon GuardDuty, AWS Config, and Karpenter to simplify operations. Adopt GitOps and automate everything you can.</p><p>This approach proves that tight security controls and fast development cycles aren’t mutually exclusive — they just need the right architecture.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d76d04a67106" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Optimizing MLOps Costs with Dynamic Node Provisioning on Amazon EKS]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/optimizing-mlops-costs-with-dynamic-node-provisioning-on-amazon-eks-59f0ab4d6e8e?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/59f0ab4d6e8e</guid>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Tue, 06 Jan 2026 15:44:48 GMT</pubDate>
            <atom:updated>2026-01-13T10:17:50.043Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Authors</strong>: <a href="https://medium.com/u/defed876190f">Stas Kolenkin</a>, <a href="https://medium.com/u/abd43ecc118c">Denys Verveiko</a></p><p>Machine learning (ML) teams often face a familiar challenge: balancing compute performance with infrastructure costs. Model training can take hours or even days of high-performance computing, while inference and orchestration workloads typically require far less capacity.</p><p>Static Kubernetes clusters often lead to overprovisioned environments that waste money or underprovisioned ones that cause performance bottlenecks.</p><p>In this post, we demonstrate how to use Amazon Elastic Kubernetes Service (Amazon EKS) with Karpenter, an open-source Kubernetes cluster autoscaler, to dynamically provision compute nodes on demand. This approach enables organizations to match compute resources to workload requirements in real-time, helping to improve performance and reduce costs for MLOps workloads on AWS.</p><h3>Why Static Node Groups Drive Up MLOps Costs</h3><p>Most Kubernetes clusters on AWS use static node groups — predefined Amazon Elastic Compute Cloud (Amazon EC2) instances that run continuously. For ML platforms such as Kubeflow, static nodes create several operational challenges:</p><ul><li><strong>Intermittent high-demand workloads: </strong>Training jobs require GPU or high-memory instances only during specific windows.</li><li><strong>Variable inference demand:</strong> Inference workloads scale up or down with unpredictable external requests.</li><li><strong>Bursty development pipelines: </strong>Data preprocessing and testing often produce short-lived, high-intensity workloads.</li></ul><p>Organizations face a tradeoff between paying for idle capacity or risking resource shortages that slow experimentation and deployment.</p><h3>Case Study: Scaling Forecasting Workloads Efficiently</h3><p>A retail technology company <a href="https://temabit.com/case-studies/mlops-platform/">built a forecasting platform</a> using Kubeflow on Amazon EKS to predict daily sales for more than 10 million item-store-date combinations within a month. The system processes over 10 GB of Parquet files per run and executes up to 300 concurrent forecasting jobs. The computational requirements vary significantly throughout the day:</p><ul><li><strong>Model training:</strong> Runs for approximately 4 hours with high CPU and memory utilization.</li><li><strong>Forecast generation:</strong> Executes in parallel for about 1 hour with moderate compute demand.</li><li><strong>Idle periods:</strong> Require minimal resources for orchestration and monitoring.</li></ul><p>With static node groups, the company would need to maintain sufficient capacity to support peak loads — 300 concurrent jobs — 24 hours a day, resulting in substantial idle costs during periods of low activity.</p><p>The following architecture illustrates how these components work together to deliver a scalable and cost-efficient MLOps platform on Amazon EKS:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*0OrY6zRwuQf5AQVlTz0y9Q.png" /></figure><h3>How Karpenter Enables Dynamic and Cost-Efficient Provisioning</h3><p>Karpenter is an open-source Kubernetes cluster autoscaler that automatically provisions compute nodes based on pending pod requirements. Unlike the standard Kubernetes Cluster Autoscaler, which scales predefined node groups, Karpenter directly launches Amazon EC2 instances that match the exact resource needs of your workloads.</p><p>For machine learning workflows, Karpenter provides the following benefits:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/743/1*za872CGHN9F-Iu_-uqcQsQ.jpeg" /></figure><p>When running Kubeflow pipelines on Amazon EKS, each step can specify its own resource requirements. Karpenter provisions and retires nodes accordingly, ensuring that the cluster footprint scales precisely with workload demand.</p><p>For the forecasting platform, this means:</p><ul><li>Automatically scaling up to 300 nodes during peak forecasting periods.</li><li>Running high-memory or GPU instances only during training.</li><li>Scaling back to a minimal footprint during idle periods.</li></ul><h3>Organizing Dynamic Nodes with Clear Naming Conventions</h3><p>Dynamic node provisioning introduces new operational challenges — particularly in identifying which nodes serve specific workloads. Consequently, without consistent organization, troubleshooting, capacity planning, and cost attribution become more complex.</p><p>A simple prefix-based naming convention can address this. By categorizing nodes by capacity (for example, S-, M-, L-, or XL-), teams can quickly:</p><ul><li><strong>Gain visibility:</strong> Understand node capabilities at a glance in cluster views.</li><li><strong>Simplify debugging:</strong> Trace jobs and performance metrics to specific resource tiers.</li><li><strong>Improve cost tracking:</strong> Align node groups with workload categories in AWS Cost Explorer.</li></ul><p>In the forecasting platform example, small (S-) nodes handle orchestration and lightweight processing, while larger (L- and XL-) nodes manage data-intensive training and forecasting workloads.</p><p>To implement this naming convention in the cluster, you can define a dedicated Karpenter NodePool and NodeClass for each node tier, as shown below:</p><pre>apiVersion: karpenter.sh/v1beta1<br>kind: NodePool<br>metadata:<br>  name: s-nodes<br>spec:<br>  template:<br>    metadata:<br>      labels:<br>        node.kubernetes.io/type: &quot;s&quot;<br>    spec:<br>      nodeClassRef:<br>        name: s-nodeclass<br>      requirements:<br>        - key: &quot;karpenter.k8s.aws/instance-family&quot;<br>          operator: In<br>          values: [&quot;m6&quot;, &quot;m6a&quot;]<br>        - key: &quot;karpenter.sh/capacity-type&quot;<br>          operator: In<br>          values: [&quot;spot&quot;, &quot;on-demand&quot;]<br>  limits:<br>    cpu: 100<br>---<br>apiVersion: karpenter.k8s.aws/v1beta1<br>kind: EC2NodeClass<br>metadata:<br>  name: s-nodeclass<br>spec:<br>  amiFamily: AL2023<br>  role: &quot;KarpenterNodeRole&quot;<br>  subnetSelector:<br>    karpenter.sh/discovery: &quot;eks-demo&quot;<br>  securityGroupSelector:<br>    karpenter.sh/discovery: &quot;eks-demo&quot;</pre><p>To automatically route workloads to the correct node tier based on their prefix, you can use a Kyverno policy that adds the appropriate node affinity to matching pods:</p><pre>apiVersion: kyverno.io/v1<br>kind: ClusterPolicy<br>metadata:<br>  name: apply-node-affinity-based-on-pod-prefix<br>spec:<br>  mutateExistingOnPolicyUpdate: true<br>  rules:<br>    - name: add-affinity-s<br>      match:<br>        resources:<br>          kinds:<br>            - Pod<br>          name: &quot;s-*&quot;<br>      mutate:<br>        patchStrategicMerge:<br>          spec:<br>            affinity:<br>              nodeAffinity:<br>                requiredDuringSchedulingIgnoredDuringExecution:<br>                  nodeSelectorTerms:<br>                    - matchExpressions:<br>                        - key: node.kubernetes.io/type<br>                          operator: In<br>                          values:<br>                            - &quot;s&quot;<br><br>    - name: add-affinity-m<br>      match:<br>        resources:<br>          kinds:<br>            - Pod<br>          name: &quot;m-*&quot;<br>      mutate:<br>        patchStrategicMerge:<br>          spec:<br>            affinity:<br>              nodeAffinity:<br>                requiredDuringSchedulingIgnoredDuringExecution:<br>                  nodeSelectorTerms:<br>                    - matchExpressions:<br>                        - key: node.kubernetes.io/type<br>                          operator: In<br>                          values:<br>                            - &quot;m&quot;<br><br>    - name: add-affinity-l<br>      match:<br>        resources:<br>          kinds:<br>            - Pod<br>          name: &quot;l-*&quot;<br>      mutate:<br>        patchStrategicMerge:<br>          spec:<br>            affinity:<br>              nodeAffinity:<br>                requiredDuringSchedulingIgnoredDuringExecution:<br>                  nodeSelectorTerms:<br>                    - matchExpressions:<br>                        - key: node.kubernetes.io/type<br>                          operator: In<br>                          values:<br>                            - &quot;l&quot;</pre><h3>Measuring the Cost and Performance Benefits</h3><p>Organizations adopting Karpenter with Amazon EKS often observe the following improvements:</p><ul><li><strong>Lower idle costs:</strong> Nodes exist only during active workloads.</li><li><strong>Better instance matching:</strong> Compute is right-sized to each job, minimizing waste.</li><li><strong>Higher utilization:</strong> Resource consumption closely tracks demand.</li><li><strong>Elastic capacity:</strong> Large experiments scale up temporarily, then automatically scale down.</li></ul><p>In the retail forecasting use case, the company achieved an estimated 30–50% reduction in compute costs by combining Karpenter, Amazon EC2 Spot Instances, and Savings Plans. Dynamic autoscaling eliminated idle capacity costs while maintaining service-level objectives during peak workloads.</p><p>Beyond cost optimization, the platform also reduced model deployment cycles — from weeks to hours — enabling data scientists to iterate faster and improve model quality.</p><h3>Building a Scalable, Cost-Optimized MLOps Platform</h3><p>Dynamic node provisioning works best as part of an integrated, managed MLOps architecture. The forecasting platform combined several AWS services to achieve scalability, reliability, and cost efficiency:</p><ul><li><strong>Amazon EKS</strong> provides the managed Kubernetes control plane, removing cluster management overhead.</li><li><strong>Amazon Aurora</strong> serves as the metadata store for Kubeflow, decoupling pipeline state from the cluster and improving fault tolerance.</li><li><strong>Amazon Simple Storage Service (Amazon S3)</strong> stores raw data, features, and inference results. Pipelines read and write Parquet files directly from S3, while Karpenter scales compute capacity as needed.</li><li><strong>AWS Identity and Access Management (IAM)</strong> and <strong>AWS Secrets Manager</strong> manage authentication and secret rotation, integrated with on-premises identity systems through AWS Direct Connect.</li><li><strong>Amazon CloudWatch</strong> and <strong>AWS Budgets</strong> offer observability and cost management, providing alerts to prevent unexpected expenses.</li></ul><p>This architecture allowed the company to deploy workloads in private subnets, isolate sensitive components, and maintain production-grade reliability — all while minimizing infrastructure overhead.</p><h3>Best Practices for Configuring Dynamic Node Provisioning</h3><p>To maximize efficiency and control costs when implementing dynamic node provisioning:</p><ol><li><strong>Set node termination policies carefully:</strong> Configure Karpenter to remove idle nodes promptly but safely.</li><li><strong>Standardize naming conventions:</strong> Use consistent prefixes (S-, M-, L-, XL-) for clarity and cost tracking.</li><li><strong>Define resource boundaries:</strong> Set maximum vCPU and memory limits per node type to avoid runaway costs.</li><li><strong>Specify pod resource requests:</strong> Define CPU, memory, and GPU needs in Kubernetes manifests to ensure optimal instance selection.</li><li><strong>Monitor continuously:</strong> Use Amazon CloudWatch, Prometheus, or Grafana to track utilization and identify opportunities for optimization.</li><li><strong>Use Spot Instances for fault-tolerant jobs:</strong> Combine Amazon EC2 Spot Instances with Karpenter’s instance diversity for additional savings.</li></ol><h3>Conclusion: Dynamic Provisioning as a Catalyst for Scalable MLOps</h3><p>By combining Amazon EKS with Karpenter, organizations can dynamically match compute capacity to workload requirements — reducing costs while maintaining the agility that modern ML teams need.</p><p>The retail forecasting platform described in this post demonstrates these benefits in production:</p><ul><li>Processing more than 10 million daily predictions</li><li>Running hundreds of concurrent jobs</li><li>Achieving 30–50% compute cost savings while reducing deployment cycles from weeks to hours.</li></ul><p>For teams running Kubeflow or similar machine learning platforms on AWS, dynamic node provisioning provides a practical and cost-effective path to scalable and efficient MLOps.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=59f0ab4d6e8e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[elKasa Earned the AWS Qualified Software Status]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/elkasa-earned-the-aws-qualified-software-status-470a98cb456a?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/470a98cb456a</guid>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Fri, 13 Sep 2024 12:38:04 GMT</pubDate>
            <atom:updated>2024-09-13T12:38:04.361Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Massive digital transformations are now in full swing in all companies of the Fozzy Group holding, TemaBit included. We migrate data from on-prem data centers to Amazon Web Services (AWS) cloud storage and refactor our applications using cloud-native architecture patterns. Our goal is to modernize the systems used by the business to solve both operational and strategic tasks.</em></p><p><em>In our</em><a href="https://medium.com/@TemaBitFozzyGroup/fozzy-group-%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C-%D0%BD%D0%B0-aws-%D0%BF%D0%B5%D1%80%D1%88%D1%96-%D0%BA%D1%80%D0%BE%D0%BA%D0%B8-%D1%82%D0%B0-%D0%B2%D0%B8%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8-a56f3ba794b9"><em> previous post</em></a><em>, we described how the migration process started; in today’s post, we’d like to share a few recent achievements. We received a higher AWS Partner tier — Advanced and got dozens of AWS Certifications.</em></p><p>This summer, our <strong>elKasa project</strong> has successfully passed the <a href="https://aws.amazon.com/partners/foundational-technical-review/"><strong>AWS Foundational Technical Review (FTR)</strong></a> and earned the <strong>AWS Qualified Software </strong>status. Here is how we progressed with the project after its launch and how it will benefit from the new status.</p><p><strong>elKasa: Project Background</strong></p><p>We ventured into migration from on-prem to AWS infrastructure to respond to some security challenges, but it was not just data security that we achieved. Cloud computing services by Amazon allowed us new perspectives and a powerful impetus to advancement, eventually leading to a radical transformation in both development and operational mindsets. Our engineers got certified by AWS, which, in turn, enriched the arsenal of approaches and best practices we use for software development.</p><p>In late 2023, we launched a new AWS-based service — elKasa. In a nutshell, it replaces hardware Payment Transaction Registers (PTR) with Software Payment Transaction Registers (SPTR) and allows administering them from the cloud. You can find more information about this project in this post.</p><p>Using elKasa, we can now issue electronic receipts to our Guests. The switch to SPTR happens seamlessly as, while integrating the solutions, we can not stop the store operations. We pride ourselves in addressing this technical challenge.</p><p>As of now, elKasa is used in four entities of the Fozzy Group holding: the Silpo and Fora supermarket chains, THRASH! stores and Fozzy Cash&amp;Carry hypermarkets. The elKasa service is available in all Silpo and Fora supermarkets — 4466 SPTR in 316 Siplo supermarkets and 2408 SPTR in 328 Fora stores, and counting!</p><p>elKasa was designed to securely store the data, automate report generation and staff management, take care of the environment and optimize costs, reduce the waiting time at the cash register, and keep access to online order receipts.</p><p><strong>How We Received the AWS ‘Qualified Software’ Status</strong></p><p>To receive the AWS Qualified Software status, every application needs to go through the AWS Foundational Technical Review.</p><p>We evaluated elKasa’s architecture and submitted the documentation on the project to an Amazon architect, who confirmed that the app matches the quality attributes and cloud architecture standards.</p><p>Earning the ‘Qualified Software’ status was not our goal in itself. Since quality software is our priority, the elKasa team just wanted to validate whether they had chosen the right approach to development. Now it is safe to say that, elKasa’s architectural decisions and development approaches meet the modern cloud standards.</p><p><strong>The Benefits of the AWS Qualified Software Status</strong></p><p>The AWS Qualified Software status is valid for three years, so elKasa will have it expire after the 27th of July, 2027. It is worth mentioning that, as a part of the technical review process, the application’s architecture and operations are to be periodically reviewed against the given standards. This enables us to identify gaps and continually improve the solution.</p><p><strong>By earning the AWS Qualified Software status, we proved that:</strong></p><ul><li>our application meets the current standards and innovative requirements;</li><li>we are qualified to modernize other platforms and applications following the cloud standards;</li><li>our architects and engineers see maximization of the cloud benefits as their priority;</li><li>we are ready to handle various unpredictable situations along the software development cycle.</li></ul><p><strong>What’s Next?</strong></p><p>Though the AWS Qualified Software status will not be taken away, we do not plan to stop at the top. Cloud transformation of our applications continues in full swing. Let us now forget that even the most modern systems become obsolete and ineffective over time, so the improvement process is endless.</p><p>While changing the development process, we also transformed our approach to operations (i.e., the way we handle projects and workload). For instance, we adopted best SRE practices for SLA contracts in our applications, implemented modern FinOps approaches and conducted dedicated training on the FinOps framework for the project teams.</p><p>We have developed Disaster Recovery plans (DRP) for all projects to prevent force majeures and/or mitigate their negative consequences. We conduct a detailed post-mortem analysis of every incident, outlining the ways to address and mitigate them in the future.</p><p>Our cloud transformation goes on, despite the path being thorny. We plan to integrate elKasa for more stores and business entities. Our software engineers continue receiving AWS certifications, and we certainly plan to earn the AWS Qualified Software status for other applications. And, we develop new solutions based on cloud-native technology.</p><p>You can harness the benefits that the cloud offers only in case you never stop improving your solutions. So, there is still so much work ahead!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=470a98cb456a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why didn’t we do it before?]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/why-didnt-we-do-it-before-f58b8f06e39f?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/f58b8f06e39f</guid>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Thu, 14 Dec 2023 06:42:38 GMT</pubDate>
            <atom:updated>2023-12-14T06:42:38.915Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>A brand-new AWS-based service saves you time and money</strong></p><p>We continue to share our experience of switching to and working with Amazon Web Services. Earlier we’ve talked about some challenges and the <a href="https://medium.com/@TemaBitFozzyGroup/fozzy-group-%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C-%D0%BD%D0%B0-aws-%D0%BF%D0%B5%D1%80%D1%88%D1%96-%D0%BA%D1%80%D0%BE%D0%BA%D0%B8-%D1%82%D0%B0-%D0%B2%D0%B8%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8-a56f3ba794b9">switching process </a>itself. And since then, we’ve made a lot of progress.</p><p>For example, we already have our own AWS guru, who managed to get <a href="https://medium.com/@TemaBitFozzyGroup/12-out-of-12-hooray-learn-about-an-aws-certification-firsthand-3ee47e551924">12 certificates out of 12</a>. Our AWS community builder, Stanislav Kolenkin, is constantly being certified himself, inspiring the entire team to also move forward steadily.</p><p>What else have we made? In spring, we started <a href="https://medium.com/@TemaBitFozzyGroup/terraform-integration-at-temabit-fozzy-group-achieving-impactful-outcomes-5f534e67a78a">switching to Terraform</a>. This process is closely related to the company’s global transition to AWS Cloud. Although Terraform is used mainly to work with cloud infrastructure — Amazon, Google, Azure — its functionality is much more extensive. We’ve already tested its tools, and now we share our experience with others.</p><p>We also managed to design an AWS-based service for calculating promotions for hundreds of stores and launched a new service, elKasa, which is described below.</p><p>The point of the project is to replace hardware Payment Transaction Registers (PTR) with Software Payment Transaction Registers (SPTR) and to administer them from the cloud. To put it simply and more specifically, with AWS capabilities, we managed to improve the cash register service in Silpo supermarkets.</p><p><strong>So, what are the advantages of a software PTR?</strong></p><p>1. Security and safety of data storage, especially in conditions of volatility due to a full-scale war.</p><p>2. Implementation of the option of issuing electronic receipts in accordance with Ukrainian legislation. This also allows to:</p><ul><li>protect the environment: fewer paper receipts mean more preserved forests and less waste;</li><li>reduce the checkout time, which leads to less queuing;</li><li>retain access to the receipt when proceeding with online purchase (e-com);</li><li>optimize the cost of thermal tape and cash register equipment.</li></ul><p>3. Automation of reporting and administration of access to the system for employees. Previously, these tasks were mostly manual, time-consuming, and subject to human error.</p><p><em>Nothing’s gonna reSPTRain us</em>: first steps and challenges.</p><p>In April 2022, 13 specialists joined together to form a project team. There were .NET/SQL experts, DevOps, automated and manual testers, business analysts, architects, and project managers on the team.</p><p>The team took up AWS training and certification a bit later. They started with sorting out all the nuances on their own. The team relied entirely on their experience and knowledge and expanded it vastly in the process. This way of proceeding was very helpful in passing the AWS certification later.</p><p>But there were other challenges. In the midst of massive rocket attacks, the project team had to work exclusively online. Sometimes they even managed to work from the subway or other bomb shelters with no electricity, heat, or internet connection. But this did not stop them. <em>Nothing’s gonna reSPTRain us</em>, they used to make fun with each other those days.</p><p>Indeed, it was really incredible, we are proud of our colleagues!</p><p><strong>The first results</strong></p><p>By the end of November 2022, the team managed to launch cloud-based administration for the first SPTRs in Silpo stores.</p><p>Today we’ve:</p><ol><li>Integrated 4126 cash registers.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NhSN3JHO0RvQIPkw" /></figure><p>2. Covered 315 stores by 100% so far and continue to cover newly opened branches.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*aLJmOR9Gkt6-7cHe" /></figure><p>3. The cloud archive of receipts is already more than 140 million, and we’ve increased it by 25 million over the past month.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NOBocbOI8SK54kaP" /></figure><p>The team has also provided the colleagues with all the development, and they have already started synchronizing the app for Guests and elKasa. Now, our guests can choose to get electronic receipts instead of paper ones in most of our stores.</p><p>We have ambitious goals, so the work and rollout go on.</p><p>We intend not to rest on our laurels, but to push through our limits because AWS capabilities provide unlimited space for cool solutions.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f58b8f06e39f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Terraform Integration at TemaBit Fozzy Group: Achieving Impactful Outcomes]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/terraform-integration-at-temabit-fozzy-group-achieving-impactful-outcomes-5f534e67a78a?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/5f534e67a78a</guid>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Fri, 10 Nov 2023 10:16:44 GMT</pubDate>
            <atom:updated>2023-11-10T10:16:44.485Z</atom:updated>
            <content:encoded><![CDATA[<p>Our team embarked on the transition to Terraform in the spring. We established our essential code requirements and naming conventions, aligning them with other departments. This process is closely intertwined with our shift to AWS Cloud. Our decision was to create a robust foundation for our infrastructure using the Infrastructure as Code (IaC) approach.</p><p>This could have been the introduction to a standard Terraform use article. However, our focus today is on the configuration and settings of our development tools.</p><p>While most people utilize Terraform for managing cloud infrastructure on platforms like Amazon, Google, and Azure, this tool offers a broader range of functionality. It allows us to manage third-party services through a substantial selection of providers, both official and community-based. We employ Terraform as a comprehensive tool for managing the infrastructure we work with, including GitLab, SonarQube, and potentially Artifactory in the future. These tools serve as the foundation for team workspace organization.</p><p><strong>How We Facilitate New Project Onboarding</strong></p><p>Consider a scenario where a new project within the company needs the creation of GitLab subgroups, repositories, and related actions. As we also employ SonarQube for code analysis, we replicate similar actions for a new project on SonarQube, ensuring seamless code quality testing integration for teams. Terraform generates a group for the project’s repositories in GitLab, adhering to our naming conventions. Additionally, we create security groups for communication with Active Directory, which simplifies access to GitLab projects for our developers.</p><p>To streamline the integration of these two tools, we’ve automated the process. In the traditional manual approach, users need to add links, integration tokens, or specific tasks to the pipeline. Our approach simplifies this by first creating entities on GitLab and SonarQube and then adding integration tokens to the desired GitLab project.</p><p>Once this is completed, the team can commence work with automation at the forefront. We’ve also implemented automatic token rotation, enhancing security by automatically regenerating tokens in case of a compromise. This eliminates key management issues and bolsters security.</p><p>Artifactory can be seamlessly integrated into this pipeline, providing a platform for private repositories of various technologies, including containers and Terraform modules. Typically, the outcome of an activity is an artifact, making separate repositories for these artifacts a best practice. When a new project is initiated, Artifactory automatically creates a space for teams to upload their work results.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mJzA-_WrRPBvwiPmuf1tdg.png" /></figure><p><strong>The Engineer’s Workflow</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wW_E7ql7o6ezu7ggjvt3VA.png" /></figure><p><em>The Terraform code configuration with SonarQube is illustrated in the provided example. This demonstrates the key advantages of Terraform.</em></p><p><strong>```</strong></p><p>#################################################################################</p><p># SonarQube project configuration</p><p>#################################################################################</p><p>resource “sonarqube_project” “this” {</p><p>name = var.name</p><p>project = var.name</p><p>visibility = var.project_visability_level</p><p>tags = [lower(var.project_tag)]</p><p>}</p><p>resource “sonarqube_permissions” “this” {</p><p>group_name = “temabit/${lower(var.project_tag)}”</p><p>project_key = sonarqube_project.this.project</p><p>permissions = [“codeviewer”, “user”]</p><p>}</p><p>#################################################################################</p><p># SonarQube Project Analysis token</p><p>#################################################################################</p><p>resource “terraform_data” “retention_trigger” {</p><p>input = var.project_token_retention</p><p>triggers_replace = true</p><p>}</p><p>resource “sonarqube_user_token” “this” {</p><p>name = “${lower(var.project_tag)}-${var.name}-project-token”</p><p>type = var.token_access_level</p><p>project_key = sonarqube_project.this.project</p><p>expiration_date = local.user_token_expires_at</p><p>login_name = var.sonarqube_integration_user</p><p>lifecycle {</p><p>ignore_changes = [</p><p>expiration_date</p><p>]</p><p>replace_triggered_by = [</p><p>terraform_data.retention_trigger</p><p>]</p><p>}</p><p>}</p><p>#################################################################################</p><p># Gitlab Project SonarQube token</p><p>#################################################################################</p><p>data “gitlab_project” “this” {</p><p>path_with_namespace = var.project_subgroup == null ? “temabit/${var.project_tag}/${var.name}” : “temabit/${var.project_tag}/${var.project_subgroup}/${var.name}”</p><p>}</p><p>resource “gitlab_project_variable” “sonar_token” {</p><p>project = data.gitlab_project.this.id</p><p>key = “SONAR_TOKEN”</p><p>value = sonarqube_user_token.this.token</p><p>masked = true</p><p>}</p><p>resource “gitlab_project_variable” “sonar_url” {</p><p>project = data.gitlab_project.this.id</p><p>key = “SONAR_HOST_URL”</p><p>value = var.sonarqube_url</p><p>masked = false</p><p>}</p><p>```</p><p><strong>Key Terraform Advantages</strong></p><p>One of the significant benefits of our process is the streamlined pipeline. The process is highly efficient. We initiate a ticket, assign it a name, and our engineer configures Terraform, ensuring everything functions correctly. Once the pipeline is approved, we obtain all the necessary settings for working on a new project within minutes. The ticket processing time stands at 30 minutes, although our future plans include full automation of this process.</p><p>Why do we follow this approach? It significantly reduces the time engineers spend on request processing and minimizes routine tasks. It allows engineers to concentrate their focus without distractions. Everything is monitored, ensuring visibility into all changes.</p><p><strong>Adapting to Terraform as a Team</strong></p><p>We essentially began anew with GitLab as our primary tool, embarking on comprehensive automation alongside our experienced team. While our team possessed prior Terraform experience, our approach to using Terraform evolved, broadening our horizons and enhancing our technical expertise. For instance, we explore the potential benefits of the AWS CDK, but that’s a topic for another article.</p><p>Our efforts have yielded positive results, reducing the onboarding process from three hours to just 15 minutes. Of course, human factors may come into play, such as an engineer’s absence from the workplace, which may need additional time. However, we are actively exploring solutions to minimize such factors, striving to find the optimal set of tools. The main goal remains the substantial reduction of time spent on technical and routine tasks.</p><p>We will continue sharing updates — stay tuned.</p><p><em>Oleksandr Sapozhnikov, Lead of SRE Team, TemaBit Fozzy Group</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5f534e67a78a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[12 out of 12, hooray! Learn about an AWS certification firsthand]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/12-out-of-12-hooray-learn-about-an-aws-certification-firsthand-3ee47e551924?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/3ee47e551924</guid>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Tue, 24 Oct 2023 13:38:39 GMT</pubDate>
            <atom:updated>2023-10-24T13:38:39.266Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ApvsrCD4MhikzcrhyjwlIw.jpeg" /></figure><p>We’ve said it before, our team is out of this world. And we have some incredible news because we’re migrating to the cloud.</p><p>Now, in TemaBit Fozzy Group, we have our own AWS guru who managed to get all 12 AWS certificates. Our AWS community builder, Stanislav Kolenkin, drives the team, cloud transformation, and became the team’s certification driver. He achieved all the possible AWS certificates available today. Congratulations, we’re so proud of it!</p><p>How did he do it? And what were the obstacles and motivation?</p><p>What’s the most challenging part of certification? Taking the first step and overcoming laziness. So, if you have a goal, get inspired by the example and start with the basic level.</p><p>Attend webinars, learn, practice, and get certified. It’s important to move gradually and start from the foundation. It’s AWS Certified Solutions Architect Associate since Amazon has a well-thought-out learning path. And if you take the exams step by step, questions and materials come from previous certifications.</p><p>Specialized levels are quite challenging. The exam takes three hours, and the answer choices are very similar. The questions focus both on theory and practice, so don’t ignore them during your training. It’s also worth starting from the basic level to practice similar tests.</p><p>By the way, it took Stanislav a little over a year to complete the certification journey. And this is not to mention the other certificates he managed to obtain during this time. He prepared for each one for two weeks to a month in the evenings after work. So, everything is possible.</p><p><strong>On support and mentorship</strong></p><p>Our Cloud Foundation, which is involved in cloud migration and cloud transformation and wants to grow in that direction, has the opportunity to join the training, take courses, and attend webinars. At every stage of certification, our colleagues are not left alone. Experienced mentors under Stanislav’s leadership guide their journey, share their experiences, and provide useful advice during the certification journey.</p><p><strong>Why do you need certificates?</strong></p><p>Certifications are not a magic key to all doors. You should polish your new knowledge in practice because theory alone won’t be enough for the job. Passing a certification exam with brain dumps is noticeable right at the beginning of an interview. It negatively affects the hiring process. So, you should only take certification exams with a good understanding of the subject. Be sure to work on practical applications for each certification topic.</p><p>In some countries, companies need you to prove your knowledge. They won’t hire even a very strong expert without certificates. This applies to some Israeli or American companies. So, don’t miss your chance.</p><p>And it’s also a good idea to keep an eye on trends and new Amazon patterns because they don’t stand still. For example, while we were writing this article, AWS added a 13th certificate, AWS Certified Data Engineer — Associate Beta. If you’ve already joined the certification process, you’ll start listening to webinars and courses. So, it’s another opportunity to boost your skills in innovation. By the way, you can practice with sample exam questions and attend training sessions <a href="https://www.udemy.com/user/stephane-maarek/">here</a>. Always remember about practice. Through practice, you can gain the necessary knowledge and get the right confirmation.</p><p>Impossible is nothing. The key thing is to keep working and achieving your goals.</p><p><a href="https://pages.awscloud.com/rs/112-TZM-766/images/T&amp;C-Overview-Brochure_Mar-2020_digital-2020.pdf">https://pages.awscloud.com/rs/112-TZM-766/images/T&amp;C-Overview-Brochure_Mar-2020_digital-2020.pdf</a></p><p><a href="https://www.credly.com/users/stanislav-kolenkin">Stanislav Kolenkin&#39;s profile on Credly</a></p><p><em>Stanislav Kolenkin, Head of Cloud Foundation at TemaBit Fozzy Group</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3ee47e551924" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Fozzy Group переходить на AWS: перші кроки та виклики]]></title>
            <link>https://medium.com/@TemaBitFozzyGroup/fozzy-group-%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C-%D0%BD%D0%B0-aws-%D0%BF%D0%B5%D1%80%D1%88%D1%96-%D0%BA%D1%80%D0%BE%D0%BA%D0%B8-%D1%82%D0%B0-%D0%B2%D0%B8%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8-a56f3ba794b9?source=rss-8a4433ce9d9e------2</link>
            <guid isPermaLink="false">https://medium.com/p/a56f3ba794b9</guid>
            <dc:creator><![CDATA[TemaBit Fozzy Group]]></dc:creator>
            <pubDate>Thu, 21 Sep 2023 07:01:19 GMT</pubDate>
            <atom:updated>2023-09-21T07:01:19.617Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/855/1*BzUgjHfDvPxem9ZRZQ-gOA.jpeg" /></figure><p><strong>Fozzy Group переходить на AWS: перші кроки та виклики</strong></p><p>З початком повномасштабної війни росії проти України Fozzy Group зіштовхнулася з новими викликами. Для наших бізнесів критично важливо було забезпечити українців продуктами першої необхідності, швидко адаптуватися до змін та побудувати нові логістичні ланцюжки.</p><p>ІТ інфраструктура TemaBit Fozzy Group відіграла одну з ключових ролей у вирішенні цих завдань. Завдяки їй компанія могла:</p><ul><li>швидко реагувати на зміни попиту на продукти;</li><li>налагодити постачання товарів з нових джерел;</li><li>підтримувати роботу магазинів та складів.</li></ul><p>Також це був рік, коли ми планували оновити обладнання центрів обробки даних (ЦОД), яке уже ставало застарілим. Будь-які розстрочки та великі капіталовкладення були недоступними. Крім того, час доставки обладнання значно збільшився. Так, замість 90 днів, які ми зазвичай чекали на нове обладнання, довелося б чекати удвічі, а іноді й втричі довше. Це вже не кажучи про випадки, коли взагалі було неможливо передбачити терміни доставки.<br>З початком повномасштабної війни Fozzy Group опинилася перед викликами. Зберігати дані на серверах на землі було ризиковано, а оновити обладнання ЦОД було непросто. Тому було прийнято рішення рухатися у хмару. Це дозволило компанії продовжувати роботу та забезпечувати українців продуктами першої необхідності.</p><p><strong>Чому ми обрали AWS?</strong></p><p>Проаналізувавши різні варіанти клаудів наш вибір впав на AWS, оскільки їхня політика партнерської співпраці спонукає до розвитку експертної кваліфікації IT-команд за напрямком cloud strategy.</p><p>Також AWS дає можливості оптимізувати хмарні ресурси та детально спостерігати за ними у хмарі. Одна з найважливіших хмарних вигід — можливість платити тільки за ті ресурси, які ви фактично використовуєте, та не переплачувати наперед. Не треба інвестувати або гадати, скільки треба вкласти грошей — Pay as you Go.</p><p>З початку співпраці наша компанія збагатила внутрішню експертизу і вже налічує 15+ AWS Certified Solutions Architect (Associate and Professional) та інші сертифікації PRO and Specialty рівнів. На цьому ми не зупиняємося та продовжуємо сертифікацію наступних. Цей процес драйвить Станіслав Коленкін. У його команді майже кожен пройшов успішне навчання та має мінімум 2 сертифікати включно з AWS Solution Architect Associate.</p><p>Серед наших колег в TemaBit за перше півріччя 82 людини пройшли навчання із роботи з AWS сервісами на різні тематики: робота в хмарі, безпека в хмарі, створення архітектурних рішень для безперебійного забезпечення роботи компанії.</p><p><strong>Jornеy map: де ми є та куди прямуємо</strong></p><p><strong>Підготовка</strong></p><p>Уже на початку ми розуміли, що перехід у хмару має бути оціненим з усіх сторін та ретельно проаналізованим. Адже необдумане рішення може призвести до безлічі ризиків.</p><p><strong>Аудит</strong></p><p>Першим кроком ми зробили великий аудит інфраструктури, знайшли всі системи та пішли до бізнесів, щоб визначити ступінь їхньої критичності. А бізнесів у нас досить багато, серед ключових — мережі «Сільпо» (300+ магазинів), «Фора» (300+ магазинів), «Траш» (90+ магазинів), гіпермаркети Fozzy C&amp;C (8 магазинів), мережа аптек «Біла ромашка» (90+ аптеки), магазини техніки Ringoo, e-com (доставка “Сільпо” та LOKO), Власна Логістика, маркетплейс MAUDAU, магазини зоотоварів E-ZOO та ін.</p><p>Тут нас чекав виклик, адже оцінити критичність своїх систем бізнеси не могли, спершу все здавалося надважливим. Та коли дійшли до фінансової складової і постало питання, чи може бізнес, скажімо, платити 100 тисяч доларів на рік за сервіс, почали задумуватися. Щоб визначити критичність та черговість перенесення сервісів у хмару, ми розробили алгоритм, який запропонували заповнити кожному з бізнесів.</p><p>Спершу ми визначили розподіл між собою системи за хвилями міграції. Ставало питання: які системи потрібно нести в хмару вже сьогодні, які можуть почекати, наприклад, два-три місяці, а які й взагалі можна відкласти на кінець року. Для визначення цієї черговості були сформовані певні критерії, які й формували хвилі міграції та включали перелік систем. В нашому випадку ми отримали 6 хвиль міграції системи в хмару. Визначення та погодження хвиль видались для нас складною та тривалою аналітичною роботою.</p><p>Ті ж системи, які бізнеси віднесли до некритичних, ми залишили у ЦОДі та захистили реплікою. Наразі копії всіх віртуальних машин є в AWS. Та, нажаль, ніхто не може з впевненістю сказати, скільки зусиль та часу займе відновлення цих систем у разі їх втрати.</p><p><strong>Team composition</strong></p><p>Ми сформували команду фахівців, яка буде займається міграцією в AWS. Були сформовані декілька повнофункціональних команд міграції, кожна з яких має у своєму складі PM, архітектора, системних інженерів, DBA. Команди можуть працювати паралельно для пришвидшення міграції.</p><p>Ми починали міграцію з lift and shift, тобто без зміни технологій. Тому на початку для більшості працівників, наприклад, розробників, у процесах нічого не змінювалося. Як вони працювали з нашим ЦОДом, так вони й продовжили працювати з AWS, для них це було знайоме середовище.</p><p>Коли вже почали перехід на нативні сервіси AWS, потрібно було розуміти, наприклад, як організовувати процес бекапу, мережу, захист та ін. Найважчим тут було паралельно з першим процесом здобувати необхідні знання для подальшої роботи.</p><p>Вже для систем, які рефакторяться, потрібна специфічна експертиза і тут ми отримували підтримку від фахівців з AWS. Паралельно наші працівники проходили навчання та сертифікацію в AWS. Також ми посилили нашу команду досвідченими фахівцями, які мають великий досвід у міграції в інших великих компаніях.</p><p>Варто зазначити, що на всіх етапах міграції нас підтримує команда експертів з AWS та нова cloud Foundation команда зі скілованими спеціалістами, у яких за спиною сотні успішних проєктів з міграції та AWS.</p><p><strong>Міграція</strong></p><p>Основним драйвером комбінованого підходу, який ми обрали, — є війна проти України. Нам дуже важливо якнайшвидше убезпечити ключові дані, які необхідні для безперебійної роботи бізнесу.</p><p>Підходів до переходу є досить багато: Rehost, Replatform, Refactor, Retire, Retain, Repurchase.</p><p>Ми ж для себе виділили такі два:</p><ol><li>Перенесення даних, як є — lift and shift;</li><li>Перенесення з реархітектурою, щоб дані ставали native cloud.</li></ol><p>Ми обрали для Fozzy Group комбінований шлях, тобто рухаємося одночасно двома шляхами. Ми не могли зупинити ЦОД на тривалий період, адже це як робити операцію на живому серці. Робота вимагає філігранності та обережності. Тому ми домовлялися з бізнесами, і частинами переносили системи, не зупиняючи роботу магазинів.</p><p>Для Critical Application робимо реархітектуру і далі вони йдуть на cloud native application. Інші додатки переносимо «як є», а далі вже поступово будемо робити їх cloud native.</p><p>До кінця року плануємо закінчити міграцію Critical Application з реархітектурою та паралельно перенести важливі дані «як є».</p><p>Далі, безумовно, будемо працювати з cloud native. Також, у нас є дані, які не можна перенести у cloud, навіть з підходом «як є», тому їх треба рефакторити, а це вже, по суті, новий проєкт, який також буде братися до роботи.</p><p>Слід зауважити, що всі нові розробки відразу реалізуються у клауді на базі AWS. Таких проєктів стає дедалі більше й управління ними потребує все більшого ресурсу з точки зору фахівців. Тому тут ми вирішили рухатися шляхом Platform Engineering і в нас з’явилася Platform team та SRE у рамках cloud Foundation.</p><p>Cloud Foundation — це інтегрована платформа для ефективного створення, управління та оптимізації хмарної інфраструктури. Вона вибудовує автоматизовані патерни, завдяки яким реалізувати та управляти проєктами стає легше, швидше та з меншим залученням фахівців. Тобто робота над запуском нового проєкту стає більш автоматизованою та імплементується підхід Infrastructure as code (IaC).</p><p><strong>Поради бізнесам, які задумалися про міграцію в AWS</strong></p><ul><li>Для переходу в AWS варто зважено оцінювати та прогнозувати витрати. AWS пропонує широкий спектр послуг, кожна з яких має власну цінову політику. Недооцінка може призвести до несподіваних високих витрат, тоді як правильна оцінка допоможе ефективно використовувати ресурси та уникнути фінансових збитків. Важливо ретельно проаналізувати навантаження та спрогнозувати витрати на розміщення в AWS не тільки на перший, але й на другий та третій роки, бо ці витрати можуть стрімко зростати, адже після міграції настає фаза оптимізації ресурсів, right sizing, reservation.</li><li>Перехід компанії на AWS вимагає часу та фахових знань для налагодження та управління інфраструктурою. Для деяких компаній це може стати викликом, особливо якщо вони не мають внутрішніх ресурсів для такого роду роботи. Системи можуть почати поводитися неочікувано під час покрокового перенесення систем в хмару без детального їх опису та залежностей одна від одної. Це може призвести до повної чи часткової відмови частини систем, які залежать від тої, що мігрується.</li><li>Під час переходу на AWS важливо застосовувати IaC підхід і заборонити clickOps.</li><li>Варто одразу прорахувати та вивільнити необхідну кількість людей для всіх процесів, оскільки без цього строки виконання міграції можуть порушитися.</li><li>Під час переходу зі старих процесів на нові хмарні змінюється і майндсет у людей, тобто відбувається певна трансформація. Тому тут важливо мати команду сильних DevOps фахівців, які допоможуть колегам із різних підрозділів справитися із культуральними змінами та зроблять процес трансформації безшовним, а також дозволять оптимізувати фінансові і людські витрати.</li><li>Почати впроваджувати FinOps фреймворк та культуру.</li></ul><p><strong>Замість висновків</strong></p><p>Перехід компанії на AWS може мати багато переваг, таких як масштабованість, гнучкість та широка функціональність. Однак, слід враховувати потребу в фахових знаннях для ефективного управління.</p><p>Перед прийняттям рішення про перехід на AWS, варто ретельно проаналізувати свої потреби та можливості, а також порівняти його з іншими схожими сервісами. А далі — багато цікавої та складної роботи, зміна майндсету компанії та постійне навчання, аби ставати ще потужнішими.</p><p>І пам’ятайте, AWS — це не той звір, який кусається, до нього просто треба знайти підхід.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a56f3ba794b9" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>