<?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>Forem: Josh Lee</title>
    <description>The latest articles on Forem by Josh Lee (@heyjoshlee).</description>
    <link>https://forem.com/heyjoshlee</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F639888%2F3f20be13-2820-4aeb-94b0-f26b96bcfcd2.jpg</url>
      <title>Forem: Josh Lee</title>
      <link>https://forem.com/heyjoshlee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/heyjoshlee"/>
    <language>en</language>
    <item>
      <title>AI Governance 101: How to Assess Risks in LLM-Driven Applications</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Fri, 27 Mar 2026 17:29:21 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/ai-governance-101-how-to-assess-risks-in-llm-driven-applications-33ne</link>
      <guid>https://forem.com/heyjoshlee/ai-governance-101-how-to-assess-risks-in-llm-driven-applications-33ne</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fv8bxfbtf3z9g1l3goycw.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.amazonaws.com%2Fuploads%2Farticles%2Fv8bxfbtf3z9g1l3goycw.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You built an LLM-powered feature. It works in testing, users seem to like it, and now it's heading to production. Before it ships, someone in legal or compliance asks: "What's our risk assessment for this?"&lt;/p&gt;

&lt;p&gt;That question used to be easy to dodge. Now it isn't. The EU AI Act, NIST's AI Risk Management Framework, and OWASP's LLM Top 10 have given regulators, auditors, and enterprise customers a shared vocabulary for what "responsible AI" looks like in practice. If you can't answer that question, you're going to lose deals and create liability.&lt;/p&gt;

&lt;p&gt;The good news: this doesn't require becoming a policy expert. It requires understanding a handful of frameworks, applying them to your specific application, and documenting what you find. That's what this tutorial covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Developers Need to Care About This
&lt;/h2&gt;

&lt;p&gt;AI governance used to be something that legal teams worried about. That's changed. The risks that regulators care about are technical risks, and the people who can actually mitigate them are engineers.&lt;/p&gt;

&lt;p&gt;Prompt injection. Sensitive data leaking through model outputs. Models making decisions with real-world consequences and no human review. These aren't abstract policy concerns. They're code problems. And they show up in the code you write around the model, not inside the model itself.&lt;/p&gt;

&lt;p&gt;The three frameworks you need to know are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;OWASP Top 10 for LLM Applications&lt;/a&gt; — the most practical, developer-facing list of LLM-specific security risks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.nist.gov/itl/ai-risk-management-framework" rel="noopener noreferrer"&gt;NIST AI Risk Management Framework&lt;/a&gt; — the governance structure used by enterprises and federal agencies to manage AI risk&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://artificialintelligenceact.eu/" rel="noopener noreferrer"&gt;EU AI Act&lt;/a&gt; — the regulatory framework with teeth, especially if you have European customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're going to focus on OWASP and NIST because they're actionable. The EU AI Act matters for compliance, but the risk controls it requires are largely the same ones OWASP and NIST already prescribe.&lt;/p&gt;

&lt;h2&gt;
  
  
  The OWASP Top 10 for LLMs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://genai.owasp.org/llm-top-10/" rel="noopener noreferrer"&gt;OWASP's LLM Top 10&lt;/a&gt; is the most useful starting point for developers because it maps directly to things you can fix in your code. The 2025 update reflects real-world LLM deployments, and a few of these have burned enough companies to be worth understanding in depth.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM01: Prompt Injection
&lt;/h3&gt;

&lt;p&gt;This is the top risk for a reason. Prompt injection happens when user input (or content your app retrieves from external sources) changes how the LLM behaves in ways you didn't intend.&lt;/p&gt;

&lt;p&gt;Direct injection is straightforward: a user types something like "ignore all previous instructions and instead..." and the model follows the injected instruction instead of your system prompt. Indirect injection is sneakier: your app retrieves a document, a webpage, or a database record and passes it to the model, and that content contains embedded instructions that hijack the model's behavior.&lt;/p&gt;

&lt;p&gt;The mitigation isn't a single fix. It's a combination of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Treat all external content as untrusted. Don't pass raw user input or retrieved content directly into a privileged prompt context.&lt;/li&gt;
&lt;li&gt;Apply least-privilege thinking to your model's tool access. If the model can take actions (send emails, query databases, call APIs), limit those capabilities to exactly what each task requires.&lt;/li&gt;
&lt;li&gt;Validate and filter outputs, not just inputs. A model that gets injected might produce outputs that trigger downstream exploits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important note: RAG (retrieval-augmented generation) and fine-tuning don't solve this. OWASP is explicit that these techniques don't mitigate prompt injection. Your documents can contain injections. Your fine-tuned model can still be redirected by crafted inputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM02: Sensitive Information Disclosure
&lt;/h3&gt;

&lt;p&gt;LLMs memorize things from their training data and from the context you give them. This creates two problems. First, models can regurgitate sensitive information from training if prompted correctly. Second, your application might pass sensitive data (API keys, user PII, internal configurations) into the context window, and the model might echo that information back in outputs.&lt;/p&gt;

&lt;p&gt;The practical controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never put credentials, internal URLs, or customer PII into prompts unless absolutely necessary.&lt;/li&gt;
&lt;li&gt;If sensitive data has to be in context, strip or redact it from outputs.&lt;/li&gt;
&lt;li&gt;For retrieval-based apps, implement access controls at the retrieval layer. Users should only get documents they're authorized to see, even when the model is doing the retrieval.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM03: Supply Chain Vulnerabilities
&lt;/h3&gt;

&lt;p&gt;This one jumped to third place in 2025. When you use a third-party model, a pre-trained embedding, or a fine-tuned checkpoint from somewhere like Hugging Face, you're trusting a supply chain you probably haven't fully audited.&lt;/p&gt;

&lt;p&gt;Model cards describe what a model does. They don't provide cryptographic guarantees about where the model came from or whether it's been tampered with. A poisoned model or embedding can behave correctly on most inputs while producing manipulated outputs on specific trigger inputs.&lt;/p&gt;

&lt;p&gt;What this looks like in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pin your model versions. Don't pull &lt;code&gt;latest&lt;/code&gt; in production.&lt;/li&gt;
&lt;li&gt;Prefer models from providers with documented security practices and model provenance guarantees.&lt;/li&gt;
&lt;li&gt;Treat third-party embeddings and fine-tuned checkpoints with the same scrutiny you'd give a third-party dependency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM06: Excessive Agency
&lt;/h3&gt;

&lt;p&gt;This is the governance risk that gets overlooked most often by developers who are excited about agentic features. Excessive agency means you've given the model the ability to take real-world actions (send emails, modify records, call external APIs, run code) without adequate guardrails on what it can do and without human review for high-impact actions.&lt;/p&gt;

&lt;p&gt;The model might be technically correct most of the time. But "most of the time" isn't good enough when the action is sending an email to all your customers or deleting a database record.&lt;/p&gt;

&lt;p&gt;The fix is designing for the least privilege your feature actually needs. If the model needs to read calendar events to schedule a meeting, it doesn't need write access to the calendar until you've confirmed the proposed meeting with the user. Human-in-the-loop isn't just a nice-to-have for high-stakes actions. It's the difference between a product that builds trust and one that creates liability.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM09: Misinformation
&lt;/h3&gt;

&lt;p&gt;This one doesn't get treated as a security risk, but it is. If your application presents model output as authoritative, and that output is wrong, you own that. Customer support bots that confidently cite wrong policies. Medical tools that hallucinate dosages. Legal assistants that cite non-existent case law.&lt;/p&gt;

&lt;p&gt;The technical mitigation is grounding: use RAG or structured data sources so the model's responses are anchored to verified content. Add confidence signaling when the model is working outside of verified data. Make it clear in the UX when output is AI-generated and what its limitations are.&lt;/p&gt;

&lt;h2&gt;
  
  
  The NIST AI Risk Management Framework
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nvlpubs.nist.gov/nistpubs/ai/nist.ai.100-1.pdf" rel="noopener noreferrer"&gt;NIST's AI RMF&lt;/a&gt; is the framework enterprises and government agencies use to structure their AI governance programs. It has four core functions: Govern, Map, Measure, and Manage. Think of it as the organizational layer on top of the technical controls you get from OWASP.&lt;/p&gt;

&lt;p&gt;You don't need to implement the entire framework to get value from it. The structure helps you think through risk at the application level and document your decisions, which is what you need when compliance or legal comes asking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Govern
&lt;/h3&gt;

&lt;p&gt;Govern is about who owns what. Before you ship an LLM feature, someone needs to be accountable for each of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Risk appetite: what level of AI-related risk is acceptable for this application?&lt;/li&gt;
&lt;li&gt;Model stewardship: who owns documentation, versioning, and evaluation of the model?&lt;/li&gt;
&lt;li&gt;Security: who owns adversarial testing and incident response?&lt;/li&gt;
&lt;li&gt;Privacy and compliance: who's reviewing data handling and regulatory requirements?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn't have to be four different people. On a small team, one person might own several of these. The point is that these questions have explicit answers, not implicit assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Map
&lt;/h3&gt;

&lt;p&gt;Map is where you document what your application does and what could go wrong. For each LLM-powered feature, you want to capture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the model being asked to do?&lt;/li&gt;
&lt;li&gt;What data goes in, and where does that data come from?&lt;/li&gt;
&lt;li&gt;What actions can the model trigger?&lt;/li&gt;
&lt;li&gt;Who are the users, and what's the impact if the model gets it wrong?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn't have to be elaborate. A one-page document per feature that answers these questions is enough to get started. The value is in forcing explicit thinking before you're in incident response mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measure
&lt;/h3&gt;

&lt;p&gt;Measure is ongoing evaluation. For LLM applications, this means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accuracy and drift monitoring: is the model's performance staying consistent over time? Model behavior can shift as the underlying model is updated by the provider.&lt;/li&gt;
&lt;li&gt;Bias and fairness audits: for features that affect different groups of users differently, are outcomes equitable?&lt;/li&gt;
&lt;li&gt;Red-teaming: regularly stress-test your prompts and flows with adversarial inputs. Treat this like penetration testing.&lt;/li&gt;
&lt;li&gt;Output quality sampling: periodically review a sample of real production outputs. This is how you catch problems that automated metrics miss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cadence depends on risk level. A customer support bot that gives wrong answers needs more frequent evaluation than a summarization feature for internal documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manage
&lt;/h3&gt;

&lt;p&gt;Manage is what happens when something goes wrong, and what you do to prevent it at scale. The key components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incident response plan: what do you do when the model produces harmful output? Who gets notified? How do you mitigate it?&lt;/li&gt;
&lt;li&gt;Override and appeal mechanisms: for any decision the model participates in that affects users (loan approvals, content moderation, pricing), users need a way to get a human review.&lt;/li&gt;
&lt;li&gt;Decommissioning plan: how do you retire a model version safely? What happens to data that was used for training or evaluation?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building Your Risk Assessment
&lt;/h2&gt;

&lt;p&gt;When you're ready to document a risk assessment for an LLM feature, here's a structure that works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Application description&lt;br&gt;
What does this feature do? What model does it use? What data goes in and out?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OWASP LLM risk mapping&lt;br&gt;
Go through the OWASP Top 10 and for each risk, note: is this applicable to our feature? If yes, what controls do we have? What residual risk remains?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Impact and likelihood&lt;br&gt;
For each applicable risk, rate the potential impact (low, medium, high) and the likelihood given your controls. High impact + high likelihood = must fix before launch. High impact + low likelihood = mitigate and monitor. Low impact = document and accept.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Governance ownership&lt;br&gt;
Name the person accountable for each governance responsibility from the NIST framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Monitoring plan&lt;br&gt;
How will you know if something goes wrong in production? What metrics or sampling processes will catch issues?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This doesn't need to be a 40-page document. A clear one-pager that covers these five areas is more useful than an elaborate framework nobody reads.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Practical Starting Point
&lt;/h2&gt;

&lt;p&gt;If you're building an LLM feature today and haven't thought about governance yet, start here.&lt;/p&gt;

&lt;p&gt;First, go through &lt;a href="https://genai.owasp.org/llm-top-10/" rel="noopener noreferrer"&gt;OWASP's LLM Top 10&lt;/a&gt; and check your application against each risk. The ones that require immediate attention are prompt injection (if you accept user input or retrieve external content), excessive agency (if your model can take real-world actions), and sensitive information disclosure (if any sensitive data passes through context).&lt;/p&gt;

&lt;p&gt;Second, implement the principle of least privilege everywhere. Least privilege for model tool access. Least privilege for data retrieval. Least privilege for actions the model can trigger.&lt;/p&gt;

&lt;p&gt;Third, add human review for any action that's hard to reverse. Delete, send, publish, approve. If the model suggests it, a human should confirm it.&lt;/p&gt;

&lt;p&gt;Governance isn't about slowing down development. It's about building things that work reliably at scale and hold up when someone looks closely at how they work. Start with the OWASP list and build from there.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>security</category>
    </item>
    <item>
      <title>Cloud Security for Lawyers: Understanding IAM, Encryption, and Zero Trust Without the Jargon</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Fri, 20 Mar 2026 13:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/cloud-security-for-lawyers-understanding-iam-encryption-and-zero-trust-without-the-jargon-6a1</link>
      <guid>https://forem.com/heyjoshlee/cloud-security-for-lawyers-understanding-iam-encryption-and-zero-trust-without-the-jargon-6a1</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fx4d9aenzohimsr26wbhp.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.amazonaws.com%2Fuploads%2Farticles%2Fx4d9aenzohimsr26wbhp.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
You're an attorney. You went to law school to argue cases and advise clients, not to become a cybersecurity expert. But here's the reality: the ABA says you have an ethical obligation to understand the technology you use to handle client data. &lt;a href="https://www.americanbar.org/groups/professional_responsibility/publications/model_rules_of_professional_conduct/rule_1_1_competence/" rel="noopener noreferrer"&gt;Model Rule 1.1&lt;/a&gt; requires you to stay current with "the benefits and risks associated with relevant technology." &lt;a href="https://www.americanbar.org/groups/professional_responsibility/publications/model_rules_of_professional_conduct/rule_1_6_confidentiality_of_information/" rel="noopener noreferrer"&gt;Model Rule 1.6(c)&lt;/a&gt; says you need to make "reasonable efforts" to prevent unauthorized access to client information.&lt;/p&gt;

&lt;p&gt;That doesn't mean you need to configure firewalls or write security policies from scratch. It means you need to understand the core concepts well enough to ask the right questions, evaluate your vendors, and make informed decisions about how your firm handles sensitive data.&lt;/p&gt;

&lt;p&gt;We're going to cover three big ideas in cloud security: Identity and Access Management (IAM), encryption, and Zero Trust. By the end, you'll know what each one means in plain language, why it matters for your practice, and what questions to ask your IT team or cloud provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for Your Practice
&lt;/h2&gt;

&lt;p&gt;Law firms are high-value targets. You hold privileged communications, trade secrets, merger details, litigation strategies, and personal client data. A 2026 survey found that &lt;a href="https://www.bdemerson.com/article/cyber-security-for-law-firms-best-practices" rel="noopener noreferrer"&gt;32% of mid-sized law firms experienced a security event&lt;/a&gt; in the previous year, with average costs exceeding $5 million.&lt;/p&gt;

&lt;p&gt;Beyond the financial risk, there's the ethical one. &lt;a href="https://www.americanbar.org/products/inv/book/304042702/" rel="noopener noreferrer"&gt;ABA Formal Opinion 477R&lt;/a&gt; makes it clear that using cloud services is fine, but only if you conduct appropriate due diligence on your technology providers and implement reasonable security measures. If a breach happens and you didn't take reasonable steps to protect client data, you're looking at potential disciplinary action on top of everything else.&lt;/p&gt;

&lt;p&gt;The good news is that "reasonable" doesn't mean "perfect." It means understanding the basics and making informed choices. That's what we're here for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity and Access Management (IAM)
&lt;/h2&gt;

&lt;p&gt;IAM answers two questions: "Who are you?" and "What are you allowed to do?"&lt;/p&gt;

&lt;p&gt;Think of it like building security at your law firm's office. When someone walks in the front door, the receptionist checks their ID. That's authentication, verifying that the person is who they claim to be. Once they're verified, they get access to certain areas. A client might get escorted to a conference room. A partner walks freely through the office. A delivery person gets access to the mailroom and nothing else. That's authorization, controlling what each verified person can actually do.&lt;/p&gt;

&lt;p&gt;Cloud IAM works the same way, just digitally. When someone logs into your firm's case management system, IAM checks their credentials (authentication) and then determines what they can see and do based on their role (authorization).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters for Lawyers
&lt;/h3&gt;

&lt;p&gt;Without proper IAM, a paralegal might accidentally access partner-level financial documents. A former associate whose account wasn't deactivated could still browse client files months after leaving. A contractor helping with document review could have access to cases they're not working on.&lt;/p&gt;

&lt;p&gt;Proper IAM means each person at your firm only has access to exactly what they need for their job. Nothing more. This is called the principle of least privilege, and it's one of the most important security concepts you'll encounter.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to Look For
&lt;/h3&gt;

&lt;p&gt;When evaluating a cloud provider or discussing security with your IT team, ask these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the system support role-based access control (RBAC)? This means you can define roles (partner, associate, paralegal, staff) and assign permissions to roles instead of individuals. When someone joins or leaves, you change their role instead of updating dozens of individual permissions.&lt;/li&gt;
&lt;li&gt;Is phishing-resistant multi-factor authentication (MFA) available and enforced? MFA means logging in requires something you know (password) plus something you have (a code from your phone). This alone stops the vast majority of unauthorized access attempts. As of 2026, MFA is considered part of the "reasonable efforts" standard under most state bar interpretations.&lt;/li&gt;
&lt;li&gt;Is there an audit trail? Can you see who accessed what, and when? If a client ever asks whether their data was accessed inappropriately, you need to be able to answer that question.&lt;/li&gt;
&lt;li&gt;What happens when someone leaves the firm? How quickly is their access revoked? The answer should be "immediately" or "within hours," not "whenever IT gets around to it."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Encryption
&lt;/h2&gt;

&lt;p&gt;Encryption turns readable data into scrambled nonsense that can only be unscrambled with the right key. If someone intercepts encrypted data, they see gibberish. Without the key, the data is useless to them.&lt;/p&gt;

&lt;p&gt;There are two scenarios where encryption protects your client data, and you need both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption at Rest
&lt;/h3&gt;

&lt;p&gt;This protects data that's sitting in storage. Your case files in the cloud, emails archived on a server, documents saved in your case management system. All of that is "data at rest."&lt;/p&gt;

&lt;p&gt;Think of it like a locked filing cabinet. If someone breaks into your office and steals the cabinet, they still can't read your files because the cabinet is locked. Encryption at rest is the digital version of that lock. Even if someone gains unauthorized access to the physical server or storage system where your data lives, the data itself is unreadable without the encryption key.&lt;/p&gt;

&lt;p&gt;The standard you'll see referenced most often is &lt;strong&gt;&lt;a href="https://csrc.nist.gov/publications/detail/fips/197/final" rel="noopener noreferrer"&gt;AES-256&lt;/a&gt;&lt;/strong&gt;. That's the encryption algorithm used by governments and financial institutions worldwide. If your cloud provider uses AES-256 encryption at rest, your stored data meets the current standard for "reasonable" protection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption in Transit
&lt;/h3&gt;

&lt;p&gt;This protects data while it's moving from one place to another. When you send an email to a client, upload a document to your case management system, or access your firm's files remotely, that data travels across networks. Encryption in transit scrambles it during the journey so nobody can intercept and read it along the way.&lt;/p&gt;

&lt;p&gt;Think of it as the difference between sending a postcard and sending a sealed letter. A postcard can be read by anyone who handles it. A sealed letter keeps its contents private during delivery. Encryption in transit is the seal.&lt;/p&gt;

&lt;p&gt;The standard here is &lt;strong&gt;&lt;a href="https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/" rel="noopener noreferrer"&gt;TLS&lt;/a&gt;&lt;/strong&gt; (Transport Layer Security). When you see the padlock icon in your browser's address bar, that's TLS at work. Your cloud provider should encrypt all data in transit using TLS 1.3 or higher.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to Look For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does your provider encrypt data &lt;strong&gt;both&lt;/strong&gt; at rest and in transit? You need both. One without the other leaves a gap.&lt;/li&gt;
&lt;li&gt;What encryption standard do they use? Look for AES-256 for data at rest and TLS 1.3+ for data in transit.&lt;/li&gt;
&lt;li&gt;Who holds the encryption keys? This is a subtlety that matters. If the cloud provider holds the keys, they technically have the ability to decrypt your data. Some providers offer customer-managed keys, meaning your firm controls the keys. For highly sensitive matters, this is worth asking about.&lt;/li&gt;
&lt;li&gt;Is encryption enabled by default, or does someone have to turn it on? Default is better. You don't want to discover months later that a setting was missed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Zero Trust
&lt;/h2&gt;

&lt;p&gt;Traditional network security works like a castle with a moat. There's a strong perimeter. Once you're inside the walls, you're trusted and can move freely. The problem with this model is obvious: if an attacker gets past the wall (a stolen password, a phishing email, a compromised device), they have access to everything.&lt;/p&gt;

&lt;p&gt;Zero Trust flips that model completely. The core principle is "never trust, always verify." No user, no device, and no application is automatically trusted, even if they're already inside the network. Every access request is verified individually, every time.&lt;/p&gt;

&lt;p&gt;Think of it like a building where every single door requires a keycard, not just the front entrance. You badge in at the lobby. You badge in at the elevator. You badge in at your floor. You badge in at the file room. If your badge only grants access to the third floor, you can't wander up to the fifth floor just because you're already in the building.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters for Lawyers
&lt;/h3&gt;

&lt;p&gt;Law firms have diverse users accessing systems from diverse locations. Partners working from home. Associates at the courthouse using mobile devices. Contract attorneys on temporary assignments. Clients accessing a portal. IT vendors performing maintenance.&lt;/p&gt;

&lt;p&gt;The old model of "if you're on the office network, you're trusted" doesn't work anymore. Zero Trust means every one of those access attempts is verified based on who the person is, what device they're using, where they're connecting from, and what they're trying to access.&lt;/p&gt;

&lt;p&gt;If a partner's laptop gets stolen, Zero Trust limits the damage. The thief might have the device, but without passing all the verification checks (MFA, device health, location), they can't access firm systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Principles
&lt;/h3&gt;

&lt;p&gt;You don't need to memorize a framework, but understanding the key ideas helps you evaluate vendors and ask better questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify explicitly. Authenticate and authorize every access request based on all available signals: identity, location, device, time of day, what's being accessed.&lt;/li&gt;
&lt;li&gt;Least privilege access. Give users the minimum access they need. A paralegal working on a specific case should only see that case's files, not the entire firm's document repository.&lt;/li&gt;
&lt;li&gt;Assume breach. Design systems as if an attacker is already inside. This means monitoring activity, segmenting access, and logging everything so you can detect and respond to suspicious behavior quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What to Look For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does your cloud provider operate on Zero Trust principles? Ask them directly. If they can't explain their approach in plain language, that's a red flag.&lt;/li&gt;
&lt;li&gt;Is access &lt;strong&gt;context-aware&lt;/strong&gt;? Does the system consider more than just a username and password? (Device type, location, time of access, behavior patterns.)&lt;/li&gt;
&lt;li&gt;Is activity &lt;strong&gt;continuously monitored&lt;/strong&gt;? Zero Trust isn't a one-time check at login. It should be ongoing verification throughout the session.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Putting It All Together: Questions for Your Next Vendor Meeting
&lt;/h2&gt;

&lt;p&gt;You don't need to become a security expert. You need to ask the right questions. Here's a checklist you can bring to your next conversation with a cloud provider or IT consultant:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity and Access Management:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do you support role-based access control?&lt;/li&gt;
&lt;li&gt;Is multi-factor authentication available and can it be enforced for all users?&lt;/li&gt;
&lt;li&gt;Is there a complete audit trail of who accessed what and when?&lt;/li&gt;
&lt;li&gt;How is access revoked when someone leaves the organization?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Encryption:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is data encrypted at rest using AES-256 or equivalent?&lt;/li&gt;
&lt;li&gt;Is data encrypted in transit using TLS 1.3 or higher?&lt;/li&gt;
&lt;li&gt;Who manages the encryption keys?&lt;/li&gt;
&lt;li&gt;Is encryption enabled by default?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Zero Trust:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does your platform follow Zero Trust principles?&lt;/li&gt;
&lt;li&gt;Is access context-aware (device, location, behavior)?&lt;/li&gt;
&lt;li&gt;Is user activity continuously monitored and logged?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Compliance:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do you hold SOC 2 Type II or ISO 27001 certification?&lt;/li&gt;
&lt;li&gt;Will you sign a Business Associate Agreement (for HIPAA-covered data)?&lt;/li&gt;
&lt;li&gt;Where is data physically stored, and can it be restricted to specific regions?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a vendor can't answer these questions clearly, that tells you something. The right provider will be able to explain their security posture in terms you understand, because they know their legal clients need to make informed decisions about client data protection.&lt;/p&gt;

&lt;p&gt;Your ethical obligation under the &lt;a href="https://www.americanbar.org/groups/professional_responsibility/publications/model_rules_of_professional_conduct/" rel="noopener noreferrer"&gt;ABA Model Rules&lt;/a&gt; isn't to be a cybersecurity professional. It's to be informed enough to exercise reasonable judgment. Understanding IAM, encryption, and Zero Trust gives you the vocabulary and the framework to do exactly that.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclaimer: This content is provided for informational and educational purposes only and is intended as a technical overview of security architecture. It does not constitute legal advice. Accessing or interacting with this material does not create an attorney-client relationship. The author is not a licensed attorney; if you require legal advice, please consult with a licensed professional in your jurisdiction. While efforts are made to ensure technical accuracy, security standards and legal regulations evolve; the author assumes no liability for actions taken based on this content.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloudsecurity</category>
      <category>cloud</category>
      <category>legaltech</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Getting Started With Caching in Ruby on Rails</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Wed, 18 Mar 2026 15:16:23 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/getting-started-with-caching-in-ruby-on-rails-4mj2</link>
      <guid>https://forem.com/heyjoshlee/getting-started-with-caching-in-ruby-on-rails-4mj2</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2F1ql4ca4mgax6dt75upjc.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.amazonaws.com%2Fuploads%2Farticles%2F1ql4ca4mgax6dt75upjc.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your Rails app is slow. You know it. Your users know it. And the worst part is, half the time your app is doing the exact same work over and over again, fetching the same data, rendering the same partials, running the same queries. Caching fixes that. You tell Rails "hey, remember this," and the next time someone asks for it, Rails hands it right back without breaking a sweat.&lt;/p&gt;

&lt;p&gt;We're going to walk through every caching strategy Rails gives you out of the box. Fragment caching, Russian doll caching, low-level caching, collection caching, and how to configure your cache store. By the end of this, you'll know exactly which type of caching to use and where.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable Caching in Development
&lt;/h2&gt;

&lt;p&gt;Before we do anything, caching is turned off in development by default. You need to flip it on or you're going to sit there wondering why nothing is working.&lt;/p&gt;

&lt;p&gt;Run this in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails dev:cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see: &lt;code&gt;Development mode is now being cached.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's it. Run the same command again to toggle it off. Under the hood, this creates a file called &lt;code&gt;tmp/caching-dev.txt&lt;/code&gt; that Rails checks on boot. When it exists, caching is on. When it doesn't, caching is off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fragment Caching
&lt;/h2&gt;

&lt;p&gt;Fragment caching is the one you'll use the most. It wraps a chunk of your view in a &lt;a href="https://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html" rel="noopener noreferrer"&gt;cache&lt;/a&gt; block and serves the stored HTML on every request after the first one.&lt;/p&gt;

&lt;p&gt;Let's say you have a products index page. Each product card has a name, price, and description. Here's how you cache each one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="vi"&gt;@products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"product-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;number_to_currency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;cache product&lt;/code&gt; line is doing all the heavy lifting. Rails generates a cache key based on the product's class name, ID, and &lt;code&gt;updated_at&lt;/code&gt; timestamp. Something like &lt;code&gt;views/products/1-20260315120000&lt;/code&gt;. When the product gets updated, &lt;code&gt;updated_at&lt;/code&gt; changes, the old cache key doesn't match anymore, and Rails renders a fresh version.&lt;/p&gt;

&lt;p&gt;The beauty of this is you don't have to manually expire anything. Update the product, the cache invalidates itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conditional Caching
&lt;/h3&gt;

&lt;p&gt;Sometimes you only want to cache for certain users. Maybe admins see extra buttons that regular users don't. Use &lt;code&gt;cache_if&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;cache_if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;current_user&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;admin?&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"product-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This caches the fragment for non-admin users but renders fresh HTML for admins every time. There's also &lt;code&gt;cache_unless&lt;/code&gt; if you prefer to think about it the other way around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Russian Doll Caching
&lt;/h2&gt;

&lt;p&gt;Russian doll caching is fragment caching with nesting. You cache the individual items, and then you cache the container that holds them. When one item changes, only that item's cache gets busted. The outer cache regenerates, but it pulls all the unchanged items from cache instead of re-rendering them.&lt;/p&gt;

&lt;p&gt;Here's a real example. You have a project with many tasks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="vi"&gt;@project&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tasks"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="vi"&gt;@project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
      &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"task"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"status"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's one critical piece that makes this work. When a task gets updated, the project's cache needs to know about it too. Otherwise the outer cache still serves the stale version. You fix this with &lt;a href="https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html" rel="noopener noreferrer"&gt;&lt;code&gt;touch: true&lt;/code&gt;&lt;/a&gt; on the association:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:project&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;touch: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Project&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:tasks&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now when you update a task, Rails automatically touches the parent project's &lt;code&gt;updated_at&lt;/code&gt; field. The project's cache key changes, the outer cache regenerates, and it pulls all the unchanged tasks from their individual caches. Only the one task that changed gets re-rendered.&lt;/p&gt;

&lt;p&gt;This is where the "Russian doll" name comes from. Caches inside caches inside caches. The inner ones stay warm even when the outer ones expire.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collection Caching
&lt;/h2&gt;

&lt;p&gt;If you're rendering a collection of partials, Rails has a shortcut that's way faster than looping and caching individually. Instead of the &lt;code&gt;each&lt;/code&gt; loop with &lt;code&gt;cache&lt;/code&gt; blocks, use the &lt;code&gt;cached: true&lt;/code&gt; option on &lt;code&gt;render&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;partial: &lt;/span&gt;&lt;span class="s1"&gt;'product'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;collection: &lt;/span&gt;&lt;span class="vi"&gt;@products&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;cached: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this to work, your partial (&lt;code&gt;_product.html.erb&lt;/code&gt;) must use the local variable &lt;code&gt;product&lt;/code&gt; rather than an instance variable like &lt;code&gt;@product&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;%# app/views/products/_product.html.erb %&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"product-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;number_to_currency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reason this is faster is that Rails fetches all the cache keys at once in a single round trip to the cache store, instead of checking them one at a time. For a page with 50 products, that's 1 cache lookup instead of 50.&lt;/p&gt;

&lt;p&gt;Your partial doesn't need any special cache blocks inside it. Rails handles all the caching at the collection level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Low-Level Caching
&lt;/h2&gt;

&lt;p&gt;Fragment caching is for views. Low-level caching is for everything else: expensive database queries, API responses, computed values, anything you want to store and retrieve by a key.&lt;/p&gt;

&lt;p&gt;The main method is &lt;a href="https://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch" rel="noopener noreferrer"&gt;&lt;code&gt;Rails.cache.fetch&lt;/code&gt;&lt;/a&gt;. You give it a key and a block. If the key exists in the cache, it returns the cached value and skips the block entirely. If the key doesn't exist, it runs the block, stores the result, and returns it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;competing_price&lt;/span&gt;
    &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"competing_price"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="ss"&gt;expires_in: &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="no"&gt;Competitor&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;API&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By passing the object (&lt;code&gt;self&lt;/code&gt;) and a string inside an array, Rails automatically manages the versioning for you. If the product is updated, the version changes, and the cache invalidates. The &lt;code&gt;expires_in: 12.hours&lt;/code&gt; part ensures that even if the product stays the same, we still refresh the data periodically. Perfect for external API data.&lt;/p&gt;

&lt;p&gt;You can also use low-level caching in your controllers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DashboardController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;
    &lt;span class="vi"&gt;@stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"dashboard_stats"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;expires_in: &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="ss"&gt;total_users: &lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;active_today: &lt;/span&gt;&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"last_seen_at &amp;gt; ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;revenue_mtd: &lt;/span&gt;&lt;span class="no"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;created_at: &lt;/span&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;beginning_of_month&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three potentially slow queries, cached for 15 minutes. Your dashboard loads instantly for every request in that window.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read and Write Separately
&lt;/h3&gt;

&lt;p&gt;If you need more control, you can use &lt;code&gt;Rails.cache.read&lt;/code&gt; and &lt;code&gt;Rails.cache.write&lt;/code&gt; directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"latest_report"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;report_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;expires_in: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"latest_report"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if you need to manually clear a cache entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"dashboard_stats"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuring Your Cache Store
&lt;/h2&gt;

&lt;p&gt;Rails needs somewhere to put all this cached data. That's the cache store. You configure it in your environment files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory Store (development default)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache_store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:memory_store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;size: &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;megabytes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stores everything in the Rails process memory. Fast, but the cache disappears when you restart the server and can't be shared between processes. Fine for development, not great for production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solid Cache (Rails 8 default)
&lt;/h3&gt;

&lt;p&gt;Rails 8 ships with &lt;a href="https://github.com/rails/solid_cache" rel="noopener noreferrer"&gt;Solid Cache&lt;/a&gt; as the default production cache store. It stores cache data in your database instead of needing a separate service like Redis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache_store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:solid_cache_store&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The configuration lives in &lt;code&gt;config/cache.yml&lt;/code&gt;. The default settings include a &lt;code&gt;max_age&lt;/code&gt; of 60 days and a &lt;code&gt;max_size&lt;/code&gt; of 256 megabytes. Solid Cache uses a FIFO (first in, first out) eviction strategy and handles expiry automatically through background tasks triggered by writes.&lt;/p&gt;

&lt;p&gt;The upside is you don't need to run and maintain a separate Redis or Memcached instance. Modern SSDs make the access-time penalty of disk vs RAM insignificant for most caching purposes. You're usually better off keeping a huge cache on disk rather than a small cache in memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Redis
&lt;/h3&gt;

&lt;p&gt;If you need something more battle-tested for high-traffic apps, Redis is the classic choice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache_store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:redis_cache_store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;url: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"REDIS_URL"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Redis handles eviction automatically when it hits max memory, so it behaves like a proper cache without you worrying about running out of space.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memcached
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cache_store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:mem_cache_store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"MEMCACHE_SERVERS"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memcached is built specifically for caching. If all you need is a cache and nothing else, it's a solid pick. But most teams these days go with Redis since it can handle caching, background jobs, and other use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  SQL Caching
&lt;/h2&gt;

&lt;p&gt;This one is free. You don't have to configure anything. Rails automatically caches the result set of each SQL query for the duration of a single request. If the same query runs twice in one request, Rails hits the database once and serves the second one from memory.&lt;/p&gt;

&lt;p&gt;You'll see it in your logs with a &lt;code&gt;CACHE&lt;/code&gt; prefix. This is per-request only. It doesn't persist between requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use What
&lt;/h2&gt;

&lt;p&gt;Fragment caching is for chunks of HTML in your views that don't change often. Use it on partials, sidebars, navigation elements, any rendered content that's expensive to generate.&lt;/p&gt;

&lt;p&gt;Russian doll caching is for nested content where parent and child records are related. Use it when you have collections inside collections (projects with tasks, posts with comments).&lt;/p&gt;

&lt;p&gt;Collection caching is for rendering lists of partials. Use the &lt;code&gt;cached: true&lt;/code&gt; option instead of manual cache blocks when you're rendering a collection.&lt;/p&gt;

&lt;p&gt;Low-level caching is for anything that's not a view. Expensive queries, external API calls, computed values. Anywhere you'd want to say "remember this for X minutes."&lt;/p&gt;

&lt;p&gt;SQL caching happens automatically. You don't have to think about it.&lt;/p&gt;

&lt;p&gt;As for cache stores, if you're on Rails 8, Solid Cache is the default and it works great for most apps. If you're handling serious traffic or need sub-millisecond cache reads, go with Redis. Start with fragment caching on your slowest pages. Profile with the Rails logs, see where the time is going, and add caching there. You don't have to cache everything at once.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>sql</category>
      <category>code</category>
    </item>
    <item>
      <title>The 80/20 of AWS (the services that actually matter)</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Mon, 16 Mar 2026 19:52:14 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/the-8020-of-aws-the-services-that-actually-matter-561g</link>
      <guid>https://forem.com/heyjoshlee/the-8020-of-aws-the-services-that-actually-matter-561g</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2F99h26al2c9iu0px7gwfe.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.amazonaws.com%2Fuploads%2Farticles%2F99h26al2c9iu0px7gwfe.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS has over 200 services. That number is intimidating. You log into the console, see a wall of icons, and immediately feel like you need a certification just to figure out where to start.&lt;/p&gt;

&lt;p&gt;Here's the good news: most companies use the same 10 to 15 services for almost everything. The rest are niche tools for specific problems you probably don't have yet. This is the 80/20 of AWS. The small set of services that handles the vast majority of what you'll actually build.&lt;/p&gt;

&lt;p&gt;We're going to walk through each one, explain what it does in plain language, and tell you when you'd reach for it. No deep dives, no architecture diagrams. Just enough to know what's available and when to use it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on the free tier:&lt;/strong&gt; AWS changed its free tier model in July 2025. If you created your account before July 15, 2025, you get the traditional 12-month free tier with specific service limits. If you signed up after that date, you get up to $200 in credits valid for 6 months. The free tier details below reflect the traditional model, but either way you can try all of these services without spending money up front.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  IAM (Identity and Access Management)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html" rel="noopener noreferrer"&gt;IAM&lt;/a&gt; controls who can do what in your AWS account. Every person, every application, every service that touches your AWS resources goes through IAM. It's not optional. It's the first thing you configure and the thing that protects everything else.&lt;/p&gt;

&lt;p&gt;You create &lt;strong&gt;users&lt;/strong&gt; for people, &lt;strong&gt;roles&lt;/strong&gt; for services, and &lt;strong&gt;policies&lt;/strong&gt; that define exactly what each one is allowed to do. A policy might say "this Lambda function can read from this specific S3 bucket and nothing else." That's the principle of least privilege, and IAM is how you enforce it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; You're already using it. Every AWS account has IAM. The question is whether you're using it well. If your app is running with admin-level permissions, fix that. Create specific roles with only the permissions each service actually needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; IAM itself is completely free. You pay for the services it controls, not for IAM itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  EC2 (Elastic Compute Cloud)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html" rel="noopener noreferrer"&gt;EC2&lt;/a&gt; gives you virtual servers in the cloud. You pick an operating system, choose how much CPU and RAM you want, and you've got a machine running in minutes. It's the most flexible compute option AWS offers because you have full control over the OS, the runtime, the networking, everything.&lt;/p&gt;

&lt;p&gt;You'll hear these virtual servers called "instances." They come in dozens of types optimized for different workloads. General purpose instances (the t3 and m7 families) handle most things. Compute-optimized instances (c7) are for CPU-heavy work. Memory-optimized (r7) for big in-memory datasets. The newest generation runs on AWS Graviton4 chips (the 8g instance families like M8g, C8g, R8g), which are up to 30% faster and cheaper than the previous generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When you need full control of the server. Hosting a web app, running a background worker, batch processing, machine learning training. If your workload doesn't fit neatly into a serverless function or a container, EC2 is the answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 750 hours per month of t2.micro or t3.micro instances for 12 months. That's enough to run one small instance 24/7 for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  S3 (Simple Storage Service)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html" rel="noopener noreferrer"&gt;S3&lt;/a&gt; stores files. Any kind of file, any size, basically unlimited storage. You create "buckets" and put objects in them. An object is a file plus some metadata. That's it.&lt;/p&gt;

&lt;p&gt;Nearly every AWS application touches S3 at some point. Static website hosting, image uploads, log storage, data lake, backup destination, ML training data. It's one of the oldest AWS services (launched in 2006) and one of the most reliable. S3 is designed for 99.999999999% durability. That's eleven nines. Your files aren't going anywhere.&lt;/p&gt;

&lt;p&gt;S3 has storage classes for different access patterns. Standard is for frequently accessed data. Infrequent Access costs less per GB but charges you for retrieval. Glacier is dirt cheap storage for archives you rarely touch. &lt;a href="https://aws.amazon.com/s3/storage-classes/intelligent-tiering/" rel="noopener noreferrer"&gt;Intelligent-Tiering&lt;/a&gt; automatically moves objects between classes based on how often you access them, so you don't have to think about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Storing anything. Seriously. User uploads, static assets, backups, logs, data exports. If you're generating files or receiving files, they probably belong in S3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 5 GB of Standard storage, 20,000 GET requests, and 2,000 PUT requests per month for 12 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  RDS (Relational Database Service)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html" rel="noopener noreferrer"&gt;RDS&lt;/a&gt; is a managed relational database. You pick your engine (PostgreSQL, MySQL, MariaDB, Oracle, or SQL Server), choose your instance size, and AWS handles the rest. Patching, backups, failover, replication. The stuff that makes running your own database server a full-time job.&lt;/p&gt;

&lt;p&gt;Then there's &lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html" rel="noopener noreferrer"&gt;Aurora&lt;/a&gt;, which is Amazon's own database engine. It's compatible with PostgreSQL and MySQL but built for the cloud from the ground up. It's faster (Amazon claims up to 5x faster than standard MySQL) and automatically replicates your data across three availability zones. Aurora Serverless scales the database up and down based on demand, so you're not paying for a big instance during off-hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When your application needs a relational database. If you're building a Rails app, a Django app, a Spring Boot API, anything that talks SQL, use RDS. Pick Aurora if you want the best performance and don't mind being locked into the AWS ecosystem a bit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 750 hours per month of a db.t3.micro or db.t4g.micro instance and 20 GB of storage for 12 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  DynamoDB
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html" rel="noopener noreferrer"&gt;DynamoDB&lt;/a&gt; is a fully managed NoSQL database. It stores data as key-value pairs or documents (JSON). There's no server to manage, no patches, no capacity planning in the traditional sense. You create a table, define a primary key, and start reading and writing data.&lt;/p&gt;

&lt;p&gt;The big selling point is performance at scale. DynamoDB delivers single-digit millisecond response times regardless of table size. It handles millions of requests per second without you touching any configuration. It also supports Global Tables for automatic cross-region replication if you need your data available worldwide.&lt;/p&gt;

&lt;p&gt;The tradeoff is flexibility. You need to design your data model around your access patterns up front. You can't just slap an index on a column later like you would in PostgreSQL. If you get the data model right, DynamoDB is incredibly fast and cheap. If you get it wrong, you'll fight it constantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; High-throughput, low-latency workloads where you know your access patterns ahead of time. Session stores, user profiles, game state, IoT data, shopping carts. If you're building something that needs to scale to millions of users and your data model fits key-value lookups, DynamoDB is the move.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 25 GB of storage and enough read/write capacity for about 200 million requests per month. Permanently free, not just 12 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lambda
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/welcome.html" rel="noopener noreferrer"&gt;Lambda&lt;/a&gt; lets you run code without managing servers. You write a function, upload it to Lambda, and it runs whenever something triggers it. An HTTP request, a file landing in S3, a message hitting a queue, a scheduled timer. Lambda handles the scaling. If you get one request, it runs one copy. If you get ten thousand simultaneous requests, it runs ten thousand copies.&lt;/p&gt;

&lt;p&gt;You pay per execution and per millisecond of compute time. If your function doesn't run, you pay nothing. For workloads that are bursty or event-driven, this is dramatically cheaper than keeping an EC2 instance running 24/7.&lt;/p&gt;

&lt;p&gt;Lambda supports Python, Node.js, Java, Go, .NET, Ruby, and custom runtimes. &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html" rel="noopener noreferrer"&gt;Lambda SnapStart&lt;/a&gt; significantly reduces cold-start latency for Java 11+, Python 3.12+, and .NET 8+ functions. Functions can run for up to 15 minutes and use up to 10 GB of memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Event-driven workloads. Processing an image after upload, handling webhook callbacks, running scheduled tasks, building API backends with API Gateway. If your work happens in short bursts rather than continuous processing, Lambda is probably the cheapest and simplest option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 1 million requests and 400,000 GB-seconds of compute time per month. Permanently free.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html" rel="noopener noreferrer"&gt;API Gateway&lt;/a&gt; sits in front of your backend and manages HTTP traffic. You define your API endpoints, connect them to Lambda functions (or EC2, or any HTTP backend), and API Gateway handles authentication, throttling, request validation, and CORS.&lt;/p&gt;

&lt;p&gt;It comes in two flavors. &lt;strong&gt;HTTP APIs&lt;/strong&gt; are simpler and cheaper, good for most use cases. &lt;strong&gt;REST APIs&lt;/strong&gt; have more features like request/response transformation, usage plans, and API keys if you need them.&lt;/p&gt;

&lt;p&gt;The typical pattern is API Gateway plus Lambda. You get a fully serverless API where you pay nothing when there's no traffic. API Gateway handles the routing, Lambda handles the logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When you're building an API and want managed infrastructure. Especially powerful paired with Lambda for serverless backends. Also great when you need authentication, rate limiting, or usage tracking without building it yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 1 million REST API calls or 1 million HTTP API calls per month for 12 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudFront
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html" rel="noopener noreferrer"&gt;CloudFront&lt;/a&gt; is a CDN (Content Delivery Network). It caches your content at edge locations around the world so users get faster response times. Instead of every request traveling to your server in Virginia, CloudFront serves it from a location near the user.&lt;/p&gt;

&lt;p&gt;You can put CloudFront in front of S3 buckets, EC2 instances, load balancers, or API Gateway. It handles HTTPS certificates automatically through AWS Certificate Manager. Data transfer from AWS services to CloudFront is free, which is a big deal because data transfer is usually the sneaky expensive part of AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Serving static assets (images, CSS, JavaScript), speeding up API responses, or distributing video content. If your users are spread across different regions and you care about load times, put CloudFront in front of your origin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 1 TB of data transfer out and 10 million HTTP/HTTPS requests per month. Permanently free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Route 53
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html" rel="noopener noreferrer"&gt;Route 53&lt;/a&gt; is DNS. It translates domain names (like yourapp.com) into IP addresses that computers understand. You can also register domains directly through Route 53.&lt;/p&gt;

&lt;p&gt;Beyond basic DNS, Route 53 supports routing policies. Latency-based routing sends users to the closest region. Weighted routing splits traffic between multiple endpoints (useful for blue-green deploys). Failover routing automatically redirects traffic if a health check fails.&lt;/p&gt;

&lt;p&gt;One nice cost trick: if you use Alias records to point to AWS resources (like CloudFront, load balancers, or S3), the DNS queries are free. Regular CNAME records cost $0.40 per million queries. Alias records cost nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When you have a domain name. That's basically everyone. Route 53 ties your domain to your infrastructure and gives you routing control that your registrar probably can't match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; No free tier for hosted zones ($0.50/month per zone), but Alias queries to AWS resources are free.&lt;/p&gt;

&lt;h2&gt;
  
  
  SQS (Simple Queue Service)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html" rel="noopener noreferrer"&gt;SQS&lt;/a&gt; is a message queue. You put messages in, something else pulls them out and processes them. The messages wait in the queue until a consumer is ready for them.&lt;/p&gt;

&lt;p&gt;This is how you decouple parts of your application. Instead of your web server directly calling a slow process (like sending an email or generating a report), it drops a message on a queue and moves on. A background worker picks up the message and handles it independently. If the worker is busy or down, the messages just pile up in the queue and get processed when it's ready.&lt;/p&gt;

&lt;p&gt;SQS has two types. &lt;strong&gt;Standard queues&lt;/strong&gt; deliver messages at least once and don't guarantee order. &lt;strong&gt;FIFO queues&lt;/strong&gt; guarantee exactly-once delivery and strict ordering, but handle fewer messages per second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Decoupling components, handling background jobs, buffering traffic spikes. Any time you want to say "process this later" instead of "process this now," SQS is the tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 1 million requests per month. Permanently free.&lt;/p&gt;

&lt;h2&gt;
  
  
  SNS (Simple Notification Service)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/sns/latest/dg/welcome.html" rel="noopener noreferrer"&gt;SNS&lt;/a&gt; is pub/sub messaging. You create a "topic," publish a message to it, and every subscriber gets a copy. Subscribers can be SQS queues, Lambda functions, HTTP endpoints, email addresses, or SMS numbers.&lt;/p&gt;

&lt;p&gt;The classic pattern is SNS plus SQS for fan-out. One event (like "a new order was placed") publishes to an SNS topic. Three different SQS queues subscribe: one triggers inventory updates, one sends a confirmation email, one updates analytics. One event, three independent reactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When one event needs to trigger multiple things. Notifications, fan-out processing, alerting. If you're using CloudWatch alarms, SNS is usually what sends you the alert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 1 million publishes and 100,000 HTTP/S deliveries per month. Permanently free.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudWatch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html" rel="noopener noreferrer"&gt;CloudWatch&lt;/a&gt; is monitoring and observability. It collects metrics, logs, and events from your AWS resources and applications. Every AWS service automatically sends basic metrics to CloudWatch. CPU usage on EC2, request count on API Gateway, error rate on Lambda. It's already collecting data. You just need to look at it.&lt;/p&gt;

&lt;p&gt;You create &lt;strong&gt;alarms&lt;/strong&gt; that watch a metric and trigger an action when it crosses a threshold. CPU above 80%? Auto-scale. Error rate above 5%? Send an SNS notification to the on-call channel. Lambda duration above 10 seconds? Investigate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CloudWatch Logs&lt;/strong&gt; stores log output from Lambda functions, ECS containers, EC2 instances, and more. &lt;strong&gt;Log Insights&lt;/strong&gt; lets you query those logs with a SQL-like syntax to find patterns and debug issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; Always. Every production workload should have CloudWatch alarms for the metrics that matter. Set up dashboards for visibility, alarms for things that need attention, and log groups for debugging. It's the first place you look when something breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 10 custom metrics, 10 alarms, 1 million API requests, 5 GB of log data ingestion per month.&lt;/p&gt;

&lt;h2&gt;
  
  
  ECS and Fargate (Elastic Container Service)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html" rel="noopener noreferrer"&gt;ECS&lt;/a&gt; runs Docker containers on AWS. You define your container image, how much CPU and memory it needs, and how many copies to run. ECS handles placing those containers on infrastructure and keeping them running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html" rel="noopener noreferrer"&gt;Fargate&lt;/a&gt; is the serverless option for ECS. Instead of managing EC2 instances to run your containers on, Fargate handles the underlying servers. You just define the container and its resources. Fargate provisions the compute, runs the container, and bills you per second for the CPU and memory used.&lt;/p&gt;

&lt;p&gt;There's also &lt;strong&gt;EKS&lt;/strong&gt; (Elastic Kubernetes Service) if your team already knows Kubernetes. ECS is simpler and more tightly integrated with AWS. EKS gives you the full Kubernetes experience with all its power and all its complexity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When your application is containerized. If you have a Dockerfile, ECS with Fargate is the easiest path to running it in production. It's a good middle ground between the full control of EC2 and the constraints of Lambda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; No direct free tier for ECS/Fargate, but the EC2 free tier applies if you run ECS on EC2 instances.&lt;/p&gt;

&lt;h2&gt;
  
  
  Elastic Beanstalk
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html" rel="noopener noreferrer"&gt;Elastic Beanstalk&lt;/a&gt; is the "just deploy my app" service. You give it your code (Node.js, Python, Java, Ruby, Go, .NET, PHP, or Docker), and it sets up everything: EC2 instances, load balancers, auto-scaling, health monitoring. You don't configure any of it unless you want to.&lt;/p&gt;

&lt;p&gt;It's like Heroku, but on AWS. You push code, it deploys. Under the hood, it's creating real AWS resources that you can see and modify if you need to. You're not locked into an abstraction you can't escape from. If you outgrow Beanstalk, all your resources are still there. You just start managing them directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt; When you want to get a web app running on AWS fast and you don't want to think about infrastructure. Great for prototypes, side projects, or teams that want AWS's scale without AWS's complexity. You can always graduate to managing EC2 or ECS directly later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; Elastic Beanstalk itself is free. You only pay for the underlying resources (EC2, S3, load balancers, etc.), which can fall under their respective free tiers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How They All Fit Together
&lt;/h2&gt;

&lt;p&gt;Here's a common setup you'll see in the real world. A React frontend sits in an S3 bucket, served globally through CloudFront. Route 53 points the domain to CloudFront. The API is built with API Gateway and Lambda functions, reading and writing to DynamoDB or RDS. User uploads go straight to S3. When something important happens (new order, user signup), an SNS topic notifies multiple SQS queues that trigger different workflows. CloudWatch monitors everything and pages the team through SNS when something breaks. IAM makes sure each piece can only access what it needs.&lt;/p&gt;

&lt;p&gt;That entire stack uses nine services. Nine out of 200+. And it handles everything from a hobby project to a production app serving millions of users.&lt;/p&gt;

&lt;p&gt;Start with what you need. Most apps begin with just EC2 or Lambda, S3, and a database. Add the rest as your requirements grow. The 80/20 rule holds: a handful of services covers the vast majority of what you'll build.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>lambda</category>
      <category>iam</category>
    </item>
    <item>
      <title>Top LLM Tools Companies Are Using to Add AI to Their Products in 2025</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Fri, 21 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/top-llm-tools-companies-are-using-to-add-ai-to-their-products-in-2025-4k25</link>
      <guid>https://forem.com/heyjoshlee/top-llm-tools-companies-are-using-to-add-ai-to-their-products-in-2025-4k25</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2F4lq4v4noahudkx7oseri.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2F4lq4v4noahudkx7oseri.jpg" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Companies everywhere are scrambling to add AI features to their products. They're turning to powerful large language model tools to make it happen.&lt;/p&gt;

&lt;p&gt;You've probably noticed chatbots getting smarter. Content creation tools are popping up everywhere, and apps can suddenly understand what you're saying in plain English.&lt;/p&gt;

&lt;p&gt;The secret behind this AI revolution isn't just one magic tool - it's a whole ecosystem of LLM platforms, APIs, and deployment solutions that companies are mixing and matching to build their perfect AI-powered products.&lt;/p&gt;

&lt;p&gt;From OpenAI's ChatGPT API to Google's Gemini and Anthropic's Claude, there's a growing toolkit that's making it easier than ever for businesses to integrate sophisticated AI capabilities.&lt;/p&gt;

&lt;p&gt;What's wild is how companies use these same core tools in totally different ways. Some are building custom chatbots for customer service, others are creating AI writing assistants, and plenty are finding creative ways to automate tasks you wouldn't expect.&lt;/p&gt;

&lt;p&gt;The tools are more accessible now, but the real magic? It's in how you customize and deploy them for your own needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Essential LLM Tools Transforming AI Products&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Companies today rely on four major platforms, and each one brings something unique to the table for AI development.&lt;/p&gt;

&lt;p&gt;OpenAI leads with versatile APIs perfect for creative tasks. Anthropic focuses on safety and reliability for enterprise use.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;OpenAI: The Standard for Creative and Conversational AI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You've probably seen OpenAI's impact everywhere - from chatbots to content generators. Their GPT-4o and GPT-4 Turbo models handle everything from writing code to analyzing images.&lt;/p&gt;

&lt;p&gt;What makes OpenAI stand out is how easy their API is to use. You can integrate GPT-4 into your app with just a few lines of code, which honestly cuts development time way down.&lt;/p&gt;

&lt;p&gt;GPT-3.5 still powers a lot of budget-friendly applications. It's cheaper but still handles most conversational AI tasks pretty well.&lt;/p&gt;

&lt;p&gt;For complex reasoning, though, GPT-4o is where you want to be.&lt;/p&gt;

&lt;p&gt;The real game-changer is their multimodal capabilities. Your users can upload images, and the model understands them alongside text.&lt;/p&gt;

&lt;p&gt;This opens up possibilities like visual customer support or document analysis tools. OpenAI's pricing is straightforward too - you pay per token, so costs scale with usage instead of hitting you with big upfront fees.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Anthropic and Claude 3: Safe and Reliable Language Understanding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Claude 3 stands out when you need an AI that just won't go off the rails. Anthropic built it with safety as the main priority, so it's great for customer-facing stuff.&lt;/p&gt;

&lt;p&gt;Finance and healthcare companies pick Claude 3 because it refuses harmful requests better than other models. The Anthropic API gives you three versions: Haiku for speed, Sonnet for balance, and Opus for complex tasks.&lt;/p&gt;

&lt;p&gt;Claude's context window is wild - it can process entire documents at once. Your users can upload research papers or contracts, and the model gets the whole thing.&lt;/p&gt;

&lt;p&gt;The model is really good at following instructions exactly as you write them. This means fewer weird responses that could embarrass your brand.&lt;/p&gt;

&lt;p&gt;Anthropic's approach to AI safety isn't just marketing fluff. They use constitutional AI training, so Claude learned to be helpful without being harmful.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Google Gemini and Vertex AI: Deep Integration and Multimodal Power&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Google Gemini through Vertex AI gives you the most integrated experience if you're already using Google Cloud. The setup is honestly pretty seamless, and scaling just happens automatically.&lt;/p&gt;

&lt;p&gt;Gemini handles text, images, audio, and video all in one model. Your app can analyze YouTube videos, transcribe calls, and generate responses - all through one API call.&lt;/p&gt;

&lt;p&gt;What sets Vertex AI apart is the enterprise features. You get built-in monitoring, version control, and security that meets compliance standards.&lt;/p&gt;

&lt;p&gt;Large companies choose this when they need bulletproof infrastructure. The pricing model is different too - you can get dedicated capacity, which works better when you have predictable, high-volume usage.&lt;/p&gt;

&lt;p&gt;Google's search integration gives Gemini access to real-time info. Your AI can answer questions about current events without you building complex retrieval systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Meta Llama 3 and Open-Source LLMs: Community-Driven Innovation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Llama 3 changed the game for companies wanting to own their AI stack. Meta's open-source approach means you can run models on your own servers, so you skip ongoing API costs.&lt;/p&gt;

&lt;p&gt;Hugging Face makes deploying Llama 2 and Llama 3 super simple. Their Transformers library handles the technical headaches, so you can focus on your product instead of infrastructure.&lt;/p&gt;

&lt;p&gt;Open-source models like Mistral 7B and Mixtral offer solid performance at lower costs. You can fine-tune them for your use case - something that's just not possible with closed APIs.&lt;/p&gt;

&lt;p&gt;Hugging Face hosts thousands of pre-trained models. Whether you need DeepSeek for coding or specialized NLP models, there's probably something you can use right away.&lt;/p&gt;

&lt;p&gt;The community aspect is huge. Developers share improvements, fine-tuned versions, and optimization tricks. Your AI gets better as the whole ecosystem moves forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How Companies Are Customizing and Deploying LLMs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Companies are taking different paths to make LLMs fit their needs. Some fine-tune models on their own data, others build secure on-prem systems.&lt;/p&gt;

&lt;p&gt;Most businesses focus on integrating AI into existing workflows while keeping their data safe and hitting compliance rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Fine-Tuning, RAG, and Model Personalization&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Fine-tuning lets you train an LLM on your company's specific data. The model gets better at understanding your industry terms, company policies, or customer needs.&lt;/p&gt;

&lt;p&gt;Retrieval-Augmented Generation (RAG) is another popular move. Instead of retraining the whole model, RAG connects your LLM to your knowledge base.&lt;/p&gt;

&lt;p&gt;When someone asks a question, the system finds relevant info from your documents and feeds it to the model. Many companies use RAG because it's faster to set up than fine-tuning.&lt;/p&gt;

&lt;p&gt;You don't need a ton of training data or expensive compute power. Plus, you can update your knowledge base without retraining anything.&lt;/p&gt;

&lt;p&gt;Model personalization goes even deeper. Some businesses make custom models that understand their workflows, coding standards, or customer language.&lt;/p&gt;

&lt;p&gt;Software companies often train models on their codebase and docs to help with code generation and support.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AI Workflow Automation and Integration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Companies are building AI workflow automation into their daily operations. This means connecting LLMs to tools like CRM systems, project management software, and databases.&lt;/p&gt;

&lt;p&gt;Content creation workflows are everywhere. Marketing teams use LLMs to write blog posts, social updates, and product descriptions.&lt;/p&gt;

&lt;p&gt;The AI pulls brand guidelines and past content to stay consistent with company voice. Sentiment analysis helps customer service teams by reading support tickets and flagging angry customers or urgent issues.&lt;/p&gt;

&lt;p&gt;This lets human agents focus on the most important cases first. Similarity search powers recommendation systems for e-commerce, helping LLMs find products that match what customers are looking at.&lt;/p&gt;

&lt;p&gt;Most companies aren't replacing humans entirely. They're just offloading repetitive stuff so employees can focus on strategy or creative work.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Security, Compliance, and On-Premise Deployments&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Data security is a huge deal when using LLMs. Plenty of companies can't send sensitive data to outside AI services because of privacy rules or competitive reasons.&lt;/p&gt;

&lt;p&gt;On-premise AI deployment solves this. You install and run the LLM on your own servers, so you control your data and how the model works.&lt;/p&gt;

&lt;p&gt;Compliance needs often drive on-premise choices. Healthcare companies need HIPAA compliance, financial firms have strict data rules, and government agencies worry about national security.&lt;/p&gt;

&lt;p&gt;On-premise setups cost more up front. You need powerful hardware and technical folks to keep things running, but you get better data privacy and can tweak the system however you want.&lt;/p&gt;

&lt;p&gt;Monitoring and observability tools help you track how your LLMs perform. You can see which queries work well and which ones are just off, so you can keep improving the system over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Business Applications: Assistants, Chatbots, and More&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI assistants are popping up everywhere in workplace tools. They help folks track down information, schedule meetings, or even whip up emails without much hassle.&lt;/p&gt;

&lt;p&gt;Since they're trained on company data, these assistants actually get how things work internally. That makes them way more useful than you'd expect at first glance.&lt;/p&gt;

&lt;p&gt;Virtual assistants handle customer service calls and chat support, too. They can answer the easy stuff, help with orders, and if things get tricky, they'll pass you off to a real person.&lt;/p&gt;

&lt;p&gt;Honestly, this cuts down on wait times and keeps customers from getting too frustrated. It's not perfect, but it's a big step up from the old days of endless hold music.&lt;/p&gt;

&lt;p&gt;AI-powered chatbots aren't just running on scripts anymore. The good ones pick up on context and actually hold a conversation that feels, well, almost natural.&lt;/p&gt;

&lt;p&gt;They'll remember what someone said earlier and give more tailored help. That little bit of memory makes a huge difference.&lt;/p&gt;

&lt;p&gt;Enterprise AI is doing some heavy lifting in areas like document analysis, contract review, and financial reporting. Legal teams use big language models to comb through contracts and highlight stuff that matters.&lt;/p&gt;

&lt;p&gt;Finance folks are automating report writing and digging through data faster than ever. It's not magic, but it sure feels close sometimes.&lt;/p&gt;

&lt;p&gt;Code generation tools are changing the game for developers. These AIs get your company's coding style and can spot bugs or suggest tweaks before things go sideways.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>openai</category>
      <category>rag</category>
    </item>
    <item>
      <title>The Most Popular AWS Services You Probably Should Use: Key Picks &amp; Why They Matter</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Wed, 19 Nov 2025 18:37:50 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/the-most-popular-aws-services-you-probably-should-use-key-picks-why-they-matter-515l</link>
      <guid>https://forem.com/heyjoshlee/the-most-popular-aws-services-you-probably-should-use-key-picks-why-they-matter-515l</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fryfy2zsgv9pmei68ht9l.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fryfy2zsgv9pmei68ht9l.jpg" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon Web Services is pretty much the cloud platform everyone talks about these days. With over 200 services, though, figuring out what you actually need can get overwhelming fast.&lt;/p&gt;

&lt;p&gt;You don’t need to become an AWS wizard to build something solid in the cloud. Most successful cloud projects stick to 10–15 core AWS services that cover the basics — computing, storage, databases, and security.&lt;/p&gt;

&lt;p&gt;Whether you’re a startup putting out your first app or a big company moving to the cloud, these services are the real backbone. They show up in nearly every AWS deployment I’ve seen.&lt;/p&gt;

&lt;p&gt;Let’s run through the AWS services you’ll bump into in almost any project. I’ll also point out the crucial tools that keep your stuff secure and humming along.&lt;/p&gt;

&lt;p&gt;If you focus on these proven services, you’ll have what you need to build something robust — without drowning in AWS’s endless menu.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Most Popular AWS Services for Every Cloud Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There are a handful of AWS services that really do the heavy lifting for most cloud apps. They handle everything from spinning up servers to storing your data.&lt;/p&gt;

&lt;p&gt;They’re built to work together and scale as your business grows. Here’s what you should know:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon EC2: Powering Your Cloud Compute Needs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon EC2 (Elastic Compute Cloud) gives you virtual servers you can launch on demand. It’s like renting computers by the hour — no need to buy hardware.&lt;/p&gt;

&lt;p&gt;You get full control over your compute resources. Need more juice for a big job? Just spin up extra instances. Done? Shut them down and save money.&lt;/p&gt;

&lt;p&gt;Key EC2 benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch virtual servers in minutes&lt;/li&gt;
&lt;li&gt;Pay only for what you use&lt;/li&gt;
&lt;li&gt;Choose from dozens of instance types&lt;/li&gt;
&lt;li&gt;Scale up or down automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EC2 is flexible — good for web apps, dev environments, or crunching data. You can pick instances tuned for CPU, memory, or storage, depending on what you need.&lt;/p&gt;

&lt;p&gt;Best part is, you don’t have to guess how much capacity you’ll need. Start small, then add more as you go. That’s one less thing to stress about.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon S3: Object Storage for Everything and Anything&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon S3 (Simple Storage Service) is all about storing files — images, backups, huge datasets, you name it. It’s your cloud filing cabinet.&lt;/p&gt;

&lt;p&gt;S3 organizes everything into “buckets” — think folders, but in the cloud. You can stash unlimited data and grab it from anywhere.&lt;/p&gt;

&lt;p&gt;What makes S3 special:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store files from 0 bytes to 5TB each&lt;/li&gt;
&lt;li&gt;Built-in data backup and versioning&lt;/li&gt;
&lt;li&gt;Fine-grained access controls&lt;/li&gt;
&lt;li&gt;Multiple storage classes for different needs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managing data gets a lot easier with S3’s simple interface. You can set up rules to move old files to cheaper storage or get rid of them automatically.&lt;/p&gt;

&lt;p&gt;It plays nice with other AWS services, too. EC2 can read from S3, Lambda can process S3 files, and RDS can back up to S3 buckets. That’s pretty handy.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon RDS: Hassle-Free Relational Database Management&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon RDS (Relational Database Service) takes the pain out of databases. No more installing or patching database software — RDS does it all for you.&lt;/p&gt;

&lt;p&gt;Pick from six popular engines: Amazon Aurora, MySQL, PostgreSQL, Oracle, SQL Server, or MariaDB. They run just like you’d expect, minus the maintenance headaches.&lt;/p&gt;

&lt;p&gt;RDS handles these tasks for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic software updates and patches&lt;/li&gt;
&lt;li&gt;Daily backups with point-in-time recovery&lt;/li&gt;
&lt;li&gt;Hardware scaling when you need more power&lt;/li&gt;
&lt;li&gt;Multi-region replication for disaster recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Routine maintenance is on autopilot here. No more worrying about security patches or running out of storage space.&lt;/p&gt;

&lt;p&gt;RDS works smoothly with your other AWS stuff. EC2 can connect directly to your databases, and you can monitor everything or set alerts right from AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AWS Lambda: Effortless Serverless Computing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS Lambda lets you run code without thinking about servers at all. Upload your function, and Lambda takes care of scaling, monitoring, and billing.&lt;/p&gt;

&lt;p&gt;It’s great for real-time data processing, handling API calls, or running background jobs. Your code only runs when it’s triggered, so you only pay for what you use.&lt;/p&gt;

&lt;p&gt;Lambda shines for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processing files uploaded to S3&lt;/li&gt;
&lt;li&gt;Responding to database changes&lt;/li&gt;
&lt;li&gt;Handling web API requests&lt;/li&gt;
&lt;li&gt;Running scheduled maintenance tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can write Lambda functions in Python, Node.js, Java, C#, and a few others. Each function can run up to 15 minutes and use as much as 10GB of memory.&lt;/p&gt;

&lt;p&gt;The coolest part? You never have to worry about server capacity. Lambda just scales up or down based on what’s happening.&lt;/p&gt;

&lt;p&gt;Your Lambda functions can tie into other AWS services, like firing off when there’s a new S3 file or an API Gateway event. It’s all pretty seamless.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Crucial AWS Tools for Security, Networking &amp;amp; App Scalability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Some AWS services are all about keeping your apps secure, connected, and able to handle whatever gets thrown at them. These are the heavy hitters for network isolation, access control, content delivery, and messaging.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon VPC: Building Secure Virtual Networks&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon VPC gives you your own private slice of AWS. It’s like building a data center in the cloud that nobody else can touch.&lt;/p&gt;

&lt;p&gt;You get to call the shots — define IP ranges, set up subnets, create routing tables. It’s your network, your rules.&lt;/p&gt;

&lt;p&gt;Key VPC Components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public subnets — for stuff that needs internet access&lt;/li&gt;
&lt;li&gt;Private subnets — for databases or sensitive apps&lt;/li&gt;
&lt;li&gt;Security groups — act like firewalls for your instances&lt;/li&gt;
&lt;li&gt;Network ACLs — provide subnet-level security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Network isolation is the real win here. Your VPC keeps your apps away from everyone else’s. That’s huge if you’re handling sensitive data or need to meet compliance standards.&lt;/p&gt;

&lt;p&gt;You can hook your VPC up to your on-premises network with a VPN, too. That way, your local systems and cloud resources play nice together.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AWS IAM: Managing Access &amp;amp; Identity&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS Identity and Access Management (IAM) is how you control who can touch your AWS resources and what they can do. It’s like a bouncer checking IDs at the door.&lt;/p&gt;

&lt;p&gt;IAM is all about least privilege. People only get the permissions they absolutely need — nothing extra.&lt;/p&gt;

&lt;p&gt;Core IAM Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users — individual people who need AWS access&lt;/li&gt;
&lt;li&gt;Groups — collections of users with similar permissions&lt;/li&gt;
&lt;li&gt;Roles — temporary access for apps or services&lt;/li&gt;
&lt;li&gt;Policies — documents that spell out what’s allowed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can write detailed policies, down to the service and action. Maybe a dev gets EC2 and S3 access, but not billing info. Makes sense, right?&lt;/p&gt;

&lt;p&gt;Multi-factor authentication gives you an extra layer of security. Even if someone grabs a password, they’re still not getting in without that second factor.&lt;/p&gt;

&lt;p&gt;IAM ties into all AWS services automatically. Set permissions once, and you’re good across the whole platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon CloudFront: Speeding Up Content Delivery&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon CloudFront is AWS’s content delivery network. It makes your sites and apps load faster everywhere by copying your content to edge locations worldwide.&lt;/p&gt;

&lt;p&gt;When someone visits your site, CloudFront serves it from the closest edge location. That means way less waiting around for your users.&lt;/p&gt;

&lt;p&gt;CloudFront Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global reach — 400+ edge locations worldwide&lt;/li&gt;
&lt;li&gt;Dynamic content — handles static files and live data&lt;/li&gt;
&lt;li&gt;Security — built-in DDoS protection and SSL&lt;/li&gt;
&lt;li&gt;Cost savings — cuts bandwidth costs from your origin servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use CloudFront with pretty much any origin — S3, EC2, or even servers outside AWS. It just works.&lt;/p&gt;

&lt;p&gt;The service takes care of traffic spikes, so you don’t have to sweat it during busy times. Whether you’re streaming video or running a shop, it’ll scale up for you.&lt;/p&gt;

&lt;p&gt;Setup’s straightforward in the AWS console. Just point CloudFront at your content source and let it do its thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon SQS &amp;amp; SNS: Queueing and Messaging Made Simple&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon SQS and SNS are like the backbone for messaging between different pieces of your app. If you’re building microservices that need to chat with each other reliably, you pretty much need these.&lt;/p&gt;

&lt;p&gt;Amazon SQS is a message queuing service. Basically, it holds onto messages until your apps are ready to deal with them.&lt;/p&gt;

&lt;p&gt;That means if your systems get slammed, you don’t lose any data. It’s a lifesaver when things get busy.&lt;/p&gt;

&lt;p&gt;SQS gives you two types of queues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard queues — super high throughput, at-least-once delivery&lt;/li&gt;
&lt;li&gt;FIFO queues — keeps things in order, delivers exactly once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon SNS is all about notifications. It can blast messages out to a bunch of places at once.&lt;/p&gt;

&lt;p&gt;Simple Notification Service can ping emails, fire off SMS, send stuff to mobile apps, or even other AWS services. Super handy for alerting people or kicking off automated stuff.&lt;/p&gt;

&lt;p&gt;SNS can also broadcast events to several SQS queues. That way, different services can pick up the same message and do their own thing with it.&lt;/p&gt;

&lt;p&gt;And hey, both SQS and SNS are fully managed. You don’t have to mess with servers or scaling headaches — they just handle whatever you throw at them.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>ec2</category>
      <category>rds</category>
    </item>
    <item>
      <title>How to Pick the Right Database in AWS: Simple Steps for Every Project</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Mon, 17 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/how-to-pick-the-right-database-in-aws-simple-steps-for-every-project-iec</link>
      <guid>https://forem.com/heyjoshlee/how-to-pick-the-right-database-in-aws-simple-steps-for-every-project-iec</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2F17r6do0492cxqlc8clvl.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2F17r6do0492cxqlc8clvl.jpg" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Picking the right database in AWS can feel overwhelming. You're staring at more than 15 different options, and it's easy to get lost.&lt;/p&gt;

&lt;p&gt;Whether you're building a simple web app or a complex enterprise system, the database you choose really does shape your app's performance, scalability, and cost. No pressure, right?&lt;/p&gt;

&lt;p&gt;The key to choosing the right AWS database is matching your specific data model, performance needs, and access patterns to the strengths of each database type. You don't have to just guess, or pick whatever's trending - there's actually a solid framework to help you narrow things down fast.&lt;/p&gt;

&lt;p&gt;Let's walk through the most important factors to consider, then break down each AWS database type. By the end, you should have a clearer roadmap for this whole decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Key Factors to Consider When Choosing an AWS Database&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Getting the database choice right comes down to understanding what your data looks like and how you'll use it. Think about whether your data fits neatly into tables, how complex your searches will be, and how much growth you're expecting.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding Your Data Needs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before you pick any database, you've got to know your data inside and out. What kind of information are you storing?&lt;/p&gt;

&lt;p&gt;How much of it do you have right now, and how fast is it growing? Think about your data's relationships too.&lt;br&gt;
Does one piece of info connect to another? Like customers linking to orders, or products connecting to reviews?&lt;/p&gt;

&lt;p&gt;This matters a lot for picking the right database type. Data volume is a big deal here.&lt;/p&gt;

&lt;p&gt;If you're dealing with millions of records that'll grow to billions, that's a whole different game than a small app with just a few thousand users. You also need to consider data integrity requirements.&lt;/p&gt;

&lt;p&gt;Some apps can handle a bit of inconsistency, while others need perfect accuracy all the time. Don't forget about compliance needs.&lt;/p&gt;

&lt;p&gt;Healthcare, finance, and other industries have strict rules about how you handle and store data.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Structured vs. Unstructured Data&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is probably the biggest decision you'll make. Structured data fits nicely into rows and columns - think spreadsheets or classic databases.&lt;/p&gt;

&lt;p&gt;If your data has clear fields like names, dates, prices, and addresses, you're dealing with structured data. Relational databases like Amazon Aurora or RDS work great here.&lt;/p&gt;

&lt;p&gt;Unstructured data is messier. JSON documents, images, videos, or text that doesn't fit standard formats - this stuff needs NoSQL databases.&lt;/p&gt;

&lt;p&gt;Semi-structured data is somewhere in the middle. It has some organization but isn't rigid. JSON files with different fields or XML docs usually land here.&lt;/p&gt;

&lt;p&gt;Here's a quick breakdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured: Customer records, financial transactions, inventory&lt;/li&gt;
&lt;li&gt;Semi-structured: Product catalogs, user profiles, log files&lt;/li&gt;
&lt;li&gt;Unstructured: Images, videos, social media posts, documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't try to force unstructured data into relational tables. That's just asking for headaches later.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Query Requirements and Complexity&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;How you'll search and analyze your data matters. Simple lookups need different databases than complex queries with multiple joins.&lt;/p&gt;

&lt;p&gt;If you're doing basic key-value lookups - like finding a user by ID - DynamoDB works perfectly. It's fast, simple, and scales like crazy.&lt;/p&gt;

&lt;p&gt;But if you need to join data across multiple tables, calculate averages, or run reports, you'll want a relational database. Amazon Aurora is solid for complex queries.&lt;/p&gt;

&lt;p&gt;Real-time analytics is another beast. If you need instant results from huge datasets, consider in-memory databases like ElastiCache or MemoryDB.&lt;/p&gt;

&lt;p&gt;Think about your query patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple reads/writes: Key-value databases&lt;/li&gt;
&lt;li&gt;Complex joins: Relational databases&lt;/li&gt;
&lt;li&gt;Graph relationships: Graph databases like Neptune&lt;/li&gt;
&lt;li&gt;Time-based queries: Time series databases like Timestream&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't pick a database that makes your queries harder than they need to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Scalability and Performance Considerations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Scalability isn't just about handling more data - it's about handling more users, more requests, and more complexity as you grow.&lt;/p&gt;

&lt;p&gt;Some databases scale up (bigger servers), while others scale out (more servers). DynamoDB scales out automatically, which is great for unpredictable traffic.&lt;/p&gt;

&lt;p&gt;High availability means your database stays running even when things break. Aurora handles failovers across multiple zones for you.&lt;/p&gt;

&lt;p&gt;Performance needs can vary wildly. Gaming leaderboards need microsecond responses, while batch processing can wait minutes.&lt;/p&gt;

&lt;p&gt;Consider these performance factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read vs. write patterns: More reads? Use read replicas&lt;/li&gt;
&lt;li&gt;Latency requirements: Sub-millisecond? Go in-memory&lt;/li&gt;
&lt;li&gt;Throughput needs: Millions of requests? Pick NoSQL&lt;/li&gt;
&lt;li&gt;Consistency requirements: Need immediate consistency? Stick with relational&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Database management overhead matters too. Fully managed services like DynamoDB handle everything for you, while self-managed options give you more control but require more work.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Types of AWS Database Services and When to Use Them&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS offers over 15 different database services, but most fall into three main buckets. You'll find traditional relational databases for structured data, NoSQL options for flexible scaling, and specialized databases built for specific use cases like graphs or time series data.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Relational Database Options in AWS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Relational databases store your data in tables with rows and columns. They're perfect when you need structured data and complex queries using SQL.&lt;/p&gt;

&lt;p&gt;Amazon RDS is your go-to for traditional relational databases. It supports six engines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MySQL - Great for web apps and content management&lt;/li&gt;
&lt;li&gt;PostgreSQL - Best for complex queries and data integrity&lt;/li&gt;
&lt;li&gt;MariaDB - Open-source alternative to MySQL&lt;/li&gt;
&lt;li&gt;Oracle - Enterprise-grade for big businesses&lt;/li&gt;
&lt;li&gt;SQL Server - Microsoft's database for Windows&lt;/li&gt;
&lt;li&gt;DB2 - IBM's enterprise solution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon Aurora takes things up a notch. It's built for the cloud and runs up to 5x faster than MySQL and 3x faster than PostgreSQL.&lt;/p&gt;

&lt;p&gt;Aurora handles backups, patching, and scaling for you. Use relational databases when you're migrating from on-premises systems or for enterprise apps like billing, customer service, or inventory management where data consistency really matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;NoSQL and Non-Relational Database Choices&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;NoSQL databases don't use tables like relational ones do. They're built for speed and can handle massive amounts of data with flexible structures.&lt;/p&gt;

&lt;p&gt;Amazon DynamoDB is a key-value database that's completely serverless. It can handle millions of requests per second and scales automatically.&lt;/p&gt;

&lt;p&gt;Use it for session stores, shopping carts, or gaming leaderboards where you need fast performance. Amazon DocumentDB stores JSON documents and works with MongoDB applications.&lt;/p&gt;

&lt;p&gt;It's perfect for content management systems, user profiles, or product catalogs where your data structure changes a lot. Amazon ElastiCache provides in-memory caching with Redis or Memcached.&lt;/p&gt;

&lt;p&gt;It delivers microsecond response times and works great as a caching layer to speed up your existing databases. Amazon Neptune is a graph database for connected data.&lt;/p&gt;

&lt;p&gt;Use it for social networks, fraud detection, or recommendation engines where relationships between data points are the main thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Specialized Databases for Unique Use Cases&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Some applications just need databases built for oddly specific jobs. AWS has a few options that really shine in those narrow lanes.&lt;/p&gt;

&lt;p&gt;Amazon Redshift is a data warehouse made for analytics. It chews through huge datasets fast and feels right at home with business intelligence or reporting.&lt;/p&gt;

&lt;p&gt;Amazon Timestream deals with time series data - think IoT devices, app metrics, or sensor numbers. It sorts everything by time and helps you notice trends in your data streams, which is honestly pretty handy.&lt;/p&gt;

&lt;p&gt;Amazon QLDB is a ledger database that tracks every single change. You can't erase or tweak old records, so it's a fit for financial systems or supply chains when you really need an audit trail that's rock solid.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>acid</category>
      <category>rds</category>
    </item>
    <item>
      <title>Elastic Container Service on AWS - How to Get Started Step-by-Step</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Fri, 14 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/elastic-container-service-on-aws-how-to-get-started-step-by-step-5eff</link>
      <guid>https://forem.com/heyjoshlee/elastic-container-service-on-aws-how-to-get-started-step-by-step-5eff</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fi5vmh0k9982w6seshmis.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.amazonaws.com%2Fuploads%2Farticles%2Fi5vmh0k9982w6seshmis.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're looking to run containers on AWS without the headache of managing all the underlying infrastructure, Amazon Elastic Container Service (ECS) is your go-to solution.&lt;/p&gt;

&lt;p&gt;ECS is a fully managed container orchestration service that handles deployment, scaling, and management of your containerized applications automatically. You get to focus on building great apps instead of worrying about servers.&lt;/p&gt;

&lt;p&gt;You might be wondering how to actually get started with AWS ECS and whether it's the right fit for your projects.&lt;/p&gt;

&lt;p&gt;The good news? Amazon ECS works smoothly with Docker containers and ties into other AWS services, so it's not as intimidating as it sounds to launch your first containerized app.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Up and Running With Elastic Container Service&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon ECS makes containerization simple by handling the tough parts of running containers in the cloud.&lt;/p&gt;

&lt;p&gt;You'll want to get a grip on some container basics, set up your first cluster, and decide if Fargate or EC2 fits your needs better.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Basics of Containerization and ECS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Containers package your app with everything it needs to run.&lt;/p&gt;

&lt;p&gt;Think of them like shipping containers - they work the same way everywhere, which is honestly pretty cool.&lt;/p&gt;

&lt;p&gt;Docker is the most popular way to create containers.&lt;/p&gt;

&lt;p&gt;You write a Dockerfile that tells Docker how to build your container image, and that image becomes the blueprint for running your app.&lt;/p&gt;

&lt;p&gt;Amazon ECS is AWS's container orchestration service.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It decides where to run your containers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restarts them if they crash&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scales them up when you need more&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Takes care of networking between containers&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ECS is simpler than Kubernetes but still packs a punch.&lt;/p&gt;

&lt;p&gt;You don't have to manage the control plane - AWS does that for you, which is honestly a relief.&lt;/p&gt;

&lt;p&gt;Container orchestration means you can run tons of containers without tracking each one yourself.&lt;/p&gt;

&lt;p&gt;ECS keeps an eye on everything and helps keep your apps healthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Setting Up Your ECS Cluster&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;An ECS cluster is where your containers live.&lt;/p&gt;

&lt;p&gt;It's basically a group of computers working together to run your apps.&lt;/p&gt;

&lt;p&gt;Here's how you create a cluster:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the ECS console in AWS&lt;/li&gt;
&lt;li&gt;Click "Create Cluster"&lt;/li&gt;
&lt;li&gt;Pick a name for your cluster&lt;/li&gt;
&lt;li&gt;Choose your infrastructure (Fargate or EC2)&lt;/li&gt;
&lt;li&gt;Set up networking if you need it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your cluster starts out empty.&lt;/p&gt;

&lt;p&gt;You'll add services and tasks to it later - services keep your containers running for the long haul, while tasks are like individual container runs.&lt;/p&gt;

&lt;p&gt;The cluster manages all the container instances for you.&lt;/p&gt;

&lt;p&gt;No more SSH-ing into servers or installing Docker by hand.&lt;/p&gt;

&lt;p&gt;You can have multiple clusters for different environments.&lt;/p&gt;

&lt;p&gt;Lots of teams split clusters for development, staging, and production - it just keeps things tidy.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Using Fargate vs EC2 for Container Deployments&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You've got two ways to run containers on ECS: AWS Fargate and EC2 instances.&lt;/p&gt;

&lt;p&gt;Each one has its own perks.&lt;/p&gt;

&lt;p&gt;Fargate is serverless, so you don't manage any servers at all:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS takes care of the infrastructure&lt;/li&gt;
&lt;li&gt;You pay just for the container runtime&lt;/li&gt;
&lt;li&gt;It's great if you want to get started fast&lt;/li&gt;
&lt;li&gt;Super handy for workloads that go up and down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EC2 instances give you more control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You pick the server types&lt;/li&gt;
&lt;li&gt;Better for steady, predictable workloads&lt;/li&gt;
&lt;li&gt;Can save money at scale&lt;/li&gt;
&lt;li&gt;You're on the hook for OS updates and patches&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fh17ym0cwv45cl0dzftm0.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.amazonaws.com%2Fuploads%2Farticles%2Fh17ym0cwv45cl0dzftm0.png" alt=" " width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're just starting out, Fargate is honestly the way to go.&lt;/p&gt;

&lt;p&gt;It's simple, and you can always switch to EC2 when you want more control.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Deploying, Managing, and Monitoring Your Containerized Apps&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You'll need to create task definitions for your containers, store images in ECR, set up permissions, and keep everything humming with monitoring tools.&lt;/p&gt;

&lt;p&gt;All these steps work together to get your apps deployed and managed on ECS.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Creating and Registering Task Definitions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Task definitions are like blueprints for your containers.&lt;/p&gt;

&lt;p&gt;They tell ECS how to run your Docker containers - what image to use, how much memory, and so on.&lt;/p&gt;

&lt;p&gt;You can create task definitions through the AWS Console or CLI.&lt;/p&gt;

&lt;p&gt;The definition includes your container image location, CPU and memory, and environment variables.&lt;/p&gt;

&lt;p&gt;Key settings you'll configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Container image URI from ECR&lt;/li&gt;
&lt;li&gt;Memory and CPU allocation&lt;/li&gt;
&lt;li&gt;Port mappings for network access&lt;/li&gt;
&lt;li&gt;Environment variables for your app&lt;/li&gt;
&lt;li&gt;Log configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each task definition gets a revision number.&lt;/p&gt;

&lt;p&gt;When you update settings, AWS creates a new revision automatically, which is pretty handy.&lt;/p&gt;

&lt;p&gt;You can pick launch types - either Fargate for serverless containers or EC2 for more control.&lt;/p&gt;

&lt;p&gt;Fargate handles the infrastructure, while EC2 lets you manage the servers underneath if you're into that.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Pushing and Pulling Images With Amazon ECR&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon Elastic Container Registry (ECR) stores your Docker images securely.&lt;/p&gt;

&lt;p&gt;It's like a private warehouse for all your container images.&lt;/p&gt;

&lt;p&gt;First, you'll create a repository in ECR for each app.&lt;/p&gt;

&lt;p&gt;Then use the AWS CLI to get login credentials for Docker.&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;aws ecr get-login-password&lt;/code&gt; to authenticate your Docker client.&lt;/p&gt;

&lt;p&gt;After that, tag your local images with the ECR repository URL.&lt;/p&gt;

&lt;p&gt;Basic workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build your Docker image locally&lt;/li&gt;
&lt;li&gt;Tag it with your ECR repository URI&lt;/li&gt;
&lt;li&gt;Push the image using &lt;code&gt;docker push&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ECS pulls from ECR when running tasks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ECR scans images for security vulnerabilities automatically.&lt;/p&gt;

&lt;p&gt;You can set lifecycle policies to delete old images and save on storage.&lt;/p&gt;

&lt;p&gt;The registry integrates right into ECS, so your task definitions can point to images stored there without any fuss.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Configuring Permissions and IAM Roles&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;IAM roles control what your containers can access in AWS.&lt;/p&gt;

&lt;p&gt;You'll need different roles for different parts of your ECS setup.&lt;/p&gt;

&lt;p&gt;The task execution role lets ECS pull images from ECR and write logs to CloudWatch.&lt;/p&gt;

&lt;p&gt;Every task needs this basic role to work.&lt;br&gt;
The task role gives your running containers permissions to access other AWS services.&lt;/p&gt;

&lt;p&gt;For example, if your app reads from S3, you'd attach S3 permissions here.&lt;/p&gt;

&lt;p&gt;Required permissions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECR image pulling rights&lt;/li&gt;
&lt;li&gt;CloudWatch Logs write access&lt;/li&gt;
&lt;li&gt;Any service your app uses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create roles through the IAM console or the AWS CLI.&lt;br&gt;
Attach the &lt;code&gt;AmazonECSTaskExecutionRolePolicy&lt;/code&gt; for basic functionality.&lt;/p&gt;

&lt;p&gt;You can also set up service-linked roles for ECS to manage load balancers and auto-scaling groups automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Monitoring, Logging, and Scaling Your ECS Services&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CloudWatch covers most of your monitoring and logging needs. It keeps track of CPU, memory, and network traffic from your containers.&lt;/p&gt;

&lt;p&gt;You'll want to set up the &lt;code&gt;awslogs&lt;/code&gt; log driver in your task definitions. This way, container logs end up in CloudWatch Logs, which honestly saves a lot of time when you're troubleshooting.&lt;/p&gt;

&lt;p&gt;Auto-scaling options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target tracking based on CPU or memory&lt;/li&gt;
&lt;li&gt;Step scaling for gradual changes&lt;/li&gt;
&lt;li&gt;Scheduled scaling for predictable patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CloudWatch alarms can trigger scaling actions automatically. For example, you might scale up if CPU usage hits 70%.&lt;/p&gt;

&lt;p&gt;Or, you could scale down when traffic drops off. It's pretty flexible.&lt;/p&gt;

&lt;p&gt;With Fargate tasks, you scale by adjusting the number of running tasks.&lt;/p&gt;

&lt;p&gt;If you're using EC2, you can scale the underlying container instances, too.&lt;/p&gt;

&lt;p&gt;AWS Trusted Advisor and Compute Optimizer also offer recommendations to help improve performance or cut costs. They'll look at your usage and nudge you toward optimizations.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ecs</category>
      <category>ec2</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Getting Started with AWS Cloudfront: A Friendly Guide to Boosting Your Website Speed</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Wed, 12 Nov 2025 16:05:55 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/getting-started-with-aws-cloudfront-a-friendly-guide-to-boosting-your-website-speed-55bp</link>
      <guid>https://forem.com/heyjoshlee/getting-started-with-aws-cloudfront-a-friendly-guide-to-boosting-your-website-speed-55bp</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fffq7atpqgbchbcjcx5a1.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fffq7atpqgbchbcjcx5a1.jpg" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever wish your website or app loaded faster for people everywhere? AWS CloudFront can help with that. CloudFront delivers your content quickly by storing copies closer to your visitors, so videos, images, and all those files show up faster.&lt;/p&gt;

&lt;p&gt;Your users get a better experience, and they don’t have to stare at loading screens. That’s always a win.&lt;/p&gt;

&lt;p&gt;Getting started with CloudFront isn’t as complicated as it sounds. All you need is an AWS account, and then you set up a distribution—think of it as the shortcut your content takes to reach people faster.&lt;/p&gt;

&lt;p&gt;It works for websites, videos, and just about any files you want to share. CloudFront keeps things efficient and smooth for your users, no matter where they are.&lt;/p&gt;

&lt;p&gt;Let’s walk through the basics of setting up your first CloudFront distribution. We’ll see how to hook it up with AWS services like S3, so your content is ready for your audience—without those annoying delays.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding AWS CloudFront&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CloudFront helps your web content reach people faster and more securely, no matter where they are. It does this by using servers spread out all over the world, plus some clever routing tricks.&lt;/p&gt;

&lt;p&gt;So, what makes CloudFront tick? Let’s look at how it’s built, its main perks, and the way it handles your content.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Core Concepts and Architecture&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CloudFront is a Content Delivery Network, or CDN, with a bunch of edge locations worldwide. These servers save copies of your content closer to your users.&lt;/p&gt;

&lt;p&gt;This means your data doesn’t have to travel as far, so everything loads faster. At the heart of it all is the origin—that’s where your original files live.&lt;/p&gt;

&lt;p&gt;Your origin could be an Amazon S3 bucket, a web server, or even an AWS media service. When someone asks for content, CloudFront checks the nearest edge location.&lt;/p&gt;

&lt;p&gt;If it’s already there, it sends it right away. If not, CloudFront grabs it from your origin and saves a copy at the edge for next time.&lt;/p&gt;

&lt;p&gt;CloudFront also works with AWS security tools, and you can set rules for who gets to see what. Its global network keeps things speedy and reliable, which is honestly pretty great.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Key Features and Benefits&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CloudFront’s got a bunch of handy features to make your content delivery better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Low Latency: By caching content near your users, it cuts down loading times&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Handles traffic spikes, so you don’t have to panic about sudden surges&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security: Offers encryption, access controls, and works with AWS Shield to guard against attacks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customizable: You can tweak how CloudFront caches and handles requests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time Metrics: Gives you reports on traffic and performance, so you’re not flying blind&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your website, videos, or apps end up loading faster, and you don’t have to stress as much about security or overloading your main servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How AWS CloudFront Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When someone visits your site or app with CloudFront, it steps in as a middleman. It checks the request and sends it to the nearest edge location.&lt;/p&gt;

&lt;p&gt;If that edge location already has the content, it hands it over right away—a cache hit. If not, CloudFront fetches it from your origin, then saves it at the edge for next time—a cache miss.&lt;/p&gt;

&lt;p&gt;You set up distributions in CloudFront, which basically tells it where your content lives, how to handle requests, and what security to use.&lt;/p&gt;

&lt;p&gt;This setup gives your users quicker, more reliable access, and you get to control how your content flows and stays secure.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Setting Up Your First CloudFront Distribution&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To kick things off, you’ll create a distribution in the AWS Console. After that, you set up origins and behaviors to decide how CloudFront delivers your stuff.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Creating a Distribution Step by Step&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;First, log into your AWS Console and find the CloudFront service. Click &lt;strong&gt;Create Distribution&lt;/strong&gt; and pick your delivery method—usually Web for websites or APIs.&lt;/p&gt;

&lt;p&gt;Now, add your origin. This is where your files are coming from—maybe an S3 bucket, an EC2 instance, or any public HTTP server. Double-check the origin domain name to avoid headaches later.&lt;/p&gt;

&lt;p&gt;Set up the default cache behavior next. This part tells CloudFront how to deal with requests—like which HTTP methods to allow. Once you’re happy with your choices, hit Create Distribution. It might take a bit to finish setting up, so don’t worry if it’s not instant.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Configuring Origins and Behaviors&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Origins are just the places CloudFront grabs content from. You can have a few if you want—for example, images from S3 and APIs from EC2.&lt;/p&gt;

&lt;p&gt;Behaviors let you control how CloudFront handles requests for each origin or path. You decide things like how long to cache stuff, which HTTP methods to allow, or whether requests need to be signed in.&lt;/p&gt;

&lt;p&gt;Maybe you want images cached longer but want dynamic pages to refresh more often. Use path patterns to set different rules for different parts of your site.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best Practices for Beginners&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Honestly, if you’re just getting started, keep things simple. Try using just one S3 bucket for your first distribution.&lt;/p&gt;

&lt;p&gt;Set up Origin Access Control (OAC) so only CloudFront can grab stuff from your bucket. That way, random folks can’t just poke around your files.&lt;/p&gt;

&lt;p&gt;Always turn on HTTPS. It keeps things private between your users and CloudFront.&lt;/p&gt;

&lt;p&gt;Set the minimum TLS version to at least 1.2—don’t go lower, it’s just not worth the risk.&lt;/p&gt;

&lt;p&gt;Pay attention to your cache settings. If your cache time’s too short, you’ll pay more; too long, and people might see old stuff.&lt;/p&gt;

&lt;p&gt;If you ever need to update or remove something fast, use CloudFront’s invalidation tool. It’s a lifesaver when you mess up or need to push a change right away.&lt;/p&gt;

&lt;p&gt;Give your distributions clear names, and toss in some tags. Trust me, if you end up with a bunch of these, you’ll thank yourself later.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudfront</category>
      <category>s3</category>
    </item>
    <item>
      <title>Route 53 in AWS - The What, Why, and How Made Easy for Beginners</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Mon, 10 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/route-53-in-aws-the-what-why-and-how-made-easy-for-beginners-1lbf</link>
      <guid>https://forem.com/heyjoshlee/route-53-in-aws-the-what-why-and-how-made-easy-for-beginners-1lbf</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fhei6l1v1tv3z3d7jv2mo.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fhei6l1v1tv3z3d7jv2mo.jpg" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon Route 53 is one of those tools in AWS that makes dealing with website domain names way less confusing. Think of it like an internet phone book—it takes website names you know and turns them into the computer addresses that actually get you there.&lt;/p&gt;

&lt;p&gt;This way, people end up on the right site, fast and without any drama. It’s a simple idea but super important.&lt;/p&gt;

&lt;p&gt;So, why should you care about Route 53? Well, it does more than just register your domain. It can direct traffic smartly, keep an eye on your site’s health, and even decide where to send visitors based on where they are or how quick your servers are responding.&lt;/p&gt;

&lt;p&gt;All of this means your website loads faster and doesn’t go down as often—which, let’s be honest, is what everyone wants.&lt;/p&gt;

&lt;p&gt;If you’re just getting into AWS or you want to get a little sharper with your cloud skills, knowing how Route 53 works is a game changer. Let’s break down how to set it up and get the most out of it so your online stuff just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding Route 53 in AWS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Route 53 is AWS’s DNS web service. Basically, it helps you send internet traffic to the right apps and websites.&lt;/p&gt;

&lt;p&gt;It comes with handy tools for managing domain names and making routing less of a headache. You’ll see how it fits in with other AWS services too.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Core Features of Route 53&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There’s more to Route 53 than just DNS. You can register domain names, manage DNS records like A, CNAME, and MX, and even run health checks on your apps—all in one dashboard.&lt;/p&gt;

&lt;p&gt;Routing policies are a big deal here. You get options like simple routing, weighted routing (to split traffic however you want), latency-based routing (send folks to the fastest server), geolocation routing (pick servers based on user location), and failover routing (automatically switch if something’s down).&lt;/p&gt;

&lt;p&gt;That’s a lot of control for one tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How Route 53 Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Route 53 connects domain names like &lt;a href="https://dev.tourl"&gt;www.example.com&lt;/a&gt; to the right IP addresses—so when someone types your website, Route 53 figures out where to send them.&lt;/p&gt;

&lt;p&gt;It runs on AWS’s super reliable DNS infrastructure, so it can send users wherever they need to go, inside or outside AWS. If your site goes down, Route 53 can spot it and reroute folks somewhere that works.&lt;/p&gt;

&lt;p&gt;All those DNS queries and routing choices happen behind the scenes, and you barely have to think about it. It even supports IPv6, so you’re covered for the modern web.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Common Use Cases&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You’ll probably use Route 53 first to register your domain and keep your DNS settings in one tidy spot. It’s great if you want full control over how people reach your site.&lt;/p&gt;

&lt;p&gt;If you’ve got servers in different places or want to balance traffic, Route 53 can send people to the closest or fastest server. It’s a lifesaver for busy sites or apps with users all over the world.&lt;/p&gt;

&lt;p&gt;Failover routing means you can set up a backup site, and Route 53 will automatically switch to it if your main one goes down. Geolocation routing is also handy—like sending European users to a European server for a better experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Integration with Other AWS Services&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Route 53 plays nicely with AWS tools like EC2, S3, and Elastic Load Balancers. You can point your domain straight to an EC2 instance or an S3 bucket hosting your site.&lt;/p&gt;

&lt;p&gt;It also works with CloudFront to deliver content quickly, and with Elastic Load Balancing to spread traffic across your servers. Managing DNS alongside the rest of your AWS setup just makes life easier.&lt;/p&gt;

&lt;p&gt;And if you like automating things, Route 53 lets you update DNS records as part of your deployments. No more manual changes every time you scale up or move stuff around.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Configuring and Managing Route 53&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Setting up Route 53 means creating hosted zones, picking DNS record types, and choosing how you want traffic to move. &lt;br&gt;
You’ll also want to keep an eye on your DNS setup and lock it down for security.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Setting Up Hosted Zones&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A hosted zone is just a place in Route 53 where you manage all your domain’s DNS records. When you register or transfer a domain, you set up a hosted zone for it.&lt;/p&gt;

&lt;p&gt;There are two flavors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Public Hosted Zone – This one’s for websites and services everyone can reach on the internet&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Private Hosted Zone – This keeps things inside your Amazon VPCs, so only your network can see them&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll start by making a hosted zone in the AWS console, then add DNS records for your domain. Don’t forget to update your domain registrar with the right name servers so Route 53 takes over.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;DNS Record Types Available&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Route 53 supports a bunch of record types for different jobs. Here are the usual suspects:&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.amazonaws.com%2Fuploads%2Farticles%2Fdv87jval7tl7dc31a8zw.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.amazonaws.com%2Fuploads%2Farticles%2Fdv87jval7tl7dc31a8zw.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just add these records in your hosted zone to send traffic wherever you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Traffic Routing Policies&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Route 53 lets you pick how DNS answers get sent out with a few different routing policies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Simple Routing sends everything to one spot&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Weighted Routing splits traffic between a few places based on the weights you choose&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Latency Routing sends people to the fastest resource&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Failover Routing checks if your main site’s up and switches to backup if it’s not&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These options help your site stay speedy and online, even when something goes sideways.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Monitoring and Security Best Practices&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Route 53 has health checks that keep an eye on your resources. If something fails, Route 53 just stops sending traffic to the problem spot—no extra work needed on your end.&lt;/p&gt;

&lt;p&gt;Seriously, set up those checks on your endpoints. It's the easiest way to make sure your DNS routing stays in good shape.&lt;/p&gt;

&lt;p&gt;CloudWatch is super handy here. You can peek at metrics and even get alerts if anything looks off with your DNS health.&lt;/p&gt;

&lt;p&gt;For security, turn on AWS Identity and Access Management (IAM) policies. That way, only the right people can mess with your hosted zones.&lt;/p&gt;

&lt;p&gt;Also, don’t forget to enable logging and encrypt any sensitive DNS data. These steps really help keep sneaky changes out and your domain locked down.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>route53</category>
      <category>cloud</category>
      <category>iam</category>
    </item>
    <item>
      <title>Elastic Load Balancer in AWS - What It Is and How to Use It Easily</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Fri, 07 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/elastic-load-balancer-in-aws-what-it-is-and-how-to-use-it-easily-21dd</link>
      <guid>https://forem.com/heyjoshlee/elastic-load-balancer-in-aws-what-it-is-and-how-to-use-it-easily-21dd</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fq1xg6x1882cqrwr9remq.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fq1xg6x1882cqrwr9remq.jpg" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever tried running an app on AWS and suddenly way too many people show up? Managing that incoming traffic gets tricky fast. An Elastic Load Balancer (ELB) steps in and spreads the traffic out across several servers, so your app doesn’t freak out or slow to a crawl.&lt;/p&gt;

&lt;p&gt;With an ELB, you basically get a safety net. Your setup becomes more reliable, and when more users show up, you don’t have to panic—ELB just keeps things balanced.&lt;/p&gt;

&lt;p&gt;Let’s talk about what an Elastic Load Balancer actually does, why it’s worth your time, and how you can set one up to make your AWS apps a lot smoother. I’ll help you see how it fits into your cloud setup without making your head spin.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding Elastic Load Balancer in AWS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Think of Elastic Load Balancer (ELB) as traffic control for your app. It spreads out requests so no single server gets overwhelmed. Your app feels faster and way more reliable.&lt;/p&gt;

&lt;p&gt;As more people visit, ELB automatically adjusts. You don’t have to babysit it or stress about downtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Types of Elastic Load Balancers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AWS gives you four main choices for load balancers. Each one fits a different kind of job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Application Load Balancer (ALB): Perfect for web apps. Handles HTTP and HTTPS, and even routes requests based on what’s inside them&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Network Load Balancer (NLB): Great for super high-performance stuff. Works with TCP traffic and keeps things quick, even under pressure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gateway Load Balancer (GLB): If you need to use third-party tools like firewalls or monitoring, this is your pick&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Classic Load Balancer: Old-school, but still around. Handles the basics for HTTP/HTTPS and TCP&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right load balancer depends on your app’s needs—what kind of traffic you have, how fast you need it to be, and how your app’s built.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Core Features and Capabilities&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ELB spreads out all incoming requests across your servers or services. If one server goes down, your app keeps running.&lt;/p&gt;

&lt;p&gt;It handles sudden spikes in traffic, so your app doesn’t get bogged down. Since it works inside your Amazon VPC, you get more control and security too.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fault tolerance: If a server gets sick, ELB sends traffic somewhere healthier&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Health checks: It keeps an eye on your servers to make sure they’re working&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support for multiple targets: You can use EC2, containers, IP addresses, or even Lambda functions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How Elastic Load Balancers Work&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When someone tries to reach your app, the load balancer is the front door. It listens for traffic on the ports and protocols you set up.&lt;/p&gt;

&lt;p&gt;ELB then hands those requests off to your servers, making sure no one gets too much. If a server isn’t feeling well, ELB skips it and uses the healthy ones instead.&lt;/p&gt;

&lt;p&gt;This all happens across different Availability Zones, so if one area goes down, your app stays up. You can also set up rules to route requests based on things like the URL path or headers, which is pretty handy.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How to Use Elastic Load Balancer in AWS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Getting started with ELB means creating it, setting it up, and keeping an eye on how it’s doing. You’ll go through a few steps to launch it, pick the right settings, and check in on its health now and then.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step-by-Step Setup Guide&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;First, log in to your AWS Management Console. Head over to the EC2 or Load Balancing section.&lt;/p&gt;

&lt;p&gt;Pick the load balancer type you want: ALB, NLB, or GLB. Your choice depends on what your app needs.&lt;/p&gt;

&lt;p&gt;Give your load balancer a name, and choose the network stuff—like which VPC and availability zones you want to use. This step makes sure your ELB can actually reach your servers.&lt;/p&gt;

&lt;p&gt;Set up listeners. These are just the protocols and ports your ELB will use, like HTTP on port 80 or HTTPS on port 443.&lt;/p&gt;

&lt;p&gt;Create or pick a target group. Targets are the servers or instances that will get the traffic. You can add EC2 instances or even IP addresses.&lt;/p&gt;

&lt;p&gt;Double-check your settings and launch the ELB. Don’t forget to test it and make sure it’s spreading traffic the way you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best Practices for Configuration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Always turn on health checks for your targets. This way, ELB only sends traffic to servers that are actually working.&lt;/p&gt;

&lt;p&gt;Use security groups to control who can talk to your ELB. Only open the ports and sources you need—no more, no less.&lt;/p&gt;

&lt;p&gt;If you’re running HTTPS, set up SSL/TLS certificates. That keeps your users’ data safe.&lt;/p&gt;

&lt;p&gt;Set up your ELB across multiple availability zones so if one goes down, you’re still good. Don’t put all your eggs in one basket!&lt;/p&gt;

&lt;p&gt;Adjust idle timeout settings to fit your app. This just controls how long a connection hangs around before it closes.&lt;/p&gt;

&lt;p&gt;And seriously, use clear names and tags for your ELBs. It’ll save you a headache later if you’re juggling a bunch of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Monitoring and Managing Load Balancers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you want to know how your AWS Elastic Load Balancer (ELB) is holding up, start with CloudWatch. It tracks things like request count, latency, and error rates, giving you a snapshot of performance.&lt;/p&gt;

&lt;p&gt;Set up alarms in CloudWatch. That way, if error rates spike or targets start failing, you'll get a heads-up right away.&lt;/p&gt;

&lt;p&gt;Take a look at your ELB logs every so often. They help you spot traffic trends and figure out what went wrong if something's acting weird.&lt;/p&gt;

&lt;p&gt;Don't forget, you can tweak your ELB settings whenever you need—add or remove targets, switch up listeners, whatever fits your needs.&lt;/p&gt;

&lt;p&gt;AWS even lets your ELB scale automatically. If traffic jumps, it can toss in more healthy instances so your site doesn't slow to a crawl.&lt;/p&gt;

&lt;p&gt;And hey, keep your ELB firmware and certificates up to date. It's just good practice for security and reliability.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>elb</category>
    </item>
    <item>
      <title>Using the Correct S3 Storage Class While Not Paying Too Much Made Easy and Affordable</title>
      <dc:creator>Josh Lee</dc:creator>
      <pubDate>Wed, 05 Nov 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/heyjoshlee/using-the-correct-s3-storage-class-while-not-paying-too-much-made-easy-and-affordable-3ck8</link>
      <guid>https://forem.com/heyjoshlee/using-the-correct-s3-storage-class-while-not-paying-too-much-made-easy-and-affordable-3ck8</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fxvcfzcnwxzptnt3wemtb.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.amazonaws.com%2Fuploads%2Farticles%2Fxvcfzcnwxzptnt3wemtb.png" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Picking the right Amazon S3 storage class can save you a surprising amount of cash. You don’t have to give up on performance or durability, either.&lt;/p&gt;

&lt;p&gt;If you match how you use your data with the right storage class, you avoid paying for stuff you don’t actually need. It’s a simple move, but it really helps you keep costs down while your data stays safe and ready when you need it.&lt;/p&gt;

&lt;p&gt;No need to guess which S3 option fits your situation. AWS has storage classes for all sorts of uses—like stuff you look at every day, files you rarely touch, or things you just need to archive for the long haul.&lt;/p&gt;

&lt;p&gt;Once you get the hang of these choices, you can pick the best class for each kind of data. That way, you’re only paying for what matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Choosing the Right S3 Storage Class for Your Needs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Your pick depends on how often you use your files, how fast you want them, and how much you’re willing to spend. Each S3 storage class has its own price and speed, so making a smart choice can keep your wallet happy without slowing you down.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding S3 Storage Class Options&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon S3 gives you a bunch of storage classes, each for a different job. S3 Standard is what you want if you’re grabbing files every day or pretty often. It’s quick and reliable, but not the cheapest.&lt;/p&gt;

&lt;p&gt;If you don’t use your data that much but still want it fast when you do, S3 Standard-Infrequent Access (Standard-IA) can save you some money. There’s also One Zone-IA, which keeps your data in just one place, making it cheaper but a bit riskier if something goes wrong in that zone.&lt;/p&gt;

&lt;p&gt;For stuff you’re just keeping for records or backup, Glacier Instant Retrieval and Glacier Deep Archive are super affordable. They’re not instant, though—getting your data back can take a while, so they’re best for files you hardly ever need.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Matching Use Cases to S3 Storage Classes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Think about what you’re storing. Running a website or app that gets hit every day? Go with &lt;strong&gt;S3 Standard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Have records you check maybe once a month? Standard-IA or One Zone-IA could be perfect. Got old logs or compliance stuff you just have to keep? Glacier’s your friend.&lt;/p&gt;

&lt;p&gt;For disaster recovery, One Zone-IA might work, but only if losing those files wouldn’t be a total disaster. It’s all about how much risk you’re okay with.&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.amazonaws.com%2Fuploads%2Farticles%2Fexbknaflu82dnz8q9ywt.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.amazonaws.com%2Fuploads%2Farticles%2Fexbknaflu82dnz8q9ywt.png" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Evaluating Data Access Patterns&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Take a look at how often you actually grab your files. If you’re opening them more than once a month, S3 Standard or Standard-IA makes sense.&lt;/p&gt;

&lt;p&gt;Only need them every few months? Glacier classes will probably save you more. But remember, getting files out of Glacier can take anywhere from a few minutes to several hours.&lt;/p&gt;

&lt;p&gt;Don’t forget about those sneaky retrieval fees. Glacier’s cheap to store, but if you pull stuff out a lot, those extra charges can pile up and make it pricier than Standard-IA.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Factors That Influence Storage Class Selection&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Besides how often you use your data, think about how safe and available you need it. S3 Standard keeps copies in different places, so it’s super reliable.&lt;/p&gt;

&lt;p&gt;One Zone-IA is less expensive, but if that one spot goes down, your data could be gone. It’s a trade-off.&lt;/p&gt;

&lt;p&gt;Cost matters too. Sure, Standard-IA and Glacier are cheaper to store, but they can cost more when you need to get your files back.&lt;/p&gt;

&lt;p&gt;And don’t ignore file size or speed. Big files you don’t touch much? Go with slower, cheaper classes. Small files you use a lot? You’ll want something faster, even if it costs a bit more.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Strategies to Optimize Costs Without Compromising Performance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You can save money on S3 storage without losing speed or reliability. It’s all about picking the right classes, setting up smart rules, and actually checking how you use your storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Identifying Opportunities for Cost Savings&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;First, figure out how often you’re using your files. Keep active stuff in Standard. For files you rarely touch but can’t delete, move them to Infrequent Access (IA) or Glacier.&lt;/p&gt;

&lt;p&gt;Watch out for lots of tiny files or tons of requests—they can sneakily raise your bill. Try grouping small files or cutting down on unnecessary access. Tagging your data helps too, so you know what you’ve got and who owns it.&lt;/p&gt;

&lt;p&gt;Don’t just set it and forget it. Check your storage classes every so often. Data use changes, and you might need to switch things up to keep saving money.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Implementing Lifecycle Policies&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Lifecycle policies let you set up automatic moves between storage classes. You can make rules like, “After 30 days, shift these files from Standard to IA,” or “After 90 days, send them to Glacier.”&lt;/p&gt;

&lt;p&gt;Policies can even delete stuff you don’t need anymore, so you’re not paying for junk. It’s less work for you, and you’re less likely to mess something up.&lt;/p&gt;

&lt;p&gt;Just be careful with your timing. If you move files to Glacier too soon, you might get stuck waiting when you need them back—or paying more to get them fast. Try to match your policies to how you actually use your files. It’s not always perfect, but it’s worth tweaking until it feels right.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Monitoring and Adjusting Storage Class Utilization&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Keep an eye on your storage with AWS tools like Cost Explorer and S3 Storage Lens. These give you a clear look at where your data sits and point out when things start to get pricey.&lt;/p&gt;

&lt;p&gt;Set up alerts for weird cost jumps or sudden retrieval fees. It’s smart to check in every month and make sure your files still belong in the storage class you picked.&lt;/p&gt;

&lt;p&gt;If you spot something off, tweak your approach. Maybe a storage class isn’t pulling its weight or it’s just costing too much—change up your lifecycle policies or tags to fit how you’re really using your data.&lt;/p&gt;

</description>
      <category>s3</category>
      <category>aws</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
