<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yoshiki Fujiwara(藤原 善基)@AWS Community Builder</title>
    <description>The latest articles on DEV Community by Yoshiki Fujiwara(藤原 善基)@AWS Community Builder (@yoshikifujiwara).</description>
    <link>https://dev.to/yoshikifujiwara</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%2F1143688%2F2e0886ff-292c-4e8f-a588-bc7629c2321b.jpeg</url>
      <title>DEV Community: Yoshiki Fujiwara(藤原 善基)@AWS Community Builder</title>
      <link>https://dev.to/yoshikifujiwara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yoshikifujiwara"/>
    <language>en</language>
    <item>
      <title>Building an Agentic Access-Aware RAG System with Amazon FSx for NetApp ONTAP, S3 Vectors, and S3 Access Points— Where AI Respects File Permissions</title>
      <dc:creator>Yoshiki Fujiwara(藤原 善基)@AWS Community Builder</dc:creator>
      <pubDate>Sun, 05 Apr 2026 17:15:03 +0000</pubDate>
      <link>https://dev.to/aws-builders/building-an-agentic-access-aware-rag-system-with-amazon-fsx-for-netapp-ontap-s3-vectors-and-s3-2b86</link>
      <guid>https://dev.to/aws-builders/building-an-agentic-access-aware-rag-system-with-amazon-fsx-for-netapp-ontap-s3-vectors-and-s3-2b86</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Enterprise data lives on file servers. And on those file servers, not everyone can see everything — NTFS ACLs, UNIX permissions, and group policies control who accesses what. But when you plug that data into a Retrieval-Augmented Generation (RAG) system, those permission boundaries tend to disappear. Suddenly, anyone can ask the AI about another team's, division's, or board member's confidential information.&lt;/p&gt;

&lt;p&gt;But there's a flip side to this problem that's equally important: &lt;strong&gt;without permission awareness, the AI can't fully help the people it should be helping.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think about it. An engineer has years of design docs, project specs, and team-internal notes in their department's shared folder. A sales lead has pipeline data, customer contracts, and regional forecasts in theirs. When you strip away permissions and dump everything into one vector store, the AI doesn't just leak confidential data — it also drowns each user's results in irrelevant noise from every other team. The engineer gets sales forecasts mixed into their search results. The sales lead gets CI/CD pipeline docs they'll never need.&lt;/p&gt;

&lt;p&gt;Permission-aware/Access-aware RAG flips this around. Because the system knows exactly which files each user can access, it delivers &lt;strong&gt;personalized, noise-free AI assistance&lt;/strong&gt; grounded in the data each person actually works with day to day. Your personal folder, your team's shared drive, the cross-functional project space you're part of — the AI sees what you see, nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Agentic Access-Aware RAG&lt;/strong&gt; to make this real. It's an open-source system that lets AI agents autonomously search, analyze, and respond to enterprise data stored on Amazon FSx for NetApp ONTAP — &lt;strong&gt;while respecting per-user file-level access permissions&lt;/strong&gt;. The same question yields different answers depending on who's asking: an admin gets the full financial report, a project member gets their project's restricted docs, and a general user gets public information only. Each user gets an AI assistant that's effectively customized to their role and responsibilities — without any manual configuration.&lt;/p&gt;

&lt;p&gt;The entire stack deploys with a single &lt;code&gt;npx cdk deploy --all&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/Yoshiki0705/FSx-for-ONTAP-Agentic-Access-Aware-RAG" rel="noopener noreferrer"&gt;Yoshiki0705/FSx-for-ONTAP-Agentic-Access-Aware-RAG&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture at a Glance
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser → AWS WAF → CloudFront (OAC+Geo) → Lambda Web Adapter (Next.js 15)
                                                    │
              ┌─────────────┬───────────────────────┼──────────────────┐
              ▼             ▼                       ▼                  ▼
        Cognito       Bedrock KB              DynamoDB            DynamoDB
       User Pool    + S3 Vectors /          user-access          perm-cache
                    OpenSearch SL           (SID Data)         (Perm Cache)
                         │
                         ▼
                  FSx for ONTAP
                  (SVM + Volume)
                + S3 Access Point
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system is organized into 7 CDK stacks: WAF, Networking, Security (Cognito), Storage (FSx for ONTAP + DynamoDB), AI (Bedrock KB + vector store), WebApp (Lambda + CloudFront), and an optional Embedding stack.&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%2Fsrxdmjuvdcljfmwos4yc.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%2Fsrxdmjuvdcljfmwos4yc.png" alt="Architecture — KB Mode Card Grid" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core Idea: Permission-aware/Access-aware RAG
&lt;/h2&gt;

&lt;p&gt;Traditional RAG retrieves documents based on semantic similarity alone. This system adds a second dimension: &lt;strong&gt;SID-based permission filtering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's the flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User sends a question via the chat UI&lt;/li&gt;
&lt;li&gt;The app retrieves the user's SID list (personal SID + group SIDs) from DynamoDB&lt;/li&gt;
&lt;li&gt;Bedrock KB Retrieve API performs vector search — each result carries &lt;code&gt;allowed_group_sids&lt;/code&gt; metadata&lt;/li&gt;
&lt;li&gt;The app matches each document's SIDs against the user's SIDs&lt;/li&gt;
&lt;li&gt;Only permitted documents are passed to the Converse API for answer generation&lt;/li&gt;
&lt;li&gt;The user sees a filtered response with citation badges showing access levels
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;■ Admin user: SIDs = [...-512 (Domain Admins), S-1-1-0 (Everyone)]
  public/          → S-1-1-0 match  → ✅ Permitted
  confidential/    → ...-512 match  → ✅ Permitted
  engineering/     → No match       → ❌ Filtered out (no noise from other teams)

■ Engineer (Engineering group member): SIDs = [...-1100 (Engineering), S-1-1-0 (Everyone)]
  public/          → S-1-1-0 match  → ✅ Permitted
  confidential/    → No match       → ❌ Denied
  engineering/     → ...-1100 match → ✅ Their team's docs, front and center

■ Sales user: SIDs = [...-1200 (Sales), S-1-1-0 (Everyone)]
  public/          → S-1-1-0 match  → ✅ Permitted
  confidential/    → No match       → ❌ Denied
  engineering/     → No match       → ❌ No engineering noise in their results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The engineer asking "What's the status of Project X?" gets answers from their team's internal docs — not from sales forecasts or HR policies. The sales lead asking "What are our Q3 targets?" gets their regional data without wading through engineering specs. Each user's AI experience is naturally scoped to the data they work with every day.&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%2F26v4b5akhqlmrsvyjlrw.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%2F26v4b5akhqlmrsvyjlrw.png" alt="Chat Response with Citation + Access Level Badges" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  S3 Access Points: The Bridge Between FSx for ONTAP and Bedrock KB
&lt;/h2&gt;

&lt;p&gt;One of the most impactful recent additions is &lt;strong&gt;S3 Access Point integration&lt;/strong&gt; with FSx for ONTAP. This creates a clean, single-path data ingestion architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FSx for ONTAP Volume (/data)
  ├── public/company-overview.md
  ├── public/company-overview.md.metadata.json
  ├── confidential/financial-report.md
  ├── confidential/financial-report.md.metadata.json
      │
      │  S3 Access Point
      ▼
  Bedrock KB Data Source (S3 AP alias)
      │  Ingestion Job (chunking + Titan Embed v2)
      ▼
  Vector Store (S3 Vectors or OpenSearch Serverless)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before S3 Access Points, getting data from FSx for ONTAP into Bedrock KB required either a custom Embedding server with CIFS mounts or manual S3 uploads. Now, Bedrock KB reads documents directly from the FSx for ONTAP volume through the S3 Access Point — no intermediate copies, no sync scripts.&lt;/p&gt;

&lt;p&gt;The S3 AP user type is automatically selected based on your AD configuration:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AD Configuration&lt;/th&gt;
&lt;th&gt;Volume Style&lt;/th&gt;
&lt;th&gt;S3 AP User Type&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AD configured&lt;/td&gt;
&lt;td&gt;NTFS&lt;/td&gt;
&lt;td&gt;WINDOWS (&lt;code&gt;Admin&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;NTFS ACLs automatically applied&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No AD&lt;/td&gt;
&lt;td&gt;NTFS/UNIX&lt;/td&gt;
&lt;td&gt;UNIX (&lt;code&gt;root&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;All files accessible; permission control via &lt;code&gt;.metadata.json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One gotcha I discovered: the S3 AP &lt;code&gt;WindowsUser&lt;/code&gt; must &lt;strong&gt;not&lt;/strong&gt; include the domain prefix. &lt;code&gt;DEMO\Admin&lt;/code&gt; works for CLI operations but causes &lt;code&gt;AccessDenied&lt;/code&gt; on data plane APIs (&lt;code&gt;ListObjects&lt;/code&gt;, &lt;code&gt;GetObject&lt;/code&gt;). Always specify just &lt;code&gt;Admin&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  S3 Vectors: Low-Cost Vector Storage
&lt;/h2&gt;

&lt;p&gt;The default vector store is &lt;strong&gt;Amazon S3 Vectors&lt;/strong&gt; — a relatively new service that brings vector search costs down to a few dollars per month, compared to ~$700/month for OpenSearch Serverless.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S3 Vectors (default)&lt;/td&gt;
&lt;td&gt;~$2-5/month&lt;/td&gt;
&lt;td&gt;Sub-second to 100ms&lt;/td&gt;
&lt;td&gt;Demo, dev, cost optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenSearch Serverless&lt;/td&gt;
&lt;td&gt;~$700/month&lt;/td&gt;
&lt;td&gt;~10ms&lt;/td&gt;
&lt;td&gt;High-performance production&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;S3 Vectors does have a &lt;strong&gt;2KB filterable metadata limit&lt;/strong&gt; per vector. Since Bedrock KB's internal metadata already consumes ~1KB, custom metadata is effectively limited to ~1KB. The system handles this by setting all metadata keys (including &lt;code&gt;allowed_group_sids&lt;/code&gt;) as non-filterable and performing SID matching on the application side after retrieval.&lt;/p&gt;

&lt;p&gt;If you start with S3 Vectors and later need higher performance, you can export on-demand to OpenSearch Serverless using the included &lt;code&gt;export-to-opensearch.sh&lt;/code&gt; script.&lt;/p&gt;




&lt;h2&gt;
  
  
  Embedding Design: &lt;code&gt;.metadata.json&lt;/code&gt; and the Ingestion Pipeline
&lt;/h2&gt;

&lt;p&gt;Permission metadata follows the standard &lt;strong&gt;Bedrock KB metadata file specification&lt;/strong&gt;. Each document has a companion &lt;code&gt;.metadata.json&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;product-catalog.md                    ← Document body
product-catalog.md.metadata.json      ← Permission metadata
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The metadata format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metadataAttributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"allowed_group_sids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;S-1-1-0&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"access_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"public"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"doc_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"catalog"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;allowed_group_sids&lt;/code&gt; field is a JSON array string of Windows SIDs that are allowed to access the document. &lt;code&gt;S-1-1-0&lt;/code&gt; is the well-known "Everyone" SID.&lt;/p&gt;

&lt;p&gt;Bedrock KB Ingestion Jobs automatically read these &lt;code&gt;.metadata.json&lt;/code&gt; files alongside documents, chunk the content, vectorize with Amazon Titan Text Embeddings v2 (1024 dimensions), and store everything in the vector store. No custom ETL pipeline needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Decisions and Trade-offs
&lt;/h3&gt;

&lt;p&gt;At scale (thousands of documents), managing individual &lt;code&gt;.metadata.json&lt;/code&gt; files becomes a maintenance burden. The system supports three approaches:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;.metadata.json&lt;/code&gt; (current default)&lt;/td&gt;
&lt;td&gt;✅ Production&lt;/td&gt;
&lt;td&gt;Bedrock KB native, no extra infra&lt;/td&gt;
&lt;td&gt;Doubles file count, manual management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ONTAP REST API auto-generation&lt;/td&gt;
&lt;td&gt;✅ Partially implemented&lt;/td&gt;
&lt;td&gt;File server ACLs as source of truth&lt;/td&gt;
&lt;td&gt;Requires Embedding server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DynamoDB permission master&lt;/td&gt;
&lt;td&gt;🔜 Recommended for scale&lt;/td&gt;
&lt;td&gt;DB-driven, easy auditing&lt;/td&gt;
&lt;td&gt;Requires pre-Ingestion generation pipeline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The recommended direction for large-scale environments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ONTAP REST API (ACL retrieval)
  → DynamoDB document-permissions table
  → Auto-generate .metadata.json before Ingestion Job
  → Ingest via S3 AP into Bedrock KB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Multiple Authentication Modes
&lt;/h2&gt;

&lt;p&gt;The system supports 5 authentication configurations, all driven by &lt;code&gt;cdk.context.json&lt;/code&gt; parameters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Authentication&lt;/th&gt;
&lt;th&gt;Permission Source&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A: Email/Password&lt;/td&gt;
&lt;td&gt;Cognito native&lt;/td&gt;
&lt;td&gt;Manual DynamoDB SID registration&lt;/td&gt;
&lt;td&gt;Default (no extra config)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B: SAML AD Federation&lt;/td&gt;
&lt;td&gt;Cognito + SAML IdP&lt;/td&gt;
&lt;td&gt;AD Sync Lambda → auto SID retrieval&lt;/td&gt;
&lt;td&gt;&lt;code&gt;enableAdFederation=true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C: OIDC + LDAP&lt;/td&gt;
&lt;td&gt;Cognito + OIDC IdP&lt;/td&gt;
&lt;td&gt;LDAP query → auto UID/GID retrieval&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;oidcProviderConfig&lt;/code&gt; + &lt;code&gt;ldapConfig&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D: OIDC Claims Only&lt;/td&gt;
&lt;td&gt;Cognito + OIDC IdP&lt;/td&gt;
&lt;td&gt;OIDC token claims → group mapping&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;oidcProviderConfig&lt;/code&gt; + &lt;code&gt;groupClaimName&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E: SAML + OIDC Hybrid&lt;/td&gt;
&lt;td&gt;Both IdPs simultaneously&lt;/td&gt;
&lt;td&gt;Combined SID + UID/GID&lt;/td&gt;
&lt;td&gt;Both configs + &lt;code&gt;permissionMappingStrategy=hybrid&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fkkydhomo74tksg7cb6no.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%2Fkkydhomo74tksg7cb6no.png" alt="Sign-in Page — SAML + OIDC Hybrid" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The OIDC/LDAP federation (added in v3.4.0) enables &lt;strong&gt;zero-touch user provisioning&lt;/strong&gt;: when a user signs in via the OIDC IdP for the first time, the Identity Sync Lambda automatically queries LDAP for their UID/GID/groups and stores them in DynamoDB. No admin intervention required.&lt;/p&gt;

&lt;p&gt;For environments with FSx for ONTAP UNIX volumes, the system also supports &lt;strong&gt;ONTAP name-mapping&lt;/strong&gt; — automatically resolving UNIX usernames to Windows users via the ONTAP REST API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agentic AI: Beyond Document Search
&lt;/h2&gt;

&lt;p&gt;The system isn't just a search engine. Toggle between two modes with one click:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;KB Mode&lt;/strong&gt;: Permission-aware/Access-aware document search and Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Mode&lt;/strong&gt;: Permission-aware/Access-aware autonomous multi-step reasoning and task execution via Bedrock Agents&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%2Fgxdgzm2tzmh9k08clpei.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%2Fgxdgzm2tzmh9k08clpei.png" alt="Agent Directory" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agent mode includes an &lt;strong&gt;Agent Directory&lt;/strong&gt; — a catalog-style management screen where you can create, edit, share, and schedule Bedrock Agents from templates. 14 workflow cards cover research tasks (market analysis, competitive research, etc.) and output tasks (presentations, approval documents, meeting minutes).&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%2Fgxdgzm2tzmh9k08clpei.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%2Fgxdgzm2tzmh9k08clpei.png" alt="Agent Directory" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Permission filtering works in both modes. Even when an Agent autonomously searches and reasons across multiple documents, only documents the user is authorized to see are included.&lt;/p&gt;

&lt;h3&gt;
  
  
  AgentCore Memory (v3.3.0)
&lt;/h3&gt;

&lt;p&gt;With &lt;code&gt;enableAgentCoreMemory=true&lt;/code&gt;, the system integrates Amazon Bedrock AgentCore Memory for conversation context maintenance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Short-term memory&lt;/strong&gt;: In-session conversation history (TTL: 3 days)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-term memory&lt;/strong&gt;: Cross-session user preferences and summaries (semantic + summary strategies)&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%2F05z5s193raoeesr3xc56.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%2F05z5s193raoeesr3xc56.png" alt="AgentCore Memory Sidebar" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Additional Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Smart Routing (v3.1.0)
&lt;/h3&gt;

&lt;p&gt;Automatic model selection based on query complexity. Short factual queries route to Claude Haiku (fast, cheap); complex analytical queries route to Claude Sonnet (powerful). Toggle ON/OFF in the sidebar.&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%2Fjzckrh5o3nhgnx8tljua.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%2Fjzckrh5o3nhgnx8tljua.png" alt="Smart Routing" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Analysis RAG (v3.1.0)
&lt;/h3&gt;

&lt;p&gt;Drag-and-drop image upload in the chat input. Images are analyzed with Bedrock Vision API (Claude Haiku 4.5) and the analysis is integrated into KB search context.&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%2Fjt24e93osmytgd9s2ecr.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%2Fjt24e93osmytgd9s2ecr.png" alt="Image Upload" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6-Layer Security
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;L1&lt;/td&gt;
&lt;td&gt;CloudFront Geo Restriction&lt;/td&gt;
&lt;td&gt;Geographic access control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L2&lt;/td&gt;
&lt;td&gt;AWS WAF (6 rules)&lt;/td&gt;
&lt;td&gt;Attack pattern detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L3&lt;/td&gt;
&lt;td&gt;CloudFront OAC (SigV4)&lt;/td&gt;
&lt;td&gt;Origin authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L4&lt;/td&gt;
&lt;td&gt;Lambda Function URL IAM Auth&lt;/td&gt;
&lt;td&gt;API-level access control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L5&lt;/td&gt;
&lt;td&gt;Cognito JWT / SAML / OIDC&lt;/td&gt;
&lt;td&gt;User authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L6&lt;/td&gt;
&lt;td&gt;SID / UID+GID Filtering&lt;/td&gt;
&lt;td&gt;Document-level authorization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  8-Language i18n — Why It Matters
&lt;/h3&gt;

&lt;p&gt;The UI and all documentation (README, guides, setup instructions) are available in 8 languages: Japanese, English, Korean, Simplified Chinese, Traditional Chinese, French, German, and Spanish.&lt;/p&gt;

&lt;p&gt;This isn't just a nice-to-have. Enterprise file servers are inherently multi-regional — a global company's FSx for ONTAP volumes serve teams across Tokyo, Seoul, Shanghai, Frankfurt, and New York. If the RAG interface only speaks English, you've created a barrier for the very users who need it most. Non-English-speaking knowledge workers shouldn't need to context-switch languages just to search their own documents.&lt;/p&gt;

&lt;p&gt;From a Community Builder perspective, localization also lowers the barrier to adoption. When a solutions architect in São Paulo or a storage admin in Taipei can read the deployment guide in their own language, they're far more likely to actually try it, fork it, and adapt it to their environment. Open-source projects that only document in one language inadvertently limit their community to one language group.&lt;/p&gt;

&lt;p&gt;The implementation uses Next.js &lt;code&gt;next-intl&lt;/code&gt; with per-locale message files (&lt;code&gt;src/messages/{locale}.json&lt;/code&gt;). Every UI string — from card labels to sign-in buttons to error messages — goes through &lt;code&gt;useTranslations()&lt;/code&gt;. The sign-in page even detects the browser's preferred language and auto-redirects to the matching locale.&lt;/p&gt;

&lt;p&gt;Localization doesn't stop at the UI chrome. The AI's chat responses also match the user's language. The system prompt instructs the model to "respond in the same language as the question" — so a Korean user asking in Korean gets a Korean answer with Korean citation labels ("참조 문서", "전체 접근 가능"), and a German user gets "Referenzierte Dokumente" and "Allgemein zugänglich". This end-to-end language consistency — from sign-in screen to card labels to AI-generated answers to citation metadata — means users never hit a jarring language switch mid-workflow.&lt;/p&gt;

&lt;p&gt;Here's what the card grid and sign-in screens look like across all 8 languages:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🇯🇵 日本語&lt;/th&gt;
&lt;th&gt;🇺🇸 English&lt;/th&gt;
&lt;th&gt;🇰🇷 한국어&lt;/th&gt;
&lt;th&gt;🇨🇳 简体中文&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Fynwul0kqu3a3ao4v2prm.png" alt="ja" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fsrxdmjuvdcljfmwos4yc.png" alt="en" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2F34up0z4lvjh0l7uxbgnz.png" alt="ko" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fpn9jjap3q10l57auei15.png" alt="zh-CN" width="800" height="405"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🇹🇼 繁體中文&lt;/th&gt;
&lt;th&gt;🇫🇷 Français&lt;/th&gt;
&lt;th&gt;🇩🇪 Deutsch&lt;/th&gt;
&lt;th&gt;🇪🇸 Español&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Fef3kievslhl41n329njt.png" alt="zh-TW" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fmwe3evtyuex1ds4z3t0v.png" alt="fr" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2F5vso4cgubr8g5l2esipn.png" alt="de" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fq0ysudmy9uoq9a2fmw4p.png" alt="es" width="800" height="405"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sign-in pages are also fully localized:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🇯🇵&lt;/th&gt;
&lt;th&gt;🇺🇸&lt;/th&gt;
&lt;th&gt;🇫🇷&lt;/th&gt;
&lt;th&gt;🇩🇪&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Fu5e5ncsqfo57d5uustuv.png" alt="ja-signin" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fkkydhomo74tksg7cb6no.png" alt="en-signin" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fsgelykpfw648g39m1c24.png" alt="fr-signin" width="800" height="405"&gt;&lt;/td&gt;
&lt;td&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%2Fuyv7d7mmkta876p49zvi.png" alt="de-signin" width="800" height="405"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Tips for Builders
&lt;/h2&gt;

&lt;p&gt;A few things I learned the hard way that might save you time.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenLDAP &lt;code&gt;memberOf&lt;/code&gt; Overlay
&lt;/h3&gt;

&lt;p&gt;If you're testing with OpenLDAP, the LDAP Connector reads the &lt;code&gt;memberOf&lt;/code&gt; attribute from user entries. Basic OpenLDAP doesn't populate this automatically — you need to add &lt;code&gt;moduleload memberof&lt;/code&gt; and &lt;code&gt;overlay memberof&lt;/code&gt; to &lt;code&gt;slapd.conf&lt;/code&gt;, and create &lt;code&gt;groupOfNames&lt;/code&gt; entries (not just &lt;code&gt;posixGroup&lt;/code&gt;). &lt;code&gt;posixGroup&lt;/code&gt; and &lt;code&gt;groupOfNames&lt;/code&gt; are different structural classes and can't coexist in the same entry — use a separate OU.&lt;/p&gt;

&lt;p&gt;The repo includes &lt;code&gt;setup-openldap.sh&lt;/code&gt; that handles all of this automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Geo Restriction Default
&lt;/h3&gt;

&lt;p&gt;The WAF configuration defaults to Japan-only access (&lt;code&gt;allowedCountries: ["JP"]&lt;/code&gt;). If you're deploying outside Japan, update this before deploying:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"allowedCountries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"JP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SG"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set to &lt;code&gt;[]&lt;/code&gt; for worldwide access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multiple Volumes, One Deployment
&lt;/h3&gt;

&lt;p&gt;If your FSx file system has multiple volumes, specify one as the primary during CDK deployment. Additional volumes can be added as Bedrock KB data sources after deployment — each gets its own S3 Access Point and can be independently synced.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built with Kiro
&lt;/h2&gt;

&lt;p&gt;I used &lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;Kiro&lt;/a&gt; throughout the entire development lifecycle — specs for requirements-to-code traceability, hooks for automated validation on file saves, and steering files for project-specific rules that persist across sessions. The 8-language documentation, 130+ unit tests, 52 property-based tests, and the LDAP/ONTAP live environment verification were all developed with Kiro's assistance. As a solo developer, this level of tooling makes enterprise-quality projects feasible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Yoshiki0705/FSx-for-ONTAP-Agentic-Access-Aware-RAG.git
&lt;span class="nb"&gt;cd &lt;/span&gt;FSx-for-ONTAP-Agentic-Access-Aware-RAG &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install

&lt;/span&gt;npx cdk bootstrap aws://&lt;span class="si"&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--query&lt;/span&gt; Account &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt;/ap-northeast-1
npx cdk bootstrap aws://&lt;span class="si"&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--query&lt;/span&gt; Account &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt;/us-east-1

bash demo-data/scripts/pre-deploy-setup.sh
npx cdk deploy &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--require-approval&lt;/span&gt; never
bash demo-data/scripts/post-deploy-setup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prerequisites: Node.js 22+, Docker, AWS CLI configured with AdministratorAccess. Total deployment time is about 30-40 minutes (FSx for ONTAP creation takes 20-30 minutes).&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;post-deploy-setup.sh&lt;/code&gt; script handles everything after CDK deployment: S3 Access Point creation, demo data upload, Bedrock KB data source registration + sync, DynamoDB SID data, and Cognito demo users.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The project is at v3.4.0 and actively evolving. Some directions I'm exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DynamoDB-driven permission master&lt;/strong&gt; for large-scale environments (eliminating per-file &lt;code&gt;.metadata.json&lt;/code&gt; management)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-volume embedding&lt;/strong&gt; across multiple FSx for ONTAP volumes with independent S3 Access Points&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bedrock KB Custom Data Source&lt;/strong&gt; integration as an alternative to S3 AP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm looking for feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Permission models&lt;/strong&gt;: Are SID/UID-GID/hybrid strategies sufficient for your use cases?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication patterns&lt;/strong&gt;: What IdP combinations do you need?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document types&lt;/strong&gt;: Beyond markdown, what formats need Permission-aware/Access-aware handling?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it out, I'd love to hear about your experience — especially edge cases I haven't considered. PRs and issues are welcome.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/Yoshiki0705/FSx-for-ONTAP-Agentic-Access-Aware-RAG" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt; and &lt;a href="https://github.com/Yoshiki0705/FSx-for-ONTAP-Agentic-Access-Aware-RAG/blob/main/README.md" rel="noopener noreferrer"&gt;README.md you can switch language from 8 as well as Applicatiton UI&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Yoshiki Fujiwara&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amazonfsxfornetappontap</category>
      <category>agenticai</category>
      <category>rag</category>
    </item>
    <item>
      <title>Taking a look at Tiering of AWS ever-evolving File Storage services!</title>
      <dc:creator>Yoshiki Fujiwara(藤原 善基)@AWS Community Builder</dc:creator>
      <pubDate>Tue, 31 Dec 2024 13:42:48 +0000</pubDate>
      <link>https://dev.to/yoshikifujiwara/taking-a-look-at-tiering-of-aws-ever-evolving-file-storage-services-24l6</link>
      <guid>https://dev.to/yoshikifujiwara/taking-a-look-at-tiering-of-aws-ever-evolving-file-storage-services-24l6</guid>
      <description>&lt;h1&gt;
  
  
  Disclaimer
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Opinions are my own.&lt;/li&gt;
&lt;li&gt;Cover image is for &lt;a href="https://aws.amazon.com/s3/storage-classes/intelligent-tiering/" rel="noopener noreferrer"&gt;Amazon S3 Intelligent-Tiering storage class Automatic Access tiers&lt;/a&gt;, but main topic is AWS File Storage Tiering.&lt;/li&gt;
&lt;li&gt;If you have any questions or concerns after reading this article, please let us know.&lt;/li&gt;
&lt;li&gt;Based on the features and contents as of December 31, 2024. If there are any discrepancies, please check the latest AWS official information at the time you read the article.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why it's a good time to take a look at AWS File Storage Tiering now?&lt;/li&gt;
&lt;li&gt;File storage services on AWS&lt;/li&gt;
&lt;li&gt;What is Tiering?&lt;/li&gt;
&lt;li&gt;Tierings of AWS file storage services&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Why it's a good time to take a look at AWS File Storage Tiering now?
&lt;/h3&gt;

&lt;p&gt;In conclusion, "AWS file storage services and features are so diversified that it is difficult to understand them as a whole". In such a situation, Tiering is an effective function for optimizing the file storage environment. But, it's difficult to understand because there are no materials for cross-sectional understanding.&lt;br&gt;
I would like to understand it from a bird's-eye view rather than comparing services. If I could not find such materials, I'll write it myself.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;The direct trigger of this blog post was the update during AWS re:Invent 2024, which introduced the new FSx storage class Amazon FSx Intelligent-Tiering. You can check the AWS release note titled "&lt;a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-fsx-intelligent-tiering-storage-class-fsx/?nc1=h_ls" rel="noopener noreferrer"&gt;Announcing Amazon FSx Intelligent-Tiering, a new storage class for FSx&lt;/a&gt;"&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;This is a announcement related storage during AWS re:Invent 2024 and is an exciting update that is attracting attention.&lt;br&gt;&lt;br&gt;
It was also covered at &lt;a href="https://www.youtube.com/watch?v=uCpDw1aFZJY" rel="noopener noreferrer"&gt;Storage-JAWS#6&lt;/a&gt;, the re:Cap community based webinar of AWS re:Invent 2024 of "Storage-JAWS", a storage specialized branch of the Japanese AWS User Group, or JAWS-UG.&lt;br&gt;&lt;br&gt;
You can check the YouTube video linked above for details. (Since this is a local event in Japan, the introduction was in Japanese)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you haven't seen the Storage-JAWS video above, please check it out as the speakers summarize the updates in an easy-to-understand manner, and there are great sessions and LTs that are explained with live demos and screenshots of management console. Please feel free to fill out the survey after watching (this is a guide for me as a Storage-JAWS management member).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...But,&lt;br&gt;
&lt;strong&gt;Contrary to the title and content of the release notes above, "FSx Intelligent-Tiering," the reality is that this is a feature only available for Amazon FSx for OpenZFS, and is not available for the entire Amazon FSx series. Other services that follow are not available at the time of writing this blog.&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Personally, I felt that this notation was confusing, so I decided to take this opportunity to clarify "What is File Storage Tiering on AWS and how it works?"&lt;/p&gt;

&lt;p&gt;Below are some excerpts from the AWS release note. I think there are some expressions that can lead to misunderstandings as to whether this is about the FSx series or FSx for OpenZFS feature. I will try to write this blog in a way that avoids any misunderstandings.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today, AWS announces the general availability of Amazon FSx Intelligent-Tiering, a new storage class for Amazon FSx that costs up to 85% less than the FSx SSD storage class and up to 20% less than traditional HDD-based NAS storage on premises, and that brings full elasticity and intelligent tiering to network-attached storage (NAS). The new storage class is available today on Amazon FSx for OpenZFS.&lt;/p&gt;

&lt;p&gt;Using Amazon FSx, customers can launch and run fully managed cloud file systems that have familiar NAS capabilities such as point-in-time snapshots, data clones, and user quotas. Before today, customers have been moving NAS data sets for mission-critical and performance-intensive workloads to FSx for OpenZFS, using the existing SSD storage class for predictable high performance. With the new FSx Intelligent-Tiering storage class, customers can now bring to FSx for OpenZFS a broad range of general-purpose data sets, including those with a large proportion of infrequently accessed data stored on low-cost HDD on premises. FSx Intelligent-Tiering delivers low-cost storage and costs up to 85% less than the FSx SSD storage class and up to 20% less than traditional HDD-based NAS storage on premises...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, let's get into the details.&lt;/p&gt;




&lt;h3&gt;
  
  
  File storage services on AWS
&lt;/h3&gt;

&lt;p&gt;Items in this chapter&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage services on AWS&lt;/li&gt;
&lt;li&gt;File Storage services on AWS&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Storage services on AWS
&lt;/h4&gt;

&lt;p&gt;First, let's take a look at storage services on AWS.&lt;br&gt;
As far as we can see from the following AWS Webpage "Cloud Storage on AWS", there are 11 "categories" as shown in the figure below, and each category is further divided into services and features.&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%2Fj8vw8lut2pq3n6fj4177.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%2Fj8vw8lut2pq3n6fj4177.png" alt=" " width="800" height="818"&gt;&lt;/a&gt;&lt;br&gt;
Quote: &lt;a href="https://aws.amazon.com/products/storage/?nc1=h_ls" rel="noopener noreferrer"&gt;Cloud Storage on AWS&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  File Storage services on AWS
&lt;/h4&gt;

&lt;p&gt;There are three types of file storage in the diagram above: Amazon Elastic File System (EFS), Amazon FSx, and Amazon File Cache. In this article, we will take a look at the EFS and FSx series other than Amazon File Cache, which is a cache service that does not have a tiering feature.&lt;br&gt;
The characteristics of File Storage and how to choose one are summarized in an easy-to-understand manner on the AWS blog "&lt;a href="https://aws.amazon.com/jp/blogs/news/choose-filestorageservice/" rel="noopener noreferrer"&gt;How to choose an AWS file storage service&lt;/a&gt;". &lt;br&gt;
 It's written in Japanese, but you can easy to understand the contents of it. Or you can check AWS re:Invent sessions of AWS Files Storage Team like &lt;a href="https://www.youtube.com/watch?v=IQR3zxdxjZA" rel="noopener noreferrer"&gt;AWS re:Invent 2024 - Network-attached storage in the cloud with Amazon FSx (STG202)&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;For example, in the AWS blog mentioned above, in the "Storage Types" section below, it confirmed the understanding of the three types of "block storage", "object storage", and "file storage" that will be explained this time,&lt;br&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%2F81l3zrf8dgwfmj3di7hn.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%2F81l3zrf8dgwfmj3di7hn.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the "File Storage Protocols" section below, it discusses the two protocols NFS (Network File System) and SMB (Server Message Block), and in the "AWS File Storage Service" section, it explains Amazon FSx for Luster's unique protocol. Let's check the three protocols including.&lt;br&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%2F2dafaq9y2j4qpxl1ndq1.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%2F2dafaq9y2j4qpxl1ndq1.png" alt=" " width="800" height="269"&gt;&lt;/a&gt;&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%2F6muxb9y3j4riytzqp7jn.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%2F6muxb9y3j4riytzqp7jn.png" alt=" " width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, in the "Comparison of AWS File Storage Services" section, the figure below shows a list of services excluding FSx for Luster at the time of writing, and points to consider when making a selection. In "Protocols supported by each service," Amazon FSx for NetApp ONTAP is characterized by being multi-protocol, not only supporting both NFS and SMB protocols, but also supporting iSCSI. It also touches on some unique aspects.&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%2Ft6z4nrtr0swyhwkugmyq.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%2Ft6z4nrtr0swyhwkugmyq.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;br&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%2Fn13ugh6yj1ifc58hj841.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%2Fn13ugh6yj1ifc58hj841.png" alt=" " width="469" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, in the section "How to choose an AWS file storage service", the part "Consider what you are looking for" touches on Tiering, the main theme of this blog, and the EFS lifecycle policy. In this blog, I will update and supplement the above table based on the AWS re:Invent 2024 Update.&lt;/p&gt;




&lt;h3&gt;
  
  
  What is Tiering?
&lt;/h3&gt;

&lt;p&gt;What do you think of when you hear the word "Tiering"?&lt;br&gt;
Let's take a look at Amazon S3, AWS's representative storage. In the feature description of "&lt;a href="https://aws.amazon.com/s3/storage-classes/intelligent-tiering/?nc1=h_ls" rel="noopener noreferrer"&gt;Amazon S3 Intelligent-Tiering storage class&lt;/a&gt;" whose name includes Tiering, This feature is introduced from the perspective of cost optimization as follows.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Amazon S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective access tier when access patterns change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, I guess that the scope of implementation and use cases are gradually expanding now.&lt;br&gt;
For example, on an AWS blog, "&lt;a href="https://aws.amazon.com/jp/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-ii-storage/" rel="noopener noreferrer"&gt;Optimizing your AWS Infrastructure for Sustainability, Part II: Storage&lt;/a&gt;", the section "Analyze data access patterns and use storage tiers", with the following two explanations, it suggests to make S3 lifecycle management sustainable by using automated tiering.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choosing the right storage tier after analyzing data access patterns gives you more sustainable storage options in the cloud.&lt;/li&gt;
&lt;li&gt;For data with unknown or changing access patterns, use Amazon S3 Intelligent-Tiering to monitor access patterns and move objects among tiers automatically. &lt;/li&gt;
&lt;/ol&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%2Fn5tcxor9xhp92pfv8k20.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%2Fn5tcxor9xhp92pfv8k20.jpg" alt=" " width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this way, we can see that storage tiering is important not only from a cost optimization perspective but also from a sustainability perspective.&lt;br&gt;&lt;br&gt;
I often use not only S3 but also the EFS and FSx series of file storage services from the perspective of optimizing cost and performance, and provide design support. I will take a deep dive into file storage, which has a wide variety of types and features.&lt;/p&gt;




&lt;h3&gt;
  
  
  Tierings of AWS file storage services
&lt;/h3&gt;

&lt;p&gt;Items in this chapter&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tierings of AWS file storage services&lt;/li&gt;
&lt;li&gt;Relevant information&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Tierings of AWS file storage services
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Description/Service&lt;/th&gt;
&lt;th&gt;EFS&lt;/th&gt;
&lt;th&gt;FSx for OpenZFS&lt;/th&gt;
&lt;th&gt;FSx for ONTAP&lt;/th&gt;
&lt;th&gt;FSx for Lustre&lt;/th&gt;
&lt;th&gt;FSx for Windows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tiering&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiering granularity&lt;/td&gt;
&lt;td&gt;File Level&lt;/td&gt;
&lt;td&gt;Data Block Level&lt;/td&gt;
&lt;td&gt;Data Block Level&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiering configuration unit&lt;/td&gt;
&lt;td&gt;File System&lt;/td&gt;
&lt;td&gt;File System&lt;/td&gt;
&lt;td&gt;Volume&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiering Class/Pool&lt;/td&gt;
&lt;td&gt;1.Standard&lt;br&gt; 2.Infrequent Access (IA)&lt;br&gt;3.Archive&lt;/td&gt;
&lt;td&gt;1.Frequent Access&lt;br&gt; 2.Infrequent Access  &lt;br&gt;3.Archive&lt;/td&gt;
&lt;td&gt;1.Primary Storage(SSD)&lt;br&gt; 2.Capacity Pool (HDD)&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I purposely included "Tiering granularity". This is because it's one of pitfalls of tiering. Let's say S3 and EFS implement file/object level tiering, so when the file/object is read, it is determined that it has been accessed and the tiering is applied even if the data blocks in the file have hardly been read and tiering won't be triggered the rest of data block has never been accessed. &lt;/p&gt;

&lt;p&gt;On the other hand, FSx for OpenZFS and FSx for ONTAP have data block level tiering, so the data blocks that can potentially be optimized for cost/performance through tiering may be wider.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As an example, if you open this blog and leave after just seeing the title, EFS and S3 will not be subject to Tiering who this file/object, but FSx for OpenZFS and FSx for ONTAP will execute Tiering for unread data blocks other than the title. As described in the ONTAP Knowledge Base and Technical Report, FSx for ONTAP judges data blocks in 4K units and performs tiering in 4M units. Regarding FSx for OpenZFS, I have not yet been able to find any documentation that shows the specific behavior of Tiering at the data block level, so if anyone knows about it, I would appreciate it if you could let me know.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cautions and TIPs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The FSx Intelligent-Tiering storage class of FSx for OpenZFS can only be used in multi-AZ configurations on a file system basis.

&lt;ul&gt;
&lt;li&gt;Screenshot of AWS Management Console for creating FSx for OpenZFS file system. When you choose Intelligent-Tiering (elastic) Storage class, you cannot choose Single-AZ 2 (HA) nor Single-AZ 2 (non-HA).
&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%2F1igm66f9mxq4tcrz83th.png" alt=" " width="" height=""&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Tiering in FSx for ONTAP allows you to change and tune the Tiering Policy even after the file system and volume are created. Both single-AZ and multi-AZ configurations are possible.

&lt;ul&gt;
&lt;li&gt;Screenshots of AWS Management Console for creating FSx for ONTAP file system and Updating volume.
&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%2Foct1njx9lo6phkk0lwtl.png" alt=" " width="800" height="274"&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%2Fheo3dlff8z79faeoly15.png" alt=" " width="800" height="1025"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;If you want to run EFS Tiering when creating a file system, select "Customize" and set it in "Lifecycle Management".
&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%2Fpsgym7idy1ppxhgr44yg.png" alt=" " width="800" height="532"&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%2Fhfp4ctqi88iaeydcz101.png" alt=" " width="800" height="343"&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Relevant information
&lt;/h4&gt;

&lt;p&gt;EFS Tiering：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/efs/pricing/?nc1=h_ls" rel="noopener noreferrer"&gt;Amazon EFS Pricing&lt;/a&gt;: 
&amp;gt; Amazon EFS offers three storage classes: EFS Standard, SSD-based storage which delivers sub-millisecond latencies for actively-used data; EFS Infrequent Access (EFS IA), cost-optimized storage which delivers milliseconds latencies for data accessed only a few times a quarter; and EFS Archive, cost-optimized storage which delivers milliseconds latencies for long-lived data accessed a few times a year or less. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/efs/features/infrequent-access/?nc1=h_ls" rel="noopener noreferrer"&gt;Amazon EFS Infrequent Access&lt;/a&gt;：「Amazon EFS will automatically and transparently move your files to the lower cost regional EFS IA storage class based on the last time they were accessed. 」&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/jp/efs/storage-classes/archive/" rel="noopener noreferrer"&gt;Amazon EFS Archive&lt;/a&gt;：「Amazon EFS will automatically and transparently move your files to the lower cost EFS IA and Archive storage classes based on the last time they were accessed.」&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FSx for OpenZFS Tiering：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/fsx/openzfs/features/?nc1=h_ls" rel="noopener noreferrer"&gt;Amazon FSx for OpenZFS Features &amp;gt; Cost optimization&amp;gt;Intelligent-Tiering(Need to open to see following description)&lt;/a&gt;: &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Intelligent-Tiering delivers automatic storage cost savings when data access patterns change, without performance impact or operational overhead. The Amazon FSx for OpenZFS Intelligent-Tiering storage class is designed to optimize storage costs using elasticity to automatically move data to the most cost-effective access tier when access patterns change. Amazon FSx Intelligent-Tiering is up to 85% lower cost than the FSx SSD storage class, and up to 20% lower cost compared to traditional on-premises HDD deployments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;AWS News blog: &lt;a href="https://aws.amazon.com/jp/blogs/aws/announcing-amazon-fsx-intelligent-tiering-a-new-storage-class-for-fsx-for-openzfs/" rel="noopener noreferrer"&gt;Announcing Amazon FSx Intelligent-Tiering, a new storage class for FSx for OpenZFS&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FSx for ONTAP：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/fsx/netapp-ontap/features/?nc1=h_ls" rel="noopener noreferrer"&gt;Amazon FSx for NetApp ONTAP Features &amp;gt; Cost optimization &amp;gt; Elastic capacity pool tiering(Need to open to see following description)&lt;/a&gt;：&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Each Amazon FSx for NetApp ONTAP file system has two storage tiers: primary storage and capacity pool storage. Primary storage is provisioned, scalable, high-performance SSD storage that’s purpose-built for the active portion of your data set. Capacity pool storage is a fully elastic storage tier that can scale to petabytes in size and is cost-optimized for infrequently-accessed data. Amazon FSx for NetApp ONTAP automatically tiers data from SSD storage to capacity pool storage based on your access patterns, allowing you to achieve SSD levels of performance for your workload while only paying for SSD storage for a small fraction of your data. Capacity pool storage automatically grows and shrinks as you tier data to it, providing elastic storage for the portion of your data set that grows over time without the need to plan or provision capacity for this data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ONTAP Tiering logic: &lt;a href="https://www.netapp.com/media/17239-tr-4598.pdf" rel="noopener noreferrer"&gt;Technical Report FabricPool best practices ONTAP 9.14.1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data movement &amp;gt; Tiering data to an object store&lt;br&gt;
After a block has been identified as cold, it is marked for tiering. During this time, a background tiering scan looks for cold blocks. When enough 4KB blocks from the same volume have been collected, they are concatenated into a 4MB object and moved to the cloud tier based on the volume tiering policy.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;What do you think of this summary of AWS file storage Tiering?&lt;br&gt;
When selecting a file system, you will most likely choose one that you are familiar with. However, from the perspective of cost/performance optimization, data integration, application configuration, security, etc., why not consider equally the features and benefits of other services?&lt;/p&gt;

&lt;p&gt;Among the options discussed this time, there are differences in the tiering methods for EFS, FSx for OpenZFS, and FSx for ONTAP, and you will need to make a choice based on usage and user experience.&lt;br&gt;
Regarding prices, the actual amount and validity vary greatly depending on the method of use and purpose, and it often changes with the release of new features, so I intentionally did not include it in the list this time so as not to make the comparison stand alone.&lt;/p&gt;

&lt;p&gt;I am sure that Amazon FSx Intelligent-Tiering will become even more powerful in the future. Let's keep an eye on AWS file storage and Tiering, which will continue to evolve!! &lt;br&gt;
I hope this blog will be helpful to someone.&lt;/p&gt;

&lt;p&gt;Bye now!!&lt;/p&gt;




&lt;p&gt;Socials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/antiberial" rel="noopener noreferrer"&gt;Yoshiki Fujiwara on X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/yoshiki.fujiwara1/" rel="noopener noreferrer"&gt;Yoshiki Fujiwara on Facebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/yoshiki-fujiwara/" rel="noopener noreferrer"&gt;Yoshiki Fujiwara on LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>filestorage</category>
      <category>tiering</category>
    </item>
  </channel>
</rss>
