PageSourceSearch

https://norahsakal.com/assets/js/28932c11.a92ab952.js

js norahsakal.com collected 2026-10-02 07:37:20 UTC 20,684 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkblog_folder=self.webpackChunkblog_folder||[]).push([[3498],{96933:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var r=n(2002),a=n(74848),o=n(28453),s=(n(47474),n(68877),n(65537),n(1710),n(60231),n(45138),n(27143));n(56289);const i={title:"Day 8: Test your network (prove it works)",subtitle:"Verify your infrastructure before deploying",description:"Today we test everything we've built. Launch a test EC2 instance, verify internet connectivity through NAT Gateway, check routing, and confirm your network is production-ready. This is your proof of concept before deploying AI containers.",descriptionShort:"Test your VPC infrastructure. Launch EC2, verify NAT Gateway, test routing, prove network works.",date:new Date("2025-12-19T00:00:00.000Z"),slug:"day-8-test-your-network-prove-it-works",coverImage:"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png",image:"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png",twitterImage:"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_twitter_card.png",ogImage:"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_twitter_card.png",tags:["aws","testing","networking","ec2","infrastructure","validation","advent-calendar"],featured:"true",authors:"norah",cusTime:"2025-12-19T15:02:17Z",toc_max_heading_level:2},l="Day 8: Test your network",c={authorsImageUrls:[void 0]},d=[{value:"Trust, but verify",id:"trust-but-verify",level:2}];function u(e){const t={admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:["\n","\n","\n",(0,a.jsx)(s.A,{children:(0,a.jsx)("title",{children:"Day 8: Test Your Network (Prove It Works) | AI Advent Calendar - Let Your AI Agent Make Real Phone Calls"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{src:"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png",alt:"Test your network (prove it works)",title:"Test your network (prove it works)"})}),"\n",(0,a.jsx)(t.admonition,{title:"What you'll learn",type:"learn",children:(0,a.jsx)(t.p,{children:"How to validate your VPC infrastructure by launching a test instance and verifying connectivity"})}),"\n",(0,a.jsx)(t.h2,{id:"trust-but-verify",children:"Trust, but verify"}),"\n",(0,a.jsx)(t.p,{children:"Days 3-7: You built the entire network infrastructure"}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"Today:"})," We prove it actually works"]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.strong,{children:"Here's the situation:"})}),"\n",(0,a.jsxs)(t.p,{children:["You've built: ",(0,a.jsx)("br",{}),"\n\u2705 VPC with Internet Gateway ",(0,a.jsx)("br",{}),"\n\u2705 Public and private subnets ",(0,a.jsx)("br",{}),"\n\u2705 NAT Gateway ",(0,a.jsx)("br",{}),"\n\u2705 Route Tables ",(0,a.jsx)("br",{}),"\n\u2705 Security Groups ",(0,a.jsx)("br",{})]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.strong,{children:"But you haven't actually tested any of it."})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.strong,{children:"What if:"})}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"NAT Gateway isn't running correctly?"}),"\n",(0,a.jsx)(t.li,{children:"Route tables have the wrong associations?"}),"\n",(0,a.jsx)(t.li,{children:"Secure Groups are blocking traffic?"}),"\n",(0,a.jsx)(t.li,{children:"Something is misconfigured?"}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"You'd fund out after deploying your containers"})," (painful debugging)"]}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"Solution:"})," Test first, deploy second."]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}}
1,69149:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(30332),a=n(74848);const o=(0,r.A)((0,a.jsx)("path",{d:"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"}),"Check")},48464:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(30332),a=n(74848);const o=(0,r.A)((0,a.jsx)("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96M17 13l-5 5-5-5h3V9h4v4z"}),"CloudDownload")},55629:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(30332),a=n(74848);const o=(0,r.A)((0,a.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy")},1710:(e,t,n)=>{n.d(t,{A:()=>s});n(96540);var r=n(34164);const a={tabItem:"tabItem_Ymn6"};var o=n(74848);function s({children:e,hidden:t,className:n}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(a.tabItem,n),hidden:t,children:e})}},65537:(e,t,n)=>{n.d(t,{A:()=>k});var r=n(96540),a=n(34164),o=n(65627),s=n(56347),i=n(50372),l=n(30604),c=n(11861),d=n(78749);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return u(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,c.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function f({value:e,tabValues:t}){return t.some((t=>t.value===e))}function p({queryString:e=!1,groupId:t}){const n=(0,s.W6)(),a=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,l.aZ)(a),(0,r.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(n.location.search);t.set(a,e),n.replace({...n.location,search:t.toString()})}),[a,n])]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=h(e),[s,l]=(0,r.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[c,u]=p({queryString:n,groupId:a}),[g,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,a]=(0,d.Dv)(t);return[n,(0,r.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:a}),m=(()=>{const e=c??g;return f({value:e,tabValues:o})?e:null})();(0,i.A)((()=>{m&&l(m)}),[m]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,o]),tabValues:o}}var b=n(9136);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(74848);function y({className:e,block:t,selectedValue:n,selectValue:r,tabValues:s}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.a_)(),c=e=>{const t=e.currentTarget,a=i.indexOf(t),o=s[a].value;o!==n&&(l(t),r(o))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{i.push(e)},onKeyDown:d,onClick:c,...r,className:(0,a.A)("tabs__item",m.tabItem,r?.className,{"tabs__item--active":n===e}),children:t??e},e)))})}function x({lazy:e,children:t,selectedValue:n}
1){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=g(e);return(0,v.jsxs)("div",{className:(0,a.A)("tabs-container",m.tabList),children:[(0,v.jsx)(y,{...t,...e}),(0,v.jsx)(x,{...t,...e})]})}function k(e){const t=(0,b.A)();return(0,v.jsx)(w,{...e,children:u(e.children)},String(t))}},47474:(e,t,n)=>{n.d(t,{A:()=>w});n(96540);var r=n(67512),a=n(30332),o=n(74848);const s=(0,a.A)((0,o.jsx)("path",{d:"M21 11h-1.5v-.5h-2v3h2V13H21v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1zM8 10v5H6.5v-1.5h-2V15H3v-5c0-.55.45-1 1-1h3c.55 0 1 .45 1 1m-1.5.5h-2V12h2zm7 1.5c.55 0 1 .45 1 1v1c0 .55-.45 1-1 1h-4V9h4c.55 0 1 .45 1 1v1c0 .55-.45 1-1 1M11 10.5v.75h2v-.75zm2 2.25h-2v.75h2z"}),"Abc"),i=(0,a.A)((0,o.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m5 11h-4v4h-2v-4H7v-2h4V7h2v4h4z"}),"AddCircle"),l=(0,a.A)((0,o.jsx)("path",{d:"M11.71 17.99C8.53 17.84 6 15.22 6 12c0-3.31 2.69-6 6-6 3.22 0 5.84 2.53 5.99 5.71l-2.1-.63C15.48 9.31 13.89 8 12 8c-2.21 0-4 1.79-4 4 0 1.89 1.31 3.48 3.08 3.89zM22 12c0 .3-.01.6-.04.9l-1.97-.59c.01-.1.01-.21.01-.31 0-4.42-3.58-8-8-8s-8 3.58-8 8 3.58 8 8 8c.1 0 .21 0 .31-.01l.59 1.97c-.3.03-.6.04-.9.04-5.52 0-10-4.48-10-10S6.48 2 12 2s10 4.48 10 10m-3.77 4.26L22 15l-10-3 3 10 1.26-3.77 4.27 4.27 1.98-1.98z"}),"AdsClick");var c=n(48464);const d=(0,a.A)((0,o.jsx)("path",{d:"M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2m-1 8h-3v3h-2v-3h-3v-2h3V9h2v3h3z"}),"CreateNewFolder"),u=(0,a.A)((0,o.jsx)("path",{d:"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm2 16H8v-2h8zm0-4H8v-2h8zm-3-5V3.5L18.5 9z"}),"Description"),h=(0,a.A)((0,o.jsx)("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z"}),"Edit"),f=(0,a.A)((0,o.jsx)("path",{d:"M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3"}),"FindInPage"),p=(0,a.A)((0,o.jsx)("path",{d:"M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m0 12H4V8h16z"}),"FolderOpen"),g=(0,a.A)((0,o.jsx)("path",{d:"m6 2 .01 6L10 12l-3.99 4.01L6 22h12v-6l-4-4 4-3.99V2zm10 14.5V20H8v-3.5l4-4z"}),"HourglassTop"),b=(0,a.A)((0,o.jsx)("path",{d:"M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5zm2.5-.5h1.5V15H10v-4.5h1.5V9H7zm5.5 0H14V15h1.5v-4.5H17V9h-4.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5m0 2.5h-2v-1h2z"}),"Http"),m=(0,a.A)((0,o.jsx)("path",{d:"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3zm-3-7V3.5L18.5 9z"}),"NoteAdd"),v=(0,a.A)((0,o.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m5 11H7v-2h10z"}),"RemoveCircle"),y=(0,a.A)((0,o.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z"}),"Save"),x=(0,a.A)((0,o.jsx)("path",{d:"M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2m0 14H4V8h16zm-2-1h-6v-2h6zM7.5 17l-1.41-1.41L8.67 13l-2.59-2.59L7.5 9l4 4z"}),"Terminal");function w({variant:e,label:t}){const n={add:{bg:"#eaf7ee",fg:"#0f5132",border:"#b7e3c7",icon:(0,o.jsx)(i,{fontSize:"small"})},change:{bg:"#f3e8ff",fg:"#6b21a8",border:"#d8b4fe",icon:(0,o.jsx)(h,{fontSize:"small"})},click:{bg:"#f5f5f5",fg:"#111",border:"#e1e1e1",icon:(0,o.jsx)(l,{fontSize:"small"})},createFile:{bg:"#eaf7ee",fg:"#0f5132",border:"#b7e3c7",icon:(0,o.jsx)(m,{fontSize:"small"})},createFolder:{bg:"#eaf7ee",fg:"#0f5132",border:"#b7e3c7",icon:(0,o.jsx)(d,{fontSize:"small"})},download:{bg:"#eaf4fb",fg:"#084298",border:"#b6d4fe",icon:(0,o.jsx)(c.A,{fontSize:"small"})},find:{bg:"#fff7ed",fg:"#92400e",border:"#fed7aa",icon:(0,o.jsx)(f,{fontSize:"small"})},open:{bg:"#eaf4fb",fg:"#084298",border:"#b6d4fe",icon:(0,o.jsx)(u,{fontSize:"small"})},openFolder:{bg:"#eaf4fb",fg:"#084298",border:"#b6d4fe",icon:(0,o.jsx)(p,{fontSize:"small"})},remove:{bg:"#fff1f0",fg:"#611a15",border:"#f3a6a0",icon:(0,o.jsx)(v,{fontSize:"small"})},run:{bg:"#f5f5f5",fg:"#111",border:"#e1e1e1",icon:(0,o.jsx)(x,{fontSize:"small"})},save:{bg:"#eaf4fb",fg:"#084298",border:"#b6d4fe",icon:(0,o.jsx)(y,{fontSize:"small"})},type:{bg:"#eef2ff",fg:"#3730a3",border:"#c7d2fe",icon:(0,o.jsx)(s,{fontSize:"small"})},wait:{bg:"#fefce8",fg:"#854d0e",border:"#fde68a",icon:(0,o.jsx)(g,{fontSize:"small"})},web:{bg:"#eaf4fb",fg:"#084298",border:"#b6d4fe",icon:(0,o.jsx)(b,{fontSize:"small"})}},{bg:a,fg:w,border:k,icon:j}=n[e]||n.change;return(0,o.jsx)(r.A,{size:"small",variant:"contained",startIcon:j,disableElevation:!0,sx:{pointerEvents:"none",borderRadius:"999px",textTransform:"none",fontWeight:600,fontSize:"13.5px",lineHeight:1,backgroundColor:a,color:w,border:`1px solid ${k}`,boxShadow:"0 1px 1px rgba(0,0,0,.06)","&:hover":{backgroundColor:a},marginBottom:"3px"},children:t})}},68877:(e,t,n)=>{n.d(t,{A:()=>c});var r=n(96540),a=n(55629),o=n(69149),s=n(4671),i=n(91922),l=n(74848);function c({text:e}){const[t,n]=(0,r.useState)(!1);return(0,l.jsx)("button",{type:"button",onClick:async()=>{try{await navigator.clipboard.writeText(e),n(!0),setTimeout((()=>n(!1)),1500)}catch(t){console.error("Copy failed",t)}}
1,style:{border:"none",background:"transparent",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"0.10rem",fontSize:"1rem",color:"var(--ifm-font-color-base)",paddingRight:0,paddingLeft:2},children:(0,l.jsxs)(i.A,{title:t?"Copied":"Click to copy",arrow:!0,children:[(0,l.jsx)("code",{children:e}),t?(0,l.jsx)(s.A,{component:"span",role:"presentation",tabIndex:-1,disableFocusRipple:!0,size:"small",sx:{ml:.25,p:.25},children:(0,l.jsx)(o.A,{fontSize:"small"})}):(0,l.jsx)(s.A,{component:"span",role:"presentation",tabIndex:-1,disableFocusRipple:!0,size:"small",sx:{ml:.25,p:.25},children:(0,l.jsx)(a.A,{fontSize:"small"})})]})})}},45138:(e,t,n)=>{n.d(t,{A:()=>c});var r=n(96540),a=n(1489),o=n(43581),s=n(67512),i=n(63023),l=n(74848);const c=({onSubscribe:e,status:t,message:n,buttonText:c,slug:d})=>{const[u,h]=(0,r.useState)(""),[f,p]=(0,r.useState)(!1);return(0,l.jsx)(a.Ay,{container:!0,spacing:2,children:"success"!==t?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.Ay,{item:!0,xs:12,md:6,children:(0,l.jsx)(o.A,{fullWidth:!0,id:"outlined-name",label:"Email",value:u,size:"small",onChange:e=>h(e.target.value)})}),(0,l.jsx)(a.Ay,{item:!0,xs:12,md:6,children:(0,l.jsx)(s.A,{onClick:async t=>{t.preventDefault(),p(!0);try{await e({EMAIL:u,MMERGE7:d,tags:d})}catch(n){console.error("Error subscribing:",n)}},disableElevation:!0,sx:{backgroundColor:"black"},variant:"contained",startIcon:f&&(0,l.jsx)(i.A,{sx:{animation:"spin 2s linear infinite","@keyframes spin":{"0%":{transform:"rotate(360deg)"},"100%":{transform:"rotate(0deg)"}}}}),children:c})})]}):(0,l.jsx)(a.Ay,{item:!0,xs:12,children:n})})}},2002:e=>{e.exports=JSON.parse('{"permalink":"/blog/day-8-test-your-network-prove-it-works","source":"@site/blog/2025/advent_calendar/8-dec.mdx","title":"Day 8: Test your network (prove it works)","description":"Today we test everything we\'ve built. Launch a test EC2 instance, verify internet connectivity through NAT Gateway, check routing, and confirm your network is production-ready. This is your proof of concept before deploying AI containers.","date":"2025-12-19T00:00:00.000Z","tags":[{"inline":false,"label":"AWS","permalink":"/blog/tags/aws","description":"Leveraging Amazon Web Services (AWS) for cloud computing, AI model deployment, and serverless applications. Covers AWS services such as Lambda, Bedrock, SageMaker, EC2, S3, and DynamoDB for scalable AI-powered solutions."},{"inline":false,"label":"Testing","permalink":"/blog/tags/testing","description":"Testing systems and infrastructure to ensure they behave as expected. Covers sanity checks, connectivity testing, environment verification, failure scenarios, and validating assumptions before shipping to production."},{"inline":false,"label":"Networking","permalink":"/blog/tags/networking","description":"Core cloud networking concepts: IP addressing, routing, NAT, gateways, load balancers, and traffic flow for distributed systems. Focused on production-grade architectures for AI workloads."},{"inline":false,"label":"EC2","permalink":"/blog/tags/ec-2","description":"Working with Amazon EC2 instances in AWS. Covers instance types, networking, access patterns, lifecycle management, and practical uses of EC2 for running, debugging, and validating cloud workloads."},{"inline":false,"label":"Infrastructure","permalink":"/blog/tags/infrastructure","description":"Foundational systems that power modern applications. Covers VPCs, compute, networking, security, IaC, and the end-to-end architecture required to run AI agents and containerized workloads."},{"inline":false,"label":"Validation","permalink":"/blog/tags/validation","description":"Proving that infrastru
1cture is production-ready through concrete checks. Covers outbound internet validation from private subnets, NAT IP verification, DNS and connectivity testing, and confirming assumptions before deploying AI workloads."},{"inline":false,"label":"Advent Calendar","permalink":"/blog/tags/advent-calendar","description":"Daily build-and-ship sequences focused on rapid learning. Covers structured 24-day technical arcs, progressive complexity, and hands-on deployments shipped in small, atomic wins."}],"readingTime":25.08,"hasTruncateMarker":true,"authors":[{"name":"Norah Klintberg Sakal","title":"AI Consultant & Developer","url":"https://github.com/norahsakal","page":{"permalink":"/blog/authors/norah"},"description":"AI consultant and developer specializing in AI-powered search and AI agents. Focused on building smarter retrieval systems, chatbots, and e-commerce AI with practical, hands-on guides.","socials":{"github":"https://github.com/norahsakal","linkedin":"https://www.linkedin.com/in/norah-klintberg-sakal/","email":"mailto:[email protected]"},"imageURL":"https://d1fiydes8a4qgo.cloudfront.net/blog/2026/norah_klintberg_sakal.jpg","key":"norah"}],"frontMatter":{"title":"Day 8: Test your network (prove it works)","subtitle":"Verify your infrastructure before deploying","description":"Today we test everything we\'ve built. Launch a test EC2 instance, verify internet connectivity through NAT Gateway, check routing, and confirm your network is production-ready. This is your proof of concept before deploying AI containers.","descriptionShort":"Test your VPC infrastructure. Launch EC2, verify NAT Gateway, test routing, prove network works.","date":"2025-12-19T00:00:00.000Z","slug":"day-8-test-your-network-prove-it-works","coverImage":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png","image":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_linkedin_card.png","twitterImage":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_twitter_card.png","ogImage":"https://d1fiydes8a4qgo.cloudfront.net/blog/2025/advent_calendar/dec_8_twitter_card.png","tags":["aws","testing","networking","ec2","infrastructure","validation","advent-calendar"],"featured":"true","authors":"norah","cusTime":"2025-12-19T15:02:17Z","toc_max_heading_level":2},"unlisted":false,"prevItem":{"title":"Day 9: Create your Application Load Balancer (the front door)","permalink":"/blog/day-9-create-application-load-balancer-front-door"},"nextItem":{"title":"Day 7: Create security groups (add the smart locks)","permalink":"/blog/day-7-create-security-groups-add-smart-locks"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.