<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar" xml:base="https://blog.sultanops.com/">
  <title>sultanops</title>
  <subtitle>شروحات عملية خطوة بخطوة بالعربي: إنشاء الخوادم على AWS، تشغيل VPN خاص بك عبر WireGuard، وتأمين خوادم Linux.</subtitle>
  <link href="https://blog.sultanops.com/feed.xml" rel="self"/>
  <link href="https://blog.sultanops.com/"/>
  <updated>2026-11-02T00:00:00Z</updated>
  <id>https://blog.sultanops.com/</id>
  <author>
    <name>سلطان عايض</name>
  </author>
  <entry>
    <title>التكلفة والتصميم الجيد</title>
    <link href="https://blog.sultanops.com/posts/aws-29-cost-good-architecture/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-29-cost-good-architecture/</id>
    <summary>ختام السلسلة. وين تروح فلوس الشبكة، والأدوات اللي تراقب فاتورتك، وإطار Well-Architected، وبناء كل شي من قالب بـ CloudFormation، وSystems Manager، ووين تروح بعد هذي السلسلة، مع تجربة عملية.</summary>
    <content type="html">&lt;p&gt;مشيت طريق طويل من &lt;a href=&quot;/posts/aws-01-global-infrastructure/&quot;&gt;الجزء الأول&lt;/a&gt;. في هذا الجزء الأخير نجاوب سؤالين ينطبقون على كل اللي بنيناه: &lt;strong&gt;كم يكلف؟&lt;/strong&gt; و&lt;strong&gt;هل هو مصمم صح؟&lt;/strong&gt; وبعدها نحول كل هذا لملف تقدر تعيد بناءه بأمر واحد.&lt;/p&gt;
&lt;h2 id=&quot;وين-تروح-فلوس-الشبكة&quot; tabindex=&quot;-1&quot;&gt;وين تروح فلوس الشبكة؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وين-تروح-فلوس-الشبكة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;أغلب الناس يخططون للسيرفرات والتخزين، ثم يتفاجأون بنقل البيانات. والأسعار هنا تقريبية لمناطق أمريكا:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 290&quot; role=&quot;img&quot; aria-labelledby=&quot;netcost-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;netcost-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;206&quot; y=&quot;14&quot; width=&quot;420&quot; height=&quot;262&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot;/&gt;
&lt;text x=&quot;416&quot; y=&quot;38&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;المنطقة&lt;/text&gt;
&lt;rect x=&quot;430&quot; y=&quot;50&quot; width=&quot;180&quot; height=&quot;124&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;520&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقة توفر 1&lt;/text&gt;
&lt;rect x=&quot;525&quot; y=&quot;82&quot; width=&quot;70&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;560&quot; y=&quot;109&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;EC2&lt;/text&gt;
&lt;rect x=&quot;445&quot; y=&quot;82&quot; width=&quot;70&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;480&quot; y=&quot;109&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;EC2&lt;/text&gt;
&lt;line x1=&quot;525&quot; y1=&quot;104&quot; x2=&quot;517&quot; y2=&quot;104&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;520&quot; y=&quot;152&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مجاني بعناوين خاصة&lt;/text&gt;
&lt;rect x=&quot;222&quot; y=&quot;50&quot; width=&quot;180&quot; height=&quot;124&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;312&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقة توفر 2&lt;/text&gt;
&lt;rect x=&quot;277&quot; y=&quot;82&quot; width=&quot;70&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;312&quot; y=&quot;109&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;EC2&lt;/text&gt;
&lt;line x1=&quot;445&quot; y1=&quot;104&quot; x2=&quot;349&quot; y2=&quot;104&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#netcost-arrow)&quot;/&gt;
&lt;text x=&quot;416&quot; y=&quot;204&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بين مناطق التوفر: 0.01 دولار لكل GB بكل اتجاه&lt;/text&gt;
&lt;text x=&quot;416&quot; y=&quot;240&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الداخل من الإنترنت: مجاني&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;30&quot; width=&quot;140&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;60&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الإنترنت&lt;/text&gt;
&lt;text x=&quot;90&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;حوالي 0.09 دولار&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;170&quot; width=&quot;140&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;200&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;منطقة ثانية&lt;/text&gt;
&lt;text x=&quot;90&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;من 0.02 دولار&lt;/text&gt;
&lt;line x1=&quot;206&quot; y1=&quot;65&quot; x2=&quot;162&quot; y2=&quot;65&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#netcost-arrow)&quot;/&gt;
&lt;line x1=&quot;206&quot; y1=&quot;205&quot; x2=&quot;162&quot; y2=&quot;205&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#netcost-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;netcost-caption&quot;&gt;البيانات الداخلة إلى AWS مجانية، وداخل المنطقة بعناوين خاصة كمان. وتدفع لما تعبر حد: بين مناطق التوفر، أو بين المناطق، أو إلى الإنترنت.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الاتجاه&lt;/th&gt;
&lt;th&gt;السعر التقريبي لكل GB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;إلى AWS من الإنترنت&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;داخل منطقة توفر واحدة بعناوين خاصة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;بين مناطق التوفر&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.01 دولار لكل اتجاه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;بين المناطق&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;من حوالي 0.02 دولار، ويختلف حسب المنطقة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;إلى الإنترنت&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حوالي 0.09 دولار وينزل مع الكمية، وأول 100 GB في الشهر مجانية&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;الأرقام الصغيرة تتجمع بسرعة. ست أشياء تقللها:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;استخدم العناوين الخاصة&lt;/strong&gt; داخل الـ VPC بدل العامة، ولاحظ إن كل عنوان IPv4 عام عليه رسوم بالساعة كمان.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;حط CloudFront قدام تطبيقك.&lt;/strong&gt; البيانات من AWS إلى CloudFront مجانية، والخروج عبره أرخص من الخروج المباشر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أضف Gateway Endpoint&lt;/strong&gt; لـ &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;S3 وDynamoDB&lt;/a&gt;. مجاني، ويوفر عليك رسوم NAT لكل GB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NAT Gateway لكل منطقة توفر،&lt;/strong&gt; عشان ما تعبر البيانات بين المناطق توصله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;قرّب الخدمات كثيرة الكلام.&lt;/strong&gt; بس وازن هذا مع التوفر، لأن التوزيع بين المناطق يستاهل الدفع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اضغط اللي ترسله،&lt;/strong&gt; وخزنه مؤقتاً في أقرب مكان تقدر عليه.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;وين-الكاش&quot; tabindex=&quot;-1&quot;&gt;وين الكاش؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وين-الكاش&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;كل طبقة توفر الشغل على اللي وراها، فكل ما كان قدام كان أفضل، وشفناها كلها:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الحافة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;CloudFront&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;الرحلة كلها، للمحتوى اللي نفسه للكل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الـ API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;كاش API Gateway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;الدالة وقاعدة البيانات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التطبيق&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-09-elasticache/&quot;&gt;ElastiCache&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;الاستعلامات والحسابات الثقيلة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;قاعدة البيانات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;DAX&lt;/a&gt; أو نسخة قراءة&lt;/td&gt;
&lt;td&gt;القراءات من القاعدة الأساسية&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;أدوات-تراقب-فاتورتك&quot; tabindex=&quot;-1&quot;&gt;أدوات تراقب فاتورتك &lt;a class=&quot;heading-anchor&quot; href=&quot;#أدوات-تراقب-فاتورتك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Cost Explorer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ترسم صرفك حسب الخدمة والحساب والوسم، وتتوقعه، وتوصي بـ Savings Plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Budgets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تنبهك لما توصل حد أو يتوقع توصله، والمراقبة مجانية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Anomaly Detection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تستخدم تعلم الآلة لكشف الصرف غير المعتاد، بدون رسوم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Optimization Hub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تجمع توصيات التوفير في مكان واحد: تغيير الأحجام والموارد الخاملة وغيرها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compute Optimizer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يوصي بالأحجام المناسبة حسب استخدامك الفعلي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost and Usage Report&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أدق بيانات عن تكلفتك واستخدامك، توصلك كملفات في S3 تحللها. و&lt;strong&gt;AWS Data Exports&lt;/strong&gt; ينشئ تصديرات مثلها بالأعمدة اللي تختارها&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وأول خطوة هي &lt;strong&gt;الوسوم&lt;/strong&gt;: بدون وسم &lt;code&gt;env&lt;/code&gt; أو &lt;code&gt;team&lt;/code&gt;، ما تعرف مين يصرف وش. والوسوم ما توصل لتقارير التكلفة إلا لما &lt;strong&gt;تفعّلها كـ Cost Allocation Tags&lt;/strong&gt; في صفحة الفوترة.&lt;/p&gt;
&lt;h3 id=&quot;توفير-سريع&quot; tabindex=&quot;-1&quot;&gt;توفير سريع &lt;a class=&quot;heading-anchor&quot; href=&quot;#توفير-سريع&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;الجزء الثالث&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;التزم بـ Savings Plans، واستخدم Spot للي يتحمل الانقطاع&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-04-ec2-pricing-networking/&quot;&gt;الجزء الرابع&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;أوقف سيرفرات التطوير بالليل، مثلاً بـ &lt;strong&gt;Instance Scheduler on AWS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;هذا الجزء&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;قواعد دورة الحياة لـ S3&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-16-s3-classes-lifecycle/&quot;&gt;الجزء السادس عشر&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;حدد مدة حفظ للسجلات&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;الجزء الخامس والعشرين&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;احذف الأقراص واللقطات وموزعات الحمل المهملة&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-05-ec2-storage/&quot;&gt;الجزء الخامس&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;إطار-well-architected&quot; tabindex=&quot;-1&quot;&gt;إطار Well-Architected &lt;a class=&quot;heading-anchor&quot; href=&quot;#إطار-well-architected&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS لخصت اللي تعلمته من عملائها في ست ركائز. اعتبرها مراجعة لأي تصميم:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التميز التشغيلي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تقدر تشغله وتحسنه؟&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;المراقبة&lt;/a&gt; والقوالب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الأمان&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;البيانات والوصول محمية؟&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;IAM&lt;/a&gt; و&lt;a href=&quot;/posts/aws-27-encryption-secrets-protection/&quot;&gt;التشفير&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الاعتمادية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ينجو من الأعطال ويتعافى؟&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;التوسع&lt;/a&gt; و&lt;a href=&quot;/posts/aws-28-disaster-recovery-migration/&quot;&gt;التعافي&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كفاءة الأداء&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تستخدم الموارد المناسبة؟&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-09-elasticache/&quot;&gt;الكاش&lt;/a&gt; و&lt;a href=&quot;/posts/aws-10-choosing-database/&quot;&gt;اختيار القاعدة&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تحسين التكلفة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تدفع على شي ما تحتاجه؟&lt;/td&gt;
&lt;td&gt;هذا الجزء&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الاستدامة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تقلل استهلاكك وأثره؟&lt;/td&gt;
&lt;td&gt;الأحجام المناسبة و&lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;Graviton&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;والركائز تتعارض أحياناً: نسخ أكثر تعني اعتمادية أفضل وتكلفة أعلى. والهدف مو إنك توصل الأقصى في كل شي، بل إنك تختار وأنت فاهم.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AWS Well-Architected Tool:&lt;/strong&gt; أداة مجانية في الكونسول تسألك عن شغلك وتبين المخاطر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trusted Advisor:&lt;/strong&gt; يفحص حسابك مقابل أفضل الممارسات. في الخطة المجانية تاخذ حدود الخدمات وكم فحص للأمان والتحمل، والباقي يحتاج خطة دعم مدفوعة. ولاحظ إن AWS تغير خطط الدعم، و&lt;strong&gt;Developer&lt;/strong&gt; و&lt;strong&gt;Business&lt;/strong&gt; تنتهي في 1 يناير 2027 لصالح &lt;strong&gt;Business Support+&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;cloudformation-بنيتك-في-ملف&quot; tabindex=&quot;-1&quot;&gt;CloudFormation: بنيتك في ملف &lt;a class=&quot;heading-anchor&quot; href=&quot;#cloudformation-بنيتك-في-ملف&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;إلى الآن سوينا كل شي بيدنا أو بالأوامر. طيب لو تقدر توصف كل هذا في ملف؟ &lt;strong&gt;AWS CloudFormation&lt;/strong&gt; يقرأ &lt;strong&gt;قالب (Template)&lt;/strong&gt; ويبني &lt;strong&gt;Stack&lt;/strong&gt; من الموارد بالترتيب الصحيح، و:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;قابل للتكرار:&lt;/strong&gt; نفس البيئة للتطوير والاختبار والإنتاج.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;قابل للمراجعة:&lt;/strong&gt; القالب في Git مثل الكود، وتراجع تغييراته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تحت السيطرة:&lt;/strong&gt; &lt;strong&gt;Change Set&lt;/strong&gt; يبين وش بيتغير قبل ما يصير، و&lt;strong&gt;Drift Detection&lt;/strong&gt; يكشف التعديلات اليدوية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;نظيف:&lt;/strong&gt; حذف الـ Stack يحذف كل اللي فيه، فما يبقى شي يحاسبك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مجاني:&lt;/strong&gt; تدفع على الموارد اللي ينشئها فقط.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;و&lt;strong&gt;Infrastructure Composer&lt;/strong&gt; يخليك ترسم القالب بالواجهة، و&lt;strong&gt;AWS CDK&lt;/strong&gt; يكتبه بـ Python أو TypeScript. و&lt;strong&gt;Service Role&lt;/strong&gt; يخلي المطور ينشر Stack بدون ما يكون عنده صلاحية على الموارد نفسها.&lt;/p&gt;
&lt;h2 id=&quot;systems-manager-تشغيل-سيرفراتك&quot; tabindex=&quot;-1&quot;&gt;Systems Manager: تشغيل سيرفراتك &lt;a class=&quot;heading-anchor&quot; href=&quot;#systems-manager-تشغيل-سيرفراتك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;AWS Systems Manager&lt;/strong&gt; يدير أساطيل السيرفرات عبر وكيل، مثبت أصلاً في Amazon Linux، ودور IAM:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Session Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;طرفية بدون منفذ SSH وبدون مفاتيح، والجلسات تنسجل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Run Command&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أمر واحد على ألف سيرفر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patch Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يطبق التحديثات بجدول&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintenance Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يحدد متى يسمح بهذي الأشياء&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مستندات جاهزة لمهام معروفة، مثل معالجة &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;Config&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;تطبيقات-ما-تقدر-تغيرها&quot; tabindex=&quot;-1&quot;&gt;تطبيقات ما تقدر تغيرها &lt;a class=&quot;heading-anchor&quot; href=&quot;#تطبيقات-ما-تقدر-تغيرها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;مو كل تطبيق ينكتب من جديد، وغالباً تقدر ترفع موثوقية التطبيق القديم من الخارج، بدون ما تلمس كوده:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;سيرفر واحد ممكن يتعطل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;مجموعة Auto Scaling&lt;/a&gt; بسيرفر واحد وفحص صحة، أو &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;الاسترجاع التلقائي&lt;/a&gt; اللي يرجعه على عتاد جديد بنفس عناوينه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ضغط يرهقه&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;CloudFront&lt;/a&gt; قدامه، لكل اللي ينخزن&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;اتصالات كثيرة بقاعدة البيانات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;RDS Proxy&lt;/a&gt;، ويحتاج نقطة وصول جديدة فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;قاعدة بيانات ممكن تطيح&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;Multi-AZ&lt;/a&gt;، ونقطة الوصول تبقى نفسها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;عملاء يسمحون لعناوين ثابتة في جدران الحماية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;العنوانين الثابتين في &lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;Global Accelerator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;خدمات-تستاهل-تعرفها&quot; tabindex=&quot;-1&quot;&gt;خدمات تستاهل تعرفها &lt;a class=&quot;heading-anchor&quot; href=&quot;#خدمات-تستاهل-تعرفها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;آخر مجموعة، وكل وحدة تستاهل سطر:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;SES&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;إرسال الإيميل، للمعاملات والتسويق، مع حماية سمعتك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Batch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;شغل دفعات بأي حجم، على EC2 أو Fargate، بدون حد 15 دقيقة مثل &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;Lambda&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Outposts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفرات AWS في مركز بياناتك، لما لازم تبقى البيانات عندك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon AppFlow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نقل البيانات من تطبيقات SaaS مثل Salesforce إلى S3 أو Redshift بدون كود&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Amplify&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بناء واستضافة تطبيقات الويب والجوال بسرعة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service Catalog&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كتالوج خدمات معتمدة، فالفرق تنشر المسموح فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يتابع تراخيص البرامج، مثل Oracle وSAP، عبر الحسابات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device Farm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اختبار التطبيقات على جوالات وأجهزة لوحية حقيقية تستضيفها AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ولو قرأت مقالات قديمة، &lt;strong&gt;Amazon Pinpoint&lt;/strong&gt; وصل لنهاية دعمه في 30 أكتوبر 2026. وAWS توجّه لـ &lt;strong&gt;SES&lt;/strong&gt; للإيميل، ولـ &lt;strong&gt;AWS End User Messaging&lt;/strong&gt; للرسائل النصية وإشعارات الجوال. و&lt;strong&gt;AWS Proton&lt;/strong&gt; وصل كمان لنهاية دعمه في 7 أكتوبر 2026، مع إن دليل الاختبار لسا يذكره.&lt;/p&gt;
&lt;h3 id=&quot;الحوسبة-عالية-الأداء&quot; tabindex=&quot;-1&quot;&gt;الحوسبة عالية الأداء &lt;a class=&quot;heading-anchor&quot; href=&quot;#الحوسبة-عالية-الأداء&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;لما تحتاج آلاف المعالجات تشتغل مع بعض:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;الحوسبة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-04-ec2-pricing-networking/&quot;&gt;Placement Group&lt;/a&gt; من نوع Cluster، مع Enhanced Networking أو EFA، وSpot لو أمكن&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التخزين&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;FSx for Lustre&lt;/a&gt; وInstance Store وS3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التنسيق&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS Batch أو &lt;strong&gt;AWS ParallelCluster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;نقل البيانات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;Direct Connect أو DataSync&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;عملي-stack-كامل-من-ملف-وميزانية-بتبقيها&quot; tabindex=&quot;-1&quot;&gt;عملي: Stack كامل من ملف، وميزانية بتبقيها &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-stack-كامل-من-ملف-وميزانية-بتبقيها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;اكتب قالب صغير فيه حاوية وموضوع SNS. من CloudShell:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; stack.yaml &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Description: A small stack from the AWS series
Parameters:
  Env:
    Type: String
    Default: dev
Resources:
  Files:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled
      Tags:
        - Key: env
          Value: !Ref Env
  Alerts:
    Type: AWS::SNS::Topic
Outputs:
  BucketName:
    Value: !Ref Files
EOF&lt;/span&gt;

aws cloudformation deploy --stack-name series-stack --template-file stack.yaml

aws cloudformation describe-stack-resources --stack-name series-stack &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;StackResources[].[LogicalResourceId,ResourceType,ResourceStatus]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;CloudFormation بنى الموردين وسماهم بنفسه. الحين غيّر قيمة وحدة. يحدث اللي تغيّر فقط، بدون ما يلمس الباقي:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudformation deploy --stack-name series-stack &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --template-file stack.yaml --parameter-overrides &lt;span class=&quot;token assign-left variable&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;prod

&lt;span class=&quot;token assign-left variable&quot;&gt;BUCKET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws cloudformation describe-stacks --stack-name series-stack &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Stacks[0].Outputs[0].OutputValue&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws s3api get-bucket-tagging &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;TagSet[?Key==&#39;env&#39;].Value&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;يطبع &lt;code&gt;prod&lt;/code&gt;. الحين أحلى جزء، حذف كل شي بأمر واحد:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudformation delete-stack --stack-name series-stack
aws cloudformation &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; stack-delete-complete --stack-name series-stack
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Everything is gone&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وأخيراً، شي &lt;strong&gt;تبقيه&lt;/strong&gt;: ميزانية 10 دولار في الشهر تنبهك لما يتوقع تتجاوز 80% منها. بدّل الإيميل بإيميلك:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;you@example.com
&lt;span class=&quot;token assign-left variable&quot;&gt;ACCOUNT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Account &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; budget.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;BudgetName&quot;: &quot;series-monthly&quot;,
  &quot;BudgetLimit&quot;: {&quot;Amount&quot;: &quot;10&quot;, &quot;Unit&quot;: &quot;USD&quot;},
  &quot;TimeUnit&quot;: &quot;MONTHLY&quot;,
  &quot;BudgetType&quot;: &quot;COST&quot;
}
EOF&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; notify.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;EOF
[{
  &quot;Notification&quot;: {
    &quot;NotificationType&quot;: &quot;FORECASTED&quot;,
    &quot;ComparisonOperator&quot;: &quot;GREATER_THAN&quot;,
    &quot;Threshold&quot;: 80,
    &quot;ThresholdType&quot;: &quot;PERCENTAGE&quot;
  },
  &quot;Subscribers&quot;: [{&quot;SubscriptionType&quot;: &quot;EMAIL&quot;, &quot;Address&quot;: &quot;&lt;span class=&quot;token variable&quot;&gt;$EMAIL&lt;/span&gt;&quot;}]
}]
EOF&lt;/span&gt;

aws budgets create-budget --account-id &lt;span class=&quot;token variable&quot;&gt;$ACCOUNT&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--budget&lt;/span&gt; file://budget.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --notifications-with-subscribers file://notify.json

aws budgets describe-budgets --account-id &lt;span class=&quot;token variable&quot;&gt;$ACCOUNT&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Budgets[].[BudgetName,BudgetLimit.Amount,BudgetLimit.Unit]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;لو جاك &lt;code&gt;AccessDenied&lt;/code&gt;، ممكن مستخدم IAM حقك يحتاج وصول للفوترة، وهذا يفعّله مستخدم Root من إعدادات الحساب.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;قبل ما تقفل الصفحة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;هذي الميزانية مجانية، فخلها. والحين بعد ما خلصت السلسلة، طالع &lt;strong&gt;Cost Explorer&lt;/strong&gt; وصفحة &lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;EC2&lt;/a&gt; في كل منطقة جربت فيها، عشان تتأكد ما فيه تجربة لسا شغالة.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;نقل البيانات&lt;/strong&gt; هو التكلفة المخفية: بين مناطق التوفر، وبين المناطق، وإلى الإنترنت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Budgets&lt;/strong&gt; و&lt;strong&gt;Cost Anomaly Detection&lt;/strong&gt; ينبهونك قبل الفاتورة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إطار Well-Architected&lt;/strong&gt; ست ركائز، والفكرة إنك تختار وأنت فاهم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudFormation&lt;/strong&gt; يحول بنيتك إلى ملف تراجعه وتحذفه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Systems Manager&lt;/strong&gt; يدير سيرفراتك بدون SSH.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 7&lt;/p&gt;
&lt;p&gt;سيرفرين EC2 في نفس منطقة التوفر يتبادلون تيرابايتات كل شهر عبر عناوين IP العامة لبعض، والنقل يطلع في الفاتورة. وش أبسط حل؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نقل سيرفر إلى منطقة توفر ثانية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;استخدام عناوينهم الخاصة بدلها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;وضع NAT Gateway بينهم&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;الانتقال لأنواع سيرفرات أكبر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;البيانات بين السيرفرات في منطقة توفر واحدة مجانية عبر العناوين الخاصة، والزيارات عبر العنوان العام مدفوعة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; عبور المناطق مدفوع في كل اتجاه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الـ NAT Gateway يضيف رسم على كل جيجابايت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; حجم السيرفر ما يغير تكلفة النقل.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%88%D9%8A%D9%86-%D8%AA%D8%B1%D9%88%D8%AD-%D9%81%D9%84%D9%88%D8%B3-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9&quot;&gt;وين تروح فلوس الشبكة؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://aws.amazon.com/ec2/pricing/on-demand/&quot;&gt;EC2 On-Demand Instance Pricing&lt;/a&gt; في موقع AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 7&lt;/p&gt;
&lt;p&gt;فريق صغير يبي إيميل لما يتوقع إن صرف AWS هذا الشهر بيتجاوز حده، مو بعد ما توصل الفاتورة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;AWS Budgets&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Cost Explorer، يفتحونه كل صباح&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Compute Optimizer&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;AWS Config&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الميزانية تقدر تنبه على الصرف المتوقع والصرف الفعلي، والمراقبة نفسها مجانية.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يرسم صرفك ويتوقعه، بس لازم أحد يروح يشوفه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يقترح الأحجام المناسبة، وما يرسل تنبيهات صرف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يسجل الإعدادات، مو الصرف.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%AA%D8%B1%D8%A7%D9%82%D8%A8-%D9%81%D8%A7%D8%AA%D9%88%D8%B1%D8%AA%D9%83&quot;&gt;أدوات تراقب فاتورتك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html&quot;&gt;Managing your costs with AWS Budgets&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 7&lt;/p&gt;
&lt;p&gt;فريق يبي يراجع تصميم تطبيق واحد مقابل أفضل ممارسات AWS، بالإجابة على أسئلة عنه ورؤية المخاطر. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon Inspector&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS Trusted Advisor&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS CloudTrail&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;AWS Well-Architected Tool&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الأداة تسألك عن شغلك وتبين لك المخاطر، وهي مجانية في الكونسول.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يفحص اللي تشغله عن الثغرات المعروفة، وما يراجع التصميم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يفحص موارد حسابك لحاله، وما يسأل عن تطبيق معين.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يسجل مين نادى وش.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A5%D8%B7%D8%A7%D8%B1-well-architected&quot;&gt;إطار Well-Architected&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://aws.amazon.com/well-architected-tool/faqs/&quot;&gt;AWS Well-Architected Tool FAQs&lt;/a&gt; في موقع AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 7&lt;/p&gt;
&lt;p&gt;فريق يبي نفس البيئة في التطوير والإنتاج من ملف واحد في Git، ويشوف وش بيغيره التحديث قبل ما يصير، ويعرف لو عدّل أحد مورد يدوياً. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Systems Manager Run Command&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;صورة AMI جاهزة، تنسخ بين الحسابات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;CloudFormation، مع Change Sets وDrift Detection&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;AWS Config لحاله&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;القالب يبني نفس الـ Stack كل مرة ويبقى في Git. وChange Sets تبين وش بيتغير، وDrift Detection يكشف التعديلات اليدوية.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يشغّل أوامر على السيرفرات، وما يوصف البنية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يكرر محتوى السيرفر، مو الشبكة والموارد اللي حوله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يسجل الإعدادات ويحكم عليها، بس ما يبني شي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cloudformation-%D8%A8%D9%86%D9%8A%D8%AA%D9%83-%D9%81%D9%8A-%D9%85%D9%84%D9%81&quot;&gt;CloudFormation: بنيتك في ملف&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html&quot;&gt;Update CloudFormation stacks using change sets&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html&quot;&gt;Detect unmanaged configuration changes to stacks and resources with drift detection&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 7&lt;/p&gt;
&lt;p&gt;شركة لازم تطبق تحديثات الأمان على 500 سيرفر EC2، في وقت محدد ليلة السبت فقط، وبدون وصول SSH. أي &lt;strong&gt;أداتين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Session Manager&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Patch Manager&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Parameter Store&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Compute Optimizer&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Maintenance Windows&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Patch Manager يطبق التحديثات، وMaintenance Windows يحدد متى يسمح لها تصير.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يعطيك طرفية، جلسة وحدة كل مرة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يخزن الإعدادات والأسرار البسيطة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يقترح الأحجام المناسبة حسب استخدامك.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#systems-manager-%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D8%B3%D9%8A%D8%B1%D9%81%D8%B1%D8%A7%D8%AA%D9%83&quot;&gt;Systems Manager: تشغيل سيرفراتك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager.html&quot;&gt;AWS Systems Manager Patch Manager&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/systems-manager/latest/userguide/maintenance-windows.html&quot;&gt;AWS Systems Manager Maintenance Windows&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 7&lt;/p&gt;
&lt;p&gt;فريق مالية يبي تكلفة كل فريق في ملفات مفصلة يحللها بنفسه. والموارد فيها وسم &lt;code&gt;team&lt;/code&gt;، بس الوسم ما يطلع في التقارير. أي &lt;strong&gt;خطوتين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تفعيل AWS Config&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تفعيل &lt;code&gt;team&lt;/code&gt; كـ Cost Allocation Tag&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تشغيل Compute Optimizer&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تفعيل CloudTrail Data Events&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;تجهيز Cost and Usage Report يوصل إلى S3&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الوسوم ما توصل لتقارير التكلفة إلا بعد تفعيلها، وCost and Usage Report يوصّل أدق البيانات كملفات في S3.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يسجل إعدادات الموارد، مو التكاليف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يقترح الأحجام المناسبة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يسجل العمليات داخل الموارد، مو التكاليف.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%AA%D8%B1%D8%A7%D9%82%D8%A8-%D9%81%D8%A7%D8%AA%D9%88%D8%B1%D8%AA%D9%83&quot;&gt;أدوات تراقب فاتورتك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/cur/latest/userguide/what-is-cur.html&quot;&gt;What are AWS Cost and Usage Reports?&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html&quot;&gt;Organizing and tracking costs using AWS cost allocation tags&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 7 من 7&lt;/p&gt;
&lt;p&gt;تطبيق قديم يشتغل على سيرفر EC2 واحد، وعملاؤه يتصلون بعنوان السيرفر. والكود ما يتغير. ولو تعطل العتاد، لازم يرجع السيرفر لحاله بنفس عناوينه. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نقل التطبيق إلى Lambda&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;مجموعة Auto Scaling بسيرفر واحد&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Automatic Instance Recovery&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;صورة AMI كل ليلة للسيرفر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الاسترجاع يرجع السيرفر على عتاد جديد، بنفس Instance ID وعناوينه الخاصة والعامة وElastic IP.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا إعادة كتابة، والكود ما يتغير.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; البديل سيرفر جديد، بعناوين جديدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; لازم ترجعه يدوياً، على سيرفر جديد بعناوين جديدة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D8%A7-%D8%AA%D9%82%D8%AF%D8%B1-%D8%AA%D8%BA%D9%8A%D8%B1%D9%87%D8%A7&quot;&gt;تطبيقات ما تقدر تغيرها&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html&quot;&gt;Automatic instance recovery&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;h2 id=&quot;اللي-تعلمته&quot; tabindex=&quot;-1&quot;&gt;اللي تعلمته &lt;a class=&quot;heading-anchor&quot; href=&quot;#اللي-تعلمته&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تسعة وعشرين جزء في تسعة أقسام. شوف وش تقدر تسويه الحين:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;a href=&quot;/series/aws/#section-1&quot;&gt;الأساسيات&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تفهم البنية العالمية وتضبط الصلاحيات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-2&quot;&gt;الخوادم وتخزينها&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تشغل سيرفر، وتختار تسعيره، وتحفظ بياناته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-3&quot;&gt;التوفر العالي والتوسّع&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تبني تطبيق ينجو من الأعطال ويكبر لحاله&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-4&quot;&gt;قواعد البيانات&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تختار القاعدة المناسبة وتسرعها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-5&quot;&gt;الشبكات وتوصيل المحتوى&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تصمم شبكة خاصة وتوصل المحتوى حول العالم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-6&quot;&gt;التخزين الكائني&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تخزن أي شي في S3 بالسعر المناسب وبأمان&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-7&quot;&gt;التطبيقات الحديثة&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تفصل الخدمات، وتشغل الحاويات وبدون خوادم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-8&quot;&gt;البيانات والذكاء الاصطناعي&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تحلل بياناتك وتضيف الذكاء الاصطناعي لتطبيقك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;/series/aws/#section-9&quot;&gt;الأمان والتشغيل&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;تراقب وتحمي وتتعافى وتضبط تكاليفك&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;وين-تروح-من-هنا&quot; tabindex=&quot;-1&quot;&gt;وين تروح من هنا &lt;a class=&quot;heading-anchor&quot; href=&quot;#وين-تروح-من-هنا&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ابن شي حقيقي.&lt;/strong&gt; مشروع صغير خاص فيك يعلمك أكثر من أي مقال، حتى لو موقع صغير مع API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;جرّب &lt;a href=&quot;/series/aws/quiz/&quot;&gt;الاختبار الشامل&lt;/a&gt;.&lt;/strong&gt; يختار لك أسئلة عشوائية من كل الأجزاء، فتعرف وش ثبت عندك ووش تراجعه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اقرأ الأسئلة الشائعة.&lt;/strong&gt; صفحة FAQ لكل خدمة ملخص قصير وغني ودقيق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;فكر في شهادة.&lt;/strong&gt; &lt;strong&gt;Solutions Architect Associate&lt;/strong&gt; تغطي أغلب اللي في هذي السلسلة، والاختبار يقيس كيف تختار بين الخدمات. اقرأ كل سؤال بحثاً عن العبارة اللي تحسم، مثل &amp;quot;أقل تكلفة&amp;quot; أو &amp;quot;أقل جهد تشغيلي&amp;quot;، واستبعد الإجابات الغلط أول. و&lt;a href=&quot;https://docs.aws.amazon.com/aws-certification/latest/solutions-architect-associate-03/solutions-architect-associate-03.html&quot;&gt;دليل الاختبار&lt;/a&gt; الرسمي يوضح كل المجالات والخدمات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تابع التغييرات.&lt;/strong&gt; AWS تتغير بسرعة، وكذا شي في هذي السلسلة تغير وهي تنكتب. راجع الوثائق قبل أي قرار.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;شكراً إنك كملت للنهاية، وبالتوفيق في اللي بتبنيه.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>التعافي من الكوارث والترحيل</title>
    <link href="https://blog.sultanops.com/posts/aws-28-disaster-recovery-migration/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-28-disaster-recovery-migration/</id>
    <summary>وش يعني RPO وRTO، وأربع استراتيجيات للتعافي من الكوارث وتكلفتها، والنسخ المركزي بـ AWS Backup، ونقل قواعد البيانات بـ DMS والسيرفرات بـ AWS Transform MGN، مع تجربة عملية تحذف فيها البيانات وترجعها.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;الجزء السابع&lt;/a&gt; نجا تطبيقنا من فقدان منطقة توفر. بس لو الكارثة أكبر: منطقة كاملة طاحت، أو &lt;code&gt;DELETE&lt;/code&gt; بالغلط، أو برنامج فدية؟ والنص الثاني من هذا الجزء: لو تطبيقك لسا مو على AWS، وتبي تجيبه؟&lt;/p&gt;
&lt;h2 id=&quot;rpo-وrto&quot; tabindex=&quot;-1&quot;&gt;RPO وRTO &lt;a class=&quot;heading-anchor&quot; href=&quot;#rpo-وrto&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;قبل أي قرار تقني، تحتاج رقمين من أصحاب العمل:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 150&quot; role=&quot;img&quot; aria-labelledby=&quot;rporto-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;rporto-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;395&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;RPO: البيانات اللي تضيع&lt;/text&gt;
&lt;text x=&quot;230&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;RTO: وقت التوقف&lt;/text&gt;
&lt;rect x=&quot;320&quot; y=&quot;52&quot; width=&quot;150&quot; height=&quot;28&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;rect x=&quot;140&quot; y=&quot;52&quot; width=&quot;180&quot; height=&quot;28&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;line x1=&quot;610&quot; y1=&quot;66&quot; x2=&quot;28&quot; y2=&quot;66&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#rporto-arrow)&quot;/&gt;
&lt;line x1=&quot;470&quot; y1=&quot;46&quot; x2=&quot;470&quot; y2=&quot;88&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;line x1=&quot;320&quot; y1=&quot;46&quot; x2=&quot;320&quot; y2=&quot;88&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;line x1=&quot;140&quot; y1=&quot;46&quot; x2=&quot;140&quot; y2=&quot;88&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;470&quot; y=&quot;110&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;آخر نسخة&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;110&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الكارثة&lt;/text&gt;
&lt;text x=&quot;140&quot; y=&quot;110&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;رجعت الخدمة&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;rporto-caption&quot;&gt;RPO يطالع لورا من الكارثة إلى آخر نسخة سليمة، وRTO يطالع لقدام إلى رجوع الخدمة.&lt;/figcaption&gt;
&lt;/figure&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RPO&lt;/strong&gt; (Recovery Point Objective)&lt;/td&gt;
&lt;td&gt;كم بيانات نقدر نخسر؟&lt;/td&gt;
&lt;td&gt;نسخة كل ساعة تعني خسارة حتى ساعة بيانات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RTO&lt;/strong&gt; (Recovery Time Objective)&lt;/td&gt;
&lt;td&gt;كم نقدر نبقى واقفين؟&lt;/td&gt;
&lt;td&gt;حتى أربع ساعات توقف&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;كل ما صغر الرقمين، ارتفعت التكلفة. فالسؤال مو &amp;quot;وش الأفضل؟&amp;quot;، بل &amp;quot;كم تسوى ساعة التوقف عندنا؟&amp;quot;&lt;/p&gt;
&lt;h2 id=&quot;أربع-استراتيجيات&quot; tabindex=&quot;-1&quot;&gt;أربع استراتيجيات &lt;a class=&quot;heading-anchor&quot; href=&quot;#أربع-استراتيجيات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;هذي للتعافي في منطقة ثانية، مرتبة من الأرخص للأغلى. والفرق بينها كم شي شغال هناك قبل الكارثة:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 262&quot; role=&quot;img&quot; aria-labelledby=&quot;dr-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;dr-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;549.5&quot; y=&quot;24&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Backup&lt;/text&gt;
&lt;rect x=&quot;479&quot; y=&quot;36&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;549.5&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;البيانات&lt;/text&gt;
&lt;text x=&quot;549.5&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;نسخ احتياطية&lt;/text&gt;
&lt;rect x=&quot;479&quot; y=&quot;96&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;549.5&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;السيرفرات&lt;/text&gt;
&lt;text x=&quot;549.5&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;لا شي&lt;/text&gt;
&lt;rect x=&quot;479&quot; y=&quot;156&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;549.5&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الزوار&lt;/text&gt;
&lt;text x=&quot;549.5&quot; y=&quot;198&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;لا شي&lt;/text&gt;
&lt;text x=&quot;396.5&quot; y=&quot;24&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Pilot Light&lt;/text&gt;
&lt;rect x=&quot;326&quot; y=&quot;36&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;396.5&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;البيانات&lt;/text&gt;
&lt;text x=&quot;396.5&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;منسوخة&lt;/text&gt;
&lt;rect x=&quot;326&quot; y=&quot;96&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;396.5&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;السيرفرات&lt;/text&gt;
&lt;text x=&quot;396.5&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;واقفة&lt;/text&gt;
&lt;rect x=&quot;326&quot; y=&quot;156&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;396.5&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الزوار&lt;/text&gt;
&lt;text x=&quot;396.5&quot; y=&quot;198&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;لا شي&lt;/text&gt;
&lt;text x=&quot;243.5&quot; y=&quot;24&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Warm Standby&lt;/text&gt;
&lt;rect x=&quot;173&quot; y=&quot;36&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;243.5&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;البيانات&lt;/text&gt;
&lt;text x=&quot;243.5&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;منسوخة&lt;/text&gt;
&lt;rect x=&quot;173&quot; y=&quot;96&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;243.5&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;السيرفرات&lt;/text&gt;
&lt;text x=&quot;243.5&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;قليلة شغالة&lt;/text&gt;
&lt;rect x=&quot;173&quot; y=&quot;156&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;243.5&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الزوار&lt;/text&gt;
&lt;text x=&quot;243.5&quot; y=&quot;198&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;عند التحويل&lt;/text&gt;
&lt;text x=&quot;90.5&quot; y=&quot;24&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Multi-Site&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;36&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;90.5&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;البيانات&lt;/text&gt;
&lt;text x=&quot;90.5&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;منسوخة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;96&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;90.5&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;السيرفرات&lt;/text&gt;
&lt;text x=&quot;90.5&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;بالحجم الكامل&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;156&quot; width=&quot;141&quot; height=&quot;54&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;90.5&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الزوار&lt;/text&gt;
&lt;text x=&quot;90.5&quot; y=&quot;198&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;دايماً&lt;/text&gt;
&lt;line x1=&quot;620&quot; y1=&quot;226&quot; x2=&quot;22&quot; y2=&quot;226&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#dr-arrow)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;248&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تكلفة أعلى، وبيانات ضايعة أقل، وتعافي أسرع&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;dr-caption&quot;&gt;وش شغال في المنطقة الثانية قبل الكارثة: كل ما كان الجاهز أكثر، كان التعافي أسرع والتكلفة أعلى.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الاستراتيجية&lt;/th&gt;
&lt;th&gt;RPO تقريبي&lt;/th&gt;
&lt;th&gt;RTO تقريبي&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;strong&gt;Backup and Restore&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ساعات&lt;/td&gt;
&lt;td&gt;حتى 24 ساعة&lt;/td&gt;
&lt;td&gt;الأنظمة غير الحرجة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pilot Light&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دقايق&lt;/td&gt;
&lt;td&gt;عشرات الدقايق&lt;/td&gt;
&lt;td&gt;البيانات الأساسية لازم تكون جاهزة دايماً&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warm Standby&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ثواني&lt;/td&gt;
&lt;td&gt;دقايق&lt;/td&gt;
&lt;td&gt;أنظمة مهمة بميزانية محدودة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Site&lt;/strong&gt; (نشط نشط)&lt;/td&gt;
&lt;td&gt;قريب من الصفر&lt;/td&gt;
&lt;td&gt;قريب من الصفر&lt;/td&gt;
&lt;td&gt;لما دقيقة التوقف تكلف ثروة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Backup and Restore:&lt;/strong&gt; نسخ تنتقل لمنطقة ثانية، وكل شي ينبني منها وقت الكارثة. والقوالب تساعد، زي ما بنشوف في &lt;a href=&quot;/posts/aws-29-cost-good-architecture/&quot;&gt;الجزء الجاي&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot Light:&lt;/strong&gt; البيانات تتنسخ باستمرار، مثل &lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;Aurora&lt;/a&gt; Global Database أو &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;نسخ S3&lt;/a&gt;، والسيرفرات جاهزة بس واقفة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Warm Standby:&lt;/strong&gt; نسخة كاملة صغيرة شغالة وتقدر تستقبل على طول، ثم تكبر بـ Auto Scaling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-Site:&lt;/strong&gt; المنطقتين يخدمون المستخدمين طول الوقت، مثل &lt;a href=&quot;/posts/aws-11-dns-route53/&quot;&gt;Route 53&lt;/a&gt; مع &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;Global Tables&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;نصائح-تفرق&quot; tabindex=&quot;-1&quot;&gt;نصائح تفرق &lt;a class=&quot;heading-anchor&quot; href=&quot;#نصائح-تفرق&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;اختبر تعافيك.&lt;/strong&gt; النسخة اللي ما رجعتها ولا مرة مجرد أمل. سوّ تدريبات، واستفد من &lt;strong&gt;AWS Fault Injection Service&lt;/strong&gt; عشان تسبب أعطال متعمدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أتمت.&lt;/strong&gt; ابن البيئة من قوالب، لأن وقت الكارثة ما أحد يتذكر الخطوات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;احمِ نسخك من نفسك.&lt;/strong&gt; حطها في حساب ثاني ومنطقة ثانية، لأن المهاجم اللي يدخل حسابك بيبدأ فيها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;فكر في Elastic Disaster Recovery.&lt;/strong&gt; &lt;strong&gt;AWS DRS&lt;/strong&gt; ينسخ سيرفراتك باستمرار لتخزين رخيص، ويشغلها بس لما تحتاجها، بـ RPO ثواني وRTO دقايق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;راجع الحصص في منطقة الاحتياط.&lt;/strong&gt; الحصص لكل منطقة، فالنسخة الصغيرة ممكن توصل حدها وقت ما تحتاج تكبر. ارفعها هناك قبلها من صفحة &lt;strong&gt;Service Quotas&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;aws-backup-كل-شي-في-مكان-واحد&quot; tabindex=&quot;-1&quot;&gt;AWS Backup: كل شي في مكان واحد &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-backup-كل-شي-في-مكان-واحد&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;كل خدمة لها نسخها، بس &lt;strong&gt;AWS Backup&lt;/strong&gt; يديرها مركزياً، لـ EC2 وEBS وS3 وRDS وAurora وDynamoDB وEFS وFSx وغيرها:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Backup Plan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جدول ومدة حفظ، مثل يومي لـ 35 يوم، ثم انتقال لتخزين بارد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vault&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مكان حفظ النسخ، مشفرة بـ KMS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الوسوم&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;انسخ أي شي عليه &lt;code&gt;backup=daily&lt;/code&gt;، فالموارد الجديدة تنضم لحالها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;النسخ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لمنطقة ثانية أو حساب ثاني، لحماية حقيقية من الكوارث&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vault Lock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يمنع أي أحد، حتى Root في وضع Compliance، من حذف النسخ قبل انتهائها&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;و&lt;strong&gt;Vault Lock&lt;/strong&gt; أقوى دفاع عندك ضد برامج الفدية وضد اللي معه بيانات مدير مسروقة.&lt;/p&gt;
&lt;h2 id=&quot;ترحيل-قواعد-البيانات-dms&quot; tabindex=&quot;-1&quot;&gt;ترحيل قواعد البيانات: DMS &lt;a class=&quot;heading-anchor&quot; href=&quot;#ترحيل-قواعد-البيانات-dms&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;AWS DMS&lt;/strong&gt; (Database Migration Service) ينقل قاعدة البيانات وهي مستخدمة: ينسخ البيانات الموجودة، ثم يستمر يرسل التغييرات (تعرف بـ &lt;strong&gt;CDC&lt;/strong&gt;) لين تكون جاهز تحوّل.&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;نفس المحرك&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MySQL على سيرفر إلى RDS for MySQL&lt;/td&gt;
&lt;td&gt;DMS لحاله يكفي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;محرك مختلف&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oracle إلى Aurora PostgreSQL&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;DMS Schema Conversion&lt;/strong&gt; أو &lt;strong&gt;SCT&lt;/strong&gt; لتحويل الجداول والكود أول، ثم DMS للبيانات&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;والمصادر والوجهات كثيرة، منها قواعد مكتبك وRDS وS3 وDynamoDB وRedshift وOpenSearch. ويقدر يشتغل بـ &lt;strong&gt;Multi-AZ&lt;/strong&gt; مع نسخة احتياطية في منطقة ثانية، أو &lt;strong&gt;Serverless&lt;/strong&gt; عشان ما تحتاج تحدد حجمه.&lt;/p&gt;
&lt;h3 id=&quot;النقل-إلى-rds-أو-aurora&quot; tabindex=&quot;-1&quot;&gt;النقل إلى RDS أو Aurora &lt;a class=&quot;heading-anchor&quot; href=&quot;#النقل-إلى-rds-أو-aurora&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;لو تنقل MySQL أو PostgreSQL، عندك طرق أبسط:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;لقطة من RDS إلى Aurora&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نعم، وقت النقل&lt;/td&gt;
&lt;td&gt;التوقف مقبول&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;نسخة قراءة Aurora ثم ترقيتها&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قصير جداً&lt;/td&gt;
&lt;td&gt;من RDS بدون توقف حقيقي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;نسخة من S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نعم&lt;/td&gt;
&lt;td&gt;من خارج RDS: Percona XtraBackup لـ MySQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قصير جداً&lt;/td&gt;
&lt;td&gt;نسخ مستمر من أي مكان&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;ترحيل-السيرفرات-ومراكز-البيانات&quot; tabindex=&quot;-1&quot;&gt;ترحيل السيرفرات ومراكز البيانات &lt;a class=&quot;heading-anchor&quot; href=&quot;#ترحيل-السيرفرات-ومراكز-البيانات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;نقل السيرفرات زي ما هي (Lift and Shift)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AWS Transform MGN&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;استيراد صورة جهاز افتراضي واحد&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VM Import/Export&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نقل VMware زي ما هو&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Amazon Elastic VMware Service&lt;/strong&gt;، أو VMware Cloud on AWS من Broadcom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;مساعدة في تخطيط ترحيل كبير&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AWS Transform&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نقل الملفات&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;DataSync&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;وضع تطبيقات Java أو .NET في حاويات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;App2Container&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;AWS Transform MGN&lt;/strong&gt; كان اسمه Application Migration Service لين 2026. وكيل على سيرفرك ينسخ أقراصه باستمرار إلى موارد AWS منخفضة التكلفة، وتجرب كم ما تبي، ثم تحوّل في دقايق. وغالباً هو أسرع طريق للخروج من مركز بيانات.&lt;/p&gt;
&lt;aside class=&quot;callout callout-note&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-info&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;8.5&quot;/&gt;&lt;path d=&quot;M12 11v5M12 8h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;أدوات قديمة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ممكن تقرأ عن &lt;strong&gt;Application Discovery Service&lt;/strong&gt; و&lt;strong&gt;Migration Hub&lt;/strong&gt;، وكانت لتخطيط الترحيل. ما عادت متاحة للعملاء الجدد، وAWS Transform هو الطريق الحين لهذا النوع من الشغل.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;ولو عندك بيانات ضخمة، حسبناها في &lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;الجزء الثامن عشر&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;عملي-احذف-البيانات-ورجعها&quot; tabindex=&quot;-1&quot;&gt;عملي: احذف البيانات ورجعها &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-احذف-البيانات-ورجعها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنمثل كارثة صغيرة: جدول، ونسخة، وحذف بالغلط، ثم استعادة. من CloudShell، أنشئ الجدول بطلب واحد:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws dynamodb create-table --table-name series-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --attribute-definitions &lt;span class=&quot;token assign-left variable&quot;&gt;AttributeName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;id,AttributeType&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;S &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --key-schema &lt;span class=&quot;token assign-left variable&quot;&gt;AttributeName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;id,KeyType&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;HASH &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --billing-mode PAY_PER_REQUEST &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TableDescription.TableStatus

aws dynamodb &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; table-exists --table-name series-orders

aws dynamodb put-item --table-name series-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--item&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;id&quot;:{&quot;S&quot;:&quot;1001&quot;},&quot;total&quot;:{&quot;N&quot;:&quot;120&quot;}}&#39;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;TABLE_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws dynamodb describe-table --table-name series-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Table.TableArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;AWS Backup يحتاج دور وVault:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; trust.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Principal&quot;: {&quot;Service&quot;: &quot;backup.amazonaws.com&quot;},
    &quot;Action&quot;: &quot;sts:AssumeRole&quot;
  }]
}
EOF&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;ROLE_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws iam create-role --role-name series-backup-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --assume-role-policy-document file://trust.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Role.Arn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws iam attach-role-policy --role-name series-backup-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
aws iam attach-role-policy --role-name series-backup-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores

aws backup create-backup-vault --backup-vault-name series-vault &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; BackupVaultName &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;ابدأ النسخ، ثم انتظره. ولو جاك خطأ عن الدور، انتظر كم ثانية وأعد الأمر الأول. وهذا ياخذ عادةً كم دقيقة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;&lt;span class=&quot;token environment constant&quot;&gt;JOB&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws backup start-backup-job --backup-vault-name series-vault &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --resource-arn $TABLE_ARN --iam-role-arn $ROLE_ARN &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; BackupJobId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws backup describe-backup-job --backup-job-id &lt;span class=&quot;token environment constant&quot;&gt;$JOB&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; State &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$STATE&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$STATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; COMPLETED&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;FAILED&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;ABORTED&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;EXPIRED&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;break&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;esac&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;POINT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws backup describe-backup-job --backup-job-id &lt;span class=&quot;token environment constant&quot;&gt;$JOB&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; RecoveryPointArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين الكارثة. الطلب راح:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws dynamodb delete-item --table-name series-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;id&quot;:{&quot;S&quot;:&quot;1001&quot;}}&#39;&lt;/span&gt;

aws dynamodb get-item --table-name series-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;id&quot;:{&quot;S&quot;:&quot;1001&quot;}}&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الأمر الثاني ما يطبع شي. استعد النسخة إلى جدول جديد، ولاحظ الوقت اللي تاخذه، لأن هذا هو RTO الحقيقي حقك:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;RESTORE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws backup start-restore-job --recovery-point-arn $POINT &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --iam-role-arn $ROLE_ARN &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--metadata&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;targetTableName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;series-orders-restored,encryptionType&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Default &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; RestoreJobId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws backup describe-restore-job --restore-job-id $RESTORE &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Status &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$STATE&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$STATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; COMPLETED&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;FAILED&lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;ABORTED&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;break&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;esac&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;15&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;

aws dynamodb get-item --table-name series-orders-restored &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;id&quot;:{&quot;S&quot;:&quot;1001&quot;}}&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Item&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الطلب رجع. وأي شي انكتب بعد النسخة ضاع، وهذا هو RPO حقك.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;هذا يكلف جزء من السنت، بس احذف محتوى الـ Vault قبله:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws backup delete-recovery-point --backup-vault-name series-vault &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --recovery-point-arn &lt;span class=&quot;token variable&quot;&gt;$POINT&lt;/span&gt;
aws backup delete-backup-vault --backup-vault-name series-vault

aws dynamodb delete-table --table-name series-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TableDescription.TableStatus
aws dynamodb delete-table --table-name series-orders-restored &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TableDescription.TableStatus

aws iam detach-role-policy --role-name series-backup-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
aws iam detach-role-policy --role-name series-backup-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores
aws iam delete-role --role-name series-backup-role&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RPO&lt;/strong&gt; البيانات اللي تخسرها، و&lt;strong&gt;RTO&lt;/strong&gt; وقت توقفك، وأصحاب العمل يحددونهم.&lt;/li&gt;
&lt;li&gt;الاستراتيجيات الأربع: &lt;strong&gt;النسخ&lt;/strong&gt;، و&lt;strong&gt;Pilot Light&lt;/strong&gt;، و&lt;strong&gt;Warm Standby&lt;/strong&gt;، و&lt;strong&gt;Multi-Site&lt;/strong&gt;، والتكلفة ترتفع كل ما تحسنت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS Backup&lt;/strong&gt; يدير النسخ مركزياً، و&lt;strong&gt;Vault Lock&lt;/strong&gt; يحميها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DMS&lt;/strong&gt; ينقل قواعد البيانات وهي شغالة، و&lt;strong&gt;AWS Transform MGN&lt;/strong&gt; ينقل السيرفرات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اختبر تعافيك&lt;/strong&gt;، وإلا ما عندك تعافي.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 6&lt;/p&gt;
&lt;p&gt;شركة تاخذ نسخة احتياطية من قاعدتها كل ست ساعات، والاسترجاع الكامل ياخذ ساعتين. في أسوأ حالة، كم الـ RPO والـ RTO عندها؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;RPO ساعتين، وRTO ست ساعات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;RPO ثماني ساعات، وRTO ثماني ساعات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;RPO صفر، وRTO ساعتين&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;RPO ست ساعات، وRTO ساعتين&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ RPO هو البيانات اللي ممكن تخسرها، وهي حتى الست ساعات من آخر نسخة. والـ RTO هو وقت التوقف، وهو ساعتين الاسترجاع.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يبدل الرقمين.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الرقمين يقيسون شيئين مختلفين، فما ينجمعون.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; أي شي انكتب بعد آخر نسخة يضيع، فالـ RPO مو صفر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#rpo-%D9%88rto&quot;&gt;RPO وRTO&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/business-continuity-plan-bcp.html&quot;&gt;Business Continuity Plan (BCP)&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 6&lt;/p&gt;
&lt;p&gt;تطبيق لازم يرجع في Region ثانية خلال ساعة ويخسر دقايق من البيانات فقط، &lt;strong&gt;بأقل تكلفة&lt;/strong&gt; تحقق هذا. أي استراتيجية تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Backup and restore&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Pilot Light&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Warm Standby&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Multi-Site active-active&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pilot Light يبقي البيانات تتنسخ باستمرار والسيرفرات جاهزة بس واقفة، وهذا يرجعك خلال عشرات الدقايق بتكلفة تشغيل قليلة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الاسترجاع ممكن ياخذ حتى 24 ساعة، وبتخسر ساعات من البيانات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يحقق المطلوب كمان، بس بتدفع على نسخة كاملة شغالة طول الوقت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحققه كمان، بأعلى تكلفة بفارق كبير.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D8%B1%D8%A8%D8%B9-%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%D9%8A%D8%AC%D9%8A%D8%A7%D8%AA&quot;&gt;أربع استراتيجيات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html&quot;&gt;Disaster recovery options in the cloud&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 6&lt;/p&gt;
&lt;p&gt;شركة خايفة من برامج الفدية: مهاجم معه بيانات مدير مسروقة ممكن يحذف نسخها الاحتياطية. أي خطوة تحميها أكثر؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;AWS Backup Vault Lock بوضع Compliance&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;سياسة IAM تمنع حذف النسخ&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تشفير النسخ بـ KMS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إنذار CloudWatch على حذف النسخ&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;في وضع Compliance ما أحد يقدر يحذف نسخة قبل انتهائها، ولا حتى المستخدم الجذر.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; المدير يقدر يغير السياسة ببساطة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; النسخ المشفرة لسا ممكن تنحذف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; بتعرف عن الحذف، بس النسخ بتكون راحت.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#aws-backup-%D9%83%D9%84-%D8%B4%D9%8A-%D9%81%D9%8A-%D9%85%D9%83%D8%A7%D9%86-%D9%88%D8%A7%D8%AD%D8%AF&quot;&gt;AWS Backup: كل شي في مكان واحد&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/aws-backup/latest/devguide/vault-lock.html&quot;&gt;AWS Backup Vault Lock&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 6&lt;/p&gt;
&lt;p&gt;شركة تبي تنقل 200 سيرفر من مركز بياناتها إلى AWS زي ما هي، وتختبرها هناك كل ما تبي، وتنتقل خلال دقايق. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;AWS DMS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS DataSync&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS Transform MGN&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;VM Import/Export&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agent على كل سيرفر ينسخ أقراصه باستمرار إلى AWS، فتقدر تختبر براحتك، ثم تنتقل خلال دقايق.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا ينقل قواعد البيانات، مو السيرفرات كاملة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا ينقل الملفات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يستورد صور أجهزة افتراضية، بدون نسخ مستمر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AA%D8%B1%D8%AD%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D9%8A%D8%B1%D9%81%D8%B1%D8%A7%D8%AA-%D9%88%D9%85%D8%B1%D8%A7%D9%83%D8%B2-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA&quot;&gt;ترحيل السيرفرات ومراكز البيانات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html&quot;&gt;What Is AWS Transform MGN?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 6&lt;/p&gt;
&lt;p&gt;شركة تنقل قاعدة Oracle مشغولة إلى Aurora PostgreSQL، بتوقف قليل جداً. أي &lt;strong&gt;أداتين&lt;/strong&gt; تحتاج؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;AWS Transform MGN&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS DataSync&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;DMS Schema Conversion أو SCT&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Aurora Read Replica من قاعدة Oracle&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;AWS DMS، مع نسخ مستمر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;المحركين مختلفين، فتتحول الجداول والكود أول. ثم DMS ينسخ البيانات ويستمر يرسل التغييرات لين تكون جاهز للانتقال.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا ينقل السيرفرات زي ما هي، فتبقى القاعدة على Oracle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا ينقل الملفات، وما يقدر يبقي قاعدة شغالة متزامنة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; نسخ قراءة Aurora تجي من RDS for MySQL أو PostgreSQL، مو من Oracle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AA%D8%B1%D8%AD%D9%8A%D9%84-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-dms&quot;&gt;ترحيل قواعد البيانات: DMS&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html&quot;&gt;What is AWS Database Migration Service?&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/dms/latest/userguide/CHAP_SchemaConversion.html&quot;&gt;Converting database schemas using DMS Schema Conversion&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 6&lt;/p&gt;
&lt;p&gt;في تجربة تعافي، نسخة Warm Standby في منطقة ثانية بدأت تكبر، بس السيرفرات الجديدة فشلت بسبب حد في الحساب أقل هناك من المنطقة الرئيسية. وش يسوي الفريق؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;رفع الحصص في منطقة الاحتياط قبلها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;التحويل إلى Pilot Light&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;نسخ النسخ الاحتياطية إلى منطقة ثالثة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;رفع الحصص في المنطقة الرئيسية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الحصص لكل منطقة، فمنطقة الاحتياط لازم تكون حدودها كافية لسعة الإنتاج قبل الكارثة. وترفعها من صفحة Service Quotas.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يشغّل أقل من كذا، وبيوصل لنفس الحد لما يكبر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يحمي البيانات، وما يغير الحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; الحصص لكل منطقة، فهذا ما يفيد منطقة الاحتياط.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D8%AA%D9%81%D8%B1%D9%82&quot;&gt;نصائح تفرق&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html&quot;&gt;Disaster recovery options in the cloud&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html&quot;&gt;What is Service Quotas?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;تطبيقك الحين مبني ومحمي وقابل للتعافي. يبقى سؤال أخير: كم يكلف، وهل هو مصمم صح؟ في &lt;a href=&quot;/posts/aws-29-cost-good-architecture/&quot;&gt;&lt;strong&gt;الجزء التاسع والعشرين&lt;/strong&gt;&lt;/a&gt; نختم السلسلة بالتكلفة والتصميم الجيد.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>التشفير والأسرار والحماية من الهجمات</title>
    <link href="https://blog.sultanops.com/posts/aws-27-encryption-secrets-protection/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-27-encryption-secrets-protection/</id>
    <summary>كيف يحمي KMS مفاتيحك، ووين تحفظ كلمات المرور بـ Parameter Store وSecrets Manager، وشهادات مجانية من ACM، وصد الهجمات بـ WAF وShield، وكشف التهديدات بـ GuardDuty وInspector وMacie، مع تجربة عملية.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-26-organizations-identity-center/&quot;&gt;الجزء السادس والعشرين&lt;/a&gt; ضبطنا مين يدخل. هذا الجزء يفترض الأسوأ: قرص ينسرق، أو كلمة مرور تتسرب، أو أحد يهاجم موقعك. وش يحميك وقتها؟&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;/td&gt;
&lt;td&gt;&lt;strong&gt;KMS&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;إعدادات وأسرار بسيطة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Parameter Store&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;كلمات مرور تتغير لحالها&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Secrets Manager&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;شهادات HTTPS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ACM&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;صد هجمات الويب&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;WAF&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تحمل هجمات DDoS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Shield&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;كشف التهديدات في حسابك&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;GuardDuty&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;إيجاد الثغرات في اللي تشغله&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Inspector&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;إيجاد البيانات الحساسة في S3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Macie&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;aws-kms-خزنة-المفاتيح&quot; tabindex=&quot;-1&quot;&gt;AWS KMS: خزنة المفاتيح &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-kms-خزنة-المفاتيح&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;شفنا &lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;أنواع التشفير في S3&lt;/a&gt;. وخلف أغلبها &lt;strong&gt;KMS&lt;/strong&gt; (Key Management Service): المفاتيح تنشأ وتنستخدم داخله وما تطلع منه بدون تشفير، والوصول تحكمه السياسات، وكل استخدام ينسجل في &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;CloudTrail&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;التشفير-بالمظروف-envelope-encryption&quot; tabindex=&quot;-1&quot;&gt;التشفير بالمظروف (Envelope Encryption) &lt;a class=&quot;heading-anchor&quot; href=&quot;#التشفير-بالمظروف-envelope-encryption&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;KMS ما يشفر ملفاتك الكبيرة بنفسه. يسوي &lt;strong&gt;مفتاح بيانات&lt;/strong&gt; يشفر الملف، ويشفر مفتاح البيانات هذا بمفتاحك الرئيسي:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 214&quot; role=&quot;img&quot; aria-labelledby=&quot;envelope-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;envelope-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;450&quot; y=&quot;14&quot; width=&quot;170&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;535&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مفتاح KMS&lt;/text&gt;
&lt;text x=&quot;535&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ما يطلع من KMS&lt;/text&gt;
&lt;rect x=&quot;235&quot; y=&quot;14&quot; width=&quot;170&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مفتاح البيانات&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يشفر الملف&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;170&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;105&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;ملفك&lt;/text&gt;
&lt;text x=&quot;105&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;صار مشفر&lt;/text&gt;
&lt;rect x=&quot;235&quot; y=&quot;130&quot; width=&quot;170&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;160&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مفتاح البيانات مشفر&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ينحفظ مع الملف&lt;/text&gt;
&lt;line x1=&quot;450&quot; y1=&quot;49&quot; x2=&quot;407&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#envelope-arrow)&quot;/&gt;
&lt;line x1=&quot;235&quot; y1=&quot;49&quot; x2=&quot;192&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#envelope-arrow)&quot;/&gt;
&lt;line x1=&quot;320&quot; y1=&quot;84&quot; x2=&quot;320&quot; y2=&quot;128&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#envelope-arrow)&quot;/&gt;
&lt;line x1=&quot;235&quot; y1=&quot;165&quot; x2=&quot;105&quot; y2=&quot;86&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#envelope-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;envelope-caption&quot;&gt;مفتاح البيانات يشفر الملف، ونسخة مشفرة منه تنحفظ جنب الملف. وKMS بس يقدر يفتح هذي النسخة، فالملف ما له فايدة بدون صلاحية.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;فحتى اللي يسرق القرص ياخذ بيانات مشفرة وجنبها مفتاح مشفر. وعشان تفك التشفير، تحتاج صلاحية تطلب من KMS يفتح مفتاح البيانات، وهنا مكان تحكمك.&lt;/p&gt;
&lt;h3 id=&quot;أنواع-المفاتيح&quot; tabindex=&quot;-1&quot;&gt;أنواع المفاتيح &lt;a class=&quot;heading-anchor&quot; href=&quot;#أنواع-المفاتيح&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&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;strong&gt;AWS Owned&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS، وما تشوفه أبداً&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;td&gt;من الخدمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Managed&lt;/strong&gt; (مثل &lt;code&gt;aws/ebs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;AWS، وتقدر تشوفه وتدقق عليه&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;td&gt;سنوي وما يتغير&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Managed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت بالكامل&lt;/td&gt;
&lt;td&gt;دولار للمفتاح، مع استدعاءات API&lt;/td&gt;
&lt;td&gt;اختياري، سنوي افتراضياً، أو من 90 إلى 2,560 يوم&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وأغلب المفاتيح &lt;strong&gt;متماثلة (Symmetric)&lt;/strong&gt;، مفتاح واحد للتشفير وفكه وما يطلع من KMS. وفيه أزواج &lt;strong&gt;غير متماثلة (Asymmetric)&lt;/strong&gt;، يطلع منها المفتاح العام، للتوقيع أو لتشفير من أطراف خارج AWS.&lt;/p&gt;
&lt;p&gt;وحذف المفتاح ما له رجعة، لأنه يدمر كل شي مشفر به. فـ KMS يفرض فترة انتظار من 7 إلى 30 يوم، تقدر تلغي خلالها. وعشان توقف استخدام المفتاح بالأثناء، عطّله.&lt;/p&gt;
&lt;h3 id=&quot;سياسات-المفاتيح&quot; tabindex=&quot;-1&quot;&gt;سياسات المفاتيح &lt;a class=&quot;heading-anchor&quot; href=&quot;#سياسات-المفاتيح&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;كل مفتاح KMS له &lt;strong&gt;Key Policy&lt;/strong&gt;، وعلى عكس الموارد الثانية، IAM لحاله ما يكفي بدونها. والسياسة الافتراضية تخلي سياسات IAM في الحساب تعطي الوصول للمفتاح.&lt;/p&gt;
&lt;p&gt;وهذا مهم لما تنسخ بيانات مشفرة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;لمنطقة ثانية:&lt;/strong&gt; المفاتيح خاصة بالمنطقة، فنسخ اللقطة يعيد تشفيرها بمفتاح في منطقة الوجهة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;لحساب ثاني:&lt;/strong&gt; شارك اللقطة، واسمح لذاك الحساب في سياسة مفتاح &lt;strong&gt;Customer Managed&lt;/strong&gt;. مفاتيح AWS Managed، مثل &lt;code&gt;aws/ebs&lt;/code&gt;، ما تنشارك، فاللقطة المشفرة بها لازم تنسخها أول بمفتاحك.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;المفاتيح-متعددة-المناطق&quot; tabindex=&quot;-1&quot;&gt;المفاتيح متعددة المناطق &lt;a class=&quot;heading-anchor&quot; href=&quot;#المفاتيح-متعددة-المناطق&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Multi-Region Keys&lt;/strong&gt; تتشارك نفس مادة المفتاح ومعرفه بين المناطق، فاللي انشفر في منطقة ينفك في ثانية بدون إعادة تشفير. وهي مو لكل شي، لأن AWS توصي بمفاتيح المنطقة الواحدة افتراضياً. وتناسب حالات مثل تشفير حقل من جهة العميل في &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;Global Tables&lt;/a&gt; أو Aurora Global.&lt;/p&gt;
&lt;h3 id=&quot;cloudhsm-عتادك-الخاص&quot; tabindex=&quot;-1&quot;&gt;CloudHSM: عتادك الخاص &lt;a class=&quot;heading-anchor&quot; href=&quot;#cloudhsm-عتادك-الخاص&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;في KMS، AWS تدير العتاد اللي يحفظ مفاتيحك. ولو فيه تنظيم يفرض وحدة أمان عتادية مخصصة لك، &lt;strong&gt;AWS CloudHSM&lt;/strong&gt; يعطيك مجموعة HSM لك وحدك ومعتمدة بمعيار FIPS. وAWS تتكفل بالتجهيز والنسخ الاحتياطي، وأنت تتحكم في المفاتيح والمستخدمين بنفسك. فاختره بس لما تحتاجه، لأن مسؤوليتك أكبر من KMS.&lt;/p&gt;
&lt;h2 id=&quot;وين-تحفظ-كلمات-المرور&quot; tabindex=&quot;-1&quot;&gt;وين تحفظ كلمات المرور؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وين-تحفظ-كلمات-المرور&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;مو في الكود، ولا في Git. عندك خدمتين:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Parameter Store&lt;/th&gt;
&lt;th&gt;Secrets Manager&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;إعدادات وأسرار بسيطة&lt;/td&gt;
&lt;td&gt;أسرار لازم تتغير&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التشفير&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اختياري بـ KMS عبر &lt;code&gt;SecureString&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;دايماً بـ KMS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التدوير&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مو مبني فيه&lt;/td&gt;
&lt;td&gt;مبني فيه بدالة Lambda، ومتكامل مع RDS وAurora&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;نسخ في مناطق ثانية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;نعم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السعر&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard مجاني&lt;/td&gt;
&lt;td&gt;0.40 دولار للسر في الشهر، مع استدعاءات API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;parameter-store&quot; tabindex=&quot;-1&quot;&gt;Parameter Store &lt;a class=&quot;heading-anchor&quot; href=&quot;#parameter-store&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;أسماؤه تكوّن شجرة، مثل &lt;code&gt;/shop/prod/db-url&lt;/code&gt;، فالتطبيق يقدر يجيب مسار كامل، وIAM يقدر يسمح بـ &lt;code&gt;/shop/prod/*&lt;/code&gt; فقط.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Advanced&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;أقصى حجم&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 KB&lt;/td&gt;
&lt;td&gt;8 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;العدد في المنطقة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;سياسات مثل الانتهاء&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;نعم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السعر&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;td&gt;0.05 دولار للقيمة في الشهر&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;secrets-manager&quot; tabindex=&quot;-1&quot;&gt;Secrets Manager &lt;a class=&quot;heading-anchor&quot; href=&quot;#secrets-manager&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;الفكرة هنا التدوير: كلمة المرور تتغير بجدول تحدده، والدالة تحدثها في قاعدة البيانات كمان. وتطبيقك يطلب القيمة الحالية كل مرة، فما يحس. وشفنا في &lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;الجزء الثامن&lt;/a&gt; إن RDS يقدر يدير كلمة مروره هنا لك.&lt;/p&gt;
&lt;h2 id=&quot;acm-شهادات-بدون-وجع-راس&quot; tabindex=&quot;-1&quot;&gt;ACM: شهادات بدون وجع راس &lt;a class=&quot;heading-anchor&quot; href=&quot;#acm-شهادات-بدون-وجع-راس&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;AWS Certificate Manager&lt;/strong&gt; يصدر شهادات TLS عامة مجاناً لما تنستخدم مع خدمات مثل موزعات الحمل وCloudFront وAPI Gateway، ويجددها لحاله.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;التحقق:&lt;/strong&gt; أثبت ملكية النطاق عبر DNS، والأفضل مع &lt;a href=&quot;/posts/aws-11-dns-route53/&quot;&gt;Route 53&lt;/a&gt;، أو عبر الإيميل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الصلاحية:&lt;/strong&gt; الشهادات العامة تدوم الحين 198 يوم، حسب قواعد الصناعة الجديدة، والتجديد يصير تلقائياً قبل الانتهاء بحوالي 45 يوم. والفترة بتقصر أكثر في السنين الجاية، وهذا سبب زيادة تخليها للأتمتة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الشهادات المستوردة:&lt;/strong&gt; تقدر تستورد شهاداتك، بس ACM ما يجددها، فحط تنبيه على انتهائها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سيرفراتك:&lt;/strong&gt; شهادة ACM العادية ما تنثبت على سيرفرك. ولو تحتاج هذا، فيه &lt;strong&gt;شهادات قابلة للتصدير&lt;/strong&gt; برسوم.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;فخ المنطقة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;لازم الشهادة تكون في نفس منطقة اللي يستخدمها، مع استثناء لازم تتذكره: &lt;strong&gt;CloudFront&lt;/strong&gt; وAPI Gateway من نوع Edge-optimized يحتاجون الشهادة في &lt;strong&gt;&lt;code&gt;us-east-1&lt;/code&gt;&lt;/strong&gt;، وين ما كان تطبيقك.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;صد-الهجمات&quot; tabindex=&quot;-1&quot;&gt;صد الهجمات &lt;a class=&quot;heading-anchor&quot; href=&quot;#صد-الهجمات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;هذا كيف تقعد طبقات الحماية مع بعض في تصميم معتاد:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 150&quot; role=&quot;img&quot; aria-labelledby=&quot;edge-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;edge-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;510&quot; y=&quot;40&quot; width=&quot;110&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الزوار&lt;/text&gt;
&lt;rect x=&quot;340&quot; y=&quot;26&quot; width=&quot;130&quot; height=&quot;98&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;405&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;CloudFront&lt;/text&gt;
&lt;text x=&quot;405&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;WAF وShield&lt;/text&gt;
&lt;rect x=&quot;170&quot; y=&quot;40&quot; width=&quot;130&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;235&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;ALB&lt;/text&gt;
&lt;text x=&quot;235&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;من CloudFront فقط&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;40&quot; width=&quot;110&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;السيرفرات&lt;/text&gt;
&lt;text x=&quot;75&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;خاصة&lt;/text&gt;
&lt;line x1=&quot;510&quot; y1=&quot;75&quot; x2=&quot;472&quot; y2=&quot;75&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#edge-arrow)&quot;/&gt;
&lt;line x1=&quot;340&quot; y1=&quot;75&quot; x2=&quot;302&quot; y2=&quot;75&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#edge-arrow)&quot;/&gt;
&lt;line x1=&quot;170&quot; y1=&quot;75&quot; x2=&quot;132&quot; y2=&quot;75&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#edge-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;edge-caption&quot;&gt;الهجمات تنمتص عند الحافة، وSecurity Group لموزع الحمل يقبل من CloudFront فقط، فما أحد يقدر يلتف عليه.&lt;/figcaption&gt;
&lt;/figure&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;strong&gt;WAF&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;التطبيق (7)&lt;/td&gt;
&lt;td&gt;قواعد على الطلبات: SQL Injection وXSS والدولة وقوائم IP وحدود المعدل&lt;/td&gt;
&lt;td&gt;لكل قاعدة وطلب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shield Standard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الشبكة (3 و4)&lt;/td&gt;
&lt;td&gt;حماية من هجمات DDoS المعروفة&lt;/td&gt;
&lt;td&gt;مجاني وتلقائي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shield Advanced&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حتى 7&lt;/td&gt;
&lt;td&gt;فريق استجابة متخصص، وحماية التكلفة وقت الهجوم&lt;/td&gt;
&lt;td&gt;اشتراك شهري وهو غالي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Firewall Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الإدارة&lt;/td&gt;
&lt;td&gt;يطبق قواعد WAF وShield وSecurity Groups وغيرها على كل حسابات منظمتك&lt;/td&gt;
&lt;td&gt;لكل سياسة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وWAF ينربط بـ &lt;strong&gt;CloudFront وALB وAPI Gateway وAppSync&lt;/strong&gt;، بس مو بموزع NLB. ولو تحتاج IP ثابت مع WAF، حط &lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;Global Accelerator&lt;/a&gt; قدام موزع الحمل. و&lt;strong&gt;القواعد حسب المعدل&lt;/strong&gt; بسيطة وفعالة: احجب أي عنوان يرسل أكثر من عدد محدد من الطلبات.&lt;/p&gt;
&lt;h3 id=&quot;تحمل-ddos&quot; tabindex=&quot;-1&quot;&gt;تحمل DDoS &lt;a class=&quot;heading-anchor&quot; href=&quot;#تحمل-ddos&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;الأجزاء السابقة&lt;/a&gt; أعطتك أغلب المطلوب:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CloudFront وRoute 53&lt;/strong&gt; يمتصون الهجمات عند الحافة، بعيد عن سيرفراتك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto Scaling&lt;/strong&gt; يكبر لو عدى شي، بس انتبه للتكلفة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Group&lt;/strong&gt; يسمح لموزع الحمل من CloudFront فقط، فما أحد يتخطاه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WAF&lt;/strong&gt; بحدود المعدل وBot Control للهجمات اللي تشبه الطلبات العادية.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;حجب-عنوان-واحد-وين&quot; tabindex=&quot;-1&quot;&gt;حجب عنوان واحد: وين؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#حجب-عنوان-واحد-وين&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EC2 بـ IP عام&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Network ACL&lt;/td&gt;
&lt;td&gt;Security Groups تسمح فقط، وما تقدر تمنع&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;موزع حمل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Network ACL على الـ Subnet حقه، أو WAF&lt;/td&gt;
&lt;td&gt;السيرفر يشوف موزع الحمل فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CloudFront قدامه&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WAF على CloudFront، أو القيود الجغرافية&lt;/td&gt;
&lt;td&gt;Network ACL ما يفيد، لأن الطلبات توصل من عناوين CloudFront&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وللحماية عند حدود الـ VPC، فيه &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;Network Firewall&lt;/a&gt; اللي غطيناه في الجزء الرابع عشر.&lt;/p&gt;
&lt;h2 id=&quot;كشف-التهديدات&quot; tabindex=&quot;-1&quot;&gt;كشف التهديدات &lt;a class=&quot;heading-anchor&quot; href=&quot;#كشف-التهديدات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;المنع مو كل شي. تحتاج كمان شي يقول لك لما يكون فيه مشكلة:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GuardDuty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;فيه شي مشبوه يصير في حسابي؟&lt;/td&gt;
&lt;td&gt;CloudTrail وVPC Flow Logs وسجلات DNS، بدون Agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inspector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اللي أشغله فيه ثغرات معروفة؟&lt;/td&gt;
&lt;td&gt;سيرفرات EC2 وصور ECR ودوال Lambda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Macie&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;فيه بيانات حساسة في مكان ما لازم تكون فيه؟&lt;/td&gt;
&lt;td&gt;S3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security Hub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كيف أماني بشكل عام؟&lt;/td&gt;
&lt;td&gt;يجمع نتائج الباقين ويرتبها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Detective&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ليه صارت هذي النتيجة؟&lt;/td&gt;
&lt;td&gt;يجمع السجلات لحاله ويربطها، عشان تلقى السبب الجذري&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;GuardDuty يكشف أشياء مثل تعدين العملات، أو بيانات دخول مستخدمة من مكان غريب. وأرسل نتائجه عبر EventBridge إلى SNS أو Lambda عشان تتصرف. وتشغيله بضغطة وحدة، فشغله من البداية في أي حساب جاد، وله فترة تجربة مجانية.&lt;/p&gt;
&lt;h3 id=&quot;مستندات-الامتثال-aws-artifact&quot; tabindex=&quot;-1&quot;&gt;مستندات الامتثال: AWS Artifact &lt;a class=&quot;heading-anchor&quot; href=&quot;#مستندات-الامتثال-aws-artifact&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;مدقق يطلب إثبات إن AWS نفسها ملتزمة بمعايير ISO أو PCI؟ &lt;strong&gt;AWS Artifact&lt;/strong&gt; يعطيك هذي التقارير وقت ما تبي ومجاناً، ومنه كمان تراجع اتفاقياتك مع AWS وتقبلها. وهو يغطي جانب AWS من &lt;a href=&quot;/posts/aws-01-global-infrastructure/&quot;&gt;المسؤولية المشتركة&lt;/a&gt;، أما جانبك فإثباته عليك.&lt;/p&gt;
&lt;h2 id=&quot;عملي-مفتاح-وقيمة-وسر&quot; tabindex=&quot;-1&quot;&gt;عملي: مفتاح وقيمة وسر &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-مفتاح-وقيمة-وسر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;من CloudShell، أنشئ مفتاح باسم سهل، وشفر نص:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;KEY_ID&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws kms create-key &lt;span class=&quot;token parameter variable&quot;&gt;--description&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Series demo key&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; KeyMetadata.KeyId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws kms create-alias --alias-name alias/series-demo --target-key-id &lt;span class=&quot;token variable&quot;&gt;$KEY_ID&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;CIPHER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws kms encrypt --key-id alias/series-demo &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--plaintext&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;my secret note&quot;&lt;/span&gt; --cli-binary-format raw-in-base64-out &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; CiphertextBlob &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$CIPHER&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف نص ما ينقرأ. فك تشفيره. وللمفتاح المتماثل، ما يلزم تحدد أي مفتاح:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws kms decrypt --ciphertext-blob &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$CIPHER&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Plaintext &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; base64 -d&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين شوف وين التحكم الحقيقي. عطّل المفتاح، وجرب مرة ثانية:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws kms disable-key --key-id &lt;span class=&quot;token variable&quot;&gt;$KEY_ID&lt;/span&gt;

aws kms decrypt --ciphertext-blob &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$CIPHER&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Plaintext &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text

aws kms enable-key --key-id &lt;span class=&quot;token variable&quot;&gt;$KEY_ID&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بيجيك &lt;code&gt;DisabledException&lt;/code&gt;. البيانات ما تغيرت، بس ما لها فايدة بدون المفتاح. الحين احفظ كلمة مرور في Parameter Store، مشفرة بنفس المفتاح، واقرأها مع فك التشفير وبدونه:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ssm put-parameter &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; /series/prod/db-password &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--type&lt;/span&gt; SecureString --key-id alias/series-demo &lt;span class=&quot;token parameter variable&quot;&gt;--value&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;S3cret-pass&quot;&lt;/span&gt;

aws ssm get-parameter &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; /series/prod/db-password &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Parameter.Value &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text

aws ssm get-parameter &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; /series/prod/db-password --with-decryption &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Parameter.Value &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text

aws ssm get-parameters-by-path &lt;span class=&quot;token parameter variable&quot;&gt;--path&lt;/span&gt; /series/prod &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Parameters[].Name&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وسر في Secrets Manager، بالطريقة اللي يقرأه فيها تطبيقك:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws secretsmanager create-secret &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; series/api-key &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --secret-string &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;key&quot;:&quot;abc123&quot;}&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Name &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text

aws secretsmanager get-secret-value --secret-id series/api-key &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; SecretString &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وأخيراً، وش خلّى كل هذا وراه؟ &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;CloudTrail&lt;/a&gt; سجل مين استخدم المفتاح، بس ممكن ياخذ كم دقيقة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudtrail lookup-events &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --lookup-attributes &lt;span class=&quot;token assign-left variable&quot;&gt;AttributeKey&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;EventName,AttributeValue&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Decrypt &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --max-results &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Events[].[EventName,Username,EventTime]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;المفتاح يكلف دولار في الشهر محسوب بالساعة، ويوقف الحساب لما تجدوله للحذف، فهذا يكلف أقل من سنت أو سنتين:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws secretsmanager delete-secret --secret-id series/api-key &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --force-delete-without-recovery
aws ssm delete-parameter &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; /series/prod/db-password
aws kms delete-alias --alias-name alias/series-demo
aws kms schedule-key-deletion --key-id &lt;span class=&quot;token variable&quot;&gt;$KEY_ID&lt;/span&gt; --pending-window-in-days &lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;KMS&lt;/strong&gt; يحفظ مفاتيحك، ويستخدم التشفير بالمظروف، ويسجل كل استخدام.&lt;/li&gt;
&lt;li&gt;المفاتيح &lt;strong&gt;خاصة بالمنطقة&lt;/strong&gt;، ومفاتيح AWS Managed ما تنشارك بين الحسابات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parameter Store&lt;/strong&gt; للإعدادات، و&lt;strong&gt;Secrets Manager&lt;/strong&gt; للي لازم يتغير.&lt;/li&gt;
&lt;li&gt;شهادات &lt;strong&gt;ACM&lt;/strong&gt; مجانية وتتجدد لحالها، وCloudFront يحتاجها في &lt;code&gt;us-east-1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WAF&lt;/strong&gt; و&lt;strong&gt;Shield&lt;/strong&gt; يصدون الهجمات، و&lt;strong&gt;GuardDuty&lt;/strong&gt; و&lt;strong&gt;Inspector&lt;/strong&gt; و&lt;strong&gt;Macie&lt;/strong&gt; يكشفون اللي يعدي.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 7&lt;/p&gt;
&lt;p&gt;كلمة مرور قاعدة بيانات تطبيق لازم تتغير كل 30 يوم، في القاعدة وفي المكان اللي يقرأ منه التطبيق، بدون إصدار كود كل مرة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Secrets Manager، مع تفعيل التدوير&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Parameter Store، بنوع &lt;code&gt;SecureString&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تدوير مفاتيح KMS التلقائي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;متغير بيئة على السيرفر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Secrets Manager يغير كلمة المرور بجدول ويحدثها في القاعدة كمان. والتطبيق يطلب القيمة الحالية كل مرة، فما يحس.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يخزن القيمة مشفرة، بس ما فيه تدوير مبني.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يدوّر مفتاح تشفير، مو كلمة مرور قاعدة بيانات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; لازم أحد يغيرها يدوي على كل سيرفر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#secrets-manager&quot;&gt;Secrets Manager&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html&quot;&gt;Rotate AWS Secrets Manager secrets&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 7&lt;/p&gt;
&lt;p&gt;فريق يبي يشارك لقطة EBS مشفرة مع حساب ثاني، بس اللقطة مشفرة بمفتاح &lt;code&gt;aws/ebs&lt;/code&gt;. وش يسوي؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إضافة الحساب الثاني لسياسة مفتاح &lt;code&gt;aws/ebs&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;مشاركة اللقطة للعامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;نسخها بمفتاح Customer Managed، ثم مشاركتها والسماح للحساب في سياسة هذا المفتاح&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إيقاف التشفير على اللقطة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;مفاتيح AWS Managed ما تنشارك، فلازم ينعاد تشفير اللقطة بمفتاحك أول. وبعدها الحساب الثاني يحتاج وصول للقطة وللمفتاح.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; مفاتيح AWS Managed ما تنشارك مع حسابات ثانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; اللقطات غير المشفرة بس هي اللي تنشارك للعامة، وهذا بيكشف البيانات لأي أحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; اللقطة المشفرة ما تتحول ببساطة إلى غير مشفرة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B3%D9%8A%D8%A7%D8%B3%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD&quot;&gt;سياسات المفاتيح&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html&quot;&gt;Share an Amazon EBS snapshot with other AWS accounts&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 7&lt;/p&gt;
&lt;p&gt;موقع يشتغل على ALB في فرانكفورت وقدامه CloudFront. والفريق طلب شهادة ACM في فرانكفورت، بس ما يقدر يختارها في CloudFront. وش يسوي؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تصدير الشهادة، ورفعها إلى CloudFront&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;نقل الـ ALB إلى &lt;code&gt;us-east-1&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;انتظار التجديد الجاي للشهادة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;طلب شهادة في &lt;code&gt;us-east-1&lt;/code&gt; لـ CloudFront&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudFront يحتاج شهادته في &lt;code&gt;us-east-1&lt;/code&gt;، وين ما كان تطبيقك. والـ ALB يستمر يستخدم اللي في منطقته.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; شهادة ACM العادية ما تتصدر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; التطبيق يقدر يبقى مكانه، وشهادة CloudFront بس هي اللي لازم تكون هناك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; التجديد ما يغير منطقة الشهادة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#acm-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%A8%D8%AF%D9%88%D9%86-%D9%88%D8%AC%D8%B9-%D8%B1%D8%A7%D8%B3&quot;&gt;ACM: شهادات بدون وجع راس&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-requirements.html&quot;&gt;Requirements for using SSL/TLS certificates with CloudFront&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 7&lt;/p&gt;
&lt;p&gt;موقع خلف CloudFront، وعنوان واحد يغرقه بالطلبات. وين يحجب الفريق هذا العنوان؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Network ACL على شبكة موزع الحمل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;قاعدة WAF على توزيعة CloudFront&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;قاعدة منع في مجموعة الأمان&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إعدادات Shield Standard&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudFront أول من يشوف عنوان الزائر، فالحجب مكانه هناك. وIP Set أو قاعدة حسب المعدل في WAF تسوي المطلوب.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الطلبات توصل الشبكة من عناوين CloudFront، فعنوان المهاجم ما يظهر هناك أبداً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; مجموعة الأمان تسمح فقط، وما تقدر تمنع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذي حماية تلقائية من هجمات الشبكة الشائعة، بدون قوائم عناوين خاصة فيك.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AD%D8%AC%D8%A8-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%D9%88%D8%A7%D8%AD%D8%AF-%D9%88%D9%8A%D9%86&quot;&gt;حجب عنوان واحد: وين؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/waf/latest/developerguide/cloudfront-features.html&quot;&gt;Using AWS WAF with Amazon CloudFront&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 7&lt;/p&gt;
&lt;p&gt;شركة تبي تلقى الثغرات البرمجية المعروفة في سيرفرات EC2 وصور ECR حقتها، وتلقى البيانات الشخصية الموجودة في حاويات S3. أي &lt;strong&gt;خدمتين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon Inspector&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon GuardDuty&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS Shield&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;AWS WAF&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Amazon Macie&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Inspector يفحص اللي تشغله عن الثغرات المعروفة، وMacie يلقى البيانات الحساسة في S3.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يكشف النشاط المشبوه في الحساب، مثل استخدام صلاحيات مسروقة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يحمي من هجمات DDoS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يفلتر طلبات الويب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%83%D8%B4%D9%81-%D8%A7%D9%84%D8%AA%D9%87%D8%AF%D9%8A%D8%AF%D8%A7%D8%AA&quot;&gt;كشف التهديدات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html&quot;&gt;What is Amazon Inspector?&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/macie/latest/user/what-is-macie.html&quot;&gt;What is Amazon Macie?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 7&lt;/p&gt;
&lt;p&gt;جهة تنظيمية تطلب إن مفاتيح تشفير بنك تكون في وحدة أمان عتادية له وحده، معتمدة بمعيار FIPS، ويتحكم فيها البنك وحده. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;KMS بمفتاح AWS Managed&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;KMS بمفتاح Customer Managed&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS CloudHSM&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Secrets Manager&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudHSM يعطيك مجموعة HSM مخصصة لك، وأنت تتحكم في المفاتيح والمستخدمين بنفسك.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; AWS تدير هذا المفتاح والعتاد، وما تقدر تغير صلاحياته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; أنت تتحكم في سياسة هذا المفتاح، بس AWS تدير العتاد اللي وراه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحفظ أسرار مثل كلمات المرور، وهو مو وحدة عتادية.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cloudhsm-%D8%B9%D8%AA%D8%A7%D8%AF%D9%83-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5&quot;&gt;CloudHSM: عتادك الخاص&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/cloudhsm/latest/userguide/introduction.html&quot;&gt;What is AWS CloudHSM?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 7 من 7&lt;/p&gt;
&lt;p&gt;مدقق يطلب من شركة تقرير امتثال PCI الخاص بـ AWS. وفريق الأمان يحتاج يحقق في السبب الجذري لنتيجة من GuardDuty. أي &lt;strong&gt;خدمتين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;AWS Artifact&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon Macie&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS Config&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Detective&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Amazon Inspector&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Artifact يعطيك تقارير امتثال AWS وقت ما تبي، وDetective يربط السجلات عشان تلقى السبب الجذري للنتيجة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يلقى البيانات الحساسة في S3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يسجل إعدادات مواردك ويحكم عليها، مو امتثال AWS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; هذا يدور الثغرات المعروفة في اللي تشغله.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%85%D8%AA%D8%AB%D8%A7%D9%84-aws-artifact&quot;&gt;مستندات الامتثال: AWS Artifact&lt;/a&gt; و&lt;a href=&quot;#%D9%83%D8%B4%D9%81-%D8%A7%D9%84%D8%AA%D9%87%D8%AF%D9%8A%D8%AF%D8%A7%D8%AA&quot;&gt;كشف التهديدات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/artifact/latest/ug/what-is-aws-artifact.html&quot;&gt;What is AWS Artifact?&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/detective/latest/userguide/what-is-detective.html&quot;&gt;What is Amazon Detective?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;حميت نفسك من الناس. طيب لو طاحت منطقة كاملة، أو لازم تنقل مركز بيانات إلى AWS؟ في &lt;a href=&quot;/posts/aws-28-disaster-recovery-migration/&quot;&gt;&lt;strong&gt;الجزء الثامن والعشرين&lt;/strong&gt;&lt;/a&gt; نغطي التعافي من الكوارث والترحيل.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>الهوية المتقدمة: Organizations وIdentity Center</title>
    <link href="https://blog.sultanops.com/posts/aws-26-organizations-identity-center/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-26-organizations-identity-center/</id>
    <summary>إدارة عدة حسابات بـ Organizations وSCP، والشروط في سياسات IAM، والأدوار مقابل سياسات الموارد، وحدود الصلاحيات وكيف تقرر AWS، والدخول الموحد بـ Identity Center، مع تجربة عملية تحاكي فيها السياسات.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;الجزء الثاني&lt;/a&gt; كان عندنا حساب واحد وكم مستخدم. الحين تخيل شركة فيها خمسين حساب وخمسمية موظف: إنشاء مستخدم في كل حساب لكل شخص بيكون كابوس، وغلطة وحدة ممكن توصل لكل شي.&lt;/p&gt;
&lt;p&gt;هذا الجزء يغطي أدوات هذا الحجم، ويكمل &lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;IAM&lt;/a&gt; باللي تركناه في البداية.&lt;/p&gt;
&lt;h2 id=&quot;aws-organizations&quot; tabindex=&quot;-1&quot;&gt;AWS Organizations &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-organizations&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Organizations&lt;/strong&gt; يجمع عدة حسابات تحت &lt;strong&gt;حساب إدارة&lt;/strong&gt; واحد، مرتبة في &lt;strong&gt;وحدات تنظيمية (OUs)&lt;/strong&gt;.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 246&quot; role=&quot;img&quot; aria-labelledby=&quot;org-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;org-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;250&quot; y=&quot;14&quot; width=&quot;140&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;41&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الجذر&lt;/text&gt;
&lt;rect x=&quot;440&quot; y=&quot;92&quot; width=&quot;180&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;530&quot; y=&quot;119&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;وحدة الأمان&lt;/text&gt;
&lt;rect x=&quot;230&quot; y=&quot;92&quot; width=&quot;180&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;119&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;وحدة الإنتاج&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;92&quot; width=&quot;180&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;110&quot; y=&quot;119&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;وحدة التطوير&lt;/text&gt;
&lt;rect x=&quot;535&quot; y=&quot;172&quot; width=&quot;85&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;577.5&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;السجلات&lt;/text&gt;
&lt;rect x=&quot;440&quot; y=&quot;172&quot; width=&quot;85&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;482.5&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;التدقيق&lt;/text&gt;
&lt;rect x=&quot;325&quot; y=&quot;172&quot; width=&quot;85&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;367.5&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;المتجر&lt;/text&gt;
&lt;rect x=&quot;230&quot; y=&quot;172&quot; width=&quot;85&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;272.5&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;API&lt;/text&gt;
&lt;rect x=&quot;115&quot; y=&quot;172&quot; width=&quot;85&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;157.5&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;فريق أ&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;172&quot; width=&quot;85&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;62.5&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;فريق ب&lt;/text&gt;
&lt;line x1=&quot;320&quot; y1=&quot;58&quot; x2=&quot;530&quot; y2=&quot;90&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;320&quot; y1=&quot;58&quot; x2=&quot;320&quot; y2=&quot;90&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;320&quot; y1=&quot;58&quot; x2=&quot;110&quot; y2=&quot;90&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;530&quot; y1=&quot;136&quot; x2=&quot;578&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;530&quot; y1=&quot;136&quot; x2=&quot;483&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;320&quot; y1=&quot;136&quot; x2=&quot;368&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;320&quot; y1=&quot;136&quot; x2=&quot;273&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;110&quot; y1=&quot;136&quot; x2=&quot;158&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;line x1=&quot;110&quot; y1=&quot;136&quot; x2=&quot;63&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#org-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;org-caption&quot;&gt;الحسابات تقعد في وحدات تنظيمية تحت جذر واحد، والسياسة المربوطة بوحدة تنطبق على كل الحسابات تحتها.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ليه حسابات كثيرة، مو حساب واحد كبير؟&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;العزل:&lt;/strong&gt; غلطة أو اختراق في حساب التطوير ما توصل للإنتاج.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تكاليف واضحة:&lt;/strong&gt; كل حساب يبين فاتورة فريقه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الحدود:&lt;/strong&gt; كل حساب له حصص خدماته.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ووش تكسب من Organizations؟&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;فاتورة موحدة:&lt;/strong&gt; فاتورة وحدة، والاستخدام المجمع يوصل لخصومات الكمية أسرع. وSavings Plans وReserved Instances ممكن تتشارك بين الحسابات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إدارة مركزية:&lt;/strong&gt; إنشاء حسابات عبر API، و&lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;CloudTrail Trail&lt;/a&gt; واحد للكل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;السياسات:&lt;/strong&gt; قواعد تنطبق على مجموعات كاملة من الحسابات.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;سياسات-المنظمة&quot; tabindex=&quot;-1&quot;&gt;سياسات المنظمة &lt;a class=&quot;heading-anchor&quot; href=&quot;#سياسات-المنظمة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;SCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحدد أقصى ما يقدر يسويه المستخدمين والأدوار في الحساب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحدد أقصى ما ينعمل على موارد الحساب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Declarative Policies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تثبت إعدادات أساسية لخدمة عبر الحسابات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tag Policies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;توحد الوسوم، مثل فرض كتابة معينة لـ &lt;code&gt;CostCenter&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;service-control-policies-scp&quot; tabindex=&quot;-1&quot;&gt;Service Control Policies (SCP) &lt;a class=&quot;heading-anchor&quot; href=&quot;#service-control-policies-scp&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;النقطة الأهم: &lt;strong&gt;SCP ما تعطي أي شي&lt;/strong&gt;. تحدد سقف بس، وكل مستخدم لسا يحتاج صلاحية IAM. هي سقف على المسموح:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;لما تنربط بـ OU تنطبق على كل اللي تحتها، ولازم كل مستوى يسمح بالإجراء.&lt;/li&gt;
&lt;li&gt;ما تأثر على &lt;strong&gt;حساب الإدارة&lt;/strong&gt;، فلا تشغّل شغلك فيه.&lt;/li&gt;
&lt;li&gt;تنطبق على الكل في الحساب العضو، ومعهم Root حق الحساب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;مثلاً هذي الـ SCP تمنع الشغل خارج منطقتين، إلا الخدمات العالمية:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Sid&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;OnlyTwoRegions&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Deny&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;NotAction&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;iam:*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;organizations:*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;route53:*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;cloudfront:*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;support:*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Condition&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;StringNotEquals&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;aws:RequestedRegion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;me-central-1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;eu-west-1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الشروط-في-سياسات-iam&quot; tabindex=&quot;-1&quot;&gt;الشروط في سياسات IAM &lt;a class=&quot;heading-anchor&quot; href=&quot;#الشروط-في-سياسات-iam&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;عنصر &lt;strong&gt;Condition&lt;/strong&gt; في السياسة يضيق متى تنطبق الصلاحية. وهذي أشهرها:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;code&gt;aws:SourceIp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;من شبكة المكتب فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;aws:RequestedRegion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;في مناطق محددة فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;aws:MultiFactorAuthPresent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;فقط لو سجل الدخول بـ MFA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;aws:ResourceTag&lt;/code&gt; و&lt;code&gt;aws:PrincipalTag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;لازم وسم المستخدم يطابق وسم المورد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;aws:PrincipalOrgID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;من حسابات منظمتك فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;والأخير هدية للحاويات المشتركة. بدل ما تعدد خمسين حساب في سياسة الحاوية، سطر واحد يسمح لمنظمتك كلها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Principal&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;s3:GetObject&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:s3:::shared-files/*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Condition&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;StringEquals&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;aws:PrincipalOrgID&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;o-a1b2c3d4e5&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;غلطة-s3-الكلاسيكية&quot; tabindex=&quot;-1&quot;&gt;غلطة S3 الكلاسيكية &lt;a class=&quot;heading-anchor&quot; href=&quot;#غلطة-s3-الكلاسيكية&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;إجراءات S3 تشتغل على مستويين، وكل واحد يحتاج ARN خاص فيه:&lt;/p&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;ARN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;s3:ListBucket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;الحاوية&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arn:aws:s3:::my-bucket&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;s3:GetObject&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;الكائن&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arn:aws:s3:::my-bucket/*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;حط الغلط ويجيك &lt;code&gt;AccessDenied&lt;/code&gt;، مهما بدت السياسة صحيحة. وبنجرب هذا في التجربة العملية.&lt;/p&gt;
&lt;h2 id=&quot;دور-أو-سياسة-مورد&quot; tabindex=&quot;-1&quot;&gt;دور أو سياسة مورد؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#دور-أو-سياسة-مورد&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;عشان تخلي مستخدم في حساب A يوصل لشي في حساب B، عندك طريقين:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كيف&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;المستخدم يصير الدور في B&lt;/td&gt;
&lt;td&gt;المورد في B يسمح للمستخدم مباشرة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;صلاحياته الأصلية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يتركها طول ما هو في الدور&lt;/td&gt;
&lt;td&gt;يحتفظ فيها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الشغل بالكامل داخل الحساب الثاني&lt;/td&gt;
&lt;td&gt;القراءة من جدول في A والكتابة في حاوية في B بنفس الوقت&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;متاح في&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كل الخدمات&lt;/td&gt;
&lt;td&gt;اللي تدعمها فقط، مثل S3 وSNS وSQS وLambda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ووراء كل دور تفترضه خدمة &lt;strong&gt;AWS STS&lt;/strong&gt; (Security Token Service). هي اللي تعطي الصلاحيات المؤقتة، وتنتهي لحالها. وبهذي الطريقة يشتغل الوصول بين الحسابات بدون مشاركة مفاتيح طويلة المدى: مستخدم أو خدمة تنادي &lt;code&gt;AssumeRole&lt;/code&gt;، وSTS تفحص سياسة الثقة في الدور، وترجع مفاتيح تشتغل فترة محدودة.&lt;/p&gt;
&lt;h2 id=&quot;حدود-الصلاحيات-permissions-boundaries&quot; tabindex=&quot;-1&quot;&gt;حدود الصلاحيات (Permissions Boundaries) &lt;a class=&quot;heading-anchor&quot; href=&quot;#حدود-الصلاحيات-permissions-boundaries&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تبي قادة الفرق ينشئون أدوار لخدماتهم، بدون ما يقدرون يعطون أحد أكثر مما لازم. &lt;strong&gt;Permissions Boundary&lt;/strong&gt; يحدد الحد الأقصى لمستخدم أو دور معين، ومثل SCP ما يعطي شي.&lt;/p&gt;
&lt;p&gt;والصلاحية الفعلية هي المسموح في سياسة الهوية &lt;strong&gt;و&lt;/strong&gt;الحد &lt;strong&gt;و&lt;/strong&gt;SCP مع بعض. وهي طريقة ممتازة للتفويض بأمان.&lt;/p&gt;
&lt;h3 id=&quot;كيف-تقرر-aws&quot; tabindex=&quot;-1&quot;&gt;كيف تقرر AWS؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كيف-تقرر-aws&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;كل طلب يمر بهذا التفكير. وهذي نسخة مبسطة:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 344&quot; role=&quot;img&quot; aria-labelledby=&quot;evalflow-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;evalflow-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;220&quot; y=&quot;14&quot; width=&quot;400&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;43&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;فيه منع صريح في أي مكان؟&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;82&quot; width=&quot;400&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;111&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;SCP وRCP تسمح به؟&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;150&quot; width=&quot;400&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;179&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;سياسة هوية أو مورد تسمح به؟&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;218&quot; width=&quot;400&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;247&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;حد الصلاحيات يسمح به؟&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;286&quot; width=&quot;400&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;313&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مسموح&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;140&quot; height=&quot;252&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-danger)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;145&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مرفوض&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;38&quot; x2=&quot;162&quot; y2=&quot;38&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;line x1=&quot;220&quot; y1=&quot;106&quot; x2=&quot;162&quot; y2=&quot;106&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;line x1=&quot;220&quot; y1=&quot;174&quot; x2=&quot;162&quot; y2=&quot;174&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;line x1=&quot;220&quot; y1=&quot;242&quot; x2=&quot;162&quot; y2=&quot;242&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;30&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;text x=&quot;191&quot; y=&quot;98&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;text x=&quot;191&quot; y=&quot;166&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;text x=&quot;191&quot; y=&quot;234&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;62&quot; x2=&quot;420&quot; y2=&quot;80&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;line x1=&quot;420&quot; y1=&quot;130&quot; x2=&quot;420&quot; y2=&quot;148&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;line x1=&quot;420&quot; y1=&quot;198&quot; x2=&quot;420&quot; y2=&quot;216&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;line x1=&quot;420&quot; y1=&quot;266&quot; x2=&quot;420&quot; y2=&quot;284&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#evalflow-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;evalflow-caption&quot;&gt;صورة مبسطة لقرار AWS: أي منع صريح ينهي الموضوع، وكل طبقة تنطبق لازم تسمح بالإجراء.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;تذكر ثلاث قواعد: &lt;strong&gt;المنع الصريح يكسب دايماً&lt;/strong&gt;، و&lt;strong&gt;أي شي غير مسموح ممنوع&lt;/strong&gt;، وداخل الحساب الواحد، سياسة المورد تقدر تعطي الوصول لحالها في حالات كثيرة.&lt;/p&gt;
&lt;h2 id=&quot;iam-identity-center-دخول-واحد&quot; tabindex=&quot;-1&quot;&gt;IAM Identity Center: دخول واحد &lt;a class=&quot;heading-anchor&quot; href=&quot;#iam-identity-center-دخول-واحد&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بدل مستخدم في كل حساب، &lt;strong&gt;IAM Identity Center&lt;/strong&gt; يعطي كل موظف دخول واحد وبوابة فيها الحسابات والأدوار المتاحة له، وياخذ بيانات دخول مؤقتة بدون مفاتيح دائمة.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;مصدر الهوية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دليله الخاص، أو Active Directory، أو مزود خارجي مثل Okta أو Microsoft Entra ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Sets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجموعة سياسات تصير دور في كل حساب تربطها فيه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الربط&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;quot;مجموعة المطورين تاخذ Admin على حساب التطوير، وReadOnly على الإنتاج&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التطبيقات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دخول موحد لتطبيقات SAML كمان&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وللـ CLI، الأمر &lt;code&gt;aws configure sso&lt;/code&gt; يسجل دخولك عبر المتصفح ويعطيك بيانات مؤقتة. وهذي الطريقة الموصى فيها للناس عشان يشتغلون مع AWS هالأيام، بدل مستخدمي IAM بمفاتيح طويلة الأمد.&lt;/p&gt;
&lt;h3 id=&quot;الدخول-من-هوية-خارجية-federation&quot; tabindex=&quot;-1&quot;&gt;الدخول من هوية خارجية (Federation) &lt;a class=&quot;heading-anchor&quot; href=&quot;#الدخول-من-هوية-خارجية-federation&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Federation&lt;/strong&gt; يعني أشخاص أو أنظمة يدخلون بهوية موجودة خارج AWS وياخذون صلاحيات مؤقتة، بدون إنشاء مستخدم IAM. واختيارك يعتمد على مين يدخل:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;موظفين على حسابات كثيرة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identity Center زي ما شرحنا، وهذي توصية AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;حساب واحد، أو أنظمة مثل GitHub Actions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identity Provider في IAM عبر SAML 2.0 أو OIDC، مع دور يفترضونه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مستخدمي تطبيقك&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;Identity Pools في Cognito&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;active-directory-على-aws&quot; tabindex=&quot;-1&quot;&gt;Active Directory على AWS &lt;a class=&quot;heading-anchor&quot; href=&quot;#active-directory-على-aws&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;شركات كثيرة تحفظ مستخدميها في &lt;strong&gt;Microsoft Active Directory&lt;/strong&gt;. و&lt;strong&gt;AWS Directory Service&lt;/strong&gt; يربطه بـ AWS:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed Microsoft AD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AD حقيقي مُدار في AWS، ويقدر يثق في حقك&lt;/td&gt;
&lt;td&gt;تطبيقات تعتمد على AD وتشتغل على AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AD Connector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وسيط يمرر الطلبات لـ AD حقك وما يخزن شي&lt;/td&gt;
&lt;td&gt;إبقاء المستخدمين في AD حقك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Simple AD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دليل صغير مبني على Samba&lt;/td&gt;
&lt;td&gt;مقفل على العملاء الجدد منذ يوليو 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;aws-control-tower&quot; tabindex=&quot;-1&quot;&gt;AWS Control Tower &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-control-tower&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تجهيز كل هذا بيدك ياخذ أسابيع. &lt;strong&gt;Control Tower&lt;/strong&gt; يبني &lt;strong&gt;Landing Zone&lt;/strong&gt; بأفضل الممارسات فوق Organizations، ومعها حسابات السجلات والتدقيق، ويضيف:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Account Factory:&lt;/strong&gt; إنشاء حسابات جديدة بإعدادات جاهزة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controls:&lt;/strong&gt; وقائية عبر SCP، وكشفية عبر &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;Config&lt;/a&gt;، واستباقية تفحص الموارد قبل إنشائها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;لوحة:&lt;/strong&gt; تبين الملتزم من غيره بنظرة وحدة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;لو تبدأ بيئة حسابات متعددة من الصفر، ابدأ من هنا.&lt;/p&gt;
&lt;h2 id=&quot;عملي-اختبر-السياسات-بدون-ما-تلمس-شي&quot; tabindex=&quot;-1&quot;&gt;عملي: اختبر السياسات بدون ما تلمس شي &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-اختبر-السياسات-بدون-ما-تلمس-شي&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;محاكي السياسات&lt;/strong&gt; يقيّم السياسة بدون ما ينشئ شي أو ينفذ الإجراء، وهذا ممتاز للتعلم. من CloudShell، اكتب سياسة تسمح بـ S3 وEC2، وحد يسمح بـ S3 فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; identity.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Action&quot;: [&quot;s3:*&quot;, &quot;ec2:*&quot;],
    &quot;Resource&quot;: &quot;*&quot;
  }]
}
EOF&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; boundary.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Action&quot;: &quot;s3:*&quot;,
    &quot;Resource&quot;: &quot;*&quot;
  }]
}
EOF&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;اختبر ثلاث إجراءات بالسياسة لحالها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws iam simulate-custom-policy --policy-input-list file://identity.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --action-names s3:GetObject ec2:RunInstances iam:CreateUser &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;EvaluationResults[].[EvalActionName,EvalDecision]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;S3 وEC2 يطلع لهم &lt;code&gt;allowed&lt;/code&gt;، وIAM يطلع له &lt;code&gt;implicitDeny&lt;/code&gt; لأن ما فيه شي يسمح به. الحين أضف الحد:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws iam simulate-custom-policy --policy-input-list file://identity.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --permissions-boundary-policy-input-list file://boundary.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --action-names s3:GetObject ec2:RunInstances &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;EvaluationResults[].[EvalActionName,EvalDecision]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;EC2 صار &lt;code&gt;implicitDeny&lt;/code&gt;، مع إن السياسة تسمح به. الحين شوف إن &lt;strong&gt;المنع يكسب دايماً&lt;/strong&gt;، بإضافة منع صريح لحذف الحاويات:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; deny.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Deny&quot;,
    &quot;Action&quot;: &quot;s3:DeleteBucket&quot;,
    &quot;Resource&quot;: &quot;*&quot;
  }]
}
EOF&lt;/span&gt;

aws iam simulate-custom-policy &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-input-list file://identity.json file://deny.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --action-names s3:GetObject s3:DeleteBucket &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;EvaluationResults[].[EvalActionName,EvalDecision]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;s3:GetObject&lt;/code&gt; يبقى &lt;code&gt;allowed&lt;/code&gt;، و&lt;code&gt;s3:DeleteBucket&lt;/code&gt; يطلع له &lt;code&gt;explicitDeny&lt;/code&gt;، مع إن السياسة الأولى تسمح بـ &lt;code&gt;s3:*&lt;/code&gt;. جرب بعدها شرط: الوصول من شبكة المكتب فقط، واختبر من عنوانين:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; office.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Action&quot;: &quot;s3:GetObject&quot;,
    &quot;Resource&quot;: &quot;*&quot;,
    &quot;Condition&quot;: { &quot;IpAddress&quot;: { &quot;aws:SourceIp&quot;: &quot;203.0.113.0/24&quot; } }
  }]
}
EOF&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;ip&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;203.0&lt;/span&gt;.113.10 &lt;span class=&quot;token number&quot;&gt;198.51&lt;/span&gt;.100.7&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  aws iam simulate-custom-policy --policy-input-list file://office.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    --action-names s3:GetObject &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    --context-entries &lt;span class=&quot;token string&quot;&gt;&quot;ContextKeyName=aws:SourceIp,ContextKeyValues=&lt;span class=&quot;token variable&quot;&gt;$ip&lt;/span&gt;,ContextKeyType=ip&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;EvaluationResults[0].EvalDecision&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;العنوان الأول &lt;code&gt;allowed&lt;/code&gt;، والثاني &lt;code&gt;implicitDeny&lt;/code&gt;. وأخيراً، غلطة S3 الكلاسيكية، صلاحية عرض مع ARN الكائن:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; list.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Action&quot;: &quot;s3:ListBucket&quot;,
    &quot;Resource&quot;: &quot;arn:aws:s3:::shop/*&quot;
  }]
}
EOF&lt;/span&gt;

aws iam simulate-custom-policy --policy-input-list file://list.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --action-names s3:ListBucket --resource-arns arn:aws:s3:::shop &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;EvaluationResults[0].EvalDecision&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;يطلع &lt;code&gt;implicitDeny&lt;/code&gt;. السياسة تبدو صحيحة، بس الصلاحية تنطبق على الحاوية، مو على اللي فيها. غيّر المورد إلى &lt;code&gt;arn:aws:s3:::shop&lt;/code&gt; وجرب مرة ثانية، وبيطلع &lt;code&gt;allowed&lt;/code&gt;.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;ما فيه شي تحذفه&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;المحاكي ما ينشئ شي وما يكلف شي. تقدر تختبر أي سياسة بهذي الطريقة قبل ما تطبقها، والكونسول فيه نسخة مرئية كمان اسمها &lt;strong&gt;IAM Policy Simulator&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Organizations&lt;/strong&gt; يجمع الحسابات تحت فاتورة وحدة، و&lt;strong&gt;SCP&lt;/strong&gt; تحدد سقف وما تعطي شي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الشروط&lt;/strong&gt; تضيق الصلاحيات بالشبكة والمنطقة وMFA والوسوم، و&lt;code&gt;aws:PrincipalOrgID&lt;/code&gt; يفتح الوصول لمنظمتك فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الدور&lt;/strong&gt; يخليك تترك صلاحياتك الأصلية، و&lt;strong&gt;سياسة المورد&lt;/strong&gt; تبقيها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions Boundary&lt;/strong&gt; يفوض بأمان، و&lt;strong&gt;المنع الصريح يكسب دايماً&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity Center&lt;/strong&gt; يعطي دخول واحد ببيانات مؤقتة، و&lt;strong&gt;Control Tower&lt;/strong&gt; يبني كل هذا بأفضل الممارسات.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 7&lt;/p&gt;
&lt;p&gt;شركة تبي تتأكد إن ما أحد في حسابات التطوير يقدر يشغّل أي شي خارج Regionين، ولا حتى مدراء هذي الحسابات. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;سياسة IAM على كل مستخدم&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Permissions Boundary على كل دور&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;SCP على وحدة التطوير (OU)&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;قاعدة Config تبلغ عن الـ Regions الثانية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ SCP تحدد سقف لكل مستخدم ودور في الحسابات اللي تحتها، بما فيهم المستخدم الجذر. وهي ما تعطي شي، فالناس لسا يحتاجون صلاحيات IAM خاصة فيهم.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; مدراء الحساب يقدرون يغيرونها ببساطة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يحد مستخدم أو دور واحد في كل مرة، والمدير يقدر يشيله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يعلّم الموارد غير ملتزمة، وما يوقف شي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#service-control-policies-scp&quot;&gt;Service Control Policies (SCP)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html&quot;&gt;Service control policies (SCPs)&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 7&lt;/p&gt;
&lt;p&gt;شركة تبي قادة الفرق ينشئون أدوار لخدماتهم، بدون ما يقدرون يعطون أكثر من وصول S3 وDynamoDB. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Permissions Boundary على الأدوار اللي ينشئونها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;SCP على حساب الفريق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;صلاحية مدير، مع قاعدة مكتوبة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Permission Sets في Identity Center&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ Permissions Boundary يحدد الحد الأقصى لمستخدم أو دور وما يعطي شي بنفسه، فالدور ما يتجاوزه أبداً مهما كانت سياسته.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يحد الحساب كامل، والشغل الثاني فيه ممكن يحتاج خدمات ثانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; القاعدة المكتوبة ما توقف أحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذي تعطي الناس وصول للحسابات، وما تحد الأدوار اللي ينشئونها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AD%D8%AF%D9%88%D8%AF-%D8%A7%D9%84%D8%B5%D9%84%D8%A7%D8%AD%D9%8A%D8%A7%D8%AA-permissions-boundaries&quot;&gt;حدود الصلاحيات (Permissions Boundaries)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html&quot;&gt;Permissions boundaries for IAM entities&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 7&lt;/p&gt;
&lt;p&gt;شركة عندها 50 حساب و500 موظف، وتحفظ مستخدميها في Microsoft Entra ID. وتبي دخول واحد، بدون مفاتيح طويلة المدى، ووصول مختلف لكل حساب. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;مستخدم IAM لكل موظف في كل حساب&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;مستخدم IAM مشترك لكل فريق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS Control Tower، مع Account Factory&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;IAM Identity Center، مع Permission Sets&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الموظف يدخل مرة وحدة ويشوف الحسابات والأدوار المتاحة له، بصلاحيات مؤقتة. والـ Permission Set يصير دور في كل حساب تربطه فيه.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يعني آلاف المستخدمين والمفاتيح طويلة المدى اللي لازم تديرها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يضيّع مين سوى وش، ويشارك مفاتيح طويلة المدى.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبني Landing Zone وينشئ الحسابات، وما يعطي الناس دخولهم لحاله.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#iam-identity-center-%D8%AF%D8%AE%D9%88%D9%84-%D9%88%D8%A7%D8%AD%D8%AF&quot;&gt;IAM Identity Center: دخول واحد&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html&quot;&gt;Manage AWS accounts with permission sets&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 7&lt;/p&gt;
&lt;p&gt;تطبيق في الحساب A لازم يقرأ من جدول DynamoDB في الحساب A ويكتب في حاوية S3 في الحساب B بنفس الوقت، بهوية وحدة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;افتراض دور في الحساب B&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;سياسة حاوية في الحساب B تسمح لدور التطبيق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;SCP تسمح بالإجراء&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Permissions Boundary يسمح بالإجراء&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;مع سياسة المورد يحتفظ التطبيق بصلاحياته، فيقدر يستخدم الجدول في A والحاوية في B مع بعض.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; وهو في الدور يتخلى عن صلاحياته الأصلية، فيفقد الجدول في A.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الـ SCP ما تعطي شي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; الـ Boundary ما يعطي شي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AF%D9%88%D8%B1-%D8%A3%D9%88-%D8%B3%D9%8A%D8%A7%D8%B3%D8%A9-%D9%85%D9%88%D8%B1%D8%AF&quot;&gt;دور أو سياسة مورد؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html&quot;&gt;Cross account resource access in IAM&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 7&lt;/p&gt;
&lt;p&gt;دور لازم يعرض الكائنات في حاوية اسمها &lt;code&gt;reports&lt;/code&gt; ويقرأها. أي &lt;strong&gt;عبارتين&lt;/strong&gt; لازم يكونون في سياسته؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;&lt;code&gt;s3:ListBucket&lt;/code&gt; على &lt;code&gt;arn:aws:s3:::reports/*&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;&lt;code&gt;s3:ListBucket&lt;/code&gt; على &lt;code&gt;arn:aws:s3:::reports&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;&lt;code&gt;s3:GetObject&lt;/code&gt; على &lt;code&gt;arn:aws:s3:::reports&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;&lt;code&gt;s3:GetObject&lt;/code&gt; على &lt;code&gt;arn:aws:s3:::reports/*&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;&lt;code&gt;s3:*&lt;/code&gt; على &lt;code&gt;*&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;إجراءات S3 تشتغل على مستويين: العرض على الحاوية، والقراءة على الكائنات، فكل واحد يحتاج ARN خاص فيه.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; العرض على الحاوية، فهذا الـ ARN يعطي &lt;code&gt;AccessDenied&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; القراءة على الكائنات، فهذا الـ ARN يعطي &lt;code&gt;AccessDenied&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; هذا يشتغل، بس يعطي أكثر بكثير من اللازم، وعلى كل الحاويات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%BA%D9%84%D8%B7%D8%A9-s3-%D8%A7%D9%84%D9%83%D9%84%D8%A7%D8%B3%D9%8A%D9%83%D9%8A%D8%A9&quot;&gt;غلطة S3 الكلاسيكية&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket.html&quot;&gt;Grant read and write access to Amazon S3 bucket objects&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 7&lt;/p&gt;
&lt;p&gt;مهمة ليلية في الحساب A لازم تشتغل بالكامل داخل الحساب B كم دقيقة. وفريق الأمان يمنع المفاتيح طويلة المدى. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;مستخدم IAM في الحساب B، ومفاتيحه محفوظة في المهمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;نسخ دور المهمة إلى الحساب B&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;SCP تسمح للمهمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;دور في الحساب B يثق في الحساب A، تفترضه المهمة عبر STS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;المهمة تنادي &lt;code&gt;AssumeRole&lt;/code&gt;، وSTS تفحص سياسة الثقة في الدور وترجع صلاحيات مؤقتة، فما فيه مفاتيح طويلة المدى تحفظها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي المفاتيح طويلة المدى اللي يمنعها الفريق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الأدوار ما تنسخ بين الحسابات، والوصول لسا يحتاج سياسة ثقة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الـ SCP ما تعطي شي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AF%D9%88%D8%B1-%D8%A3%D9%88-%D8%B3%D9%8A%D8%A7%D8%B3%D8%A9-%D9%85%D9%88%D8%B1%D8%AF&quot;&gt;دور أو سياسة مورد؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html&quot;&gt;Temporary security credentials in IAM&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 7 من 7&lt;/p&gt;
&lt;p&gt;مسار GitHub Actions ينشر على حساب AWS واحد، ومفاتيح الوصول محفوظة كأسرار في المستودع. والفريق يبي يوقف حفظ المفاتيح. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تغيير مفاتيح الوصول كل أسبوع&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;OIDC Identity Provider في IAM، مع دور يفترضه المسار&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;IAM Identity Center، مع مستخدم للمسار&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Cognito User Pool للمسار&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;المسار يثبت هويته بتوكن من GitHub، وياخذ صلاحيات مؤقتة عبر الدور، فما فيه مفاتيح تحفظها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يقصر عمر المفاتيح، ولسا محفوظة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا لدخول الأشخاص، مو لأنظمة مثل مسار النشر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا لمستخدمي تطبيقك، مو للوصول لحساب AWS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AF%D8%AE%D9%88%D9%84-%D9%85%D9%86-%D9%87%D9%88%D9%8A%D8%A9-%D8%AE%D8%A7%D8%B1%D8%AC%D9%8A%D8%A9-federation&quot;&gt;الدخول من هوية خارجية (Federation)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html&quot;&gt;Identity providers and federation into AWS&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;ضبطت مين يوصل لبياناتك. طيب لو وصل لها أحد بأي طريقة، أو هاجم موقعك من برا؟ في &lt;a href=&quot;/posts/aws-27-encryption-secrets-protection/&quot;&gt;&lt;strong&gt;الجزء السابع والعشرين&lt;/strong&gt;&lt;/a&gt; نغطي التشفير والأسرار والحماية من الهجمات.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>المراقبة والتدقيق: CloudWatch وCloudTrail وConfig</title>
    <link href="https://blog.sultanops.com/posts/aws-25-monitoring-auditing/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-25-monitoring-auditing/</id>
    <summary>كيف تعرف إن تطبيقك بخير، ومين غيّر وش، وهل إعداداتك لسا زي ما لازم؟ المقاييس والسجلات والإنذارات في CloudWatch، وEventBridge وCloudTrail وConfig، مع تجربة عملية لإنذار يرسل لك إيميل.</summary>
    <content type="html">&lt;p&gt;خلال الأجزاء السابقة بنينا تطبيق بقطع كثيرة. بناؤه هو النص السهل. النص الصعب يجي الساعة ثلاث الفجر: هو واقف؟ من متى؟ ومين غيّر هذاك الإعداد أمس؟&lt;/p&gt;
&lt;p&gt;هذا القسم الأخير عن تشغيل اللي بنيته، ويبدأ بثلاث أسئلة، لكل واحد خدمته:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;/td&gt;
&lt;td&gt;&lt;strong&gt;CloudWatch&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;مين سوى هذا، ومتى؟&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;CloudTrail&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;الإعدادات زي ما لازم، وكيف تغيرت؟&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Config&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وخدمة رابعة ترد على كل هذا: &lt;strong&gt;EventBridge&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;مقاييس-cloudwatch&quot; tabindex=&quot;-1&quot;&gt;مقاييس CloudWatch &lt;a class=&quot;heading-anchor&quot; href=&quot;#مقاييس-cloudwatch&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;المقياس (Metric)&lt;/strong&gt; رقم ينقاس مع الوقت، مثل استخدام المعالج أو عدد الأخطاء. وأغلب خدمات AWS ترسل مقاييسها لحالها، مجمعة في &lt;strong&gt;Namespaces&lt;/strong&gt; ومميزة بـ &lt;strong&gt;Dimensions&lt;/strong&gt;، مثل رقم السيرفر.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;الافتراضي في EC2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كل 5 دقايق، أو كل دقيقة لو شغلت المراقبة التفصيلية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المقاييس الخاصة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ترسل اللي تبي، مثل عدد الطلبات الفاشلة، وبدقة توصل لثانية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السجل التاريخي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بيانات الدقيقة تبقى 15 يوم، وبيانات 5 دقايق 63 يوم، والساعة 455 يوم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Metric Streams&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ترسل المقاييس باستمرار عبر Firehose إلى S3 أو أداة مراقبة ثانية&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;EC2 ما يبلغ عن الذاكرة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;المقاييس الافتراضية تجي من خارج السيرفر، فما فيها &lt;strong&gt;الذاكرة&lt;/strong&gt; ولا &lt;strong&gt;مساحة القرص&lt;/strong&gt;. عشان تجيبها، ثبّت &lt;strong&gt;CloudWatch Agent&lt;/strong&gt; على السيرفر. وكثير يكتشفون هذا وهم يحاولون يفهمون ليه سيرفرهم بطأ.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;و&lt;strong&gt;Dashboards&lt;/strong&gt; تجمع الرسوم اللي تهمك في صفحة وحدة، وتقدر تجمع مقاييس من مناطق وحسابات مختلفة.&lt;/p&gt;
&lt;h2 id=&quot;سجلات-cloudwatch&quot; tabindex=&quot;-1&quot;&gt;سجلات CloudWatch &lt;a class=&quot;heading-anchor&quot; href=&quot;#سجلات-cloudwatch&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;كل اللي يطبعه تطبيقك ممكن ينزل هنا، مرتب في &lt;strong&gt;Log Groups&lt;/strong&gt; تمثل عادةً تطبيق واحد، وداخلها &lt;strong&gt;Log Streams&lt;/strong&gt;. وLambda وECS وAPI Gateway و&lt;a href=&quot;/posts/aws-13-vpc/&quot;&gt;VPC Flow Logs&lt;/a&gt; وغيرها ترسل سجلاتها مباشرة، وعلى EC2 أو سيرفرات مكتبك تستخدم نفس الـ Agent.&lt;/p&gt;
&lt;p&gt;والسجلات تبقى &lt;strong&gt;للأبد افتراضياً&lt;/strong&gt;، وأنت تدفع عليها. حدد مدة حفظ لكل مجموعة، من يوم إلى عشر سنوات.&lt;/p&gt;
&lt;p&gt;و&lt;strong&gt;Logs Insights&lt;/strong&gt; يبحث فيها بلغة استعلام بسيطة. هذا يجيب آخر الأخطاء:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Output&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وعشان ترسل السجلات لمكان ثاني عندك طريقين:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التصدير إلى S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;شغل دفعات، ومو فوري&lt;/td&gt;
&lt;td&gt;أرشفة طويلة ورخيصة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subscription Filter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;شبه فوري&lt;/td&gt;
&lt;td&gt;الإرسال إلى Lambda أو Kinesis أو Firehose، مثل &lt;a href=&quot;/posts/aws-23-athena-redshift-glue/&quot;&gt;OpenSearch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;إنذارات-cloudwatch&quot; tabindex=&quot;-1&quot;&gt;إنذارات CloudWatch &lt;a class=&quot;heading-anchor&quot; href=&quot;#إنذارات-cloudwatch&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;رسم ما يطالعه أحد ما له فايدة. &lt;strong&gt;الإنذار (Alarm)&lt;/strong&gt; يراقب مقياس ويسوي شي لما يتجاوز حد.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 170&quot; role=&quot;img&quot; aria-labelledby=&quot;alarm-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;alarm-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;480&quot; y=&quot;54&quot; width=&quot;140&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;550&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مقياس&lt;/text&gt;
&lt;text x=&quot;550&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;المعالج والأخطاء&lt;/text&gt;
&lt;rect x=&quot;270&quot; y=&quot;54&quot; width=&quot;140&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;340&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;إنذار&lt;/text&gt;
&lt;text x=&quot;340&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;فوق 80%؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;12&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;39&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;SNS&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;63&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Auto Scaling&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;114&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;141&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;إجراء EC2&lt;/text&gt;
&lt;line x1=&quot;480&quot; y1=&quot;85&quot; x2=&quot;412&quot; y2=&quot;85&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#alarm-arrow)&quot;/&gt;
&lt;line x1=&quot;270&quot; y1=&quot;85&quot; x2=&quot;172&quot; y2=&quot;34&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#alarm-arrow)&quot;/&gt;
&lt;line x1=&quot;270&quot; y1=&quot;85&quot; x2=&quot;172&quot; y2=&quot;85&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#alarm-arrow)&quot;/&gt;
&lt;line x1=&quot;270&quot; y1=&quot;85&quot; x2=&quot;172&quot; y2=&quot;136&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#alarm-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;alarm-caption&quot;&gt;الإنذار يراقب مقياس، ولما يتجاوز الحد، ينبه أحد أو يزيد السعة أو يتصرف مع السيرفر.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;والإنذار يكون في وحدة من ثلاث حالات: &lt;code&gt;OK&lt;/code&gt; أو &lt;code&gt;ALARM&lt;/code&gt; أو &lt;code&gt;INSUFFICIENT_DATA&lt;/code&gt;. وهذي إضافات مفيدة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;إجراءات EC2:&lt;/strong&gt; إيقاف أو إعادة تشغيل أو حذف أو &lt;strong&gt;استعادة&lt;/strong&gt;. والاستعادة تنقل السيرفر لعتاد جديد لو تعطل المضيف، مع الحفاظ على عناوين IP والإعدادات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الإنذارات المركبة:&lt;/strong&gt; إنذار واحد لـ &amp;quot;معالج مرتفع &lt;strong&gt;و&lt;/strong&gt;أخطاء كثيرة&amp;quot;، وهذا يقلل التنبيهات الكاذبة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الاختبار:&lt;/strong&gt; &lt;code&gt;set-alarm-state&lt;/code&gt; يحط الإنذار في أي حالة، فتتأكد من مسار التنبيه بدون ما تكسر شي. وبنجربه في التجربة العملية.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;رؤى-جاهزة&quot; tabindex=&quot;-1&quot;&gt;رؤى جاهزة &lt;a class=&quot;heading-anchor&quot; href=&quot;#رؤى-جاهزة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Container Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مقاييس وسجلات ECS وEKS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lambda Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أداء الدوال، ومعها الذاكرة والبداية الباردة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contributor Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أكبر المساهمين، مثل عناوين IP اللي ترسل أكثر طلبات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Application Insights&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تجهز المراقبة لتطبيق كامل وتشير للمشاكل المحتملة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;eventbridge-الرد-على-الأحداث&quot; tabindex=&quot;-1&quot;&gt;EventBridge: الرد على الأحداث &lt;a class=&quot;heading-anchor&quot; href=&quot;#eventbridge-الرد-على-الأحداث&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تقريباً كل شي يصير في AWS هو &lt;strong&gt;حدث&lt;/strong&gt;: سيرفر تغيرت حالته، أو حاوية انشأت، أو إنذار انطلق. &lt;strong&gt;EventBridge&lt;/strong&gt; يستقبل هذي الأحداث على &lt;strong&gt;Bus&lt;/strong&gt;، و&lt;strong&gt;القواعد&lt;/strong&gt; ترسل المطابق منها لهدف.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 214&quot; role=&quot;img&quot; aria-labelledby=&quot;eventbridge-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;eventbridge-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;480&quot; y=&quot;14&quot; width=&quot;140&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;550&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;خدمات AWS&lt;/text&gt;
&lt;rect x=&quot;480&quot; y=&quot;80&quot; width=&quot;140&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;550&quot; y=&quot;110&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقاتك&lt;/text&gt;
&lt;rect x=&quot;480&quot; y=&quot;146&quot; width=&quot;140&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;550&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;جدول زمني&lt;/text&gt;
&lt;rect x=&quot;240&quot; y=&quot;46&quot; width=&quot;170&quot; height=&quot;118&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;325&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Event Bus&lt;/text&gt;
&lt;text x=&quot;325&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;القواعد تفلتر الأحداث&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;150&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;80&quot; width=&quot;150&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;110&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;SQS&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;146&quot; width=&quot;150&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Step Functions&lt;/text&gt;
&lt;line x1=&quot;480&quot; y1=&quot;39&quot; x2=&quot;412&quot; y2=&quot;80&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#eventbridge-arrow)&quot;/&gt;
&lt;line x1=&quot;480&quot; y1=&quot;105&quot; x2=&quot;412&quot; y2=&quot;105&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#eventbridge-arrow)&quot;/&gt;
&lt;line x1=&quot;480&quot; y1=&quot;171&quot; x2=&quot;412&quot; y2=&quot;130&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#eventbridge-arrow)&quot;/&gt;
&lt;line x1=&quot;240&quot; y1=&quot;80&quot; x2=&quot;172&quot; y2=&quot;39&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#eventbridge-arrow)&quot;/&gt;
&lt;line x1=&quot;240&quot; y1=&quot;105&quot; x2=&quot;172&quot; y2=&quot;105&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#eventbridge-arrow)&quot;/&gt;
&lt;line x1=&quot;240&quot; y1=&quot;130&quot; x2=&quot;172&quot; y2=&quot;171&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#eventbridge-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;eventbridge-caption&quot;&gt;الأحداث توصل على Bus من أي مكان، والقواعد ترسل كل حدث مطابق للخدمة اللي تعالجه.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;الرد على تغيير&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفر وقف، فنبّه الفريق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;جدول زمني&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;شغّل دالة كل ليلة، و&lt;strong&gt;EventBridge Scheduler&lt;/strong&gt; هو الخدمة لهذا الحين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ربط خدماتك&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;خدمة الطلبات تنشر حدث، واللي يهمه ياخذه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;أحداث الشركاء&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أحداث من تطبيقات SaaS على Bus خاص بالشريك&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وميزات تستاهل تعرفها: &lt;strong&gt;الأرشفة وإعادة الإرسال&lt;/strong&gt; للأحداث القديمة، و&lt;strong&gt;Schema Registry&lt;/strong&gt; يوصف شكل الأحداث، و&lt;strong&gt;سياسات الموارد&lt;/strong&gt; عشان حساب ثاني يرسل لـ Bus حقك.&lt;/p&gt;
&lt;p&gt;ولأغلب الأهداف، مثل Lambda وSQS وSNS، الصلاحية تكون بسياسة مورد على الهدف. ولغيرها، مثل تشغيل مهمة ECS، يستخدم EventBridge دور IAM.&lt;/p&gt;
&lt;h2 id=&quot;cloudtrail-مين-سوى-وش&quot; tabindex=&quot;-1&quot;&gt;CloudTrail: مين سوى وش &lt;a class=&quot;heading-anchor&quot; href=&quot;#cloudtrail-مين-سوى-وش&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;كل استدعاء لـ AWS، من الكونسول أو CLI أو خدمة، يسجله &lt;strong&gt;CloudTrail&lt;/strong&gt;: مين، ووش، ومتى، ومن وين. وهو شغال افتراضياً، وأول مكان تطالعه لما شي يتغير بغموض أو يختفي.&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Management Events&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تغييرات الموارد، مثل إنشاء سيرفر أو تعديل سياسة&lt;/td&gt;
&lt;td&gt;شغال، و90 يوم مجانية في Event History&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Events&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;عمليات داخل الموارد، مثل القراءة من S3 أو استدعاء Lambda&lt;/td&gt;
&lt;td&gt;مقفل بسبب كثرتها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Insights Events&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نشاط غير معتاد، مثل موجة حذف مفاجئة&lt;/td&gt;
&lt;td&gt;مقفل وبتكلفة إضافية&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وعشان تحفظها أكثر من 90 يوم، أنشئ &lt;strong&gt;Trail&lt;/strong&gt; يكتب إلى S3، لكل المناطق وحتى المنظمة كلها، وحللها بـ &lt;a href=&quot;/posts/aws-23-athena-redshift-glue/&quot;&gt;Athena&lt;/a&gt;. ولاحظ إن &lt;strong&gt;CloudTrail Lake&lt;/strong&gt; أقفل على العملاء الجدد في 2026، فالـ Trail هو الطريق.&lt;/p&gt;
&lt;p&gt;ونمط قوي يجمعه مع EventBridge: أي أحد يحذف جدول، أو دخول بحساب Root، يطلق تنبيه فوري. CloudTrail يسجله، وEventBridge يطابقه، وSNS يبلغك.&lt;/p&gt;
&lt;h2 id=&quot;aws-config-إعداداتك-مع-الوقت&quot; tabindex=&quot;-1&quot;&gt;AWS Config: إعداداتك مع الوقت &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-config-إعداداتك-مع-الوقت&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CloudTrail يقول لك مين استدعى وش. &lt;strong&gt;Config&lt;/strong&gt; يقول لك شكل المورد: يسجل إعدادات مواردك وكل تغيير عليها، فتقدر تسأل كيف كان شكل Security Group الثلاثاء الماضي.&lt;/p&gt;
&lt;p&gt;و&lt;strong&gt;قواعد Config&lt;/strong&gt; تحكم على هذي الإعدادات:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;القواعد:&lt;/strong&gt; جاهزة، مثل &amp;quot;ما فيه حاويات S3 عامة&amp;quot;، أو خاصة فيك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المنع:&lt;/strong&gt; ما يمنع شي. يعلّم المورد إنه غير ملتزم، وبس.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المعالجة:&lt;/strong&gt; القاعدة تقدر تشغل مستند Systems Manager Automation يصلح المشكلة تلقائياً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التنبيهات:&lt;/strong&gt; عبر EventBridge أو SNS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;النطاق والتكلفة:&lt;/strong&gt; يشتغل لكل منطقة، وتدفع لكل عنصر مسجل ولكل تقييم قاعدة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;x-ray-تتبع-طلب-واحد&quot; tabindex=&quot;-1&quot;&gt;X-Ray: تتبع طلب واحد &lt;a class=&quot;heading-anchor&quot; href=&quot;#x-ray-تتبع-طلب-واحد&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الطلب في التطبيقات الحديثة ممكن يمر على API وثلاث دوال وقاعدة بيانات. المقاييس تقول إن فيه شي بطيء، و&lt;strong&gt;AWS X-Ray&lt;/strong&gt; يقول وين. يجمع &lt;strong&gt;Traces&lt;/strong&gt; لكل طلب وهو يمر على خدماتك، بما فيها اتصالاته بقواعد البيانات وواجهات API الثانية، ويوريك أي خطوة بطيئة أو تفشل.&lt;/p&gt;
&lt;h2 id=&quot;أدوات-ثانية-للمتابعة&quot; tabindex=&quot;-1&quot;&gt;أدوات ثانية للمتابعة &lt;a class=&quot;heading-anchor&quot; href=&quot;#أدوات-ثانية-للمتابعة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;AWS Health Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;هل عند AWS نفسها مشكلة تأثر على خدماتك ومواردك، بدون تجهيز وبدون تكلفة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed Grafana&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لوحات للمقاييس والسجلات والتتبع من عدة مصادر، بأداة Grafana المعروفة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed Service for Prometheus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مقاييس الحاويات بأدوات Prometheus مفتوحة المصدر، بدون سيرفرات تشغلها&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;أيها-ومتى&quot; tabindex=&quot;-1&quot;&gt;أيها ومتى؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#أيها-ومتى&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;خلنا ناخذ موزع حمل واحد:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;CloudWatch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;عدد الطلبات وأخطاء 5xx، ولوحة أو إنذار عليها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CloudTrail&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مين غيّر قواعد المستمع، ومتى&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Config&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Security Group والشهادة الحالية وكيف تغيرت، وهل يلتزم بقواعدك؟&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;عملي-إنذار-يرسل-لك-إيميل&quot; tabindex=&quot;-1&quot;&gt;عملي: إنذار يرسل لك إيميل &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-إنذار-يرسل-لك-إيميل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنراقب مقياس وهمي للطلبات الفاشلة. من CloudShell، بدّل الإيميل بإيميلك:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;you@example.com

&lt;span class=&quot;token assign-left variable&quot;&gt;TOPIC_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sns create-topic &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; series-alerts &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TopicArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws sns subscribe --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--protocol&lt;/span&gt; email --notification-endpoint &lt;span class=&quot;token variable&quot;&gt;$EMAIL&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;افتح إيميلك واضغط &lt;strong&gt;Confirm subscription&lt;/strong&gt;. ثم أنشئ إنذار ينطلق لو فشل أكثر من خمس طلبات في دقيقة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudwatch put-metric-alarm --alarm-name series-failed-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--namespace&lt;/span&gt; Series/Shop --metric-name FailedOrders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--statistic&lt;/span&gt; Sum &lt;span class=&quot;token parameter variable&quot;&gt;--period&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;60&lt;/span&gt; --evaluation-periods &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--threshold&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; --comparison-operator GreaterThanThreshold &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --treat-missing-data notBreaching &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --alarm-actions &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين أرسل قراءة التطبيق، كأن 12 طلب فشلت للتو:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudwatch put-metric-data &lt;span class=&quot;token parameter variable&quot;&gt;--namespace&lt;/span&gt; Series/Shop &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --metric-name FailedOrders &lt;span class=&quot;token parameter variable&quot;&gt;--value&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;12&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;انتظر دقيقتين أو ثلاث وشيك على حالة الإنذار. والمفروض يوصلك إيميل بنفس الوقت:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudwatch describe-alarms --alarm-names series-failed-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;MetricAlarms[0].[StateValue,StateReason]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وما تحتاج تكسر شي عشان تختبر مسار التنبيه. جربه لما يرجع الإنذار إلى &lt;code&gt;OK&lt;/code&gt;، ويوصلك إيميل ثاني:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudwatch set-alarm-state --alarm-name series-failed-orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --state-value ALARM --state-reason &lt;span class=&quot;token string&quot;&gt;&quot;Testing the alert&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وأخيراً، سوّ نفسك محقق. مين أنشأ هذا الإنذار؟ CloudTrail يعرف، بس الأحداث ممكن تاخذ كم دقيقة عشان تظهر:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudtrail lookup-events &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --lookup-attributes &lt;span class=&quot;token assign-left variable&quot;&gt;AttributeKey&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;EventName,AttributeValue&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;PutMetricAlarm &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --max-results &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Events[0].[EventName,Username,EventTime]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;هذا يبقى داخل المجاني أو يكلف شبه لا شي. والمقياس الخاص ينتهي لحاله:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudwatch delete-alarms --alarm-names series-failed-orders
aws sns delete-topic --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CloudWatch&lt;/strong&gt; للمقاييس والسجلات والإنذارات، والذاكرة تحتاج الـ Agent.&lt;/li&gt;
&lt;li&gt;حدد &lt;strong&gt;مدة حفظ&lt;/strong&gt; لسجلاتك، لأنها تبقى للأبد افتراضياً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EventBridge&lt;/strong&gt; يوجه الأحداث للي يعالجها، ويشغّل الأشياء بجدول زمني.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudTrail&lt;/strong&gt; يسجل مين سوى وش، و&lt;strong&gt;Config&lt;/strong&gt; يسجل الإعدادات ويحكم عليها.&lt;/li&gt;
&lt;li&gt;اختبر &lt;strong&gt;مسار التنبيه&lt;/strong&gt; قبل ما تحتاجه.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 7&lt;/p&gt;
&lt;p&gt;فريق يبي إنذار لما تتجاوز ذاكرة سيرفرات EC2 حقته 90%، بس ما يلقى مقياس للذاكرة في CloudWatch. وش يسوي؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تفعيل Detailed Monitoring&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تثبيت CloudWatch Agent على السيرفرات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;إنشاء CloudTrail Trail&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تفعيل AWS Config&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;المقاييس الافتراضية تجي من خارج السيرفر، فما فيها الذاكرة. والـ Agent يرسلها من داخله، وبعدها تقدر تحط عليها إنذار.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يرسل نفس المقاييس بشكل أكثر، والذاكرة لسا مو منها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يسجل مين نادى وش، مو كيف أداء السيرفر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يسجل إعدادات الموارد، مو اللي يصير داخل السيرفر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D9%82%D8%A7%D9%8A%D9%8A%D8%B3-cloudwatch&quot;&gt;مقاييس CloudWatch&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html&quot;&gt;Metrics collected by the CloudWatch agent&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 7&lt;/p&gt;
&lt;p&gt;بدأ عطل بعد ما غيّر أحد مجموعة أمان البارحة بالليل. والفريق يبي يعرف مين سوى التغيير، ومن وين. وين يدور أول؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;مقاييس CloudWatch&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;VPC Flow Logs&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;CloudWatch Logs Insights&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;CloudTrail Event history&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudTrail يسجل مين نادى وش، ومتى، ومن وين. والأحداث الإدارية مثل هذا تبقى هناك 90 يوم، بدون أي تجهيز.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي تعرض أرقام مع الوقت، مو مين سوى شي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذي تعرض الزيارات المقبولة والمرفوضة، مو مين غيّر قاعدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبحث في السجلات اللي ترسلها تطبيقاتك، مو الاستدعاءات إلى AWS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cloudtrail-%D9%85%D9%8A%D9%86-%D8%B3%D9%88%D9%89-%D9%88%D8%B4&quot;&gt;CloudTrail: مين سوى وش&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html&quot;&gt;Working with CloudTrail event history&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 7&lt;/p&gt;
&lt;p&gt;شركة تبي تنتبه لما تصير أي حاوية S3 عامة، وتصلحها تلقائياً. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;قاعدة Config، مع Remediation تلقائي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إنذار CloudWatch على حجم الحاوية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;أحداث CloudTrail Insights&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;استعلام Logs Insights&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;قاعدة Config تحكم على إعدادات كل حاوية وتعلّمها غير ملتزمة، والـ Remediation يقدر يشغّل مستند Systems Manager Automation يصلحها. والقاعدة لحالها ما تمنع شي.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الحجم ما يقول شي عن مين يقدر يوصل للحاوية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يكشف النشاط غير العادي، وما يحكم على الإعدادات ولا يصلحها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يبحث في السجلات لما تطلب، وما يصلح شي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#aws-config-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA%D9%83-%D9%85%D8%B9-%D8%A7%D9%84%D9%88%D9%82%D8%AA&quot;&gt;AWS Config: إعداداتك مع الوقت&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/config/latest/developerguide/remediation.html&quot;&gt;Remediating Noncompliant Resources with AWS Config&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 7&lt;/p&gt;
&lt;p&gt;فريق الأمان يبي تنبيه فوري كل ما حذف أحد جدول DynamoDB أو دخل بالمستخدم الجذر. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;استعلام Athena أسبوعي على سجلات CloudTrail&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;لوحة CloudWatch&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;قاعدة EventBridge تطابق أحداث CloudTrail هذي، وهدفها SNS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;قاعدة Config على كل جدول&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudTrail يسجل الاستدعاء، وEventBridge يطابقه، وSNS يخبرك على طول.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يلقاها في النهاية، بس ممكن متأخر بأيام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; اللوحة اللي ما يطالعها أحد ما تنبه أحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحكم على الإعدادات، وما يتفاعل مع حذف جدول أو تسجيل دخول.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cloudtrail-%D9%85%D9%8A%D9%86-%D8%B3%D9%88%D9%89-%D9%88%D8%B4&quot;&gt;CloudTrail: مين سوى وش&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event-cloudtrail.html&quot;&gt;AWS service events delivered via AWS CloudTrail&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 7&lt;/p&gt;
&lt;p&gt;فاتورة CloudWatch Logs عند فريق تكبر لأن السجلات القديمة ما تنحذف أبداً، ونظام ثاني لازم يستلم سطور الأخطاء خلال ثواني. أي &lt;strong&gt;تغييرين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تحديد مدة احتفاظ على الـ Log Groups&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تصدير السجلات إلى S3 كل ليلة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تفعيل Detailed Monitoring&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إضافة Subscription Filter يرسل سطور الأخطاء إلى Lambda&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;تفعيل CloudTrail Data Events&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;السجلات تبقى للأبد افتراضياً، فمدة الاحتفاظ تشيل القديمة. والـ Subscription Filter يوصّل السطور المطابقة شبه فوري.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا شغل دفعي مو فوري، والأصول تبقى وتستمر تكلف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يرسل مقاييس EC2 بشكل أكثر، وما له علاقة بالسجلات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; هذا يسجل العمليات داخل الموارد، وما له علاقة بفاتورة سجلاتك ولا سطور الأخطاء.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-cloudwatch&quot;&gt;سجلات CloudWatch&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html&quot;&gt;Working with log groups and log streams&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html&quot;&gt;Real-time processing of log data with subscriptions&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 7&lt;/p&gt;
&lt;p&gt;طلب الدفع يمر على API Gateway وثلاث دوال Lambda وجدول DynamoDB، وأحياناً ياخذ خمس ثواني. ومقاييس كل خدمة لحالها تبدو طبيعية. وش يبين أي خطوة بطيئة؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;CloudTrail&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS Config&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS X-Ray&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;CloudWatch Contributor Insights&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;X-Ray يتتبع كل طلب عبر خدماتك واتصالاتها، ويوريك أي خطوة بطيئة أو تفشل.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يسجل مين نادى أي API، مو كم أخذت كل خطوة من الطلب.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يسجل إعدادات الموارد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يعرض أكبر المساهمين، مثل العناوين اللي ترسل أكثر طلبات، مو مسار الطلب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#x-ray-%D8%AA%D8%AA%D8%A8%D8%B9-%D8%B7%D9%84%D8%A8-%D9%88%D8%A7%D8%AD%D8%AF&quot;&gt;X-Ray: تتبع طلب واحد&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html&quot;&gt;What is AWS X-Ray?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 7 من 7&lt;/p&gt;
&lt;p&gt;الأخطاء زادت فجأة في تطبيق في منطقة وحدة، وما تغير شي من جهة الفريق. ويبون يعرفون بسرعة هل عند AWS نفسها مشكلة تأثر على مواردهم. وين يشوفون؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;CloudTrail Event history&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS Health Dashboard&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;AWS Config&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Trusted Advisor&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;يعرض الأحداث اللي تأثر على خدمات AWS ومواردك، بدون تجهيز وبدون تكلفة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يعرض الاستدعاءات في حسابك، وهذي ما تغيرت هنا.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يعرض كيف تغيرت إعداداتك، وهذي ما تغيرت هنا.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يفحص حسابك مقابل أفضل الممارسات، وما يبلغ عن الأعطال.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%AB%D8%A7%D9%86%D9%8A%D8%A9-%D9%84%D9%84%D9%85%D8%AA%D8%A7%D8%A8%D8%B9%D8%A9&quot;&gt;أدوات ثانية للمتابعة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/health/latest/ug/what-is-aws-health.html&quot;&gt;What is AWS Health?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;الحين تعرف وش يصير في حساب واحد. بس الشركات عندها عشرات الحسابات ومئات الموظفين. في &lt;a href=&quot;/posts/aws-26-organizations-identity-center/&quot;&gt;&lt;strong&gt;الجزء السادس والعشرين&lt;/strong&gt;&lt;/a&gt; نديرهم بـ Organizations وIdentity Center.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>خدمات الذكاء الاصطناعي الجاهزة</title>
    <link href="https://blog.sultanops.com/posts/aws-24-ai-services/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-24-ai-services/</id>
    <summary>أضف الذكاء الاصطناعي لتطبيقك بدون فريق تعلم آلة. خدمات للصور والكلام والترجمة والمستندات، ونماذج توليدية على Bedrock، وبناء نموذجك بـ SageMaker AI، وأيها يدعم العربية، مع تجربة عملية تربط عدة خدمات.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-23-athena-redshift-glue/&quot;&gt;الجزء الثالث والعشرين&lt;/a&gt; طلّعنا إجابات من بيانات مرتبة أصلاً. بس كثير من بياناتك مو كذا: صور ومكالمات وفواتير ممسوحة. فهمها كان يحتاج فريق تعلم آلة، واليوم كثير منه استدعاء API واحد.&lt;/p&gt;
&lt;p&gt;AWS تقدم ثلاث مستويات، وأغلب الناس يبدأون من فوق:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 212&quot; role=&quot;img&quot; aria-labelledby=&quot;ailayers-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;ailayers-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;595&quot; y=&quot;18&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;أسهل&lt;/text&gt;
&lt;line x1=&quot;595&quot; y1=&quot;28&quot; x2=&quot;595&quot; y2=&quot;176&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#ailayers-arrow)&quot;/&gt;
&lt;text x=&quot;595&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تحكم أكثر&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;520&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;280&quot; y=&quot;37&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الخدمات الجاهزة&lt;/text&gt;
&lt;text x=&quot;280&quot; y=&quot;57&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;Rekognition وPolly وTextract وغيرها: استدعاء API واحد&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;78&quot; width=&quot;520&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;280&quot; y=&quot;101&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Amazon Bedrock&lt;/text&gt;
&lt;text x=&quot;280&quot; y=&quot;121&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نماذج جاهزة توجهها بالأوامر وبياناتك&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;142&quot; width=&quot;520&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;280&quot; y=&quot;165&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Amazon SageMaker AI&lt;/text&gt;
&lt;text x=&quot;280&quot; y=&quot;185&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تدرّب نماذجك وتشغلها&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;ailayers-caption&quot;&gt;كل ما نزلت، زاد تحكمك في النموذج، وزادت الخبرة والشغل المطلوب.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;/td&gt;
&lt;td&gt;&lt;strong&gt;Rekognition&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تحويل الكلام إلى نص&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Transcribe&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تحويل النص إلى كلام&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Polly&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;الترجمة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Translate&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;روبوت محادثة أو نظام هاتف&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Lex&lt;/strong&gt; و&lt;strong&gt;Connect&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;فهم النص: المشاعر والكيانات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Comprehend&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;استخراج النص والجداول من المستندات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Textract&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;التوصيات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Personalize&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نماذج توليدية على بياناتك&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Bedrock&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تدريب نموذج خاص فيك&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;SageMaker AI&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;الصور-rekognition&quot; tabindex=&quot;-1&quot;&gt;الصور: Rekognition &lt;a class=&quot;heading-anchor&quot; href=&quot;#الصور-rekognition&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rekognition&lt;/strong&gt; يحلل الصور والفيديو بدون أي تدريب منك:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;التصنيفات:&lt;/strong&gt; وش في الصورة، مثل سيارة أو شاطئ أو زحمة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;النص:&lt;/strong&gt; قراءة الكلمات في الصور، مثل اللوحات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;فلترة المحتوى:&lt;/strong&gt; يكشف الصور غير المناسبة قبل نشرها، وتقدر تدربه أكثر على أمثلتك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الوجوه:&lt;/strong&gt; كشفها ومقارنتها والبحث عنها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ولاحظ إن ميزتي &lt;strong&gt;Streaming Video&lt;/strong&gt; و&lt;strong&gt;Batch Image Content Moderation&lt;/strong&gt; أقفلت على العملاء الجدد في 30 أبريل 2026. باقي الميزات ما تأثرت، وتقدر تعالج الإطارات أو الدفعات بنفسك عبر واجهة الصور.&lt;/p&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;انتبه مع الوجوه&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;التعرف على الأشخاص له تبعات قانونية وأخلاقية تختلف من بلد لبلد. خذ الموافقة، وتأكد من الأنظمة اللي تنطبق عليك قبل ما تستخدمه.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الكلام-transcribe-وpolly&quot; tabindex=&quot;-1&quot;&gt;الكلام: Transcribe وPolly &lt;a class=&quot;heading-anchor&quot; href=&quot;#الكلام-transcribe-وpolly&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Transcribe&lt;/strong&gt; يحول الكلام إلى نص، من ملف في S3 أو بث مباشر. ويقدر يفرق بين المتحدثين، وتضيف له مفرداتك مثل أسماء المنتجات، ويخفي البيانات الشخصية في اللغات المدعومة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Polly&lt;/strong&gt; يسوي العكس، ويحول النص إلى كلام. وتقدر تتحكم في النطق بطريقتين:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;القواميس (Lexicons):&lt;/strong&gt; تعلمه يقرأ &lt;code&gt;AWS&lt;/code&gt; كـ &amp;quot;Amazon Web Services&amp;quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSML:&lt;/strong&gt; وسوم في النص تضيف وقفات أو تأكيد أو حتى همس.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;الترجمة-translate&quot; tabindex=&quot;-1&quot;&gt;الترجمة: Translate &lt;a class=&quot;heading-anchor&quot; href=&quot;#الترجمة-translate&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Amazon Translate&lt;/strong&gt; يترجم بين 75 لغة، فورياً أو بدفعات من S3. وأضف &lt;strong&gt;مصطلحات خاصة&lt;/strong&gt; عشان تبقى أسماء علامتك ومصطلحاتك كما هي. وربطه مع Polly وTranscribe يعطيك محادثة مترجمة كاملة.&lt;/p&gt;
&lt;h2 id=&quot;المحادثة-lex-وconnect&quot; tabindex=&quot;-1&quot;&gt;المحادثة: Lex وConnect &lt;a class=&quot;heading-anchor&quot; href=&quot;#المحادثة-lex-وconnect&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lex&lt;/strong&gt; يبني روبوتات محادثة كتابية وصوتية. تحدد وش ممكن يبي المستخدم، وهذا &lt;strong&gt;Intent&lt;/strong&gt;، والتفاصيل اللي تحتاجها عشان تنفذه، واسمها &lt;strong&gt;Slots&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Connect&lt;/strong&gt; مركز اتصال في السحابة: أرقام هاتف وطوابير ومسارات وموظفين، بدون أجهزة، وتدفع حسب الاستخدام. ومع بعض ممكن يشتغلون كذا:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;عميل يتصل على الرقم في &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;يقول &amp;quot;أبي أغير موعدي&amp;quot;، و&lt;strong&gt;Lex&lt;/strong&gt; يفهم الطلب ويسأل عن التاريخ.&lt;/li&gt;
&lt;li&gt;دالة &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;Lambda&lt;/a&gt; تحدث الموعد في نظامك.&lt;/li&gt;
&lt;li&gt;ولو تعثر الروبوت، Connect يحول المكالمة لموظف.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;النص-comprehend&quot; tabindex=&quot;-1&quot;&gt;النص: Comprehend &lt;a class=&quot;heading-anchor&quot; href=&quot;#النص-comprehend&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Comprehend&lt;/strong&gt; يقرأ النص ويطلع معناه: اللغة، و&lt;strong&gt;المشاعر&lt;/strong&gt;، والكيانات مثل الأشخاص والأماكن، والعبارات المهمة، والبيانات الشخصية. وتقدر تدربه يصنف فئاتك، مثل نوع تذكرة الدعم.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comprehend Medical&lt;/strong&gt; يسوي هذا للنصوص الطبية: الحالات والأدوية والجرعات والفحوصات، ويكشف المعلومات الصحية المحمية.&lt;/p&gt;
&lt;p&gt;وميزات &lt;strong&gt;Topic Modeling&lt;/strong&gt; و&lt;strong&gt;Event Detection&lt;/strong&gt; و&lt;strong&gt;Prompt Safety Classification&lt;/strong&gt; فيه أقفلت على العملاء الجدد في 30 أبريل 2026.&lt;/p&gt;
&lt;h2 id=&quot;المستندات-textract&quot; tabindex=&quot;-1&quot;&gt;المستندات: Textract &lt;a class=&quot;heading-anchor&quot; href=&quot;#المستندات-textract&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Textract&lt;/strong&gt; أبعد من قراءة النص في ملف ممسوح: يفهم البنية، فيرجع لك &lt;strong&gt;النماذج&lt;/strong&gt; كأزواج حقل وقيمة، و&lt;strong&gt;الجداول&lt;/strong&gt; كصفوف وأعمدة. وله مسارات خاصة للفواتير والإيصالات والهويات.&lt;/p&gt;
&lt;h2 id=&quot;التوصيات-personalize&quot; tabindex=&quot;-1&quot;&gt;التوصيات: Personalize &lt;a class=&quot;heading-anchor&quot; href=&quot;#التوصيات-personalize&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Personalize&lt;/strong&gt; يبني &amp;quot;ممكن يعجبك كمان&amp;quot; من سلوك مستخدمينك: تعطيه مين شاف أو اشترى وش، وتاخذ API يرجع توصيات فورية، أو دفعات لحملات الإيميل. وما تحتاج تصمم نموذج بنفسك.&lt;/p&gt;
&lt;h2 id=&quot;البحث-في-مستنداتك-وماذا-عن-kendra&quot; tabindex=&quot;-1&quot;&gt;البحث في مستنداتك: وماذا عن Kendra؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#البحث-في-مستنداتك-وماذا-عن-kendra&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ممكن تقرأ عن &lt;strong&gt;Amazon Kendra&lt;/strong&gt;، وهي خدمة بحث ذكي في المستندات الداخلية. وقفت استقبال العملاء الجدد في 30 يوليو 2026، وAWS توجّه لـ &lt;strong&gt;Bedrock Knowledge Bases&lt;/strong&gt; كبديل، وهذا يوصلنا للقسم الجاي.&lt;/p&gt;
&lt;h2 id=&quot;النماذج-التوليدية-amazon-bedrock&quot; tabindex=&quot;-1&quot;&gt;النماذج التوليدية: Amazon Bedrock &lt;a class=&quot;heading-anchor&quot; href=&quot;#النماذج-التوليدية-amazon-bedrock&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bedrock&lt;/strong&gt; يعطيك نماذج أساسية من مزودين كثير، مثل Anthropic وAmazon وMeta وMistral، عبر API واحد وبدون سيرفرات. وتدفع لكل Token، يعني حسب كمية النص الداخل والخارج. وواجهة &lt;strong&gt;Converse&lt;/strong&gt; لها شكل واحد بين النماذج، فتغيير النموذج يعني تغيير قيمة وحدة.&lt;/p&gt;
&lt;p&gt;وما عاد تحتاج تفعّل النماذج واحد واحد، لأن الوصول صار يتحكم فيه IAM. والاستثناء نماذج Anthropic، وتحتاج نموذج لمرة وحدة قبل أول استخدام.&lt;/p&gt;
&lt;h3 id=&quot;knowledge-bases-إجابات-من-مستنداتك&quot; tabindex=&quot;-1&quot;&gt;Knowledge Bases: إجابات من مستنداتك &lt;a class=&quot;heading-anchor&quot; href=&quot;#knowledge-bases-إجابات-من-مستنداتك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;النموذج ما يعرف سياسات شركتك. وبدل ما تدربه، تلقى المقاطع المناسبة وتعطيه إياها مع السؤال. هذا اسمه &lt;strong&gt;RAG&lt;/strong&gt;، و&lt;strong&gt;Knowledge Bases&lt;/strong&gt; يتكفل فيه:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 204&quot; role=&quot;img&quot; aria-labelledby=&quot;rag-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;rag-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;494&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;557&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;السؤال&lt;/text&gt;
&lt;rect x=&quot;336&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Knowledge Base&lt;/text&gt;
&lt;text x=&quot;399&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يلقى المقاطع&lt;/text&gt;
&lt;rect x=&quot;178&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;النموذج&lt;/text&gt;
&lt;text x=&quot;241&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يجاوب منها&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;83&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الجواب&lt;/text&gt;
&lt;text x=&quot;83&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مع مصادره&lt;/text&gt;
&lt;line x1=&quot;494&quot; y1=&quot;49&quot; x2=&quot;464&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#rag-arrow)&quot;/&gt;
&lt;line x1=&quot;336&quot; y1=&quot;49&quot; x2=&quot;306&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#rag-arrow)&quot;/&gt;
&lt;line x1=&quot;178&quot; y1=&quot;49&quot; x2=&quot;148&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#rag-arrow)&quot;/&gt;
&lt;rect x=&quot;336&quot; y=&quot;124&quot; width=&quot;126&quot; height=&quot;66&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;152&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مستنداتك&lt;/text&gt;
&lt;text x=&quot;399&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;في S3 وغيره&lt;/text&gt;
&lt;line x1=&quot;399&quot; y1=&quot;124&quot; x2=&quot;399&quot; y2=&quot;86&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#rag-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;rag-caption&quot;&gt;الـ Knowledge Base يلقى أقرب المقاطع للسؤال في مستنداتك، والنموذج يجاوب منها بدل ذاكرته.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;باقي-الأدوات&quot; tabindex=&quot;-1&quot;&gt;باقي الأدوات &lt;a class=&quot;heading-anchor&quot; href=&quot;#باقي-الأدوات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Guardrails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تمنع المواضيع غير المرغوبة، وتخفي البيانات الشخصية، وتساعد في تقليل الإجابات المختلقة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AgentCore&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يشغّل ويدير وكلاء ينفذون إجراءات، مع أي إطار عمل ونموذج&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الدفعات والكاش&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تقلل تكلفة الشغل الكبير والأوامر المتكررة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;و&lt;strong&gt;Bedrock Agents Classic&lt;/strong&gt; أقفل على العملاء الجدد لصالح AgentCore، فلا تبدأ فيه لو شفته في مقال قديم.&lt;/p&gt;
&lt;h2 id=&quot;نموذجك-الخاص-sagemaker-ai&quot; tabindex=&quot;-1&quot;&gt;نموذجك الخاص: SageMaker AI &lt;a class=&quot;heading-anchor&quot; href=&quot;#نموذجك-الخاص-sagemaker-ai&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لما ما يكفي الجاهز، مثل توقع المخاطر من بيانات عندك أنت بس، &lt;strong&gt;Amazon SageMaker AI&lt;/strong&gt; (اسمه القديم SageMaker) يغطي الرحلة: دفاتر العمل، وتجهيز البيانات، والتدريب، ثم نقطة وصول تقدم التوقعات. و&lt;strong&gt;JumpStart&lt;/strong&gt; يعطيك مئات النماذج الجاهزة تبدأ منها.&lt;/p&gt;
&lt;p&gt;لا تخلط بينه وبين &lt;strong&gt;Amazon SageMaker&lt;/strong&gt; الجديد، وهو مظلة تجمع البيانات والتحليل والذكاء الاصطناعي في استوديو واحد. وكمان عدة إضافات فيه، مثل Ground Truth وClarify وModel Monitor، أقفلت على العملاء الجدد في منتصف 2026، فتأكد من حالة الميزة قبل ما تعتمد عليها.&lt;/p&gt;
&lt;h3 id=&quot;bedrock-أو-sagemaker-ai&quot; tabindex=&quot;-1&quot;&gt;Bedrock أو SageMaker AI؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#bedrock-أو-sagemaker-ai&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Bedrock&lt;/th&gt;
&lt;th&gt;SageMaker AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يبدأ من&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نموذج جاهز&lt;/td&gt;
&lt;td&gt;بياناتك، أو نموذج تخصصه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الإدارة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بدون سيرفرات&lt;/td&gt;
&lt;td&gt;تختار الحوسبة، أو تخصيص بدون سيرفرات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تدفع&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لكل Token&lt;/td&gt;
&lt;td&gt;غالباً على الحوسبة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الخبرة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;المطور يكفي&lt;/td&gt;
&lt;td&gt;تعلم الآلة يفيد كثير&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ونصيحة AWS نفسها: ابدأ بـ Bedrock مع الأوامر وKnowledge Bases، وانتقل لـ SageMaker AI لما تحتاج تغيّر سلوك النموذج.&lt;/p&gt;
&lt;h2 id=&quot;وماذا-عن-العربية&quot; tabindex=&quot;-1&quot;&gt;وماذا عن العربية؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وماذا-عن-العربية&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لو تطبيقك يخدم متحدثين بالعربية، شيك على هذا أول، لأن الخدمات مو سواء:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Translate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نعم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Comprehend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نعم، ومعها المشاعر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transcribe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الخليجية (&lt;code&gt;ar-AE&lt;/code&gt;) والفصحى (&lt;code&gt;ar-SA&lt;/code&gt;)، بس إخفاء البيانات الشخصية مو مدعوم لهم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Polly&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;زينة بالفصحى، وهالة وزيد بالخليجية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Textract&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لا: الإنجليزية والفرنسية والألمانية والإيطالية والبرتغالية والإسبانية فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bedrock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حسب النموذج، فجرب نموذجك على نصوصك&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;ربط-الخدمات&quot; tabindex=&quot;-1&quot;&gt;ربط الخدمات &lt;a class=&quot;heading-anchor&quot; href=&quot;#ربط-الخدمات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;القوة الحقيقية في ربطها مع اللي تعلمته. تخيل تسجيلات مكالمات تنزل في S3، وكل خطوة تشغّل اللي بعدها عبر &lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;الأحداث أو Step Functions&lt;/a&gt;:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 118&quot; role=&quot;img&quot; aria-labelledby=&quot;chain-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;chain-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;494&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;557&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تسجيل المكالمة&lt;/text&gt;
&lt;text x=&quot;557&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;في S3&lt;/text&gt;
&lt;rect x=&quot;336&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Transcribe&lt;/text&gt;
&lt;text x=&quot;399&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;إلى نص&lt;/text&gt;
&lt;rect x=&quot;178&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Comprehend&lt;/text&gt;
&lt;text x=&quot;241&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;المشاعر&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;83&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Bedrock&lt;/text&gt;
&lt;text x=&quot;83&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ملخص&lt;/text&gt;
&lt;line x1=&quot;494&quot; y1=&quot;59&quot; x2=&quot;464&quot; y2=&quot;59&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#chain-arrow)&quot;/&gt;
&lt;line x1=&quot;336&quot; y1=&quot;59&quot; x2=&quot;306&quot; y2=&quot;59&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#chain-arrow)&quot;/&gt;
&lt;line x1=&quot;178&quot; y1=&quot;59&quot; x2=&quot;148&quot; y2=&quot;59&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#chain-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;chain-caption&quot;&gt;كل خدمة تسوي شغلة وحدة وتسلم نتيجتها للي بعدها، بدون أي نموذج تدربه.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;وبدون أي تعلم آلة، المدير الحين يقرأ ملخص كل مكالمة ويشوف أيها انتهت بشكل سيئ.&lt;/p&gt;
&lt;h2 id=&quot;عملي-تعليق-يمر-على-أربع-خدمات&quot; tabindex=&quot;-1&quot;&gt;عملي: تعليق يمر على أربع خدمات &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-تعليق-يمر-على-أربع-خدمات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بناخذ تعليق عميل، ونحلله، ونترجمه، ونقرأه بصوت، ونرد عليه. وكلها استدعاءات مباشرة بدون أي تجهيز. وهذي الخدمات مو في كل المناطق، فلو قال أمر إنه ما قدر يتصل، أضف له &lt;code&gt;--region us-east-1&lt;/code&gt;. من CloudShell:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;REVIEW&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;The app is great, but delivery was very slow and support never replied.&quot;&lt;/span&gt;

aws comprehend detect-dominant-language &lt;span class=&quot;token parameter variable&quot;&gt;--text&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$REVIEW&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Languages[0]&quot;&lt;/span&gt;

aws comprehend detect-sentiment --language-code en &lt;span class=&quot;token parameter variable&quot;&gt;--text&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$REVIEW&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[Sentiment,SentimentScore]&quot;&lt;/span&gt;

aws comprehend detect-key-phrases --language-code en &lt;span class=&quot;token parameter variable&quot;&gt;--text&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$REVIEW&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;KeyPhrases[].Text&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف اللغة، والمشاعر مع درجاتها، والعبارات المهمة. الحين ترجمه للعربية، وتأكد إن Comprehend يفهم الترجمة كمان:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;ARABIC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws translate translate-text &lt;span class=&quot;token parameter variable&quot;&gt;--text&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$REVIEW&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --source-language-code en --target-language-code ar &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TranslatedText &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ARABIC&lt;/span&gt;&quot;&lt;/span&gt;

aws comprehend detect-sentiment --language-code ar &lt;span class=&quot;token parameter variable&quot;&gt;--text&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ARABIC&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Sentiment &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;حوّل الترجمة إلى صوت بـ Polly:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws polly synthesize-speech --voice-id Zeina --output-format mp3 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--text&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ARABIC&lt;/span&gt;&quot;&lt;/span&gt; review.mp3

&lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-lh&lt;/span&gt; review.mp3&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;عشان تسمعه، من قائمة &lt;strong&gt;Actions&lt;/strong&gt; في CloudShell اختر &lt;strong&gt;Download file&lt;/strong&gt;، واكتب &lt;code&gt;review.mp3&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;وأخيراً، اطلب من نموذج على Bedrock يرد على العميل. الأمر الأول يجيب معرف نموذج Amazon Nova Lite منخفض التكلفة في منطقتك. ولو طبع &lt;code&gt;None&lt;/code&gt;، أضف &lt;code&gt;--region us-east-1&lt;/code&gt; للأمرين:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;MODEL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws bedrock list-inference-profiles &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;inferenceProfileSummaries[?contains(inferenceProfileId,&#39;nova&#39;) &amp;amp;&amp;amp; contains(inferenceProfileId,&#39;lite&#39;)].inferenceProfileId | [0]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$MODEL&lt;/span&gt;

aws bedrock-runtime converse --model-id &lt;span class=&quot;token variable&quot;&gt;$MODEL&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--messages&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[{&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;role&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;:&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;user&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;,&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;content&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;:[{&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;text&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;:&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Reply to this customer in two short sentences: &lt;span class=&quot;token variable&quot;&gt;$REVIEW&lt;/span&gt;&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;}]}]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;output.message.content[0].text&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;عندك صورة؟ ارفعها من &lt;strong&gt;Actions&lt;/strong&gt; ثم &lt;strong&gt;Upload file&lt;/strong&gt;، واسأل Rekognition وش فيها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws rekognition detect-labels --image-bytes fileb://photo.jpg &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --max-labels &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Labels[].[Name,Confidence]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;ما فيه شي تحذفه&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;هذي الاستدعاءات ما تنشئ موارد، وتكلف جزء صغير من السنت. بس لاحظ إن نصك يروح لهذي الخدمات، فراجع قواعد البيانات لكل وحدة قبل ما ترسل بيانات عملائك الحقيقية.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ابدأ من &lt;strong&gt;الخدمات الجاهزة&lt;/strong&gt;، ثم &lt;strong&gt;Bedrock&lt;/strong&gt;، وبعدها فقط &lt;strong&gt;SageMaker AI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rekognition&lt;/strong&gt; للصور، و&lt;strong&gt;Transcribe&lt;/strong&gt; و&lt;strong&gt;Polly&lt;/strong&gt; للكلام، و&lt;strong&gt;Translate&lt;/strong&gt; للترجمة، و&lt;strong&gt;Comprehend&lt;/strong&gt; للنص.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Textract&lt;/strong&gt; يقرأ المستندات المنظمة، بس ما يدعم العربية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knowledge Bases&lt;/strong&gt; يجاوب من مستنداتك بدون تدريب نموذج، وهو البديل عن Kendra.&lt;/li&gt;
&lt;li&gt;ربط هذي الخدمات بالأحداث هو مكان القيمة الحقيقية.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;شركة تأمين يوصلها آلاف نماذج المطالبات الممسوحة بالإنجليزي. وتبي حقول كل نموذج وقيمه وجداوله في قاعدة بياناتها، بدون نموذج تدربه. أي خدمة تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon Rekognition&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon Textract&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon Comprehend&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Transcribe&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Textract يفهم بنية المستند، فيرجع النماذج كأزواج حقل وقيمة، والجداول كصفوف وأعمدة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يقدر يقرأ كلمات في صورة، بس ما يفهم النماذج والجداول.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يطلع المعنى من نص موجود عندك، وما يقرأ الملفات الممسوحة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحول الكلام إلى نص.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA-textract&quot;&gt;المستندات: Textract&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/textract/latest/dg/what-is.html&quot;&gt;What is Amazon Textract?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;شركة جديدة على AWS تبي مساعد يجاوب أسئلة الموظفين من مستندات سياساتها الداخلية. وما عندها فريق تعلم آلة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon Kendra&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;نموذج تدربه على المستندات في SageMaker AI&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon Lex لحاله&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Bedrock Knowledge Bases&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Knowledge Bases يلقى المقاطع المناسبة ويعطيها للنموذج مع السؤال، فما فيه شي تدربه.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا ما عاد يقبل عملاء جدد، وAWS توجّه لـ Knowledge Bases بدله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يحتاج خبرة في تعلم الآلة، والإجابة من المستندات ما تحتاج نموذج مدرب.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبني روبوتات حول نوايا تحددها، وما يجاوب من المستندات لحاله.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#knowledge-bases-%D8%A5%D8%AC%D8%A7%D8%A8%D8%A7%D8%AA-%D9%85%D9%86-%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA%D9%83&quot;&gt;Knowledge Bases: إجابات من مستنداتك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html&quot;&gt;Retrieve data and generate AI responses with Amazon Bedrock Knowledge Bases&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;علماء بيانات في بنك يبون يتوقعون مخاطر القروض من سجلات السداد الخاصة فيه لسنوات، وما فيه خدمة جاهزة تسوي هذا. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon SageMaker AI&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon Bedrock، باستخدام Prompts&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon Personalize&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Comprehend&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;هذا توقع من بيانات ما عند أحد غير البنك، فيحتاج نموذج خاص فيه. وSageMaker AI يغطي تجهيز البيانات والتدريب، ثم تقديم التوقعات من نقطة وصول.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يبدأ من نموذج جاهز، وما يدرب نموذج توقع على سجلات البنك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبني توصيات من سلوك المستخدمين، مثل &amp;quot;ممكن يعجبك كمان&amp;quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يطلع المعنى من النص، مثل المشاعر والكيانات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%86%D9%85%D9%88%D8%B0%D8%AC%D9%83-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-sagemaker-ai&quot;&gt;نموذجك الخاص: SageMaker AI&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/decision-guides/latest/bedrock-or-sagemaker/bedrock-or-sagemaker.html&quot;&gt;Amazon Bedrock or Amazon SageMaker AI?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;مركز اتصال يحفظ تسجيلاته في S3، بالإنجليزي. ومدير يبي يعرف أي مكالمات انتهت بشكل سيئ، بدون أي شغل تعلم آلة. أي سلسلة تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Polly، ثم Comprehend&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Rekognition، ثم Translate&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Transcribe، ثم Comprehend&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Textract، ثم Personalize&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Transcribe يحول كل تسجيل إلى نص، وتحليل المشاعر في Comprehend يبين أي مكالمات كانت سلبية.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Polly يسوي عكس المطلوب، يحول النص إلى كلام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; Rekognition يحلل الصور والفيديو، وTranslate يغير اللغة بس.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; Textract يقرأ المستندات، وPersonalize يبني توصيات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B1%D8%A8%D8%B7-%D8%A7%D9%84%D8%AE%D8%AF%D9%85%D8%A7%D8%AA&quot;&gt;ربط الخدمات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html&quot;&gt;What is Amazon Transcribe?&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/comprehend/latest/dg/how-sentiment.html&quot;&gt;Sentiment&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;متجر إلكتروني سعودي يبي يكشف مشاعر تعليقاته العربية مباشرة، ويترجمها للإنجليزي لمكتبه الرئيسي. أي &lt;strong&gt;خدمتين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon Textract&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon Polly&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon Comprehend&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Rekognition&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Amazon Translate&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comprehend يدعم العربية، بما فيها المشاعر، وTranslate يتكفل بالترجمة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يقرأ المستندات، وما يدعم العربية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يحول النص إلى صوت، وما يحلله ولا يترجمه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحلل الصور والفيديو.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%88%D9%85%D8%A7%D8%B0%D8%A7-%D8%B9%D9%86-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9&quot;&gt;وماذا عن العربية؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/comprehend/latest/dg/supported-languages.html&quot;&gt;Languages supported in Amazon Comprehend&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/translate/latest/dg/what-is-languages.html&quot;&gt;Supported languages and language codes&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بهذا نكمل قسم البيانات والذكاء الاصطناعي. تطبيقك صار كبير وفيه أشياء كثيرة شغالة. كيف تعرف إنه بخير، ومين غيّر وش؟ في &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;&lt;strong&gt;الجزء الخامس والعشرين&lt;/strong&gt;&lt;/a&gt; نبدأ القسم الأخير، مع المراقبة والتدقيق عبر CloudWatch وCloudTrail وConfig.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>تحليل البيانات: Athena وRedshift وGlue</title>
    <link href="https://blog.sultanops.com/posts/aws-23-athena-redshift-glue/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-23-athena-redshift-glue/</id>
    <summary>كيف تطلع إجابات من بياناتك. استعلامات SQL على S3 بـ Athena، ومستودع بيانات بـ Redshift، وتجهيز البيانات بـ Glue، مع البحث والشغل الكبير واللوحات والتيارات، وتجربة عملية يقلل فيها Parquet اللي يقرأه الاستعلام.</summary>
    <content type="html">&lt;p&gt;التطبيق اللي خلصنا تصميمه في &lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;الجزء الثاني والعشرين&lt;/a&gt; يطلع بيانات كثيرة: طلبات وسجلات وأحداث. وبعدين يسألك أحد: &amp;quot;أي مدينة نمت أكثر هالسنة؟&amp;quot;&lt;/p&gt;
&lt;p&gt;تقدر تشغّل هذا على قاعدة الإنتاج وتبطئها على عملائك. بس AWS عندها مجموعة خدمات مبنية للتحليل، وهذا الجزء دليل لها.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;SQL على ملفات في S3 بدون سيرفرات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Athena&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;مستودع بيانات لتقارير ثقيلة ومتكررة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Redshift&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;فهرس لبياناتك وتنظيفها وتحويلها&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Glue&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;صلاحيات على بحيرة بيانات كاملة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Lake Formation&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;بحث نصي وتحليل سجلات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;OpenSearch&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;شغل كبير بـ Spark أو Hadoop&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;EMR&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;لوحات متابعة لفريقك&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Quick Sight&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تحليل تيار وقت وصوله&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Managed Flink&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apache Kafka مُدار&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MSK&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;نوعين-من-الشغل&quot; tabindex=&quot;-1&quot;&gt;نوعين من الشغل &lt;a class=&quot;heading-anchor&quot; href=&quot;#نوعين-من-الشغل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الأسئلة اللي يسألها التطبيق تختلف عن الأسئلة اللي يسألها أصحاب القرار:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;تشغيل التطبيق (OLTP)&lt;/th&gt;
&lt;th&gt;التحليل (OLAP)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مثال&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;هات الطلب 1001&lt;/td&gt;
&lt;td&gt;مجموع المبيعات لكل مدينة خلال ثلاث سنوات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الصفوف المعنية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قليلة&lt;/td&gt;
&lt;td&gt;ملايين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;من يسأل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملايين العملاء&lt;/td&gt;
&lt;td&gt;محللين قليلين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الخدمات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;RDS&lt;/a&gt; و&lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;DynamoDB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Athena وRedshift&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;سر خدمات التحليل إنها تخزن البيانات &lt;strong&gt;بالأعمدة&lt;/strong&gt;. عشان تجمع عمود واحد، ما تحتاج تقرأ الباقي:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 196&quot; role=&quot;img&quot; aria-labelledby=&quot;warehouse-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;warehouse-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;475&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بالصفوف: يقرأ كل شي&lt;/text&gt;
&lt;text x=&quot;565&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;id&lt;/text&gt;
&lt;rect x=&quot;520&quot; y=&quot;58&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;520&quot; y=&quot;92&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;520&quot; y=&quot;126&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;city&lt;/text&gt;
&lt;rect x=&quot;430&quot; y=&quot;58&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;430&quot; y=&quot;92&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;430&quot; y=&quot;126&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;385&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;amount&lt;/text&gt;
&lt;rect x=&quot;340&quot; y=&quot;58&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;340&quot; y=&quot;92&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;340&quot; y=&quot;126&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;165&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بالأعمدة: يقرأ عمود واحد&lt;/text&gt;
&lt;text x=&quot;255&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;id&lt;/text&gt;
&lt;rect x=&quot;210&quot; y=&quot;58&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;rect x=&quot;210&quot; y=&quot;92&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;rect x=&quot;210&quot; y=&quot;126&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;165&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;city&lt;/text&gt;
&lt;rect x=&quot;120&quot; y=&quot;58&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;rect x=&quot;120&quot; y=&quot;92&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;rect x=&quot;120&quot; y=&quot;126&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;amount&lt;/text&gt;
&lt;rect x=&quot;30&quot; y=&quot;58&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;30&quot; y=&quot;92&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;rect x=&quot;30&quot; y=&quot;126&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;182&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الاستعلام: SUM(amount)&amp;#x200E;&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;warehouse-caption&quot;&gt;عشان تجمع عمود المبلغ، التخزين بالصفوف يمر على كل الحقول، والتخزين بالأعمدة يقرأ هذا العمود وحده.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;amazon-athena-sql-على-s3&quot; tabindex=&quot;-1&quot;&gt;Amazon Athena: SQL على S3 &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-athena-sql-على-s3&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Athena&lt;/strong&gt; يخليك تستعلم من ملفات S3 مباشرة بـ SQL. ما فيه شي تشغله: توصف الملفات كجدول، والبيانات تبقى مكانها.&lt;/p&gt;
&lt;p&gt;تدفع حوالي &lt;strong&gt;5 دولار لكل TB يتم مسحه&lt;/strong&gt;، بحد أدنى 10 MB للاستعلام. وإنشاء الجداول والاستعلامات الفاشلة ما تكلف شي. ويناسب الأسئلة العابرة وتحليل السجلات، مثل سجلات موزع الحمل أو &lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;S3&lt;/a&gt;، وهو كمان اللي توجهك له AWS بعد ما أقفلت &lt;strong&gt;S3 Select&lt;/strong&gt; على العملاء الجدد.&lt;/p&gt;
&lt;h3 id=&quot;اقرأ-أقل-وادفع-أقل&quot; tabindex=&quot;-1&quot;&gt;اقرأ أقل، وادفع أقل &lt;a class=&quot;heading-anchor&quot; href=&quot;#اقرأ-أقل-وادفع-أقل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;بما إن السعر يعتمد على اللي ينقرأ، القراءة الأقل تعني فاتورة أقل وجواب أسرع:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;تنسيقات الأعمدة:&lt;/strong&gt; حوّل الملفات إلى &lt;strong&gt;Parquet&lt;/strong&gt; أو ORC، فالاستعلام يقرأ أعمدته فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التقسيم (Partitions):&lt;/strong&gt; قسّم البيانات إلى مسارات مثل &lt;code&gt;year=2025/&lt;/code&gt;، فالاستعلام يتجاهل الباقي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الضغط:&lt;/strong&gt; كل ما صغرت البيانات، قل اللي ينمسح.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ملفات أكبر:&lt;/strong&gt; آلاف الملفات الصغيرة تبطئ الشغل، فادمجها.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 188&quot; role=&quot;img&quot; aria-labelledby=&quot;partition-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;partition-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;390&quot; y=&quot;52&quot; width=&quot;230&quot; height=&quot;84&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;505&quot; y=&quot;89&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Athena&lt;/text&gt;
&lt;text x=&quot;505&quot; y=&quot;109&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;WHERE year = 2025&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;250&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;145&quot; y=&quot;33&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;year=2024/&amp;#x200E;&lt;/text&gt;
&lt;text x=&quot;145&quot; y=&quot;53&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يتجاهله&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;70&quot; width=&quot;250&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;145&quot; y=&quot;89&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;year=2025/&amp;#x200E;&lt;/text&gt;
&lt;text x=&quot;145&quot; y=&quot;109&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يقرأه&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;126&quot; width=&quot;250&quot; height=&quot;48&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;145&quot; y=&quot;145&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;year=2026/&amp;#x200E;&lt;/text&gt;
&lt;text x=&quot;145&quot; y=&quot;165&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يتجاهله&lt;/text&gt;
&lt;line x1=&quot;390&quot; y1=&quot;94&quot; x2=&quot;272&quot; y2=&quot;94&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#partition-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;partition-caption&quot;&gt;لما تكون البيانات مقسمة بالسنة، استعلام عن 2025 يقرأ مجلد واحد ويتجاهل الباقي، فتدفع على اللي قرأه فقط.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;الاستعلامات-الموحدة&quot; tabindex=&quot;-1&quot;&gt;الاستعلامات الموحدة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الاستعلامات-الموحدة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;بياناتك مو كلها في S3؟ &lt;strong&gt;Federated Query&lt;/strong&gt; يخلي Athena يوصل لمصادر ثانية مثل DynamoDB أو RDS، عبر موصل يشتغل كدالة Lambda في حسابك. واستعلام واحد يقدر يربطها مع ملفاتك كمان.&lt;/p&gt;
&lt;h2 id=&quot;amazon-redshift-المستودع&quot; tabindex=&quot;-1&quot;&gt;Amazon Redshift: المستودع &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-redshift-المستودع&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لما تصير التقارير ثقيلة ومتكررة، مع ربط جداول كثير ومستخدمين كثير، تحتاج &lt;strong&gt;مستودع بيانات&lt;/strong&gt;. &lt;strong&gt;Redshift&lt;/strong&gt; مبني على PostgreSQL، ويخزن البيانات بالأعمدة، ويقسم الاستعلام على عدة عقد بالتوازي.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Serverless&lt;/th&gt;
&lt;th&gt;Provisioned&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تختار&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ولا شي، والسعة تضبط نفسها&lt;/td&gt;
&lt;td&gt;نوع العقد وعددها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تدفع على&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وقت الحوسبة لما تشتغل الاستعلامات&lt;/td&gt;
&lt;td&gt;كل عقدة بالساعة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حمل متغير أو متقطع&lt;/td&gt;
&lt;td&gt;حمل ثابت، أو تحتاج Multi-AZ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;إدخال-البيانات&quot; tabindex=&quot;-1&quot;&gt;إدخال البيانات &lt;a class=&quot;heading-anchor&quot; href=&quot;#إدخال-البيانات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;&lt;code&gt;COPY&lt;/code&gt; من S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الطريقة المعتادة: يحمّل دفعة وحدة وبالتوازي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Firehose&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;تيار&lt;/a&gt; ينزل في S3 ثم ينحمل بـ &lt;code&gt;COPY&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zero-ETL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نسخ تلقائي من مصادر مثل Aurora وRDS وDynamoDB، بدون بناء مسار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;INSERT&lt;/code&gt; صف صف&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تجنبه مع الكميات الكبيرة، لأنه بطيء جداً&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;نقاط-تستاهل-تعرفها&quot; tabindex=&quot;-1&quot;&gt;نقاط تستاهل تعرفها &lt;a class=&quot;heading-anchor&quot; href=&quot;#نقاط-تستاهل-تعرفها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Redshift Spectrum:&lt;/strong&gt; استعلم من ملفات S3 داخل Redshift بدون تحميلها، واربطها مع جداولك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اللقطات:&lt;/strong&gt; تلقائية وتزايدية، وتقدر تنسخها لمنطقة ثانية عشان تتعافى من كارثة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-AZ:&lt;/strong&gt; متاح في مجموعات RA3 من نوع Provisioned، بعقد في منطقتي توفر خلف نقطة وصول وحدة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;athena-أو-redshift&quot; tabindex=&quot;-1&quot;&gt;Athena أو Redshift؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#athena-أو-redshift&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Athena&lt;/th&gt;
&lt;th&gt;Redshift&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;البيانات في&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;S3&lt;/td&gt;
&lt;td&gt;المستودع، ومعها S3 عبر Spectrum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التجهيز&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ولا شي&lt;/td&gt;
&lt;td&gt;قليل مع Serverless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تدفع على&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;البيانات الممسوحة&lt;/td&gt;
&lt;td&gt;وقت الحوسبة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أسئلة عابرة وسجلات&lt;/td&gt;
&lt;td&gt;تقارير ثقيلة ومتكررة ولوحات&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ابدأ بـ Athena، وانتقل لـ Redshift لما تصير استعلاماتك متكررة لدرجة تبرر تكلفته.&lt;/p&gt;
&lt;h2 id=&quot;aws-glue-تجهيز-البيانات&quot; tabindex=&quot;-1&quot;&gt;AWS Glue: تجهيز البيانات &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-glue-تجهيز-البيانات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;التحليل يفترض إن البيانات نظيفة ومرتبة، وهذا نادر. &lt;strong&gt;Glue&lt;/strong&gt; مجموعة أدوات بدون سيرفرات لهذا الغرض:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Data Catalog&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قائمة مركزية بجداولك وأعمدتها، يستخدمها Athena وRedshift Spectrum وEMR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Crawlers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تمسح S3 وتستنتج الأعمدة، ثم تضيفها للفهرس&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ETL Jobs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كود Spark يستخرج البيانات ويحولها ويحملها، مثل CSV إلى Parquet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Job Bookmarks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تتذكر اللي تمت معالجته، فما يعيد الشغل الملفات القديمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DataBrew&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ينظف البيانات بالواجهة بدون كود&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;نمط معروف: ينزل ملف في S3، وحدث يشغّل شغل Glue، ويحوله إلى Parquet في مجلد ثاني. ولاحظ إن &lt;strong&gt;Glue Ray Jobs&lt;/strong&gt; أقفلت على العملاء الجدد في 30 أبريل 2026، بينما شغل Spark مستمر عادي.&lt;/p&gt;
&lt;p&gt;وممكن تقرأ عن &lt;strong&gt;AWS Data Pipeline&lt;/strong&gt;، خدمة أقدم لنقل البيانات ومعالجتها بجدول. وهي مقفلة على العملاء الجدد وفي وضع الصيانة، فاستخدم Glue أو Step Functions للشغل الجديد.&lt;/p&gt;
&lt;h2 id=&quot;lake-formation-صلاحيات-البحيرة&quot; tabindex=&quot;-1&quot;&gt;Lake Formation: صلاحيات البحيرة &lt;a class=&quot;heading-anchor&quot; href=&quot;#lake-formation-صلاحيات-البحيرة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;S3 مع ملفات Parquet وفهرس هو اللي يسمونه &lt;strong&gt;بحيرة بيانات (Data Lake)&lt;/strong&gt;. ولما تكبر، إدارة الوصول عبر &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;سياسات الحاوية&lt;/a&gt; تصير صعبة، لأن S3 يعرف الملفات، مو الأعمدة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lake Formation&lt;/strong&gt; يعطيك مكان واحد تمنح فيه الوصول بقاعدة البيانات والجدول والعمود وحتى الصف: فريق المبيعات يشوف الطلبات بدون أرقام البطاقات مثلاً. وهذي الصلاحيات تنطبق عبر خدمات مثل Athena وRedshift وEMR.&lt;/p&gt;
&lt;h2 id=&quot;البحث-والشغل-الكبير-واللوحات&quot; tabindex=&quot;-1&quot;&gt;البحث والشغل الكبير واللوحات &lt;a class=&quot;heading-anchor&quot; href=&quot;#البحث-والشغل-الكبير-واللوحات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;opensearch&quot; tabindex=&quot;-1&quot;&gt;OpenSearch &lt;a class=&quot;heading-anchor&quot; href=&quot;#opensearch&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;قاعدة البيانات شاطرة في الجلب بالمفتاح. &lt;strong&gt;OpenSearch&lt;/strong&gt; شاطر في البحث بأي كلمة في أي حقل، وفي تحليل السجلات. ويجي كـ &lt;strong&gt;مجموعات مُدارة&lt;/strong&gt; تتحكم في أحجامها، أو &lt;strong&gt;Serverless&lt;/strong&gt; للحمل المتغير.&lt;/p&gt;
&lt;p&gt;وغالباً يكون نسخة من بياناتك، مو المصدر. نمطين معروفين:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;بحث على جدول:&lt;/strong&gt; DynamoDB Streams ثم Lambda ثم OpenSearch. تبحث هناك، ثم تجيب العنصر كامل من الجدول.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تحليل السجلات:&lt;/strong&gt; CloudWatch Logs ثم Firehose ثم OpenSearch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;amazon-emr&quot; tabindex=&quot;-1&quot;&gt;Amazon EMR &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-emr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;عندك شغل &lt;strong&gt;Spark&lt;/strong&gt; أو &lt;strong&gt;Hadoop&lt;/strong&gt; قائم؟ &lt;strong&gt;EMR&lt;/strong&gt; يشغله، وتقدر تختار تشغيله على EC2 أو EKS أو كـ Serverless. وعلى EC2 فيه ثلاث أنواع من العقد:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تنسق المجموعة&lt;/td&gt;
&lt;td&gt;On-Demand أو Reserved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تشغل المهام وتخزن البيانات&lt;/td&gt;
&lt;td&gt;On-Demand أو Reserved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تشغل المهام فقط، وهي اختيارية&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-04-ec2-pricing-networking/&quot;&gt;Spot&lt;/a&gt; مثالي لها&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;quick-sight&quot; tabindex=&quot;-1&quot;&gt;Quick Sight &lt;a class=&quot;heading-anchor&quot; href=&quot;#quick-sight&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Amazon Quick Sight&lt;/strong&gt; يبني لوحات متابعة من Athena وRedshift وRDS وS3 وغيرها. كان اسمه QuickSight، ومن أكتوبر 2025 صار جزء من مجموعة أوسع اسمها Amazon Quick، مع إن الـ API لسا يستخدم الاسم القديم.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SPICE:&lt;/strong&gt; محرك في الذاكرة يخلي اللوحات سريعة، بدون ما يضغط على المصدر مع كل مشاهدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analysis أو Dashboard:&lt;/strong&gt; تعدل في الـ Analysis، وتنشره كـ Dashboard للقراءة فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أمان الصفوف:&lt;/strong&gt; كل مدير يشوف بيانات منطقته فقط.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;التيارات-flink-وkafka&quot; tabindex=&quot;-1&quot;&gt;التيارات: Flink وKafka &lt;a class=&quot;heading-anchor&quot; href=&quot;#التيارات-flink-وkafka&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;Kinesis وFirehose&lt;/a&gt; يوصلون البيانات. طيب لو تبي تحللها وقت وصولها، مثل كشف نمط مشبوه خلال ثواني؟&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Managed Service for Apache Flink&lt;/strong&gt; (اسمه القديم Kinesis Data Analytics) يشغّل تطبيقات Flink تقرأ من تيار Kinesis أو من MSK، بدون ما تدير المجموعة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Amazon MSK&lt;/strong&gt; هو &lt;strong&gt;Apache Kafka&lt;/strong&gt; مُدار، أشهر منصة تيارات في عالم المصادر المفتوحة. ويجي كمجموعات Provisioned بوسطاء Standard أو Express، أو كـ Serverless.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Kinesis Data Streams&lt;/th&gt;
&lt;th&gt;Amazon MSK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ينقسم إلى&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shards&lt;/td&gt;
&lt;td&gt;Topics وPartitions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الواجهات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;خاصة بـ AWS&lt;/td&gt;
&lt;td&gt;Kafka القياسية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;حجم السجل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 MiB افتراضياً، وحتى 10 MiB&lt;/td&gt;
&lt;td&gt;1 MB افتراضياً، وقابل للتعديل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;اختره لو&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تبي أبسط خيار على AWS&lt;/td&gt;
&lt;td&gt;عندك تطبيقات وأدوات Kafka&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;كيف-توصل-البيانات&quot; tabindex=&quot;-1&quot;&gt;كيف توصل البيانات؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كيف-توصل-البيانات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;اختيار طريق الإدخال يبدأ من كم مرة توصل البيانات، وكم حجمها:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;ملفات من سيرفر أو NAS بجدول&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;DataSync&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ملفات من شركاء عبر SFTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;Transfer Family&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;سجلات صغيرة باستمرار، لأكثر من قارئ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;Kinesis Data Streams&lt;/a&gt; أو MSK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;سجلات صغيرة باستمرار، تنزل في التخزين&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;Data Firehose&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;صفوف تتغير في قاعدة بيانات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero-ETL أو &lt;a href=&quot;/posts/aws-28-disaster-recovery-migration/&quot;&gt;DMS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مجموعات بيانات من شركات ثانية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AWS Data Exchange&lt;/strong&gt;، وتشترك فيها من خلاله&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وأمّن كل طريق بنفس الأسلوب: أدوار IAM بأقل صلاحية، وتشفير أثناء النقل والتخزين، وطرق خاصة مثل &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;VPC Endpoints&lt;/a&gt; بدل الإنترنت العام لما تقدر.&lt;/p&gt;
&lt;h2 id=&quot;الصورة-الكاملة&quot; tabindex=&quot;-1&quot;&gt;الصورة الكاملة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الصورة-الكاملة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;هذا كيف تجتمع القطع في مسار معتاد:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 208&quot; role=&quot;img&quot; aria-labelledby=&quot;pipeline-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;pipeline-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;494&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;557&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;المصادر&lt;/text&gt;
&lt;text x=&quot;557&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تطبيقات وسجلات&lt;/text&gt;
&lt;rect x=&quot;336&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Firehose&lt;/text&gt;
&lt;text x=&quot;399&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يجمع&lt;/text&gt;
&lt;rect x=&quot;178&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;text x=&quot;241&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بيانات خام&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;83&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Glue&lt;/text&gt;
&lt;text x=&quot;83&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ينظف ويحول&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;124&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;83&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;text x=&quot;83&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;Parquet&lt;/text&gt;
&lt;rect x=&quot;178&quot; y=&quot;124&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Athena&lt;/text&gt;
&lt;text x=&quot;241&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يجاوب بـ SQL&lt;/text&gt;
&lt;rect x=&quot;336&quot; y=&quot;124&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Quick Sight&lt;/text&gt;
&lt;text x=&quot;399&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لوحات&lt;/text&gt;
&lt;rect x=&quot;494&quot; y=&quot;124&quot; width=&quot;126&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;557&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;فريقك&lt;/text&gt;
&lt;text x=&quot;557&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يقرر&lt;/text&gt;
&lt;line x1=&quot;494&quot; y1=&quot;49&quot; x2=&quot;464&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;line x1=&quot;336&quot; y1=&quot;49&quot; x2=&quot;306&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;line x1=&quot;178&quot; y1=&quot;49&quot; x2=&quot;148&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;line x1=&quot;83&quot; y1=&quot;84&quot; x2=&quot;83&quot; y2=&quot;122&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;line x1=&quot;146&quot; y1=&quot;159&quot; x2=&quot;176&quot; y2=&quot;159&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;line x1=&quot;304&quot; y1=&quot;159&quot; x2=&quot;334&quot; y2=&quot;159&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;line x1=&quot;462&quot; y1=&quot;159&quot; x2=&quot;492&quot; y2=&quot;159&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#pipeline-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;pipeline-caption&quot;&gt;البيانات تنزل خام في S3، وGlue يحولها إلى Parquet، وAthena يجاوب منها، وQuick Sight يعرض النتيجة. وRedshift ممكن ياخذ مكان Athena في التقارير الثقيلة.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;عملي-parquet-يقلل-اللي-يقرأه-الاستعلام&quot; tabindex=&quot;-1&quot;&gt;عملي: Parquet يقلل اللي يقرأه الاستعلام &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-parquet-يقلل-اللي-يقرأه-الاستعلام&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنولّد ملف فيه 200,000 طلب ونسأله نفس السؤال مرتين. من CloudShell:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;BUCKET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;series-data-&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;
aws s3 mb s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;BEGIN {
  srand(7)
  split(&quot;Riyadh Jeddah Dammam Abha Tabuk&quot;, city, &quot; &quot;)
  for (i = 1; i &amp;lt;= 200000; i++)
    printf &quot;%d,%s,%d,%.2f&#92;n&quot;, i, city[int(rand()*5)+1], 2024+int(rand()*3), rand()*500
}&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; sales.csv

&lt;span class=&quot;token function&quot;&gt;head&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-3&lt;/span&gt; sales.csv
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; sales.csv s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/raw/sales.csv&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;هذي الدالة تشغّل استعلام وتنتظره، ثم تطبع حالته والبايتات اللي مسحها ونتيجته:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function-name function&quot;&gt;run_sql&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws athena start-query-execution --query-string &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    --result-configuration &lt;span class=&quot;token assign-left variable&quot;&gt;OutputLocation&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;s3://$BUCKET/results/ &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; QueryExecutionId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;token assign-left variable&quot;&gt;STATE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws athena get-query-execution --query-execution-id $ID &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
      &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; QueryExecution.Status.State &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$STATE&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; QUEUED &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$STATE&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; RUNNING &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;break&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;
  aws athena get-query-execution --query-execution-id &lt;span class=&quot;token variable&quot;&gt;$ID&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;QueryExecution.[Status.State,Statistics.DataScannedInBytes]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text
  aws athena get-query-results --query-execution-id &lt;span class=&quot;token variable&quot;&gt;$ID&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ResultSet.Rows[*].Data[*].VarCharValue&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;صف الملف كجدول. ما ينتقل شي، والبيانات تبقى في S3:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;run_sql &lt;span class=&quot;token string&quot;&gt;&quot;CREATE DATABASE series_data&quot;&lt;/span&gt;

run_sql &lt;span class=&quot;token string&quot;&gt;&quot;CREATE EXTERNAL TABLE series_data.sales_csv (
  order_id INT, city STRING, year INT, amount DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY &#39;,&#39;
LOCATION &#39;s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/raw/&#39;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;اسأل السؤال:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;run_sql &lt;span class=&quot;token string&quot;&gt;&quot;SELECT city, ROUND(SUM(amount)) AS total
FROM series_data.sales_csv WHERE year = 2025
GROUP BY city ORDER BY total DESC&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;يطلع لك المجموع لكل مدينة، وأول سطر يبين إن الملف كله انمسح، أكثر من 5 MB بشوي، مع إن السؤال يخص سنة وحدة وعمودين. الحين أنشئ نسخة Parquet مقسمة باستعلام واحد:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;run_sql &lt;span class=&quot;token string&quot;&gt;&quot;CREATE TABLE series_data.sales_parquet WITH (
  format = &#39;PARQUET&#39;,
  external_location = &#39;s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/parquet/&#39;,
  partitioned_by = ARRAY[&#39;year&#39;]
) AS SELECT order_id, city, amount, year FROM series_data.sales_csv&quot;&lt;/span&gt;

aws s3 &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/parquet/&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف مجلد لكل سنة. اسأل نفس السؤال من الجدول الجديد:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;run_sql &lt;span class=&quot;token string&quot;&gt;&quot;SELECT city, ROUND(SUM(amount)) AS total
FROM series_data.sales_parquet WHERE year = 2025
GROUP BY city ORDER BY total DESC&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الأرقام نفسها، بس البايتات الممسوحة جزء صغير من الرقم الأول. وعلى التيرابايتات، هذا الفرق هو فاتورتك.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;التجربة تكلف جزء صغير من السنت. احذف الجداول والحاوية:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;run_sql &lt;span class=&quot;token string&quot;&gt;&quot;DROP TABLE series_data.sales_parquet&quot;&lt;/span&gt;
run_sql &lt;span class=&quot;token string&quot;&gt;&quot;DROP TABLE series_data.sales_csv&quot;&lt;/span&gt;
run_sql &lt;span class=&quot;token string&quot;&gt;&quot;DROP DATABASE series_data&quot;&lt;/span&gt;
aws s3 rb s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--force&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;افصل &lt;strong&gt;التحليل&lt;/strong&gt; عن قاعدة الإنتاج، وخزن البيانات &lt;strong&gt;بالأعمدة&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Athena&lt;/strong&gt; يستعلم من S3 بدون سيرفرات، وParquet والتقسيم يقللون تكلفته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redshift&lt;/strong&gt; للتقارير الثقيلة والمتكررة، و&lt;strong&gt;Serverless&lt;/strong&gt; بداية سهلة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Glue&lt;/strong&gt; يفهرس بياناتك ويحولها، و&lt;strong&gt;Lake Formation&lt;/strong&gt; يحدد من يشوف أي عمود.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenSearch&lt;/strong&gt; للبحث، و&lt;strong&gt;EMR&lt;/strong&gt; لشغل Spark، و&lt;strong&gt;Quick Sight&lt;/strong&gt; للوحات، و&lt;strong&gt;Flink&lt;/strong&gt; و&lt;strong&gt;MSK&lt;/strong&gt; للتيارات.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 6&lt;/p&gt;
&lt;p&gt;محللو سلسلة متاجر يشغّلون تقارير ثقيلة طول اليوم، فيها ربط جداول كثير على مبيعات سنوات، وعشرات اللوحات تتحدث منها. أي خدمة مبنية لهذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon Athena، يستعلم عن ملفات CSV في S3&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;نسخة قراءة من RDS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon Redshift&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon OpenSearch Service&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;هذا شغل مستودع البيانات. Redshift يخزن البيانات بالأعمدة ويقسم كل استعلام على عدة عقد، فتشتغل التقارير الثقيلة المتكررة بسرعة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يناسب الأسئلة العابرة، ومع هذا العدد من الاستعلامات بتدفع على كل مسح.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يخفف عن الإنتاج، بس لسا يخزن بالصفوف وما هو مبني لتحليل بهذا الحجم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا للبحث النصي وتحليل السجلات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#athena-%D8%A3%D9%88-redshift&quot;&gt;Athena أو Redshift؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html&quot;&gt;What is Amazon Redshift?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 6&lt;/p&gt;
&lt;p&gt;شركاء ينزلون ملفات CSV في حاوية S3 كل يوم. وفريق يبي يحولها إلى Parquet بجدول، بدون سيرفرات يشغلها وبدون إعادة معالجة الملفات اللي تحولت. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;مهمة Glue ETL، مع تفعيل Job Bookmarks&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Glue Crawler يشتغل كل يوم&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;مجموعة EMR على EC2&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;قاعدة Lifecycle تنقل الملفات لفئة أرخص&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;مهمة Glue ETL تشغّل Spark بدون سيرفرات تديرها، وJob Bookmarks تتذكر اللي تعالج، فكل تشغيل يتعامل مع الملفات الجديدة فقط.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الـ Crawler يستنتج الأعمدة ويحدث الفهرس، وما يحول شي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يقدر يسوي التحويل، بس هو مجموعة لازم تشغلها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا ينقل الملفات بين الفئات، وما يغير تنسيقها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#aws-glue-%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA&quot;&gt;AWS Glue: تجهيز البيانات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html&quot;&gt;Tracking processed data using job bookmarks&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 6&lt;/p&gt;
&lt;p&gt;بحيرة بيانات شركة فيها جدول طلبات في S3، ينستعلم عنه عبر Athena. وفريق المبيعات لازم يشوف الجدول، بس بدون عمود رقم البطاقة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;سياسة حاوية تخفي هذا العمود عن الفريق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Glue Crawler يتخطى هذا العمود&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;S3 Access Point لفريق المبيعات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Lake Formation، بصلاحية على مستوى العمود&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lake Formation يعطي الوصول لحد العمود والصف، وهذي الصلاحيات تنطبق عبر خدمات مثل Athena.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; S3 تعرف الملفات، مو الأعمدة اللي داخلها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الـ Crawler يوصف البيانات بس، وما يتحكم في وصول أحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يعطي الفريق بوابته للحاوية، ولسا يشتغل على مستوى الملفات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#lake-formation-%D8%B5%D9%84%D8%A7%D8%AD%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D9%8A%D8%B1%D8%A9&quot;&gt;Lake Formation: صلاحيات البحيرة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/lake-formation/latest/dg/data-filtering.html&quot;&gt;Data filtering and cell-level security in Lake Formation&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 6&lt;/p&gt;
&lt;p&gt;متجر يحفظ منتجاته في DynamoDB. والعملاء يبون يبحثون عن أي كلمة في اسم المنتج أو وصفه، والجدول لازم يبقى مصدر الحقيقة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;فهرس ثانوي عام على الوصف&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;DynamoDB Streams وLambda، يغذون نسخة في OpenSearch&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;مسح الجدول بفلتر مع كل بحث&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;DAX قدام الجدول&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OpenSearch يلقى أي كلمة في أي حقل. وStreams وLambda يبقونه محدث، فتبحث هناك، ثم تجيب العنصر كامل من الجدول.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الفهرس يلقى العناصر بالمفتاح، مو بأي كلمة داخل نص طويل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يقرأ الجدول كله مع كل بحث، فهو بطيء ومكلف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يسرّع القراءة بالمفتاح، وما يضيف بحث نصي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#opensearch&quot;&gt;OpenSearch&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html&quot;&gt;Loading streaming data into Amazon OpenSearch Service&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 6&lt;/p&gt;
&lt;p&gt;فاتورة Athena عند فريق عالية. واستعلاماته عادةً تقرأ عمودين من شهر واحد، بس كل البيانات في S3 في مجلد كبير من ملفات CSV. أي &lt;strong&gt;تغييرين&lt;/strong&gt; يقللون التكلفة؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نقل الملفات إلى Glacier Deep Archive&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تحويل الملفات إلى Parquet&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تشغيل الاستعلامات بالليل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تفعيل S3 Versioning&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;تقسيم البيانات حسب الشهر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Athena يحاسب على البيانات اللي يمسحها. وParquet يخلي الاستعلام يقرأ أعمدته فقط، والتقسيم يخليه يتجاهل باقي الشهور.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الملفات في هذي الفئة لازم تنسترجع قبل ما تنقرأ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; السعر يعتمد على اللي ينقرأ، مو على وقته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحتفظ بالإصدارات القديمة، وما يغير شي في اللي يقرأه الاستعلام.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%82%D8%B1%D8%A3-%D8%A3%D9%82%D9%84-%D9%88%D8%A7%D8%AF%D9%81%D8%B9-%D8%A3%D9%82%D9%84&quot;&gt;اقرأ أقل، وادفع أقل&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/athena/latest/ug/columnar-storage.html&quot;&gt;Use columnar storage formats&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/athena/latest/ug/partitions.html&quot;&gt;Partition your data&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 6&lt;/p&gt;
&lt;p&gt;فريق تحليل يبي بيانات طقس من مزود تجاري في بحيرة بياناته، تتحدث باشتراك، بدون بناء قناة خاصة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;AWS Data Exchange&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS Transfer Family&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Glue Crawlers&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Kinesis Data Streams&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Data Exchange هو المكان اللي تلقى فيه مجموعات بيانات الشركات الثانية وتشترك فيها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يستقبل ملفات عبر SFTP وأخواته، والمزود لازم يرسلها لك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يوصف بيانات موجودة عندك، وما يجيب بيانات جديدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; لازم تكتب اللي يغذيه، وهذا الشغل اللي يبي الفريق يتجنبه.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%83%D9%8A%D9%81-%D8%AA%D9%88%D8%B5%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA&quot;&gt;كيف توصل البيانات؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/data-exchange/latest/userguide/what-is.html&quot;&gt;What is AWS Data Exchange?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;الحين فهمت البيانات اللي عندك. تقدر تطلع منها أكثر، مثل قراءة المستندات وفهم الكلام وتوليد النصوص؟ في &lt;a href=&quot;/posts/aws-24-ai-services/&quot;&gt;&lt;strong&gt;الجزء الرابع والعشرين&lt;/strong&gt;&lt;/a&gt; نمر على خدمات الذكاء الاصطناعي الجاهزة في AWS.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>تصميم تطبيقات بدون خوادم</title>
    <link href="https://blog.sultanops.com/posts/aws-22-serverless-design/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-22-serverless-design/</id>
    <summary>نجمع القطع مع بعض. سير عمل طويل بـ Step Functions، ومستخدمين بـ Cognito، وتصميمين لتطبيقات كاملة، والخدمات المصغرة وربح رخيص مع CloudFront، مع تجارب عملية على ملف يشغّل دالة وسير عمل يقرر.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;الجزء الحادي والعشرين&lt;/a&gt; بنينا API من ثلاث قطع. التطبيق الحقيقي يحتاج أكثر: عملية من عدة خطوات ممكن تفشل في النص، ومستخدمين يسجلون دخول، وأشياء لازم تصير بعد الطلب بدون ما ينتظرها أحد.&lt;/p&gt;
&lt;p&gt;هذا الجزء يكمل الصورة بخدمتين زيادة، ثم يطبق كل شي على تصميمين.&lt;/p&gt;
&lt;h2 id=&quot;step-functions-سير-العمل&quot; tabindex=&quot;-1&quot;&gt;Step Functions: سير العمل &lt;a class=&quot;heading-anchor&quot; href=&quot;#step-functions-سير-العمل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الطلب فيه فحص مخزون، ثم تحصيل المبلغ، ثم شحن. تقدر تخلي كل دالة تستدعي اللي بعدها، بس وين تكون إعادة المحاولة؟ وش يصير لو فشل الدفع بعد ما حجزت المخزون؟ ومين يقول لك وين الطلب 1001 الحين؟&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step Functions&lt;/strong&gt; يطلع هذا المنطق من كودك إلى &lt;strong&gt;آلة حالات (State Machine)&lt;/strong&gt;: تعريف للخطوات ووش يصير بعد كل وحدة، وتشوفه كرسم في الكونسول.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 200&quot; role=&quot;img&quot; aria-labelledby=&quot;steps-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;steps-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;470&quot; y=&quot;20&quot; width=&quot;150&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;55&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;فحص المخزون&lt;/text&gt;
&lt;rect x=&quot;245&quot; y=&quot;20&quot; width=&quot;150&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;45&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تحصيل المبلغ&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يعيد المحاولة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;150&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;55&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الشحن&lt;/text&gt;
&lt;line x1=&quot;470&quot; y1=&quot;50&quot; x2=&quot;397&quot; y2=&quot;50&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#steps-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;50&quot; x2=&quot;172&quot; y2=&quot;50&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#steps-arrow)&quot;/&gt;
&lt;rect x=&quot;245&quot; y=&quot;128&quot; width=&quot;150&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-danger)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;162&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;إلغاء وإشعار&lt;/text&gt;
&lt;line x1=&quot;545&quot; y1=&quot;80&quot; x2=&quot;397&quot; y2=&quot;150&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#steps-arrow)&quot;/&gt;
&lt;text x=&quot;520&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;غير متوفر&lt;/text&gt;
&lt;line x1=&quot;320&quot; y1=&quot;80&quot; x2=&quot;320&quot; y2=&quot;126&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#steps-arrow)&quot;/&gt;
&lt;text x=&quot;275&quot; y=&quot;108&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مرفوض&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;steps-caption&quot;&gt;سير العمل يعرف ترتيب الخطوات ووين يروح كل فشل، وكل خطوة تبقى صغيرة وبسيطة.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;كل خطوة تقدر تستدعي دالة Lambda أو خدمات AWS كثيرة مباشرة، والتعريف يتكفل باللي كنت بتكتبه بيدك:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Retry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تعيد الخطوة الفاشلة، وتنتظر أطول كل مرة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Catch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ترسل الفشل لخطوة تعالجه، مثل استرجاع المبلغ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Choice&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تختار المسار حسب البيانات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parallel وMap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تشغل فروع مع بعض، أو خطوة لكل عنصر في قائمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wait&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;توقف لفترة، أو لموافقة بشرية تاخذ أيام&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;هذا شكل إعادة محاولة الدفع والتقاط فشله:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;TakePayment&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Type&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Task&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:states:::lambda:invoke&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Parameters&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;FunctionName&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;take-payment&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;Payload.$&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;$&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Retry&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;ErrorEquals&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;States.TaskFailed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;IntervalSeconds&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;BackoffRate&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;MaxAttempts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Catch&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;ErrorEquals&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;States.ALL&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Next&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;CancelOrder&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Next&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ship&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Express&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;أقصى مدة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سنة&lt;/td&gt;
&lt;td&gt;خمس دقايق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التنفيذ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مرة واحدة بالضبط&lt;/td&gt;
&lt;td&gt;مرة على الأقل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المحاسبة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لكل انتقال بين الحالات، و4,000 مجانية كل شهر&lt;/td&gt;
&lt;td&gt;عدد الطلبات والمدة والذاكرة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;عمليات طويلة مثل الطلبات والموافقات&lt;/td&gt;
&lt;td&gt;أحداث قصيرة ومتكررة جداً&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;cognito-مستخدمينك&quot; tabindex=&quot;-1&quot;&gt;Cognito: مستخدمينك &lt;a class=&quot;heading-anchor&quot; href=&quot;#cognito-مستخدمينك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;IAM&lt;/a&gt; لفريقك وخدماتك، مو لمليون شخص يستخدمون تطبيقك. &lt;strong&gt;Amazon Cognito&lt;/strong&gt; يعطي تطبيقك مستخدمينه، وله جزئين سهل تخلط بينهم:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;User Pool&lt;/th&gt;
&lt;th&gt;Identity Pool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السؤال اللي يجاوبه&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;من هذا المستخدم؟&lt;/td&gt;
&lt;td&gt;وش يقدر يسوي في AWS؟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يعطي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;توكن بعد الدخول&lt;/td&gt;
&lt;td&gt;مفاتيح AWS مؤقتة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يستخدم لـ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تطبيقك والـ API حقك&lt;/td&gt;
&lt;td&gt;وصول مباشر لـ S3 أو DynamoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;User Pools&lt;/strong&gt; تتكفل بالتسجيل والدخول، واستعادة كلمة المرور، والتحقق بعدة عوامل، والدخول بحسابات مثل Google أو هوية الشركة. وAPI Gateway وموزع الحمل ALB يقدرون يتحققون من توكناته مباشرة. والمجموعات الجديدة تستخدم خطة &lt;strong&gt;Essentials&lt;/strong&gt; افتراضياً، وفيه كمان &lt;strong&gt;Lite&lt;/strong&gt; الأرخص بميزات أقل، و&lt;strong&gt;Plus&lt;/strong&gt; بحماية متقدمة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity Pools&lt;/strong&gt; تبدل التوكن بمفاتيح مؤقتة مربوطة بدور IAM، ومتغير في السياسة يحصرها في بيانات المستخدم نفسه. مثلاً كل مستخدم يوصل لمجلده فقط في S3:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;s3:GetObject&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;s3:PutObject&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:s3:::recipe-photos/users/${cognito-identity.amazonaws.com:sub}/*&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;التصميم-الأول-تطبيق-جوال&quot; tabindex=&quot;-1&quot;&gt;التصميم الأول: تطبيق جوال &lt;a class=&quot;heading-anchor&quot; href=&quot;#التصميم-الأول-تطبيق-جوال&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;خلنا نصمم تطبيق لمشاركة الوصفات: المستخدمين يسجلون دخول، ويكتبون وصفات، ويرفعون صور، والوصفات المشهورة تنقرأ أكثر بكثير مما تنكتب. كل متطلب له قطعته:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;/td&gt;
&lt;td&gt;&lt;strong&gt;User Pool&lt;/strong&gt; في Cognito&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API لقراءة الوصفات وكتابتها&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;API Gateway&lt;/strong&gt; و&lt;strong&gt;Lambda&lt;/strong&gt; و&lt;strong&gt;DynamoDB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;رفع الصور مباشرة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Identity Pool&lt;/strong&gt; بمفاتيح مؤقتة إلى S3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;قراءات هائلة لنفس الوصفات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;DAX&lt;/strong&gt; قدام الجدول&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;طلبات متطابقة متكررة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;كاش API Gateway&lt;/strong&gt; في REST API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 250&quot; role=&quot;img&quot; aria-labelledby=&quot;cognito-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;cognito-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;520&quot; y=&quot;60&quot; width=&quot;100&quot; height=&quot;130&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;570&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;التطبيق&lt;/text&gt;
&lt;rect x=&quot;330&quot; y=&quot;14&quot; width=&quot;140&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;400&quot; y=&quot;37&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;User Pool&lt;/text&gt;
&lt;text x=&quot;400&quot; y=&quot;57&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;دخول وتوكن&lt;/text&gt;
&lt;rect x=&quot;330&quot; y=&quot;97&quot; width=&quot;140&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;400&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;API Gateway&lt;/text&gt;
&lt;text x=&quot;400&quot; y=&quot;140&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يتحقق من التوكن&lt;/text&gt;
&lt;rect x=&quot;180&quot; y=&quot;97&quot; width=&quot;110&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;235&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;97&quot; width=&quot;120&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;80&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;DynamoDB&lt;/text&gt;
&lt;rect x=&quot;330&quot; y=&quot;180&quot; width=&quot;140&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;400&quot; y=&quot;203&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Identity Pool&lt;/text&gt;
&lt;text x=&quot;400&quot; y=&quot;223&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مفاتيح مؤقتة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;180&quot; width=&quot;270&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;155&quot; y=&quot;203&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;text x=&quot;155&quot; y=&quot;223&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;users/ID/&amp;#x200E;&lt;/text&gt;
&lt;line x1=&quot;520&quot; y1=&quot;80&quot; x2=&quot;472&quot; y2=&quot;42&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cognito-arrow)&quot;/&gt;
&lt;line x1=&quot;520&quot; y1=&quot;125&quot; x2=&quot;472&quot; y2=&quot;125&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cognito-arrow)&quot;/&gt;
&lt;line x1=&quot;520&quot; y1=&quot;170&quot; x2=&quot;472&quot; y2=&quot;208&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cognito-arrow)&quot;/&gt;
&lt;line x1=&quot;330&quot; y1=&quot;125&quot; x2=&quot;292&quot; y2=&quot;125&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cognito-arrow)&quot;/&gt;
&lt;line x1=&quot;180&quot; y1=&quot;125&quot; x2=&quot;142&quot; y2=&quot;125&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cognito-arrow)&quot;/&gt;
&lt;line x1=&quot;330&quot; y1=&quot;208&quot; x2=&quot;292&quot; y2=&quot;208&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cognito-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;cognito-caption&quot;&gt;الـ User Pool يسجل دخول المستخدم ويعطيه توكن. API Gateway يتحقق منه، والـ Identity Pool يبدله بمفاتيح مؤقتة محصورة في مجلد المستخدم.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ليه الصورة تروح مباشرة لـ S3 بدل ما تمر عبر الـ API؟ لأن API Gateway حده 10 MB، ولأنك بتدفع وقت Lambda بس عشان تمرر بايتات. و&lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;الروابط الموقّعة&lt;/a&gt; خيار ثاني ممتاز هنا، لو ما تحتاج Identity Pools.&lt;/p&gt;
&lt;p&gt;ولاحظ وين يقع كل كاش: كاش API Gateway يوقف الطلب قبل ما يوصل للدالة، فيناسب الردود اللي ما تختلف من مستخدم لآخر. وDAX يخلي الدالة تشتغل، ويريح الجدول من القراءة.&lt;/p&gt;
&lt;h2 id=&quot;التصميم-الثاني-موقع-عالمي&quot; tabindex=&quot;-1&quot;&gt;التصميم الثاني: موقع عالمي &lt;a class=&quot;heading-anchor&quot; href=&quot;#التصميم-الثاني-موقع-عالمي&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الحين دليل سفر ينقرأ حول العالم: صفحات ثابتة، وAPI صغير، وإيميل ترحيب لما يسجل أحد، وصور مصغرة للصور اللي يرفعها المستخدمين.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 248&quot; role=&quot;img&quot; aria-labelledby=&quot;site-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;site-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;520&quot; y=&quot;14&quot; width=&quot;100&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;570&quot; y=&quot;47&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الزوار&lt;/text&gt;
&lt;rect x=&quot;370&quot; y=&quot;14&quot; width=&quot;110&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;425&quot; y=&quot;47&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;CloudFront&lt;/text&gt;
&lt;rect x=&quot;180&quot; y=&quot;14&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;255&quot; y=&quot;37&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;text x=&quot;255&quot; y=&quot;57&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;صفحات وصور&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;120&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;80&quot; y=&quot;37&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;text x=&quot;80&quot; y=&quot;57&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;صور مصغرة&lt;/text&gt;
&lt;rect x=&quot;370&quot; y=&quot;96&quot; width=&quot;110&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;425&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;API Gateway&lt;/text&gt;
&lt;rect x=&quot;180&quot; y=&quot;96&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;255&quot; y=&quot;119&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;text x=&quot;255&quot; y=&quot;139&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقك&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;96&quot; width=&quot;120&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;80&quot; y=&quot;119&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;DynamoDB&lt;/text&gt;
&lt;text x=&quot;80&quot; y=&quot;139&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;Global Tables&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;178&quot; width=&quot;120&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;80&quot; y=&quot;211&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Streams&lt;/text&gt;
&lt;rect x=&quot;180&quot; y=&quot;178&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;255&quot; y=&quot;201&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;text x=&quot;255&quot; y=&quot;221&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;إيميل ترحيب&lt;/text&gt;
&lt;rect x=&quot;370&quot; y=&quot;178&quot; width=&quot;110&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;425&quot; y=&quot;211&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;SES&lt;/text&gt;
&lt;line x1=&quot;520&quot; y1=&quot;42&quot; x2=&quot;482&quot; y2=&quot;42&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;370&quot; y1=&quot;42&quot; x2=&quot;332&quot; y2=&quot;42&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;180&quot; y1=&quot;42&quot; x2=&quot;142&quot; y2=&quot;42&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;425&quot; y1=&quot;70&quot; x2=&quot;425&quot; y2=&quot;94&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;370&quot; y1=&quot;124&quot; x2=&quot;332&quot; y2=&quot;124&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;180&quot; y1=&quot;124&quot; x2=&quot;142&quot; y2=&quot;124&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;80&quot; y1=&quot;152&quot; x2=&quot;80&quot; y2=&quot;176&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;140&quot; y1=&quot;206&quot; x2=&quot;178&quot; y2=&quot;206&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;line x1=&quot;330&quot; y1=&quot;206&quot; x2=&quot;368&quot; y2=&quot;206&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#site-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;site-caption&quot;&gt;CloudFront يقدم الصفحات ويمرر طلبات الـ API. وكل شي بعد الكتابة يصير بالأحداث: مستخدم جديد يشغّل الإيميل، وصورة جديدة تشغّل الصورة المصغرة.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;تابعه قطعة قطعة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الصفحات:&lt;/strong&gt; حاوية S3 خاصة وقدامها &lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;CloudFront مع OAC&lt;/a&gt;، فالحاوية تبقى مقفلة والموقع سريع في كل مكان.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الـ API:&lt;/strong&gt; API Gateway وLambda وDynamoDB، و&lt;strong&gt;Global Tables&lt;/strong&gt; تقرب البيانات من المستخدمين في كل منطقة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إيميل الترحيب:&lt;/strong&gt; الـ API ما يرسله. المستخدم الجديد ينكتب في الجدول، و&lt;strong&gt;DynamoDB Streams&lt;/strong&gt; يشغّل دالة، وهي ترسل عبر &lt;strong&gt;SES&lt;/strong&gt;. ولو فشل الإيميل، التسجيل ما يتأثر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الصور المصغرة:&lt;/strong&gt; صورة تنزل في S3 تشغّل دالة Lambda تكتب نسخة أصغر. وللتعامل مع الموجات أو الوصول لأكثر من خدمة، حط &lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;SQS أو SNS&lt;/a&gt; بينهم.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ما فيه سيرفر واحد هنا، ولما ما يكون فيه زوار، الفاتورة تقرب من تكلفة التخزين فقط. والفكرة في آخر مسارين وحدة: &lt;strong&gt;الطلب يخلص بسرعة، والباقي يصير بالأحداث.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;الخدمات-المصغرة-microservices&quot; tabindex=&quot;-1&quot;&gt;الخدمات المصغرة (Microservices) &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخدمات-المصغرة-microservices&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لما يكبر التطبيق، الفرق تقسمه إلى خدمات صغيرة، كل وحدة لها شغلها وقاعدة بياناتها وجدول إطلاقها. وعندهم طريقتين للتواصل:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;متزامن&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API Gateway أو موزع حمل&lt;/td&gt;
&lt;td&gt;تحتاج الجواب الحين، مثل سعر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;غير متزامن&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQS وSNS وKinesis ومشغلات Lambda&lt;/td&gt;
&lt;td&gt;الشغل ممكن يجي بعدين، مثل فاتورة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وكل خدمة تقدر تختار اللي يناسبها: Lambda للطلبات المتفرقة، وFargate للحمل الثابت، وEC2 للمتطلبات الخاصة. بس لهذا كله ثمن: إطلاقات أكثر، ومراقبة أكثر، وأعطال أصعب في تتبعها بين الخدمات. فلا تبدأ من هنا لتطبيق صغير، وقسّم بس لما تحتاج فعلاً.&lt;/p&gt;
&lt;h2 id=&quot;ربح-رخيص-cloudfront-قدام-اللي-عندك&quot; tabindex=&quot;-1&quot;&gt;ربح رخيص: CloudFront قدام اللي عندك &lt;a class=&quot;heading-anchor&quot; href=&quot;#ربح-رخيص-cloudfront-قدام-اللي-عندك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;مو كل تحسين يحتاج إعادة كتابة. تخيل تطبيق على مجموعة Auto Scaling يوزع ملفات تحديث كبيرة. يوم الإطلاق، كل مستخدمينك يحملون بنفس الوقت: السيرفرات تتضاعف، وفاتورة نقل البيانات تقفز.&lt;/p&gt;
&lt;p&gt;حط &lt;strong&gt;CloudFront&lt;/strong&gt; قدامه، وما تغير شي ثاني. الملفات ما تتغير، فتناسب الكاش جداً: أغلب الطلبات توقف عند الحافة، والمجموعة بالكاد تكبر، والبيانات الخارجة عبر CloudFront أرخص من الخروج المباشر. شغل دقايق ممكن يرجع لك أكثر من إعادة تصميم.&lt;/p&gt;
&lt;h2 id=&quot;مبادئ-التصميم&quot; tabindex=&quot;-1&quot;&gt;مبادئ التصميم &lt;a class=&quot;heading-anchor&quot; href=&quot;#مبادئ-التصميم&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;خل المعالجة آمنة لو تكررت&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQS وSNS وLambda غير المتزامنة توصل مرة على الأقل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;طابور فشل لكل شي غير متزامن&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الفشل الصامت أسوأ أنواع الفشل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;دور واحد لكل دالة بأقل صلاحية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ثغرة في وحدة ما تفتح كل شي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;دوال صغيرة بشغلة وحدة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أسهل في الاختبار وأسرع في التشغيل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;احسب التكلفة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مع حمل كبير وثابت، الحاويات ممكن تطلع أرخص&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;راقب كل شي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الطلب يمر بخدمات كثيرة، وبنغطي الأدوات في &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;الجزء الخامس والعشرين&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وما يلزم تبدأ من الصفر. &lt;strong&gt;AWS Serverless Application Repository&lt;/strong&gt; يخليك تلقى تطبيقات جاهزة بدون سيرفرات، وتضبط كم قيمة، وتنشرها بكم ضغطة.&lt;/p&gt;
&lt;h2 id=&quot;عملي-ملف-يشغل-دالة&quot; tabindex=&quot;-1&quot;&gt;عملي: ملف يشغّل دالة &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-ملف-يشغل-دالة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;في &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;الجزء الخامس عشر&lt;/a&gt; وعدنا نطبق أحداث S3. بنسوي مسار الصور المصغرة بتبسيط واحد: بدل مكتبة صور، الدالة تحول ملف نصي إلى حروف كبيرة. والمسار نفسه تماماً. من CloudShell:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;BUCKET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;series-events-&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;
aws s3 mb s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; trust.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Principal&quot;: {&quot;Service&quot;: &quot;lambda.amazonaws.com&quot;},
    &quot;Action&quot;: &quot;sts:AssumeRole&quot;
  }]
}
EOF&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;ROLE_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws iam create-role --role-name series-events-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --assume-role-policy-document file://trust.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Role.Arn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws iam attach-role-policy --role-name series-events-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

aws iam put-role-policy --role-name series-events-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-name bucket-access --policy-document &lt;span class=&quot;token string&quot;&gt;&quot;{
    &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Version&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;2012-10-17&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;,
    &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Statement&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: [{
      &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Effect&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Allow&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;,
      &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Action&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: [&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;s3:GetObject&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;, &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;s3:PutObject&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;],
      &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Resource&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;arn:aws:s3:::&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/*&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;
    }]
  }&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;اكتب الدالة وأنشئها. ولو جاك خطأ عن الدور، انتظر كم ثانية وأعد الأمر:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; app.py &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
from urllib.parse import unquote_plus
import boto3

s3 = boto3.client(&quot;s3&quot;)

def handler(event, context):
    for record in event[&quot;Records&quot;]:
        bucket = record[&quot;s3&quot;][&quot;bucket&quot;][&quot;name&quot;]
        key = unquote_plus(record[&quot;s3&quot;][&quot;object&quot;][&quot;key&quot;])
        body = s3.get_object(Bucket=bucket, Key=key)[&quot;Body&quot;].read().decode()
        name = key.split(&quot;/&quot;)[-1]
        s3.put_object(Bucket=bucket, Key=f&quot;processed/{name}&quot;, Body=body.upper())
EOF&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;zip&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-q&lt;/span&gt; function.zip app.py

&lt;span class=&quot;token assign-left variable&quot;&gt;FN_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws lambda create-function --function-name series-events &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--runtime&lt;/span&gt; python3.13 &lt;span class=&quot;token parameter variable&quot;&gt;--handler&lt;/span&gt; app.handler &lt;span class=&quot;token parameter variable&quot;&gt;--role&lt;/span&gt; $ROLE_ARN &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --zip-file fileb://function.zip &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; FunctionArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws lambda &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; function-active-v2 --function-name series-events&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;اسمح لـ S3 يستدعي الدالة، ثم قل للحاوية ترسل لها أحداث مجلد &lt;code&gt;uploads/&lt;/code&gt; فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws lambda add-permission --function-name series-events &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --statement-id s3-trigger &lt;span class=&quot;token parameter variable&quot;&gt;--action&lt;/span&gt; lambda:InvokeFunction &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--principal&lt;/span&gt; s3.amazonaws.com --source-arn arn:aws:s3:::&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Statement &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; /dev/null

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; notify.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;EOF
{
  &quot;LambdaFunctionConfigurations&quot;: [{
    &quot;LambdaFunctionArn&quot;: &quot;&lt;span class=&quot;token variable&quot;&gt;$FN_ARN&lt;/span&gt;&quot;,
    &quot;Events&quot;: [&quot;s3:ObjectCreated:*&quot;],
    &quot;Filter&quot;: {&quot;Key&quot;: {&quot;FilterRules&quot;: [{&quot;Name&quot;: &quot;prefix&quot;, &quot;Value&quot;: &quot;uploads/&quot;}]}}
  }]
}
EOF&lt;/span&gt;

aws s3api put-bucket-notification-configuration &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --notification-configuration file://notify.json&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;ارفع ملف، وانتظر كم ثانية، ثم اقرأ النتيجة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;hello from s3&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; note.txt
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; note.txt s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/uploads/note.txt&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/processed/note.txt -&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;يطبع &lt;code&gt;HELLO FROM S3&lt;/code&gt;. رفعت ملف، وكود اشتغل لحاله.&lt;/p&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذر من الدوران بلا نهاية&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;هنا الدالة تكتب في &lt;code&gt;processed/&lt;/code&gt; وتستمع لـ &lt;code&gt;uploads/&lt;/code&gt;. لو كتبت في نفس المجلد اللي تستمع له، كل ناتج بيشغلها مرة ثانية، وفاتورتك تطلع معها. افصل بينهم دايماً ببادئة أو بحاويتين.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;نظّف قبل ما تكمل:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3 rb s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--force&lt;/span&gt;
aws lambda delete-function --function-name series-events
aws logs delete-log-group --log-group-name /aws/lambda/series-events
aws iam delete-role-policy --role-name series-events-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-name bucket-access
aws iam detach-role-policy --role-name series-events-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
aws iam delete-role --role-name series-events-role&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;عملي-سير-عمل-يقرر&quot; tabindex=&quot;-1&quot;&gt;عملي: سير عمل يقرر &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-سير-عمل-يقرر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنكتب آلة حالات تطالع مبلغ الطلب: المبلغ السالب يفشل، والكبير يروح للمراجعة، والباقي ينقبل. وتستخدم خطوات داخلية فقط، فتحتاج دور بدون صلاحيات:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; trust.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Principal&quot;: {&quot;Service&quot;: &quot;states.amazonaws.com&quot;},
    &quot;Action&quot;: &quot;sts:AssumeRole&quot;
  }]
}
EOF&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;FLOW_ROLE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws iam create-role --role-name series-flow-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --assume-role-policy-document file://trust.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Role.Arn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; flow.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;StartAt&quot;: &quot;CheckAmount&quot;,
  &quot;States&quot;: {
    &quot;CheckAmount&quot;: {
      &quot;Type&quot;: &quot;Choice&quot;,
      &quot;Choices&quot;: [
        {&quot;Variable&quot;: &quot;$.amount&quot;, &quot;NumericLessThanEquals&quot;: 0, &quot;Next&quot;: &quot;Rejected&quot;},
        {&quot;Variable&quot;: &quot;$.amount&quot;, &quot;NumericGreaterThan&quot;: 1000, &quot;Next&quot;: &quot;NeedsReview&quot;}
      ],
      &quot;Default&quot;: &quot;Approved&quot;
    },
    &quot;NeedsReview&quot;: {&quot;Type&quot;: &quot;Pass&quot;, &quot;Result&quot;: {&quot;status&quot;: &quot;review&quot;}, &quot;End&quot;: true},
    &quot;Approved&quot;: {&quot;Type&quot;: &quot;Pass&quot;, &quot;Result&quot;: {&quot;status&quot;: &quot;approved&quot;}, &quot;End&quot;: true},
    &quot;Rejected&quot;: {&quot;Type&quot;: &quot;Fail&quot;, &quot;Error&quot;: &quot;InvalidAmount&quot;, &quot;Cause&quot;: &quot;The amount must be positive&quot;}
  }
}
EOF&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أنشئها. وهنا برضو، لو جاك خطأ عن الدور، انتظر كم ثانية وأعد الأمر:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;FLOW_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws stepfunctions create-state-machine &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; series-order &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--definition&lt;/span&gt; file://flow.json --role-arn $FLOW_ROLE &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; stateMachineArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;شغّلها بثلاث طلبات:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function-name function&quot;&gt;try_order&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws stepfunctions start-execution --state-machine-arn $FLOW_ARN &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--input&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; executionArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;
  aws stepfunctions describe-execution --execution-arn &lt;span class=&quot;token variable&quot;&gt;$RUN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[status,output]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

try_order &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;amount&quot;: 250}&#39;&lt;/span&gt;
try_order &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;amount&quot;: 5000}&#39;&lt;/span&gt;
try_order &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;amount&quot;: -5}&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بيطلع لك &lt;code&gt;approved&lt;/code&gt;، ثم &lt;code&gt;review&lt;/code&gt;، ثم &lt;code&gt;FAILED&lt;/code&gt;. الحين افتح &lt;strong&gt;Step Functions&lt;/strong&gt; في الكونسول، واختر &lt;code&gt;series-order&lt;/code&gt;، ثم أي تنفيذ. بتشوف الرسم والمسار اللي مشى عليه ملوّن، وهذا اللي بتطالعه لما يعلق طلب في الإنتاج.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;كم انتقال يدخل ضمن الـ 4,000 المجانية كل شهر. احذف الآلة ودورها:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws stepfunctions delete-state-machine --state-machine-arn &lt;span class=&quot;token variable&quot;&gt;$FLOW_ARN&lt;/span&gt;
aws iam delete-role --role-name series-flow-role&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Step Functions&lt;/strong&gt; يطلع الخطوات وإعادة المحاولة والفشل من كودك إلى سير عمل تشوفه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Pool&lt;/strong&gt; يجاوب من هو المستخدم، و&lt;strong&gt;Identity Pool&lt;/strong&gt; يعطيه مفاتيح مؤقتة لـ AWS.&lt;/li&gt;
&lt;li&gt;التصميم الجيد &lt;strong&gt;يخلص الطلب بسرعة&lt;/strong&gt;، ويترك الباقي للأحداث.&lt;/li&gt;
&lt;li&gt;خل الملفات الكبيرة تروح &lt;strong&gt;مباشرة لـ S3&lt;/strong&gt;، وحط &lt;strong&gt;الكاش&lt;/strong&gt; وين يوقف أكبر قدر من الشغل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الخدمات المصغرة&lt;/strong&gt; لها ثمن، فقسّم بس لما تحتاج فعلاً.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;الطلب يمر بالمخزون ثم الدفع ثم الشحن. والخطوات الفاشلة لازم تنعاد، وفشل الدفع لازم يطلق استرداد، والطلبات الكبيرة تنتظر موافقة مدير أيام. والفريق يبي يشوف وين وصل كل طلب. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Step Functions، بسير عمل Express&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;دوال Lambda تنادي بعضها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;موضوع SNS مع مشترك لكل خطوة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Step Functions، بسير عمل Standard&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;سير العمل Standard ممكن يستمر حتى سنة، وتعريفه يحمل إعادة المحاولة والفشل والانتظار، والكونسول يعرض لك مسار كل تنفيذ كرسم.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يشتغل خمس دقايق كحد أقصى، فما يقدر ينتظر أيام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; إعادة المحاولة ومعالجة الفشل تصير في كودك، وما فيه شي يوريك وين وصل الطلب.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يوصّل لكل المشتركين مرة وحدة، بدون ترتيب بين الخطوات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#step-functions-%D8%B3%D9%8A%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84&quot;&gt;Step Functions: سير العمل&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/step-functions/latest/dg/choosing-workflow-type.html&quot;&gt;Choosing workflow type in Step Functions&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;المستخدمين يدخلون لتطبيق جوال عبر Cognito User Pool. ولازم يرفعون صورهم مباشرة إلى S3، وكل واحد يوصل لمجلده فقط. وش يعطي التطبيق وصول إلى S3؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Identity Pool، بمفاتيح مؤقتة ومتغير في السياسة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;توكن الـ User Pool، يرسل مباشرة إلى S3&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;مستخدم IAM لكل شخص يستخدم التطبيق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;مفاتيح وصول داخل التطبيق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ Identity Pool يبدل التوكن بمفاتيح مؤقتة مربوطة بدور IAM، والمتغير في السياسة يحصرها في مجلد المستخدم.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; توكن الـ User Pool يقول مين المستخدم، وهو مو مفاتيح AWS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; IAM لفريقك وخدماتك، مو لأعداد ضخمة من مستخدمي التطبيق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; أي أحد يقدر يطلع هذي المفاتيح من التطبيق، وبتشتغل على مجلدات الكل.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cognito-%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86%D9%83&quot;&gt;Cognito: مستخدمينك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html&quot;&gt;Amazon Cognito identity pools&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html&quot;&gt;IAM roles&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;واجهة تسجيل ترسل بريد ترحيب قبل ما ترد. ولما تبطأ خدمة البريد يبطأ التسجيل، ولما تفشل يفشل التسجيل. والمستخدمين الجدد ينكتبون في DynamoDB. وش أفضل تصميم؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;رفع مهلة الدالة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;DynamoDB Streams يشغّل دالة منفصلة ترسل البريد&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Provisioned Concurrency على دالة الـ API&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إعادة محاولة البريد داخل دالة الـ API&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الطلب يخلص أول ما ينكتب المستخدم، والبريد يصير عبر حدث، ففشل البريد ما يأثر على التسجيل.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; المستخدمين بينتظرون أكثر، والفشل لسا يوصل لهم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يشيل البداية الباردة، والبطء جاي من البريد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; إعادة المحاولة داخل الطلب تخلي المستخدمين ينتظرون أكثر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D8%AB%D8%A7%D9%86%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D8%B9%D8%A7%D9%84%D9%85%D9%8A&quot;&gt;التصميم الثاني: موقع عالمي&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html&quot;&gt;DynamoDB Streams and AWS Lambda triggers&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;تطبيق على مجموعة Auto Scaling يوزع ملفات تحديث كبيرة. ويوم الإطلاق تكبر المجموعة بقوة وتقفز فاتورة نقل البيانات. وش يعطي أكبر تحسين &lt;strong&gt;بأقل تغيير&lt;/strong&gt;؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نقل السيرفرات لأنواع أكبر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إعادة كتابة التحميل بـ Lambda وAPI Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;وضع CloudFront قدام التطبيق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;وضع Global Accelerator قدام التطبيق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الملفات ما تتغير، فتناسب الكاش جداً. وأغلب الطلبات تنتهي عند الحافة، والمجموعة بالكاد تكبر، والبيانات اللي تطلع عبر CloudFront أرخص من اللي تطلع مباشرة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; السيرفرات لسا تخدم كل تحميل، ونفس البيانات لسا تطلع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا إعادة كتابة، وحد API Gateway وهو 10 MB صغير على الملفات الكبيرة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يختصر الطريق بس ما يخزن، فكل تحميل لسا يوصل للسيرفرات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B1%D8%A8%D8%AD-%D8%B1%D8%AE%D9%8A%D8%B5-cloudfront-%D9%82%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%8A-%D8%B9%D9%86%D8%AF%D9%83&quot;&gt;ربح رخيص: CloudFront قدام اللي عندك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html&quot;&gt;What is Amazon CloudFront?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;موضوع SNS يشغّل دالة Lambda بشكل غير متزامن. وبعض العملاء انخصم منهم مرتين، والأحداث اللي فشلت كثير اختفت بدون أي أثر. أي &lt;strong&gt;تغييرين&lt;/strong&gt; يعالجون هذا؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;جعل الخصم آمن لو تكرر، مثلاً بفحص رقم الطلب أول&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إعطاء الدالة ذاكرة أكثر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تفعيل SnapStart&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;استخدام Provisioned Concurrency&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;إرسال الأحداث الفاشلة إلى طابور رسائل فاشلة أو Failure Destination&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الحدث ممكن يوصل أكثر من مرة، فلازم التكرار ما يضر. وطابور الرسائل الفاشلة يحتفظ باللي فشل عشان تفحصه، بدل ما يضيع بصمت.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يسرّع الدالة، والتكرار لسا يوصل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يخفف البداية الباردة، وما له علاقة بأي مشكلة منهم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يبقي البيئات جاهزة، وما له علاقة بأي مشكلة منهم.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85&quot;&gt;مبادئ التصميم&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-error-handling.html&quot;&gt;How Lambda handles errors and retries with asynchronous invocation&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html&quot;&gt;Capturing records of Lambda asynchronous invocations&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بهذا نكمل قسم التطبيقات الحديثة. تطبيقك الحين يطلع بيانات كثيرة، بس وش تقول لك؟ في &lt;a href=&quot;/posts/aws-23-athena-redshift-glue/&quot;&gt;&lt;strong&gt;الجزء الثالث والعشرين&lt;/strong&gt;&lt;/a&gt; نبدأ قسم البيانات والذكاء الاصطناعي، ونحلل البيانات بـ Athena وRedshift وGlue.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>بدون خوادم: Lambda وAPI Gateway وDynamoDB</title>
    <link href="https://blog.sultanops.com/posts/aws-21-lambda-api-dynamodb/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-21-lambda-api-dynamodb/</id>
    <summary>شغّل كودك بدون سيرفرات وادفع بس لما يشتغل. كيف تعمل Lambda وحدودها، والبداية الباردة، وجداول DynamoDB ومفاتيحها، وAPI Gateway كبوابة أمامية، مع تجربة عملية تبني فيها API شغال.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-20-ecs-fargate-eks/&quot;&gt;الجزء العشرين&lt;/a&gt; تركنا إدارة السيرفرات، بس المهام لسا شغالة طول الوقت، تنتظر زوار يمكن ما يجون. طيب لو كودك يشتغل بس لما يجي طلب، وما تدفع شي غير كذا؟&lt;/p&gt;
&lt;p&gt;هذا هو &lt;strong&gt;بدون خوادم (Serverless)&lt;/strong&gt;. طبعاً السيرفرات موجودة، بس تجهيزها وتحديثها وتوسيعها ما عاد مشكلتك.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;EC2&lt;/th&gt;
&lt;th&gt;Fargate&lt;/th&gt;
&lt;th&gt;Lambda&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تدير&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;النظام والتطبيق&lt;/td&gt;
&lt;td&gt;الصورة والتطبيق&lt;/td&gt;
&lt;td&gt;الكود&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تدفع على&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وقت التشغيل&lt;/td&gt;
&lt;td&gt;وقت التشغيل&lt;/td&gt;
&lt;td&gt;كل طلب ومدته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;وقت الفراغ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تدفع&lt;/td&gt;
&lt;td&gt;تدفع&lt;/td&gt;
&lt;td&gt;شبه لا شي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التوسع&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت تجهزه&lt;/td&gt;
&lt;td&gt;أنت تجهزه&lt;/td&gt;
&lt;td&gt;لحاله&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مدة التشغيل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كيف ما تبي&lt;/td&gt;
&lt;td&gt;كيف ما تبي&lt;/td&gt;
&lt;td&gt;حتى 15 دقيقة للطلب&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;aws-lambda&quot; tabindex=&quot;-1&quot;&gt;AWS Lambda &lt;a class=&quot;heading-anchor&quot; href=&quot;#aws-lambda&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lambda&lt;/strong&gt; تشغّل &lt;strong&gt;دالة (Function)&lt;/strong&gt; تكتبها لما يطلقها &lt;strong&gt;حدث&lt;/strong&gt;. تسوي شغلها، ثم تتوقف.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 240&quot; role=&quot;img&quot; aria-labelledby=&quot;lambda-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;lambda-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;470&quot; y=&quot;14&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;41&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;رفع على S3&lt;/text&gt;
&lt;rect x=&quot;470&quot; y=&quot;70&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;97&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;رسالة SQS&lt;/text&gt;
&lt;rect x=&quot;470&quot; y=&quot;126&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;153&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;طلب API&lt;/text&gt;
&lt;rect x=&quot;470&quot; y=&quot;182&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;209&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;جدول زمني&lt;/text&gt;
&lt;rect x=&quot;245&quot; y=&quot;74&quot; width=&quot;150&quot; height=&quot;92&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;115&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;135&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;كودك يشتغل&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;28&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;55&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;DynamoDB&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;98&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;125&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;168&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;195&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;SNS&lt;/text&gt;
&lt;line x1=&quot;470&quot; y1=&quot;36&quot; x2=&quot;397&quot; y2=&quot;96&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;line x1=&quot;470&quot; y1=&quot;92&quot; x2=&quot;397&quot; y2=&quot;112&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;line x1=&quot;470&quot; y1=&quot;148&quot; x2=&quot;397&quot; y2=&quot;128&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;line x1=&quot;470&quot; y1=&quot;204&quot; x2=&quot;397&quot; y2=&quot;144&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;120&quot; x2=&quot;172&quot; y2=&quot;50&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;120&quot; x2=&quot;172&quot; y2=&quot;120&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;120&quot; x2=&quot;172&quot; y2=&quot;190&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#lambda-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;lambda-caption&quot;&gt;حدث يشغّل الدالة، تسوي شغلها وتتوقف. وتدفع على وقت تشغيلها فقط.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;تدعم Python وNode.js وJava و.NET وRuby مباشرة، وأي لغة ثانية عبر Runtime خاص أو صورة حاوية. وهذي شكل الدالة في Python:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Python&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;event&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; context&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;world&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string-interpolation&quot;&gt;&lt;span class=&quot;token string&quot;&gt;f&quot;Hello &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الـ &lt;code&gt;event&lt;/code&gt; يحمل تفاصيل اللي صار، وشكله يعتمد على المصدر: حدث S3 فيه الحاوية والمفتاح مثلاً، وحدث API فيه المسار والهيدرز.&lt;/p&gt;
&lt;h3 id=&quot;كم-تكلف&quot; tabindex=&quot;-1&quot;&gt;كم تكلف؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كم-تكلف&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;تدفع على عدد الطلبات، وعلى المدة مضروبة في الذاكرة بوحدة &lt;strong&gt;GB-second&lt;/strong&gt;. الأسعار هنا لـ x86 في مناطق أمريكا، والمجاني يغطي مليون طلب و400,000 GB-second كل شهر.&lt;/p&gt;
&lt;p&gt;مثال: دالة بذاكرة 512 MB تشتغل 200 ملي ثانية، 5 مليون مرة في الشهر:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المدة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5,000,000 x 0.2 s x 0.5 GB = 500,000&lt;/code&gt; GB-second، ناقص 400,000 مجانية&lt;/td&gt;
&lt;td&gt;1.67 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الطلبات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 مليون ناقص مليون مجانية، بـ 0.20 دولار للمليون&lt;/td&gt;
&lt;td&gt;0.80 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المجموع&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;حوالي 2.47 دولار&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;خمسة مليون طلب بأقل من قيمة قهوة. بس الحساب ممكن ينقلب: مع حمل كبير وثابت، السيرفر أو الحاوية ممكن تطلع أرخص، فاحسبها.&lt;/p&gt;
&lt;h3 id=&quot;حدود-لازم-تعرفها&quot; tabindex=&quot;-1&quot;&gt;حدود لازم تعرفها &lt;a class=&quot;heading-anchor&quot; href=&quot;#حدود-لازم-تعرفها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;الذاكرة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;من 128 MB إلى 10,240 MB، والمعالج يرتفع معها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المدة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15 دقيقة للطلب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التخزين المؤقت&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/tmp&lt;/code&gt; من 512 MB إلى 10 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;حجم الحزمة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50 MB مضغوطة و250 MB بعد الفك، أو صورة حاوية 10 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التزامن&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,000 لكل منطقة افتراضياً، وممكن أقل في الحسابات الجديدة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;حجم البيانات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6 MB للاستدعاء المتزامن، و1 MB لغير المتزامن&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;لو شغلك ياخذ أكثر من 15 دقيقة، قسّمه بـ &lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;Step Functions&lt;/a&gt;، أو استخدم حاوية.&lt;/p&gt;
&lt;h3 id=&quot;التزامن-concurrency&quot; tabindex=&quot;-1&quot;&gt;التزامن (Concurrency) &lt;a class=&quot;heading-anchor&quot; href=&quot;#التزامن-concurrency&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;كل بيئة تشغيل تخدم طلب واحد في نفس الوقت، فـ 100 طلب متزامن تحتاج 100 بيئة. وهذا الرقم هو &lt;strong&gt;التزامن&lt;/strong&gt;، وكل الدوال في المنطقة تتشارك حد واحد. وش يصير لما توصله؟&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الاستدعاء المتزامن،&lt;/strong&gt; مثل من API، يجيه خطأ &lt;code&gt;429&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الاستدعاء غير المتزامن،&lt;/strong&gt; مثل من S3، ينحفظ ويعيد المحاولة حتى 6 ساعات، ثم يروح لطابور الفشل أو وجهة الفشل لو حددتها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;والفخ المخفي إن دالة مشغولة وحدة ممكن تاكل الحد كله وتعطل الباقي. &lt;strong&gt;Reserved Concurrency&lt;/strong&gt; يحجز حصة للدالة، وهي سقف لها كمان، فما تنحرم وما تحرم غيرها.&lt;/p&gt;
&lt;h3 id=&quot;البداية-الباردة-cold-start&quot; tabindex=&quot;-1&quot;&gt;البداية الباردة (Cold Start) &lt;a class=&quot;heading-anchor&quot; href=&quot;#البداية-الباردة-cold-start&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;لما يجي طلب وما فيه بيئة جاهزة، Lambda تنشئ وحدة وتحمل كودك أول. هذي &lt;strong&gt;البداية الباردة&lt;/strong&gt;، وممكن تضيف من جزء من الثانية إلى عدة ثواني حسب اللغة وحجم الكود. وبعدها البيئة تبقى فترة وتخدم الطلبات اللي بعدها بسرعة. ووقت التجهيز هذا صار يتحاسب كمان منذ أغسطس 2025.&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provisioned Concurrency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تبقي عدد من البيئات جاهز دايماً، فما فيه بداية باردة لها&lt;/td&gt;
&lt;td&gt;تدفع عليها طول ما هي جاهزة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SnapStart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحفظ لقطة بعد التجهيز وتستعيد منها، لـ Java 11 وأحدث وPython 3.12 وأحدث و.NET 8 وأحدث&lt;/td&gt;
&lt;td&gt;مجاني لـ Java، وبرسوم لـ Python و.NET&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وما تقدر تجمع الاثنين على نفس الدالة. وSnapStart يقلل وقت البداية بس ما يضمن إزالته، فلو تحتاج استجابة سريعة جداً وثابتة، استخدم Provisioned Concurrency.&lt;/p&gt;
&lt;h3 id=&quot;lambda-داخل-vpc&quot; tabindex=&quot;-1&quot;&gt;Lambda داخل VPC &lt;a class=&quot;heading-anchor&quot; href=&quot;#lambda-داخل-vpc&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;افتراضياً الدالة تشتغل خارج VPC حقك، فتوصل للإنترنت وخدمات AWS العامة، بس ما توصل لـ RDS الخاص حقك. اربطها بـ &lt;a href=&quot;/posts/aws-13-vpc/&quot;&gt;VPC&lt;/a&gt; وتوصل له، مع نقطتين:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;تفقد الوصول للإنترنت، إلا لو الـ Subnet يمر عبر NAT Gateway أو تستخدم &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;نقاط اتصال&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;ألف بيئة ممكن تفتح ألف اتصال بالقاعدة. وهذا اللي يحله &lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;RDS Proxy&lt;/a&gt; بإعادة استخدام اتصالات قليلة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;كود-عند-الحافة&quot; tabindex=&quot;-1&quot;&gt;كود عند الحافة &lt;a class=&quot;heading-anchor&quot; href=&quot;#كود-عند-الحافة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ذكرنا طريقتين لتشغيل كود قصير على &lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;CloudFront&lt;/a&gt;. وهذا الفرق:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CloudFront Functions&lt;/th&gt;
&lt;th&gt;Lambda@Edge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;اللغات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;Node.js وPython&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المدة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أقل من ملي ثانية&lt;/td&gt;
&lt;td&gt;حتى 30 ثانية في أحداث المصدر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الوصول للشبكة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;نعم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الأحداث&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;طلب الزائر والرد عليه&lt;/td&gt;
&lt;td&gt;هذي، مع طلب المصدر ورده&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;التحويلات والهيدرز ومفاتيح الكاش&lt;/td&gt;
&lt;td&gt;منطق أثقل والاتصال بخدمات ثانية&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;amazon-dynamodb&quot; tabindex=&quot;-1&quot;&gt;Amazon DynamoDB &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-dynamodb&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lambda تتوسع في ثواني لآلاف النسخ، وقاعدة البيانات التقليدية ما تحب هذا. &lt;strong&gt;DynamoDB&lt;/strong&gt; قاعدة مفتاح وقيمة بدون خوادم: ما فيه سيرفرات، ولا اتصالات تديرها، واستجابة بالملي ثانية عند أي حجم، والبيانات منسوخة بين عدة مناطق توفر تلقائياً.&lt;/p&gt;
&lt;h3 id=&quot;الجداول-والعناصر-والمفاتيح&quot; tabindex=&quot;-1&quot;&gt;الجداول والعناصر والمفاتيح &lt;a class=&quot;heading-anchor&quot; href=&quot;#الجداول-والعناصر-والمفاتيح&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;الجدول فيه &lt;strong&gt;عناصر (Items)&lt;/strong&gt;، وكل عنصر له &lt;strong&gt;حقول (Attributes)&lt;/strong&gt;، وما يلزم يكون لعنصرين نفس الحقول. وأقصى حجم للعنصر 400 KB. والثابت هو &lt;strong&gt;المفتاح الأساسي&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;customer&lt;/code&gt; (مفتاح التقسيم)&lt;/th&gt;
&lt;th&gt;&lt;code&gt;order_id&lt;/code&gt; (مفتاح الترتيب)&lt;/th&gt;
&lt;th&gt;&lt;code&gt;total&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;status&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;coupon&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sara&lt;/td&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;shipped&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sara&lt;/td&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;new&lt;/td&gt;
&lt;td&gt;SAVE10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;omar&lt;/td&gt;
&lt;td&gt;1003&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;new&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مفتاح التقسيم (Partition Key):&lt;/strong&gt; يحدد وين ينحفظ العنصر. اختر واحد قيمه كثيرة ومتنوعة عشان يتوزع الحمل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مفتاح الترتيب (Sort Key):&lt;/strong&gt; اختياري، ويرتب العناصر اللي لها نفس مفتاح التقسيم، فتقدر تطلب &amp;quot;آخر طلبات سارة&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;هذا الفرق الكبير عن &lt;a href=&quot;/posts/aws-10-choosing-database/&quot;&gt;القواعد العلائقية&lt;/a&gt;: ما فيه Joins، وتجيب العناصر بمفتاحها. فـ &lt;strong&gt;ابدأ من استعلاماتك&lt;/strong&gt; وصمم الجدول عليها. ولو تبي تستعلم بحقل ثاني مثل &lt;code&gt;status&lt;/code&gt;، أضف &lt;strong&gt;فهرس ثانوي عام (GSI)&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;أوضاع-السعة&quot; tabindex=&quot;-1&quot;&gt;أوضاع السعة &lt;a class=&quot;heading-anchor&quot; href=&quot;#أوضاع-السعة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;On-demand&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يتوسع لحاله وتدفع لكل طلب&lt;/td&gt;
&lt;td&gt;حمل مجهول أو متغير، وابدأ به&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provisioned&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحدد القراءات والكتابات في الثانية، ومعها توسع تلقائي لو تبي&lt;/td&gt;
&lt;td&gt;حمل ثابت ومتوقع، ويطلع أرخص&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;والسعة المحجوزة تنحسب بوحدات. &lt;strong&gt;وحدة القراءة (RCU)&lt;/strong&gt; تعني قراءة وحدة قوية التناسق في الثانية لعنصر حتى 4 KB، أو قراءتين متناسقتين لاحقاً. و&lt;strong&gt;وحدة الكتابة (WCU)&lt;/strong&gt; تعني كتابة وحدة في الثانية لعنصر حتى 1 KB. فقراءة 80 عنصر بحجم 3 KB في الثانية بتناسق قوي تحتاج 80 RCU، وكتابة 100 عنصر بحجم 512 بايت في الثانية تحتاج 100 WCU.&lt;/p&gt;
&lt;h3 id=&quot;إضافات-تستاهل-تعرفها&quot; tabindex=&quot;-1&quot;&gt;إضافات تستاهل تعرفها &lt;a class=&quot;heading-anchor&quot; href=&quot;#إضافات-تستاهل-تعرفها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;DAX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كاش قدام الجدول، ينزل القراءة من الملي ثانية إلى الميكرو ثانية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Streams&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سجل لكل تغيير يبقى 24 ساعة، ويقدر يشغّل Lambda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global Tables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نسخ في عدة مناطق، وكلها تقبل الكتابة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يحذف العناصر تلقائياً بعد وقت تحدده، مثل الجلسات القديمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Point-in-time Recovery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يرجع الجدول لأي ثانية خلال آخر 1 إلى 35 يوم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التكامل مع S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يصدّر الجدول إلى S3 للتحليل، أو يستورد من S3 إلى جدول جديد&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وين يقف &lt;strong&gt;DAX&lt;/strong&gt; مقابل &lt;a href=&quot;/posts/aws-09-elasticache/&quot;&gt;ElastiCache&lt;/a&gt;؟ DAX كاش شفاف لـ DynamoDB بدون تغيير يذكر في الكود. وElastiCache أعم، مثل حفظ نتائج محسوبة يديرها تطبيقك بنفسه.&lt;/p&gt;
&lt;p&gt;و&lt;strong&gt;Global Tables&lt;/strong&gt; متطابقة في النهاية افتراضياً، يعني الكتابة في منطقة توصل الباقي بعد تأخير بسيط. ولو تحتاج القراءة في أي منطقة تشوف آخر كتابة، فيه وضع &lt;strong&gt;التطابق القوي&lt;/strong&gt;، ويحتاج ثلاث مناطق بالضبط وله قيود.&lt;/p&gt;
&lt;h2 id=&quot;api-gateway-البوابة-الأمامية&quot; tabindex=&quot;-1&quot;&gt;API Gateway: البوابة الأمامية &lt;a class=&quot;heading-anchor&quot; href=&quot;#api-gateway-البوابة-الأمامية&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الدالة ما لها رابط ويب افتراضياً. &lt;strong&gt;API Gateway&lt;/strong&gt; يستقبل الطلب عبر HTTPS ويمرره للدالة، ويتكفل باللي ما تبي تكتبه بنفسك: التحقق من الدخول، والتقييد، والإصدارات وغيرها.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 118&quot; role=&quot;img&quot; aria-labelledby=&quot;api-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;api-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;494&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;557&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;التطبيق&lt;/text&gt;
&lt;rect x=&quot;336&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;API Gateway&lt;/text&gt;
&lt;text x=&quot;399&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;دخول وتقييد&lt;/text&gt;
&lt;rect x=&quot;178&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;text x=&quot;241&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقك&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;28&quot; width=&quot;126&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;83&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;DynamoDB&lt;/text&gt;
&lt;text x=&quot;83&quot; y=&quot;74&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بياناتك&lt;/text&gt;
&lt;line x1=&quot;494&quot; y1=&quot;59&quot; x2=&quot;464&quot; y2=&quot;59&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#api-arrow)&quot;/&gt;
&lt;line x1=&quot;336&quot; y1=&quot;59&quot; x2=&quot;306&quot; y2=&quot;59&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#api-arrow)&quot;/&gt;
&lt;line x1=&quot;178&quot; y1=&quot;59&quot; x2=&quot;148&quot; y2=&quot;59&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#api-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;api-caption&quot;&gt;الـ API الكلاسيكي بدون خوادم: كل جزء يتوسع مع الطلبات، وبدون زيارات ما تدفع شي تقريباً.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;HTTP API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أغلب الواجهات: أبسط وأرخص، وبحد ثابت 30 ثانية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;REST API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ميزات أكثر: كاش ومفاتيح API والتحقق من الطلبات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebSocket API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اتصالات باتجاهين، مثل الدردشة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وREST API له ثلاث أنواع: &lt;strong&gt;Edge-optimized&lt;/strong&gt; عبر CloudFront لمستخدمين حول العالم، و&lt;strong&gt;Regional&lt;/strong&gt; للمستخدمين القريبين، و&lt;strong&gt;Private&lt;/strong&gt; لداخل VPC فقط.&lt;/p&gt;
&lt;p&gt;وتقدر تحط خلفه دالة Lambda، أو أي عنوان HTTP، أو خدمة AWS مباشرة. مثلاً يرسل الطلب إلى SQS على طول بدون دالة بينهم. ولنقطة وصول وحدة بسيطة، Lambda عندها كمان &lt;strong&gt;Function URLs&lt;/strong&gt;: رابط HTTPS مباشر للدالة، بدون هذي الإضافات.&lt;/p&gt;
&lt;h3 id=&quot;مين-يقدر-يستدعي-الـ-api&quot; tabindex=&quot;-1&quot;&gt;مين يقدر يستدعي الـ API؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#مين-يقدر-يستدعي-الـ-api&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;IAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;خدماتك وتطبيقاتك داخل AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognito&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مستخدمين تطبيقك، وبنشرحه في الجزء الجاي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lambda Authorizer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;منطقك الخاص، مثل توكن من نظام ثاني&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;انتبه لحدود الوقت والحجم&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;REST API ينتظر الرد 29 ثانية افتراضياً، وتقدر ترفعها في Regional وPrivate، بس ممكن هذا ينزل حصة طلباتك. والنوعين حدهم 10 MB للبيانات، فخل الملفات الكبيرة تروح مباشرة لـ S3 بـ &lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;الروابط الموقّعة&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h3 id=&quot;تحديد-السرعة-throttling&quot; tabindex=&quot;-1&quot;&gt;تحديد السرعة (Throttling) &lt;a class=&quot;heading-anchor&quot; href=&quot;#تحديد-السرعة-throttling&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;API Gateway يحمي اللي وراه بتحديد عدد الطلبات، ويطبق الحدود من الأدق للأعم: لكل عميل، ثم لكل Method، ثم للحساب كامل في المنطقة. وبعد الحد يوصل العميل &lt;code&gt;429&lt;/code&gt;، ويقدر يعيد المحاولة. وفي REST API، &lt;strong&gt;Usage Plans&lt;/strong&gt; مع مفاتيح API تعطي كل عميل سرعته وحصته، وهذا يناسب API تبيعها.&lt;/p&gt;
&lt;h2 id=&quot;عملي-api-شغال&quot; tabindex=&quot;-1&quot;&gt;عملي: API شغال &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-api-شغال&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنبني عداد زيارات صفحات من قطع الرسم الثلاث. وكل شي هنا داخل المجاني لتجربة مثل هذي. من CloudShell، أنشئ الجدول:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws dynamodb create-table --table-name series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --attribute-definitions &lt;span class=&quot;token assign-left variable&quot;&gt;AttributeName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;page,AttributeType&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;S &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --key-schema &lt;span class=&quot;token assign-left variable&quot;&gt;AttributeName&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;page,KeyType&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;HASH &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --billing-mode PAY_PER_REQUEST &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TableDescription.TableStatus

aws dynamodb &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; table-exists --table-name series-visits

&lt;span class=&quot;token assign-left variable&quot;&gt;TABLE_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws dynamodb describe-table --table-name series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Table.TableArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أعط الدالة دور يكتب السجلات ويحدث هذا الجدول فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; trust.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Effect&quot;: &quot;Allow&quot;,
    &quot;Principal&quot;: {&quot;Service&quot;: &quot;lambda.amazonaws.com&quot;},
    &quot;Action&quot;: &quot;sts:AssumeRole&quot;
  }]
}
EOF&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;ROLE_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws iam create-role --role-name series-visits-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --assume-role-policy-document file://trust.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Role.Arn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws iam attach-role-policy --role-name series-visits-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

aws iam put-role-policy --role-name series-visits-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-name table-access --policy-document &lt;span class=&quot;token string&quot;&gt;&quot;{
    &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Version&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;2012-10-17&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;,
    &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Statement&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: [{
      &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Effect&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Allow&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;,
      &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Action&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;dynamodb:UpdateItem&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;,
      &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;Resource&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;: &lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$TABLE_ARN&lt;/span&gt;&lt;span class=&quot;token entity&quot; title=&quot;&#92;&amp;quot;&quot;&gt;&#92;&quot;&lt;/span&gt;
    }]
  }&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;اكتب الدالة. تزيد واحد على عداد المسار المطلوب، والتحديث بهذي الطريقة آمن حتى مع الطلبات المتزامنة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; app.py &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
import json
import os
import boto3

table = boto3.resource(&quot;dynamodb&quot;).Table(os.environ[&quot;TABLE&quot;])

def handler(event, context):
    page = event.get(&quot;rawPath&quot;, &quot;/&quot;)
    result = table.update_item(
        Key={&quot;page&quot;: page},
        UpdateExpression=&quot;ADD visits :one&quot;,
        ExpressionAttributeValues={&quot;:one&quot;: 1},
        ReturnValues=&quot;UPDATED_NEW&quot;,
    )
    visits = int(result[&quot;Attributes&quot;][&quot;visits&quot;])
    return {
        &quot;statusCode&quot;: 200,
        &quot;headers&quot;: {&quot;content-type&quot;: &quot;application/json&quot;},
        &quot;body&quot;: json.dumps({&quot;page&quot;: page, &quot;visits&quot;: visits}),
    }
EOF&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;zip&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-q&lt;/span&gt; function.zip app.py&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أنشئ الدالة. الدور الجديد ياخذ كم ثانية عشان يفعّل، فلو جاك خطأ عن الدور، انتظر شوي وأعد الأمر:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;FN_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws lambda create-function --function-name series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--runtime&lt;/span&gt; python3.13 &lt;span class=&quot;token parameter variable&quot;&gt;--handler&lt;/span&gt; app.handler &lt;span class=&quot;token parameter variable&quot;&gt;--role&lt;/span&gt; $ROLE_ARN &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --zip-file fileb://function.zip &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--environment&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Variables={TABLE=series-visits}&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; FunctionArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws lambda &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; function-active-v2 --function-name series-visits&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين البوابة. هذا الأمر ينشئ HTTP API يرسل كل المسارات للدالة، وبعدها نسمح له يستدعيها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;API_ID&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws apigatewayv2 create-api &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --protocol-type HTTP &lt;span class=&quot;token parameter variable&quot;&gt;--target&lt;/span&gt; $FN_ARN &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; ApiId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;ACCOUNT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Account &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws lambda add-permission --function-name series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --statement-id api-gateway &lt;span class=&quot;token parameter variable&quot;&gt;--action&lt;/span&gt; lambda:InvokeFunction &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--principal&lt;/span&gt; apigateway.amazonaws.com &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --source-arn &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:execute-api:&lt;span class=&quot;token variable&quot;&gt;$AWS_REGION&lt;/span&gt;:&lt;span class=&quot;token variable&quot;&gt;$ACCOUNT&lt;/span&gt;:&lt;span class=&quot;token variable&quot;&gt;$API_ID&lt;/span&gt;/*&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Statement &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; /dev/null

&lt;span class=&quot;token assign-left variable&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws apigatewayv2 get-api --api-id $API_ID &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; ApiEndpoint &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$URL&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;جربه. وتقدر تفتح الرابط في متصفحك كمان:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$URL&lt;/span&gt;/home&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$URL&lt;/span&gt;/home&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$URL&lt;/span&gt;/about&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;العداد يزيد: &lt;code&gt;home&lt;/code&gt; يوصل 2 و&lt;code&gt;about&lt;/code&gt; عند 1. شوف البيانات في الجدول:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws dynamodb scan --table-name series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Items[].[page.S,visits.N]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وأخيراً، شوف البداية الباردة في سجلات الدالة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws logs &lt;span class=&quot;token function&quot;&gt;tail&lt;/span&gt; /aws/lambda/series-visits &lt;span class=&quot;token parameter variable&quot;&gt;--since&lt;/span&gt; 10m &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; REPORT&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أول طلب بس فيه حقل &lt;code&gt;Init Duration&lt;/code&gt;، وهو وقت تجهيز البيئة، واللي بعده أسرع بكثير. ولو كانت السجلات فاضية، انتظر كم ثانية وحاول مرة ثانية.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;المورد اللي ما ينستخدم ما يكلف شي هنا، وهذي فكرة Serverless. بس نظّف على أي حال، ومعها الدور وصلاحياته:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws apigatewayv2 delete-api --api-id &lt;span class=&quot;token variable&quot;&gt;$API_ID&lt;/span&gt;
aws lambda delete-function --function-name series-visits
aws dynamodb delete-table --table-name series-visits &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TableDescription.TableStatus
aws logs delete-log-group --log-group-name /aws/lambda/series-visits

aws iam delete-role-policy --role-name series-visits-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-name table-access
aws iam detach-role-policy --role-name series-visits-role &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
aws iam delete-role --role-name series-visits-role&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Serverless&lt;/strong&gt; يعني تكتب الكود والبيانات، وتدفع على الاستخدام فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lambda&lt;/strong&gt; تشتغل حتى 15 دقيقة، وتدفع لكل طلب ولكل GB-second.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;البداية الباردة&lt;/strong&gt; تخففها بـ Provisioned Concurrency أو SnapStart، و&lt;strong&gt;Reserved Concurrency&lt;/strong&gt; يحمي الدوال من بعضها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DynamoDB&lt;/strong&gt; تجيب العناصر بالمفتاح، فصمم الجدول على استعلاماتك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Gateway&lt;/strong&gt; البوابة الأمامية، يتكفل بالدخول والتقييد، وابدأ بـ HTTP API.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 6&lt;/p&gt;
&lt;p&gt;دالة Lambda مربوطة بـ VPC عشان توصل لقاعدة RDS خاصة. وهذا شغال، بس الحين اتصالاتها بمزود دفع على الإنترنت تنتهي مهلتها. وش يحل هذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;ربط الدالة بشبكة عامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;رفع مهلة الدالة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;توجيه شبكة الدالة الخاصة عبر NAT Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;وضع RDS Proxy بين الدالة والقاعدة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;لما تنربط الدالة بـ VPC تفقد الوصول للإنترنت، إلا لو كانت شبكتها تمر عبر NAT Gateway.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الشبكة العامة ما تعطي الدالة وصول للإنترنت ولا عنوان عام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; ما فيه طريق للإنترنت أصلاً، فالوقت الزيادة ما يفيد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يدير اتصالات القاعدة، والمشكلة في طريق الخروج.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#lambda-%D8%AF%D8%A7%D8%AE%D9%84-vpc&quot;&gt;Lambda داخل VPC&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-internet.html&quot;&gt;Enable internet access for VPC-connected Lambda Event Functions&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 6&lt;/p&gt;
&lt;p&gt;جدول طلبات مفتاح التقسيم فيه &lt;code&gt;customer&lt;/code&gt; ومفتاح الترتيب &lt;code&gt;order_id&lt;/code&gt;. والفريق يحتاج الحين كل الطلبات اللي &lt;code&gt;status&lt;/code&gt; فيها &lt;code&gt;new&lt;/code&gt;، بسرعة وبشكل متكرر. وش يسوي؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;قراءة الجدول كامل (Scan) مع كل طلب&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;ربط الجدول بجدول &lt;code&gt;status&lt;/code&gt; عبر Join&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;وضع DAX قدام الجدول&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إضافة فهرس ثانوي عام (GSI) على &lt;code&gt;status&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الفهرس الثانوي العام يرتب البيانات بمفتاح مختلف، فتقدر تستعلم بـ &lt;code&gt;status&lt;/code&gt; مباشرة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يقرأ كل العناصر كل مرة، فيبطأ وتزيد تكلفته كل ما كبر الجدول.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; DynamoDB ما فيها Joins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يسرّع القراءات اللي تقدر عليها أصلاً، وما يضيف طريقة استعلام جديدة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D9%88%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD&quot;&gt;الجداول والعناصر والمفاتيح&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html&quot;&gt;Using Global Secondary Indexes in DynamoDB&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 6&lt;/p&gt;
&lt;p&gt;صفحة منتج تقرأ نفس عناصر DynamoDB ملايين المرات في اليوم. والفريق يبي القراءة تاخذ ميكرو ثانية، &lt;strong&gt;بأقل تغيير في الكود&lt;/strong&gt;. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;DynamoDB Accelerator (DAX)&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;ElastiCache، والتطبيق يدير الكاش&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;DynamoDB Global Tables&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;DynamoDB Streams&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DAX كاش قدام الجدول يتوافق مع واجهة DynamoDB، فيحتاج تغييرات بسيطة فقط.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا ممكن يكون سريع كمان، بس تطبيقك لازم يدير اللي يدخل ويطلع من الكاش.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يحط نسخ في عدة Regions، وما ينزل القراءة إلى الميكرو ثانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا سجل بالتغييرات، وما يسرّع القراءة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D8%AA%D8%B3%D8%AA%D8%A7%D9%87%D9%84-%D8%AA%D8%B9%D8%B1%D9%81%D9%87%D8%A7&quot;&gt;إضافات تستاهل تعرفها&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.html&quot;&gt;In-memory acceleration with DynamoDB Accelerator (DAX)&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 6&lt;/p&gt;
&lt;p&gt;شركة تبيع الوصول لواجهة API حقها. وتحتاج مفاتيح API لكل عميل، وتحديد سرعة لكل عميل، وكاش للردود. أي خيار يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;HTTP API&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;REST API&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;WebSocket API&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Lambda Function URL&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;REST API فيه كل هذا. وHTTP API أبسط وأرخص لأنه يترك هذي الميزات.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا ما فيه مفاتيح API ولا كاش.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا للاتصالات باتجاهين، مثل المحادثة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا رابط مباشر للدالة، بدون أي من هذي الإضافات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#api-gateway-%D8%A7%D9%84%D8%A8%D9%88%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9&quot;&gt;API Gateway: البوابة الأمامية&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html&quot;&gt;Choose between REST APIs and HTTP APIs&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 6&lt;/p&gt;
&lt;p&gt;دالة تقارير أحياناً تاكل حد التزامن كله في الـ Region، فتبدأ دالة الدفع ترجّع &lt;code&gt;429&lt;/code&gt;. ودالة الدفع لازم كمان ترد باستجابة ثابتة وسريعة جداً. أي &lt;strong&gt;إعدادين&lt;/strong&gt; يناسبون دالة الدفع؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Reserved Concurrency&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;SnapStart&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Provisioned Concurrency&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;مساحة &lt;code&gt;/tmp&lt;/code&gt; أكبر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;ذاكرة أقل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Reserved Concurrency يحجز لدالة الدفع حصة ما تاخذها أي دالة ثانية، وProvisioned Concurrency يبقي البيئات جاهزة فما فيه بداية باردة لها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يقلل وقت البداية بدون ما يضمن إزالته، وما ينجمع مع Provisioned Concurrency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يزيد مساحة القرص المؤقت، وما له علاقة بأي مشكلة منهم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; المعالج يزيد مع الذاكرة، فهذا يبطئ الردود.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D8%B2%D8%A7%D9%85%D9%86-concurrency&quot;&gt;التزامن (Concurrency)&lt;/a&gt; و&lt;a href=&quot;#%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%A8%D8%A7%D8%B1%D8%AF%D8%A9-cold-start&quot;&gt;البداية الباردة (Cold Start)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html&quot;&gt;Configuring reserved concurrency for an Event Function&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html&quot;&gt;Configuring provisioned concurrency for an Event Function&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 6&lt;/p&gt;
&lt;p&gt;تطبيق يقرأ 50 عنصر في الثانية من جدول DynamoDB بوضع Provisioned. وكل عنصر حجمه 6 KB، والقراءة لازم تكون قوية التناسق. كم وحدة قراءة يحتاج؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;25&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;وحدة RCU تغطي قراءة قوية التناسق في الثانية حتى 4 KB، فعنصر 6 KB يحتاج وحدتين. وخمسين قراءة في الثانية تحتاج 100.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يحسب القراءة نص وحدة، وما يغطي عنصر 6 KB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يكفي لو كانت نفس القراءات متناسقة لاحقاً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يضرب في حجم العنصر، والوحدات تنحسب لكل 4 KB.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D9%88%D8%B6%D8%A7%D8%B9-%D8%A7%D9%84%D8%B3%D8%B9%D8%A9&quot;&gt;أوضاع السعة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/provisioned-capacity-mode.html&quot;&gt;DynamoDB provisioned capacity mode&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;عندك الحين قطع البناء. كيف تبني منها تطبيق كامل، فيه مستخدمين وسير عمل طويل وأحداث تمشي بين الخدمات؟ هذا اللي بنغطيه في &lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;&lt;strong&gt;الجزء الثاني والعشرين&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>الحاويات: ECS وFargate وEKS</title>
    <link href="https://blog.sultanops.com/posts/aws-20-ecs-fargate-eks/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-20-ecs-fargate-eks/</id>
    <summary>وش هي الحاوية وكيف تختلف عن الجهاز الافتراضي، وتخزين الصور في ECR، وتشغيلها بـ ECS على Fargate، والفرق بين دوري IAM، ومتى تختار EKS، مع تجربة عملية تشوف فيها Service يعوض مهمة وقفت.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;الجزء التاسع عشر&lt;/a&gt; فصلنا الخدمات عن بعض. بس كل خدمة لسا تحتاج مكان تشتغل فيه، وعلى سيرفر EC2 هذا يعني صورة نظام، وتحديثات، ومكتبات، والجملة المشهورة: &amp;quot;عندي يشتغل&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;الحاويات (Containers)&lt;/strong&gt; تحل هذا: تغلف التطبيق مع كل اللي يحتاجه في حزمة وحدة، ويشتغل بنفس الطريقة على جهازك وفي الإنتاج.&lt;/p&gt;
&lt;aside class=&quot;callout callout-note&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-info&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;8.5&quot;/&gt;&lt;path d=&quot;M12 11v5M12 8h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;لا تخلط بين الحاويتين&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;الحاوية هنا (Container) غير حاوية S3 (Bucket) اللي شفناها في &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;الجزء الخامس عشر&lt;/a&gt;. نفس الكلمة بالعربي، بس شيئين مختلفين تماماً.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;وش-هي-الحاوية&quot; tabindex=&quot;-1&quot;&gt;وش هي الحاوية؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وش-هي-الحاوية&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الحاوية عملية معزولة لها ملفاتها ومكتباتها، وتتشارك نظام تشغيل المضيف بدل ما تحمل نظامها.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 220&quot; role=&quot;img&quot; aria-labelledby=&quot;vmcontainer-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;vmcontainer-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;475&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الأجهزة الافتراضية&lt;/text&gt;
&lt;rect x=&quot;480&quot; y=&quot;36&quot; width=&quot;130&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;59&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق&lt;/text&gt;
&lt;rect x=&quot;340&quot; y=&quot;36&quot; width=&quot;130&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;405&quot; y=&quot;59&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق&lt;/text&gt;
&lt;rect x=&quot;480&quot; y=&quot;80&quot; width=&quot;130&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;103&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;نظام كامل&lt;/text&gt;
&lt;rect x=&quot;340&quot; y=&quot;80&quot; width=&quot;130&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;405&quot; y=&quot;103&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;نظام كامل&lt;/text&gt;
&lt;rect x=&quot;340&quot; y=&quot;124&quot; width=&quot;270&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;147&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Hypervisor&lt;/text&gt;
&lt;rect x=&quot;340&quot; y=&quot;168&quot; width=&quot;270&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;191&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;العتاد&lt;/text&gt;
&lt;text x=&quot;165&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الحاويات&lt;/text&gt;
&lt;rect x=&quot;215&quot; y=&quot;36&quot; width=&quot;85&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;257.5&quot; y=&quot;59&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق&lt;/text&gt;
&lt;rect x=&quot;122&quot; y=&quot;36&quot; width=&quot;85&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;164.5&quot; y=&quot;59&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق&lt;/text&gt;
&lt;rect x=&quot;30&quot; y=&quot;36&quot; width=&quot;85&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;72.5&quot; y=&quot;59&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق&lt;/text&gt;
&lt;rect x=&quot;30&quot; y=&quot;80&quot; width=&quot;270&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;165&quot; y=&quot;103&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;محرك الحاويات&lt;/text&gt;
&lt;rect x=&quot;30&quot; y=&quot;124&quot; width=&quot;270&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;165&quot; y=&quot;147&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;نظام واحد مشترك&lt;/text&gt;
&lt;rect x=&quot;30&quot; y=&quot;168&quot; width=&quot;270&quot; height=&quot;36&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;165&quot; y=&quot;191&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;العتاد&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;vmcontainer-caption&quot;&gt;كل جهاز افتراضي يحمل نظام تشغيل كامل. الحاويات تتشارك نظام المضيف، فهي أخف وتشتغل في ثواني.&lt;/figcaption&gt;
&lt;/figure&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يحتوي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نظام تشغيل كامل والتطبيق&lt;/td&gt;
&lt;td&gt;التطبيق ومكتباته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الحجم&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جيجابايتات&lt;/td&gt;
&lt;td&gt;غالباً ميجابايتات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التشغيل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دقايق&lt;/td&gt;
&lt;td&gt;ثواني&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;العزل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أقوى بنظام مستقل&lt;/td&gt;
&lt;td&gt;أخف بنواة مشتركة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;الصورة-والحاوية-والمستودع&quot; tabindex=&quot;-1&quot;&gt;الصورة والحاوية والمستودع &lt;a class=&quot;heading-anchor&quot; href=&quot;#الصورة-والحاوية-والمستودع&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ثلاث كلمات بتتكرر عليك:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الصورة (Image):&lt;/strong&gt; حزمة للقراءة فقط فيها التطبيق ومكتباته، مثل الوصفة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الحاوية (Container):&lt;/strong&gt; نسخة شغالة من الصورة. والصورة الوحدة تشتغل كألف حاوية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المستودع (Registry):&lt;/strong&gt; مكان تخزين الصور، مثل Docker Hub أو Amazon ECR.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;أشهر أداة لبناء الصور هي &lt;strong&gt;Docker&lt;/strong&gt;. تكتب محتوى الصورة في ملف &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;dockerfile&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-dockerfile&quot;&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; nginx:alpine&lt;/span&gt;
&lt;span class=&quot;token instruction&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;COPY&lt;/span&gt; index.html /usr/share/nginx/html/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;ثم تبنيها، وتجربها على جهازك، وترفعها للمستودع:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; build &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; shop &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8080&lt;/span&gt;:80 shop
&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; push &lt;span class=&quot;token number&quot;&gt;123456789012&lt;/span&gt;.dkr.ecr.us-east-1.amazonaws.com/shop&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;amazon-ecr-بيت-صورك&quot; tabindex=&quot;-1&quot;&gt;Amazon ECR: بيت صورك &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-ecr-بيت-صورك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ECR&lt;/strong&gt; (Elastic Container Registry) مستودع الصور في AWS، وتخزينه على S3 من وراء الكواليس:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مستودعات خاصة:&lt;/strong&gt; الوصول لها عبر &lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;IAM&lt;/a&gt;، فالسيرفر أو المهمة تحتاج صلاحية عشان تسحب.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مستودعات عامة:&lt;/strong&gt; أي أحد يسحب منها، عبر معرض ECR Public.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إضافات:&lt;/strong&gt; فحص الصور من الثغرات، وإصدارات بالوسوم، وقواعد دورة حياة تحذف الصور القديمة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;amazon-ecs-طريقة-aws-لتشغيل-الحاويات&quot; tabindex=&quot;-1&quot;&gt;Amazon ECS: طريقة AWS لتشغيل الحاويات &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-ecs-طريقة-aws-لتشغيل-الحاويات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ECS&lt;/strong&gt; (Elastic Container Service) ياخذ صورك ويشغلها، ويبقيها شغالة، ويحطها خلف موزع حمل. هو خدمة AWS الخاصة، وأبسط من Kubernetes، والخدمة نفسها ما عليها رسوم إضافية. تدفع على السعة اللي تشتغل عليها.&lt;/p&gt;
&lt;p&gt;أربع مصطلحات تغطي الخدمة كلها:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cluster&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجموعة منطقية تشتغل فيها المهام&lt;/td&gt;
&lt;td&gt;أسطول سيرفراتك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Definition&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وصفة: الصورة والمعالج والذاكرة والمنافذ والأدوار&lt;/td&gt;
&lt;td&gt;قالب التشغيل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حاوية شغالة أو أكثر من هذي الوصفة&lt;/td&gt;
&lt;td&gt;السيرفر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يبقي عدد محدد من المهام شغال، ويعوض اللي تفشل&lt;/td&gt;
&lt;td&gt;مجموعة Auto Scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 256&quot; role=&quot;img&quot; aria-labelledby=&quot;ecs-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;ecs-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;510&quot; y=&quot;98&quot; width=&quot;110&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;123&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;ALB&lt;/text&gt;
&lt;text x=&quot;565&quot; y=&quot;143&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;موزع الحمل&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;450&quot; height=&quot;228&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot;/&gt;
&lt;text x=&quot;245&quot; y=&quot;38&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مجموعة ECS&lt;/text&gt;
&lt;text x=&quot;245&quot; y=&quot;60&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;Service يبقي 3 مهام شغالة&lt;/text&gt;
&lt;rect x=&quot;250&quot; y=&quot;74&quot; width=&quot;200&quot; height=&quot;152&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;350&quot; y=&quot;94&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقة التوفر A&lt;/text&gt;
&lt;rect x=&quot;265&quot; y=&quot;106&quot; width=&quot;170&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;350&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مهمة 1&lt;/text&gt;
&lt;rect x=&quot;265&quot; y=&quot;164&quot; width=&quot;170&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;350&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مهمة 2&lt;/text&gt;
&lt;rect x=&quot;40&quot; y=&quot;74&quot; width=&quot;200&quot; height=&quot;152&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;140&quot; y=&quot;94&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقة التوفر B&lt;/text&gt;
&lt;rect x=&quot;55&quot; y=&quot;106&quot; width=&quot;170&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;140&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مهمة 3&lt;/text&gt;
&lt;rect x=&quot;55&quot; y=&quot;164&quot; width=&quot;170&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;140&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;جديدة لما يزيد الحمل&lt;/text&gt;
&lt;line x1=&quot;510&quot; y1=&quot;128&quot; x2=&quot;452&quot; y2=&quot;128&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#ecs-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;ecs-caption&quot;&gt;الـ Service يحافظ على عدد المهام اللي طلبته في مناطق التوفر، وموزع الحمل يوجه الزوار للمهام السليمة.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;مين-يشغل-الحاويات&quot; tabindex=&quot;-1&quot;&gt;مين يشغّل الحاويات؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#مين-يشغل-الحاويات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;الحاويات تحتاج سعة حوسبة، وعندك ثلاث خيارات:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fargate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS بالكامل، وما تشوف أي سيرفر&lt;/td&gt;
&lt;td&gt;أغلب التطبيقات، وابدأ به&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed Instances&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS تديرها، وأنت تختار أنواع السيرفرات&lt;/td&gt;
&lt;td&gt;تحتاج GPU أو سيرفرات معينة بدون إدارتها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EC2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت، عبر مجموعة Auto Scaling&lt;/td&gt;
&lt;td&gt;تحكم كامل، أو تقليل تكلفة حمل ثابت&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;مع &lt;strong&gt;Fargate&lt;/strong&gt; تحدد المعالج والذاكرة للمهمة، وتدفع عليها طول ما هي شغالة. و&lt;strong&gt;Fargate Spot&lt;/strong&gt; يخفض السعر كثير للمهام اللي تتحمل الانقطاع، بنفس فكرة سيرفرات &lt;a href=&quot;/posts/aws-04-ec2-pricing-networking/&quot;&gt;Spot&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;دورين-في-iam-والخلط-بينهم-كلاسيكي&quot; tabindex=&quot;-1&quot;&gt;دورين في IAM، والخلط بينهم كلاسيكي &lt;a class=&quot;heading-anchor&quot; href=&quot;#دورين-في-iam-والخلط-بينهم-كلاسيكي&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;كل مهمة على Fargate ممكن يكون لها دورين، وكل واحد له شغل مختلف:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Execution Role&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ECS نفسه، عشان يجهز المهمة&lt;/td&gt;
&lt;td&gt;سحب الصورة من ECR وإرسال السجلات لـ CloudWatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task Role&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كودك داخل الحاوية&lt;/td&gt;
&lt;td&gt;القراءة من S3 أو الكتابة في DynamoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;لو فشلت المهمة عند التشغيل بخطأ في السحب، شوف Execution Role. ولو جاء كودك &lt;code&gt;AccessDenied&lt;/code&gt; وهو شغال، شوف Task Role. وخل لكل خدمة دورها، مو دور واحد مشترك.&lt;/p&gt;
&lt;h3 id=&quot;الشبكة-وتوزيع-الحمل&quot; tabindex=&quot;-1&quot;&gt;الشبكة وتوزيع الحمل &lt;a class=&quot;heading-anchor&quot; href=&quot;#الشبكة-وتوزيع-الحمل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;على Fargate كل مهمة تاخذ واجهة شبكة خاصة فيها وIP خاص، فلها &lt;strong&gt;Security Group&lt;/strong&gt; مثل السيرفر. وحط &lt;a href=&quot;/posts/aws-06-load-balancers/&quot;&gt;موزع حمل ALB&lt;/a&gt; قدام الـ Service، وهو يسجل المهام الجديدة تلقائياً ويشيل الفاشلة. وهذا يناسب أغلب تطبيقات الويب، وتختار NLB للسعة العالية جداً أو عناوين IP الثابتة.&lt;/p&gt;
&lt;h3 id=&quot;التخزين&quot; tabindex=&quot;-1&quot;&gt;التخزين &lt;a class=&quot;heading-anchor&quot; href=&quot;#التخزين&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;قرص الحاوية يروح معها. ولمشاركة الملفات بين المهام، اربط &lt;a href=&quot;/posts/aws-05-ec2-storage/&quot;&gt;EFS&lt;/a&gt;، ويشتغل على Fargate وEC2. وأي شي مهم، خزنه خارج الحاوية في S3 أو قاعدة بيانات.&lt;/p&gt;
&lt;h3 id=&quot;التوسع&quot; tabindex=&quot;-1&quot;&gt;التوسع &lt;a class=&quot;heading-anchor&quot; href=&quot;#التوسع&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Service Auto Scaling&lt;/strong&gt; يغيّر عدد المهام حسب متوسط المعالج أو الذاكرة، أو الطلبات لكل مهمة من موزع الحمل، أو جدول زمني. والسياسات هي نفسها اللي شفناها في &lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;الجزء السابع&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;وعلى Fargate هذا كل اللي تحتاجه. أما مع EC2 فيه طبقة ثانية، لأنك تحتاج سيرفرات تنزل عليها المهام الجديدة. &lt;strong&gt;Capacity Provider&lt;/strong&gt; يربط الـ Service بمجموعة Auto Scaling ويزيد السيرفرات لما تحتاجها المهام.&lt;/p&gt;
&lt;h3 id=&quot;مو-بس-خدمات-ويب&quot; tabindex=&quot;-1&quot;&gt;مو بس خدمات ويب &lt;a class=&quot;heading-anchor&quot; href=&quot;#مو-بس-خدمات-ويب&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;المهام مو لازم تبقى شغالة دايماً. ثلاث أنماط معروفة:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;رد فعل على حدث&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ينزل ملف في S3، وEventBridge يشغّل مهمة Fargate تعالجه، وتوقف لما تخلص&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;شغل مجدول&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;EventBridge Scheduler يشغّل مهمة كل ليلة لشغل دفعات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;عمّال طابور&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Service يسحب من &lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;SQS&lt;/a&gt;، ويتوسع حسب عدد الرسائل المنتظرة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;ecs-express-mode-الطريق-المختصر&quot; tabindex=&quot;-1&quot;&gt;ECS Express Mode: الطريق المختصر &lt;a class=&quot;heading-anchor&quot; href=&quot;#ecs-express-mode-الطريق-المختصر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;تبي تطبيق ويب من صورة بدون ما تجهز كل قطعة؟ &lt;strong&gt;ECS Express Mode&lt;/strong&gt; ياخذ صورة ودورين، وينشئ Service على Fargate وموزع حمل وفحوصات صحة وتوسع ورابط. وكلها تبقى في حسابك، فتقدر تعدلها بعدين.&lt;/p&gt;
&lt;aside class=&quot;callout callout-note&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-info&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;8.5&quot;/&gt;&lt;path d=&quot;M12 11v5M12 8h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;وماذا عن App Runner؟&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ممكن تقرأ عن &lt;strong&gt;AWS App Runner&lt;/strong&gt;، وكان يسوي شي قريب. وقف استقبال العملاء الجدد في 30 أبريل 2026، وهو مستمر لعملائه الحاليين، وAWS توجّه العملاء الجدد لـ ECS Express Mode.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;amazon-eks-kubernetes&quot; tabindex=&quot;-1&quot;&gt;Amazon EKS: Kubernetes &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-eks-kubernetes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt; نظام مفتوح المصدر لتشغيل الحاويات، منتشر في كل السحابات ومراكز البيانات. &lt;strong&gt;EKS&lt;/strong&gt; (Elastic Kubernetes Service) يشغّل لك &lt;strong&gt;طبقة التحكم&lt;/strong&gt; فيه عبر عدة مناطق توفر، بـ 0.10 دولار في الساعة لكل Cluster للإصدارات اللي تحت الدعم العادي، فوق تكلفة السعة. والإصدار اللي تجاوز هذي الفترة يكلف 0.60 دولار في الساعة.&lt;/p&gt;
&lt;p&gt;المصطلحات تختلف عن ECS: المهمة اسمها &lt;strong&gt;Pod&lt;/strong&gt;، والسيرفر اسمه &lt;strong&gt;Node&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;خيار الـ Nodes&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;strong&gt;EKS Auto Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS تجهز الـ Nodes وتحدثها وتوسعها، وهو اللي توصي فيه AWS مستقبلاً&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Managed Node Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS تنشئ السيرفرات وتحدثها، وأنت تختارها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Self-managed Nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت تتكفل بكل شي، للمتطلبات الخاصة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fargate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كل Pod يشتغل معزول بدون Nodes، وهو متاح، بس Auto Mode مفضل عليه&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وللتخزين، يستخدم EKS &lt;strong&gt;تعريفات CSI&lt;/strong&gt; لربط EBS أو EFS أو FSx.&lt;/p&gt;
&lt;h3 id=&quot;ecs-أو-eks&quot; tabindex=&quot;-1&quot;&gt;ECS أو EKS؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#ecs-أو-eks&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ECS&lt;/th&gt;
&lt;th&gt;EKS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التعقيد&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مفاهيم أقل وتعلم سريع&lt;/td&gt;
&lt;td&gt;نظام كبير وفيه الكثير تتعلمه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;النقل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS فقط&lt;/td&gt;
&lt;td&gt;نفس الأدوات تشتغل في أي مكان&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المنظومة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تكامل قريب مع AWS&lt;/td&gt;
&lt;td&gt;منظومة مفتوحة ضخمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تكلفة الخدمة نفسها&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجانية&lt;/td&gt;
&lt;td&gt;بالساعة لكل Cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;اختره لو&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تبدأ من جديد وشغلك على AWS&lt;/td&gt;
&lt;td&gt;فريقك يعرف Kubernetes أو تشتغل على أكثر من سحابة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;لو ما فيه شي يدفعك لـ Kubernetes، ابدأ بـ &lt;strong&gt;ECS على Fargate&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;حاويات-على-سيرفراتك&quot; tabindex=&quot;-1&quot;&gt;حاويات على سيرفراتك &lt;a class=&quot;heading-anchor&quot; href=&quot;#حاويات-على-سيرفراتك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;تحتاج نفس الأدوات خارج AWS، مثل مركز بياناتك؟&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;ECS Anywhere&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يسجل سيرفراتك أو أجهزتك الافتراضية في مجموعة ECS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EKS Hybrid Nodes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يضيف سيرفراتك كعقد في مجموعة EKS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EKS Anywhere&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يشغّل مجموعات Kubernetes على بنيتك، للبيئات المعزولة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EKS Distro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مكونات Kubernetes اللي يقوم عليها EKS، تشغلها وتدعمها بنفسك&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;عملي-service-يعوض-مهمة-وقفت&quot; tabindex=&quot;-1&quot;&gt;عملي: Service يعوض مهمة وقفت &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-service-يعوض-مهمة-وقفت&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنشغل صورة Nginx عامة على Fargate، بدون بناء شي. من CloudShell، أنشئ الـ Cluster واكتب الوصفة. والصورة من مستودع عام بدون سجلات ما تحتاج Execution Role:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ecs create-cluster --cluster-name series-cluster &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; cluster.status

&lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; task.json &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;EOF&#39;
{
  &quot;family&quot;: &quot;web&quot;,
  &quot;requiresCompatibilities&quot;: [&quot;FARGATE&quot;],
  &quot;networkMode&quot;: &quot;awsvpc&quot;,
  &quot;cpu&quot;: &quot;256&quot;,
  &quot;memory&quot;: &quot;512&quot;,
  &quot;containerDefinitions&quot;: [{
    &quot;name&quot;: &quot;web&quot;,
    &quot;image&quot;: &quot;public.ecr.aws/nginx/nginx:latest&quot;,
    &quot;portMappings&quot;: [{&quot;containerPort&quot;: 80}],
    &quot;essential&quot;: true
  }]
}
EOF&lt;/span&gt;

aws ecs register-task-definition --cli-input-json file://task.json &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; taskDefinition.family&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;جهز الشبكة: الـ VPC الافتراضي، وSubnet، وSecurity Group يسمح بالمنفذ 80 من CloudShell حقك فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;VPC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-vpcs &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;isDefault,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;true &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Vpcs[0].VpcId&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;SUBNET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-subnets &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;vpc-id,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;$VPC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Subnets[0].SubnetId&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;SG&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-security-group --group-name series-web &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--description&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Series web task&quot;&lt;/span&gt; --vpc-id $VPC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; GroupId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws ec2 authorize-security-group-ingress --group-id &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--protocol&lt;/span&gt; tcp &lt;span class=&quot;token parameter variable&quot;&gt;--port&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--cidr&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; https://checkip.amazonaws.com&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;/32

&lt;span class=&quot;token assign-left variable&quot;&gt;NET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;awsvpcConfiguration={subnets=[&lt;span class=&quot;token variable&quot;&gt;$SUBNET&lt;/span&gt;],securityGroups=[&lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt;],assignPublicIp=ENABLED}&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;شغّل مهمة وحدة. لو هذا أول استخدام لك لـ ECS وجاك خطأ عن الدور المرتبط بالخدمة، انتظر شوي وأعد الأمر:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;TASK&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ecs run-task &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster --task-definition web &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --launch-type FARGATE --network-configuration &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$NET&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tasks[0].taskArn&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws ecs &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; tasks-running &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--tasks&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TASK&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;خذ عنوانها وجربها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;ENI&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ecs describe-tasks &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--tasks&lt;/span&gt; $TASK &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tasks[0].attachments[0].details[?name==&#39;networkInterfaceId&#39;].value&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;IP&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-network-interfaces --network-interface-ids $ENI &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;NetworkInterfaces[0].Association.PublicIp&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; http://&lt;span class=&quot;token variable&quot;&gt;$IP&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;title&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف &lt;code&gt;&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;&lt;/code&gt;. أول حاوية لك شغالة، بدون أي سيرفر تشوفه. الحين أوقفها، وبتبقى واقفة لأن ما فيه أحد يهتم فيها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ecs stop-task &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--task&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TASK&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; task.lastStatus&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أنشئ &lt;strong&gt;Service&lt;/strong&gt; يبقي مهمة وحدة شغالة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ecs create-service &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster --service-name web &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --task-definition web --desired-count &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; --launch-type FARGATE &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --network-configuration &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$NET&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; service.status

aws ecs &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; services-stable &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--services&lt;/span&gt; web

&lt;span class=&quot;token assign-left variable&quot;&gt;FIRST&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ecs list-tasks &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster --service-name web &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;taskArns[0]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$FIRST&lt;/span&gt;

aws ecs stop-task &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--task&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$FIRST&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; task.lastStatus&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;انتظر دقيقة، ثم اعرض المهام:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ecs list-tasks &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster --service-name web &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; taskArns&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الرقم تغير. الـ Service لاحظ إن المهمة راحت وشغل غيرها بدون ما تحرك إصبع.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;المهمة تكلف حوالي سنت أو سنتين في الساعة، بس تستمر طول ما الـ Service موجود. ولو اشتكى أمر إن شي لسا مستخدم، انتظر دقيقة وأعده:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ecs delete-service &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--service&lt;/span&gt; web &lt;span class=&quot;token parameter variable&quot;&gt;--force&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; service.status
aws ecs &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; services-inactive &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--services&lt;/span&gt; web
aws ecs delete-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--cluster&lt;/span&gt; series-cluster &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; cluster.status
aws ecs deregister-task-definition --task-definition web:1 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; taskDefinition.status
aws ec2 delete-security-group --group-id &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الحاوية&lt;/strong&gt; تغلف التطبيق ومكتباته وتتشارك نظام المضيف، فهي خفيفة وسريعة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ECR&lt;/strong&gt; يخزن الصور، و&lt;strong&gt;ECS&lt;/strong&gt; يشغلها عبر Task Definition وTask وService.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fargate&lt;/strong&gt; يريحك من إدارة السيرفرات، وهو أفضل بداية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution Role&lt;/strong&gt; لـ ECS، و&lt;strong&gt;Task Role&lt;/strong&gt; لكودك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EKS&lt;/strong&gt; لمن يحتاج Kubernetes، و&lt;strong&gt;ECS Express Mode&lt;/strong&gt; الطريق المختصر لتطبيق ويب.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 6&lt;/p&gt;
&lt;p&gt;مهمة على Fargate تبدأ عادي وتخدم الزيارات، بس لما يكتب كودها في DynamoDB يطلع له &lt;code&gt;AccessDenied&lt;/code&gt;. وين يضيف الفريق الصلاحية؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Task Execution Role&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Security Group حق المهمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Instance Profile على سيرفرات المجموعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Task Role&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ Task Role لكودك داخل الحاوية. وبداية المهمة العادية تبين إن Execution Role شغال زي ما ينبغي.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يستخدمه ECS عشان يجهز المهمة، مثل سحب الصورة وإرسال السجلات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الـ Security Group يتحكم في زيارات الشبكة، وهذا الخطأ عن الصلاحيات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; Fargate ما فيه سيرفرات تربط فيها شي، فالـ Instance Profile مو متاح.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AF%D9%88%D8%B1%D9%8A%D9%86-%D9%81%D9%8A-iam-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D8%B7-%D8%A8%D9%8A%D9%86%D9%87%D9%85-%D9%83%D9%84%D8%A7%D8%B3%D9%8A%D9%83%D9%8A&quot;&gt;دورين في IAM، والخلط بينهم كلاسيكي&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html&quot;&gt;Amazon ECS task IAM role&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 6&lt;/p&gt;
&lt;p&gt;شركة تشغّل تطبيقاتها على Kubernetes في مركز بياناتها وعلى سحابة ثانية. وفريقها يعرف أدوات Kubernetes كويس ويبي يكمل عليها في AWS. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;ECS على Fargate&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon EKS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;ECS Express Mode&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Lambda، بصور حاويات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EKS يشغّل طبقة التحكم في Kubernetes لك، وأدوات الفريق تستمر تشتغل، هنا وفي غيرها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي بداية ممتازة لأغلب التطبيقات، بس هو نظام AWS الخاص، مو Kubernetes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبني خدمة ويب على ECS من صورة، وهو مو Kubernetes كمان.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يشغّل دوال مع الأحداث، وما فيه Kubernetes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#ecs-%D8%A3%D9%88-eks&quot;&gt;ECS أو EKS؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html&quot;&gt;What is Amazon EKS?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 6&lt;/p&gt;
&lt;p&gt;مهمة دفعية تشتغل في حاوية كل ليلة حوالي ساعتين، وما فيه شي يحتاج يشتغل باقي اليوم. وش يناسب &lt;strong&gt;بأقل تكلفة&lt;/strong&gt;؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;ECS Service يبقي مهمة شغالة طول اليوم&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;دالة Lambda تشغّل الشغل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;EventBridge Scheduler يبدأ مهمة Fargate كل ليلة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;سيرفر EC2 يبقى شغال عشان هذا الشغل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الجدول يبدأ مهمة تتوقف لما تخلص، وعلى Fargate تدفع بس وقت تشغيلها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; بتدفع على مهمة 24 ساعة في اليوم، عشان ساعتين شغل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; تشغيل Lambda ينتهي عند 15 دقيقة، وهذا أقل بكثير من ساعتين.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; بتدفع على السيرفر طول الوقت، ولازم تديره كمان.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D9%88-%D8%A8%D8%B3-%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D9%88%D9%8A%D8%A8&quot;&gt;مو بس خدمات ويب&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/tasks-scheduled-eventbridge-scheduler.html&quot;&gt;Using Amazon EventBridge Scheduler to schedule Amazon ECS tasks&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 6&lt;/p&gt;
&lt;p&gt;عدة مهام Fargate في Service واحد تحتاج تقرأ وتكتب نفس الملفات المرفوعة، والملفات لازم تبقى لما تتوقف مهمة. وش يربط الفريق؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نظام ملفات EFS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;التخزين المؤقت الخاص بكل مهمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;قرص Instance Store&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;مستودع ECR&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EFS نظام ملفات مشترك تقدر المهام تربطه على Fargate وEC2، والملفات تبقى خارج أي مهمة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; قرص الحاوية يختفي معها، وما ينشارك مع المهام الثانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا قرص مؤقت على سيرفر، وFargate ما يعطيك سيرفر تربطه فيه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يخزن صور الحاويات، مو ملفات التطبيق.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86&quot;&gt;التخزين&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html&quot;&gt;Use Amazon EFS volumes with Amazon ECS&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 6&lt;/p&gt;
&lt;p&gt;ECS Service يشتغل على سيرفرات EC2 في مجموعة Auto Scaling. ووقت الذروة يحتاج مهام أكثر، وهذي المهام تحتاج سيرفرات تنزل عليها. أي &lt;strong&gt;ميزتين&lt;/strong&gt; يعالجون هذا؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Service Auto Scaling&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Task Execution Role&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;فحص الصور في ECR&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Network Load Balancer&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Capacity Provider مربوط بالمجموعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Service Auto Scaling يغير عدد المهام، والـ Capacity Provider يضيف سيرفرات لما تحتاجها المهام. وعلى EC2 تحتاج الطبقتين.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يخلي ECS يسحب الصور ويرسل السجلات، وما له علاقة بالتوسع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يدور ثغرات في الصور.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يوزع الزيارات على المهام الموجودة، وما يضيف مهام.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9&quot;&gt;التوسع&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-auto-scaling.html&quot;&gt;Automatically scale your Amazon ECS service&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/asg-capacity-providers.html&quot;&gt;Amazon ECS capacity providers for EC2 workloads&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 6&lt;/p&gt;
&lt;p&gt;شركة تشغّل حاوياتها على ECS في AWS. وبعضها لازم الحين يشتغل على سيرفرات في مصنعها، والفريق يبي يكمل بنفس أدوات ECS. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;EKS Distro&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;ECS Anywhere&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Fargate Spot&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;AWS App Runner&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ECS Anywhere يسجل سيرفراتك أو أجهزتك الافتراضية في مجموعة ECS، فيكمل الفريق بأدواته.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي مكونات Kubernetes تشغلها وتدعمها بنفسك، والفريق يستخدم ECS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يشغّل المهام على سعة AWS بسعر أقل، مو على سيرفراتك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يشتغل في AWS، وما عاد يقبل عملاء جدد.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%B3%D9%8A%D8%B1%D9%81%D8%B1%D8%A7%D8%AA%D9%83&quot;&gt;حاويات على سيرفراتك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html&quot;&gt;Amazon ECS clusters for external instances&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;الحاويات لسا تشتغل وتكلف وهي منتظرة. طيب لو كودك يشتغل بس لما يكون فيه شغل، وما تدفع شي غير كذا؟ في &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;&lt;strong&gt;الجزء الحادي والعشرين&lt;/strong&gt;&lt;/a&gt; نبني API بـ Lambda وAPI Gateway وDynamoDB.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>ربط الخدمات: SQS وSNS وKinesis</title>
    <link href="https://blog.sultanops.com/posts/aws-19-sqs-sns-kinesis/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-19-sqs-sns-kinesis/</id>
    <summary>ليه ما تخلي الخدمات تتصل ببعض مباشرة، وكيف يمتص طابور SQS الضغط، وكيف يوصل SNS رسالة وحدة للكل، ومتى تحتاج تيار Kinesis، مع تجربة عملية تبني فيها Fan-out مع فلتر.</summary>
    <content type="html">&lt;p&gt;إلى الحين أجزاء تطبيقنا &lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;تتصل ببعض مباشرة&lt;/a&gt;. هذا تمام لين يبدأ العرض وما تلحق خدمة الفواتير، وفجأة العميل يطالع دائرة تحميل بسبب خدمة ما سمع فيها.&lt;/p&gt;
&lt;p&gt;هذا القسم عن التطبيقات الحديثة، ويبدأ بالفكرة اللي وراء أغلبها: &lt;strong&gt;افصل الخدمات عن بعض&lt;/strong&gt;، عشان كل وحدة تشتغل بسرعتها، وتعطل وحدة ما يوقف الباقي.&lt;/p&gt;
&lt;p&gt;هذي خريطة الجزء:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;/td&gt;
&lt;td&gt;&lt;strong&gt;SQS&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;حدث واحد يوصل لأطراف كثيرة بنفس الوقت&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;SNS&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تيار مستمر يقرأه أكثر من طرف ويعيد قراءته&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Kinesis Data Streams&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تيار ينزل في S3 أو غيره بدون كتابة كود&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Data Firehose&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تطبيق قائم مبني على RabbitMQ أو ActiveMQ&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Amazon MQ&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;ليه-تفصل-الخدمات&quot; tabindex=&quot;-1&quot;&gt;ليه تفصل الخدمات؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#ليه-تفصل-الخدمات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 212&quot; role=&quot;img&quot; aria-labelledby=&quot;decouple-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;decouple-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;320&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;اتصال مباشر: العميل ينتظر خدمة الفواتير&lt;/text&gt;
&lt;rect x=&quot;450&quot; y=&quot;34&quot; width=&quot;170&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;535&quot; y=&quot;68&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق المتجر&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;34&quot; width=&quot;170&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-danger)&quot;/&gt;
&lt;text x=&quot;105&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;خدمة الفواتير&lt;/text&gt;
&lt;text x=&quot;105&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بطيئة أو واقفة&lt;/text&gt;
&lt;line x1=&quot;450&quot; y1=&quot;63&quot; x2=&quot;192&quot; y2=&quot;63&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#decouple-arrow)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مع طابور: العميل يوصله الرد فوراً&lt;/text&gt;
&lt;rect x=&quot;450&quot; y=&quot;142&quot; width=&quot;170&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;535&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق المتجر&lt;/text&gt;
&lt;rect x=&quot;235&quot; y=&quot;142&quot; width=&quot;170&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;166&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;طابور SQS&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;186&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يحفظ الرسالة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;142&quot; width=&quot;170&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;105&quot; y=&quot;166&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;خدمة الفواتير&lt;/text&gt;
&lt;text x=&quot;105&quot; y=&quot;186&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تشتغل بسرعتها&lt;/text&gt;
&lt;line x1=&quot;450&quot; y1=&quot;171&quot; x2=&quot;407&quot; y2=&quot;171&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#decouple-arrow)&quot;/&gt;
&lt;line x1=&quot;235&quot; y1=&quot;171&quot; x2=&quot;192&quot; y2=&quot;171&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#decouple-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;decouple-caption&quot;&gt;لما تتصل الخدمات ببعض مباشرة، خدمة بطيئة وحدة تعطل العميل. الطابور يخلي كل طرف يشتغل بسرعته.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;الاتصال المباشر يعني الطرفين لازم يكونون شغالين وسريعين في نفس اللحظة. ولما تحط طابور بينهم تكسب ثلاث أشياء:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;العطل يبقى في مكانه.&lt;/strong&gt; لو وقفت خدمة الفواتير، الرسائل تنتظر في الطابور لين ترجع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الضغط ينمتص.&lt;/strong&gt; ألف طلب في دقيقة ما توصل لقاعدة البيانات دفعة وحدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;كل طرف يتوسع لحاله.&lt;/strong&gt; تزيد عمّال الفواتير بدون ما تلمس المتجر.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;sqs-الطابور&quot; tabindex=&quot;-1&quot;&gt;SQS: الطابور &lt;a class=&quot;heading-anchor&quot; href=&quot;#sqs-الطابور&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;SQS&lt;/strong&gt; (Simple Queue Service) طابور مُدار بالكامل بدون سيرفرات تديرها. &lt;strong&gt;المنتج&lt;/strong&gt; يرسل الرسائل، وتنتظر في الطابور، و&lt;strong&gt;المستهلك&lt;/strong&gt; يسحبها ويشتغل عليها ثم يحذفها.&lt;/p&gt;
&lt;p&gt;انتبه للاتجاه: المستهلكين هم اللي يطلبون الرسائل من الطابور، والطابور ما يدفعها لأحد.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;السعة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بدون حد عملي في الطابور العادي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;حجم الرسالة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حتى 1 MiB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مدة الحفظ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 أيام افتراضياً، من دقيقة إلى 14 يوم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التوصيل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مرة على الأقل، فممكن تجيك الرسالة مرتين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الترتيب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أفضل محاولة، وغير مضمون&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;آخر نقطتين تأثر على كودك. بما إن الرسالة ممكن توصل مرتين، خل معالجتها مرتين ما تضر. رقم طلب تتأكد منه قبل الخصم يكفي.&lt;/p&gt;
&lt;p&gt;وأي شي أكبر من رسالة، خزّن الملف في S3 وأرسل مساره في الرسالة.&lt;/p&gt;
&lt;h3 id=&quot;مهلة-الإخفاء-visibility-timeout&quot; tabindex=&quot;-1&quot;&gt;مهلة الإخفاء (Visibility Timeout) &lt;a class=&quot;heading-anchor&quot; href=&quot;#مهلة-الإخفاء-visibility-timeout&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;وش يمنع مستهلكين ياخذون نفس الرسالة؟ لما يستلمها واحد، يخفيها SQS عن الباقين لفترة اسمها &lt;strong&gt;Visibility Timeout&lt;/strong&gt;. ولازم المستهلك يحذفها قبل ما تخلص الفترة.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 154&quot; role=&quot;img&quot; aria-labelledby=&quot;visibility-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;visibility-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;470&quot; y=&quot;49&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;72&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;استلام&lt;/text&gt;
&lt;text x=&quot;545&quot; y=&quot;92&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تنخفي عن الباقين&lt;/text&gt;
&lt;rect x=&quot;245&quot; y=&quot;49&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;72&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;معالجة&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;92&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;30 ثانية افتراضياً&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;37&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;حذف&lt;/text&gt;
&lt;text x=&quot;95&quot; y=&quot;57&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;انتهى الشغل&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;84&quot; width=&quot;150&quot; height=&quot;56&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-danger)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;107&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;بدون حذف&lt;/text&gt;
&lt;text x=&quot;95&quot; y=&quot;127&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ترجع تظهر&lt;/text&gt;
&lt;line x1=&quot;470&quot; y1=&quot;77&quot; x2=&quot;397&quot; y2=&quot;77&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#visibility-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;77&quot; x2=&quot;172&quot; y2=&quot;42&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#visibility-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;77&quot; x2=&quot;172&quot; y2=&quot;112&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#visibility-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;visibility-caption&quot;&gt;الرسالة المستلمة تنخفي بس ما تنحذف. لو ما حذفها المستهلك قبل نهاية المهلة، ترجع تظهر لمستهلك ثاني.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;هذي الآلية هي اللي تحميك من ضياع الشغل: لو طاح السيرفر في نص المعالجة، الرسالة ترجع لحالها.&lt;/p&gt;
&lt;p&gt;اختر الفترة حسب وقت معالجتك. هي 30 ثانية افتراضياً، وتوصل إلى 12 ساعة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;قصيرة زيادة:&lt;/strong&gt; الرسالة ترجع تظهر وهي لسا تحت المعالجة، فتنعالج مرتين.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;طويلة زيادة:&lt;/strong&gt; لو فشل مستهلك، الرسالة تنتظر طويل قبل ما أحد يعيد المحاولة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ولو شغلة أخذت وقت أطول من المعتاد، المستهلك يقدر يمدد الفترة لهذي الرسالة بـ &lt;code&gt;ChangeMessageVisibility&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;الانتظار-الطويل-long-polling&quot; tabindex=&quot;-1&quot;&gt;الانتظار الطويل (Long Polling) &lt;a class=&quot;heading-anchor&quot; href=&quot;#الانتظار-الطويل-long-polling&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;افتراضياً، لما تسأل طابور فاضي يرجع لك رد فاضي فوراً، فمستهلكينك يملون فاتورتك بطلبات ما لها داعي. مع &lt;strong&gt;Long Polling&lt;/strong&gt; الطلب ينتظر حتى 20 ثانية لين تجي رسالة. يعني طلبات أقل، وتكلفة أقل، ووصول أسرع، فشغّله دايماً.&lt;/p&gt;
&lt;h3 id=&quot;طابور-الرسائل-الفاشلة-dlq&quot; tabindex=&quot;-1&quot;&gt;طابور الرسائل الفاشلة (DLQ) &lt;a class=&quot;heading-anchor&quot; href=&quot;#طابور-الرسائل-الفاشلة-dlq&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;طيب ورسالة تفشل كل مرة بسبب خطأ في الكود أو بيانات غلط؟ بترجع للأبد. اربط &lt;strong&gt;Dead-Letter Queue&lt;/strong&gt;: بعد عدد محاولات تحدده، الرسالة تنتقل له، فتفحصها بدون ما تعطل شي. وبعد ما تصلح المشكلة، تقدر تعيدها للطابور الأصلي بـ &lt;strong&gt;Redrive&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;وخل مدة الحفظ في طابور الرسائل الفاشلة أطول من الأصلي، عشان ما تنتهي الرسائل قبل ما تشوفها.&lt;/p&gt;
&lt;h3 id=&quot;طوابير-fifo&quot; tabindex=&quot;-1&quot;&gt;طوابير FIFO &lt;a class=&quot;heading-anchor&quot; href=&quot;#طوابير-fifo&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;لما يكون الترتيب مهم، مثل عمليات على نفس الحساب، استخدم طابور &lt;strong&gt;FIFO&lt;/strong&gt;. ولازم اسمه ينتهي بـ &lt;code&gt;.fifo&lt;/code&gt;.&lt;/p&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;FIFO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الترتيب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;غير مضمون&lt;/td&gt;
&lt;td&gt;مضمون داخل مجموعة الرسائل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التكرار&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ممكن&lt;/td&gt;
&lt;td&gt;ينحذف خلال نافذة 5 دقايق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السعة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بدون حد عملي&lt;/td&gt;
&lt;td&gt;300 رسالة في الثانية، أو 3,000 مع الدفعات&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;الترتيب يكون داخل &lt;strong&gt;مجموعة الرسائل (Message Group)&lt;/strong&gt;، فلو خليت مجموعة لكل عميل، رسائل العملاء المختلفين تنعالج بالتوازي. ولو احتجت سعة أكبر، &lt;strong&gt;وضع السعة العالية&lt;/strong&gt; يرفع الحد كثير، والرقم يختلف حسب المنطقة.&lt;/p&gt;
&lt;h3 id=&quot;التوسع-مع-الطابور&quot; tabindex=&quot;-1&quot;&gt;التوسع مع الطابور &lt;a class=&quot;heading-anchor&quot; href=&quot;#التوسع-مع-الطابور&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;نمط كلاسيكي: &lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;مجموعة Auto Scaling&lt;/a&gt; من العمّال تكبر وتصغر حسب طول الطابور. مقياس &lt;code&gt;ApproximateNumberOfMessagesVisible&lt;/code&gt; يقول لك كم رسالة تنتظر، فلما يطول الطابور يزيد العمّال.&lt;/p&gt;
&lt;p&gt;وهذا يحمي قاعدة بياناتك كمان. بدل ما تضرب موجة طلبات RDS مباشرة، تدخل في طابور، والعمّال يكتبونها بسرعة تتحملها القاعدة. وهذا يناسب الشغل اللي ما يحتاج جواب فوري فقط، فالعميل يوصله &amp;quot;استلمنا طلبك&amp;quot;، مو &amp;quot;اكتمل طلبك&amp;quot;.&lt;/p&gt;
&lt;h3 id=&quot;الأمان&quot; tabindex=&quot;-1&quot;&gt;الأمان &lt;a class=&quot;heading-anchor&quot; href=&quot;#الأمان&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;الرسائل مشفرة أثناء النقل بـ HTTPS، وفي التخزين بـ SSE-SQS افتراضياً أو بمفتاح KMS خاص فيك. ومين يوصل للطابور تحدده سياسات IAM، مع &lt;strong&gt;سياسة وصول&lt;/strong&gt; على الطابور نفسه، وتحتاجها لحسابات ثانية أو لخدمات مثل SNS وS3 عشان ترسل له. وبنكتب وحدة في التجربة العملية.&lt;/p&gt;
&lt;h2 id=&quot;sns-رسالة-وحدة-للكل&quot; tabindex=&quot;-1&quot;&gt;SNS: رسالة وحدة للكل &lt;a class=&quot;heading-anchor&quot; href=&quot;#sns-رسالة-وحدة-للكل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الطابور يناسب شغلة يسويها طرف واحد. بس لما يطلب عميل، خدمات الشحن والفواتير والتحليل كلها تبي تدري. وما تبي تطبيقك يعرف كل وحدة فيها، ويتغير كل ما أضفت وحدة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SNS&lt;/strong&gt; (Simple Notification Service) يشتغل بـ &lt;strong&gt;النشر والاشتراك&lt;/strong&gt;: تطبيقك ينشر رسالة وحدة في &lt;strong&gt;موضوع (Topic)&lt;/strong&gt;، وSNS يوصلها لكل المشتركين فوراً. والموضوع العادي يتحمل حتى 12.5 مليون اشتراك.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;SQS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;خدمة تعالج بسرعتها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lambda&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دالة صغيرة تشتغل مع كل رسالة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP أو HTTPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;رابط Webhook في نظام ثاني&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Firehose&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تخزين كل رسالة في S3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;إيميل وSMS وإشعارات الجوال&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تنبيه الناس مباشرة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وعلى عكس الطابور، SNS ما يخزن الرسائل. لو كان مشترك واقف يعيد المحاولة لفترة، بس هو مو مكان تنتظر فيه الرسائل.&lt;/p&gt;
&lt;p&gt;وحجم الرسالة 256 KiB افتراضياً، وتقدر ترفعه على الموضوع إلى 1 MiB، بس هذا يحصره في 100 اشتراك ولمشتركي SQS وLambda وFirehose فقط.&lt;/p&gt;
&lt;h3 id=&quot;fan-out-sns-مع-sqs&quot; tabindex=&quot;-1&quot;&gt;Fan-out: SNS مع SQS &lt;a class=&quot;heading-anchor&quot; href=&quot;#fan-out-sns-مع-sqs&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;أهم نمط هنا يجمع الخدمتين: SNS ينشر الرسالة، وطابور لكل خدمة يحفظها لين تكون الخدمة جاهزة.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 246&quot; role=&quot;img&quot; aria-labelledby=&quot;fanout-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;fanout-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;490&quot; y=&quot;93&quot; width=&quot;130&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;555&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيق المتجر&lt;/text&gt;
&lt;text x=&quot;555&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ينشر مرة وحدة&lt;/text&gt;
&lt;rect x=&quot;310&quot; y=&quot;93&quot; width=&quot;130&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;375&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;موضوع SNS&lt;/text&gt;
&lt;text x=&quot;375&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;orders&lt;/text&gt;
&lt;rect x=&quot;140&quot; y=&quot;14&quot; width=&quot;120&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;200&quot; y=&quot;39&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الشحن&lt;/text&gt;
&lt;text x=&quot;200&quot; y=&quot;59&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;المادية فقط&lt;/text&gt;
&lt;rect x=&quot;140&quot; y=&quot;93&quot; width=&quot;120&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;200&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الفواتير&lt;/text&gt;
&lt;text x=&quot;200&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;كل الطلبات&lt;/text&gt;
&lt;rect x=&quot;140&quot; y=&quot;172&quot; width=&quot;120&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;200&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;التحليل&lt;/text&gt;
&lt;text x=&quot;200&quot; y=&quot;217&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;كل الطلبات&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;90&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;65&quot; y=&quot;49&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;EC2&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;93&quot; width=&quot;90&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;65&quot; y=&quot;128&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;172&quot; width=&quot;90&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;65&quot; y=&quot;207&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Fargate&lt;/text&gt;
&lt;line x1=&quot;490&quot; y1=&quot;123&quot; x2=&quot;442&quot; y2=&quot;123&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;line x1=&quot;310&quot; y1=&quot;123&quot; x2=&quot;262&quot; y2=&quot;44&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;line x1=&quot;310&quot; y1=&quot;123&quot; x2=&quot;262&quot; y2=&quot;123&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;line x1=&quot;310&quot; y1=&quot;123&quot; x2=&quot;262&quot; y2=&quot;202&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;line x1=&quot;140&quot; y1=&quot;44&quot; x2=&quot;112&quot; y2=&quot;44&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;line x1=&quot;140&quot; y1=&quot;123&quot; x2=&quot;112&quot; y2=&quot;123&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;line x1=&quot;140&quot; y1=&quot;202&quot; x2=&quot;112&quot; y2=&quot;202&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#fanout-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;fanout-caption&quot;&gt;التطبيق ينشر مرة وحدة، وSNS ينسخ الرسالة لكل طابور، وكل خدمة تقرأ من طابورها. والفلتر يرسل الطلبات المادية فقط للشحن.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ليه هذا الجمع؟&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ما يضيع شي:&lt;/strong&gt; لو وقفت خدمة الشحن، رسائلها تنتظر في طابورها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;كل خدمة لها سرعتها،&lt;/strong&gt; ومحاولاتها، وطابور رسائلها الفاشلة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إضافة خدمة سهلة:&lt;/strong&gt; طابور جديد يشترك في الموضوع، بدون تغيير الناشر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ونفس الشي مع &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;أحداث S3&lt;/a&gt;: S3 ما يقبل قاعدتين ببادئات متداخلة لنفس نوع الحدث. فعشان توصل لأكثر من وجهة، أرسل الحدث لموضوع SNS واحد ووزعه من هناك.&lt;/p&gt;
&lt;h3 id=&quot;فلترة-الرسائل&quot; tabindex=&quot;-1&quot;&gt;فلترة الرسائل &lt;a class=&quot;heading-anchor&quot; href=&quot;#فلترة-الرسائل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;افتراضياً كل مشترك يستلم كل شي. &lt;strong&gt;سياسة الفلترة&lt;/strong&gt; على الاشتراك تخلي طابور الشحن يستلم اللي يخصه فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;physical&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الرسائل اللي &lt;code&gt;type&lt;/code&gt; فيها &lt;code&gt;digital&lt;/code&gt; ما توصله، وما تدفع على معالجتها.&lt;/p&gt;
&lt;h3 id=&quot;مواضيع-fifo&quot; tabindex=&quot;-1&quot;&gt;مواضيع FIFO &lt;a class=&quot;heading-anchor&quot; href=&quot;#مواضيع-fifo&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;عشان الترتيب في الـ Fan-out، SNS عنده مواضيع &lt;strong&gt;FIFO&lt;/strong&gt;، وأسماؤها تنتهي بـ &lt;code&gt;.fifo&lt;/code&gt; برضو، مع ترتيب وحذف للتكرار مثل طوابير FIFO. ومحدودة بـ 100 اشتراك للموضوع، وتناسب حالات مثل إرسال نفس تسلسل التحديثات لأكثر من طابور.&lt;/p&gt;
&lt;h2 id=&quot;kinesis-data-streams-تيار-يبقى&quot; tabindex=&quot;-1&quot;&gt;Kinesis Data Streams: تيار يبقى &lt;a class=&quot;heading-anchor&quot; href=&quot;#kinesis-data-streams-تيار-يبقى&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تخيل مليون حساس يرسلون قراءات كل ثانية، وثلاث أطراف تبي تقرأها: واحد للتنبيهات الفورية، وواحد للوحات المتابعة، وواحد للأرشفة. الطابور ما يناسب هنا، لأن الرسالة تروح بعد معالجتها.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kinesis Data Streams&lt;/strong&gt; تيار: السجلات تبقى فيه طول مدة الحفظ سواء انقرأت أو لا، وكل مستهلك يقرأ من موضعه، فيقدر يرجع و&lt;strong&gt;يعيد القراءة&lt;/strong&gt;.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 232&quot; role=&quot;img&quot; aria-labelledby=&quot;kinesis-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;kinesis-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;510&quot; y=&quot;24&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;التطبيق&lt;/text&gt;
&lt;rect x=&quot;510&quot; y=&quot;91&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;121&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الحساسات&lt;/text&gt;
&lt;rect x=&quot;510&quot; y=&quot;158&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;188&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;السجلات&lt;/text&gt;
&lt;rect x=&quot;180&quot; y=&quot;14&quot; width=&quot;280&quot; height=&quot;204&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;38&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Kinesis Data Stream&lt;/text&gt;
&lt;rect x=&quot;200&quot; y=&quot;50&quot; width=&quot;240&quot; height=&quot;40&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;75&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Shard 1&lt;/text&gt;
&lt;rect x=&quot;200&quot; y=&quot;98&quot; width=&quot;240&quot; height=&quot;40&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;123&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Shard 2&lt;/text&gt;
&lt;rect x=&quot;200&quot; y=&quot;146&quot; width=&quot;240&quot; height=&quot;40&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;171&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Shard 3&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;206&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تبقى من 24 ساعة إلى 365 يوم&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;24&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Lambda&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;91&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;121&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقك&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;158&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;188&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Firehose&lt;/text&gt;
&lt;line x1=&quot;510&quot; y1=&quot;49&quot; x2=&quot;462&quot; y2=&quot;70&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#kinesis-arrow)&quot;/&gt;
&lt;line x1=&quot;510&quot; y1=&quot;116&quot; x2=&quot;462&quot; y2=&quot;116&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#kinesis-arrow)&quot;/&gt;
&lt;line x1=&quot;510&quot; y1=&quot;183&quot; x2=&quot;462&quot; y2=&quot;162&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#kinesis-arrow)&quot;/&gt;
&lt;line x1=&quot;180&quot; y1=&quot;70&quot; x2=&quot;132&quot; y2=&quot;49&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#kinesis-arrow)&quot;/&gt;
&lt;line x1=&quot;180&quot; y1=&quot;116&quot; x2=&quot;132&quot; y2=&quot;116&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#kinesis-arrow)&quot;/&gt;
&lt;line x1=&quot;180&quot; y1=&quot;162&quot; x2=&quot;132&quot; y2=&quot;183&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#kinesis-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;kinesis-caption&quot;&gt;المنتجين يكتبون في الـ Shards، والسجلات بنفس المفتاح تبقى مرتبة داخل Shard واحد، وأكثر من مستهلك يقرأ نفس البيانات، كل واحد من موضعه.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Shards:&lt;/strong&gt; التيار ينقسم إلى أجزاء. في السعة المحددة، كل واحد ياخذ 1 MB في الثانية كتابة و2 MB في الثانية قراءة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مفتاح التقسيم:&lt;/strong&gt; يحدد أي Shard يروح له السجل. السجلات بنفس المفتاح تبقى مرتبة، فرقم الحساس مفتاح ممتاز.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مدة الحفظ:&lt;/strong&gt; 24 ساعة افتراضياً، وتوصل إلى 365 يوم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;حجم السجل:&lt;/strong&gt; 1 MiB افتراضياً، وتقدر ترفعه إلى 10 MiB لكل تيار.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;أوضاع-السعة&quot; tabindex=&quot;-1&quot;&gt;أوضاع السعة &lt;a class=&quot;heading-anchor&quot; href=&quot;#أوضاع-السعة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;On-demand&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يبدأ بـ 4 MB في الثانية كتابة ويتوسع لحاله، وتدفع على البيانات&lt;/td&gt;
&lt;td&gt;حمل مجهول أو متغير، وابدأ به&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provisioned&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحدد عدد الـ Shards وتدفع على كل واحد بالساعة&lt;/td&gt;
&lt;td&gt;حمل ثابت ومعروف، وممكن يكون أرخص&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وسقف On-demand يختلف حسب المنطقة: حتى 10 GB في الثانية كتابة في أكبر المناطق، و200 MB في الثانية في غيرها.&lt;/p&gt;
&lt;p&gt;وللفيديو خدمة خاصة: &lt;strong&gt;Kinesis Video Streams&lt;/strong&gt; تستقبل فيديو مباشر من أجهزة مثل الكاميرات، وتحفظه، وتخليك تشاهده أو تعالجه، مباشرة أو بعدين.&lt;/p&gt;
&lt;h2 id=&quot;data-firehose-للتخزين-بدون-كود&quot; tabindex=&quot;-1&quot;&gt;Data Firehose: للتخزين بدون كود &lt;a class=&quot;heading-anchor&quot; href=&quot;#data-firehose-للتخزين-بدون-كود&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;كثير من الأحيان كل اللي تبيه إن التيار ينزل في مكان. &lt;strong&gt;Amazon Data Firehose&lt;/strong&gt; (اسمه القديم Kinesis Data Firehose) ياخذ البيانات، ويجمعها، ويوصلها بدون كود ولا سيرفرات:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;المصادر:&lt;/strong&gt; تطبيقك مباشرة، أو تيار Kinesis، أو غيرها مثل SNS وCloudWatch Logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المعالجة:&lt;/strong&gt; يقدر يحوّل السجلات بدالة Lambda لو تبي، ويحولها إلى Parquet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الوجهات:&lt;/strong&gt; S3 وRedshift وOpenSearch وSnowflake وجداول Apache Iceberg، أو رابط HTTP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التجميع:&lt;/strong&gt; يجمع البيانات لين توصل حجم أو مدة، مثل 5 MiB أو 5 دقايق لـ S3، واللي يجي أول يطلق التوصيل. فهو يناسب التحميل شبه الفوري، مو رد الفعل اللحظي.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Kinesis Data Streams&lt;/th&gt;
&lt;th&gt;Data Firehose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الغرض&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تيار يقرأه مستهلكينك&lt;/td&gt;
&lt;td&gt;أنبوب يوصل للتخزين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المستهلكين&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت تكتبهم&lt;/td&gt;
&lt;td&gt;الوجهة جاهزة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;إعادة القراءة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نعم، خلال مدة الحفظ&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التوقيت&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;فوري&lt;/td&gt;
&lt;td&gt;حسب التجميع اللي تحدده&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;أيها-أختار&quot; tabindex=&quot;-1&quot;&gt;أيها أختار؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#أيها-أختار&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SQS&lt;/th&gt;
&lt;th&gt;SNS&lt;/th&gt;
&lt;th&gt;Kinesis Data Streams&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الطريقة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;المستهلك يسحب&lt;/td&gt;
&lt;td&gt;يدفع للمشتركين&lt;/td&gt;
&lt;td&gt;المستهلك يسحب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;من يقرأ الرسالة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;واحد، ثم تنحذف&lt;/td&gt;
&lt;td&gt;كل المشتركين&lt;/td&gt;
&lt;td&gt;الكل، خلال مدة الحفظ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تنحفظ؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حتى 14 يوم&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;حتى 365 يوم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الترتيب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مع FIFO&lt;/td&gt;
&lt;td&gt;مع FIFO&lt;/td&gt;
&lt;td&gt;داخل الـ Shard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الاستخدام المعتاد&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;شغل في الخلفية&lt;/td&gt;
&lt;td&gt;إشعارات وFan-out&lt;/td&gt;
&lt;td&gt;تحليل وسجلات وبيانات متدفقة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;قاعدة سريعة: &lt;strong&gt;شغلة&lt;/strong&gt;؟ SQS. &lt;strong&gt;حدث&lt;/strong&gt; يهم كثيرين؟ SNS. &lt;strong&gt;تيار بيانات&lt;/strong&gt; يقرأه كثيرين ويعيدون قراءته؟ Kinesis.&lt;/p&gt;
&lt;p&gt;وفيه كمان &lt;strong&gt;EventBridge&lt;/strong&gt; يوزع الأحداث بقواعد من خدمات AWS وتطبيقات ثانية، وبنشرحه في &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;الجزء الخامس والعشرين&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;amazon-mq-للي-موجود-أصلا&quot; tabindex=&quot;-1&quot;&gt;Amazon MQ: للي موجود أصلاً &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-mq-للي-موجود-أصلا&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SQS وSNS خدمات AWS الخاصة بواجهاتها الخاصة. لو تنقل تطبيق مبني على بروتوكولات مفتوحة مثل &lt;strong&gt;AMQP&lt;/strong&gt; أو &lt;strong&gt;MQTT&lt;/strong&gt; أو &lt;strong&gt;STOMP&lt;/strong&gt;، ما تبي تعيد كتابته. &lt;strong&gt;Amazon MQ&lt;/strong&gt; يشغّل لك وسيط معروف كخدمة مُدارة، بمحركين:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;ActiveMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;وسيطين في منطقتي توفر، نشط واحتياطي، بتخزين مشترك على EFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجموعة من ثلاث عقد في مناطق توفر مختلفة، خلف نقطة وصول وحدة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ولاحظ إنه يشتغل على وسطاء تختار حجمهم، فما يتوسع بلا حدود مثل SQS وSNS. وللتطبيق الجديد، ابدأ بهذيك الخدمتين.&lt;/p&gt;
&lt;h2 id=&quot;عملي-fan-out-مع-فلتر&quot; tabindex=&quot;-1&quot;&gt;عملي: Fan-out مع فلتر &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-fan-out-مع-فلتر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنبني تصميم الرسم بطابورين. من CloudShell، أنشئ الموضوع والطوابير:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;TOPIC_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sns create-topic &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; orders &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; TopicArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;SHIP_URL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sqs create-queue --queue-name shipping &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; QueueUrl &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;BILL_URL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sqs create-queue --queue-name billing &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; QueueUrl &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;SHIP_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sqs get-queue-attributes --queue-url $SHIP_URL &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --attribute-names QueueArn &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Attributes.QueueArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;BILL_ARN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sqs get-queue-attributes --queue-url $BILL_URL &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --attribute-names QueueArn &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Attributes.QueueArn &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الطوابير خاصة، فاسمح لهذا الموضوع فقط يرسل لها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function-name function&quot;&gt;allow_topic&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;POLICY&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;jq &lt;span class=&quot;token parameter variable&quot;&gt;-nc&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--arg&lt;/span&gt; q &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$2&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--arg&lt;/span&gt; t &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{
    Version: &quot;2012-10-17&quot;,
    Statement: [{
      Effect: &quot;Allow&quot;,
      Principal: {Service: &quot;sns.amazonaws.com&quot;},
      Action: &quot;sqs:SendMessage&quot;,
      Resource: $q,
      Condition: {ArnEquals: {&quot;aws:SourceArn&quot;: $t}}
    }]
  }&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
  aws sqs set-queue-attributes --queue-url &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--attributes&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;jq &lt;span class=&quot;token parameter variable&quot;&gt;-nc&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--arg&lt;/span&gt; p &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$POLICY&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{Policy: $p}&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

allow_topic &lt;span class=&quot;token variable&quot;&gt;$SHIP_URL&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$SHIP_ARN&lt;/span&gt;
allow_topic &lt;span class=&quot;token variable&quot;&gt;$BILL_URL&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BILL_ARN&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;اشترك بالطوابير في الموضوع: الفواتير تاخذ كل شي، والشحن ياخذ الطلبات المادية فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws sns subscribe --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--protocol&lt;/span&gt; sqs --notification-endpoint &lt;span class=&quot;token variable&quot;&gt;$BILL_ARN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--attributes&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;RawMessageDelivery&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;true

aws sns subscribe --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--protocol&lt;/span&gt; sqs --notification-endpoint &lt;span class=&quot;token variable&quot;&gt;$SHIP_ARN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--attributes&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;RawMessageDelivery&quot;:&quot;true&quot;,&quot;FilterPolicy&quot;:&quot;{&#92;&quot;type&#92;&quot;:[&#92;&quot;physical&#92;&quot;]}&quot;}&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;انشر طلبين، واحد مادي وواحد رقمي:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws sns publish --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--message&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;order 1: a book&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --message-attributes &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;type&quot;:{&quot;DataType&quot;:&quot;String&quot;,&quot;StringValue&quot;:&quot;physical&quot;}}&#39;&lt;/span&gt;

aws sns publish --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--message&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;order 2: an e-book&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --message-attributes &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;type&quot;:{&quot;DataType&quot;:&quot;String&quot;,&quot;StringValue&quot;:&quot;digital&quot;}}&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;عطه كم ثانية، ثم عد الرسائل في كل طابور:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BILL_URL&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$SHIP_URL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  aws sqs get-queue-attributes --queue-url &lt;span class=&quot;token variable&quot;&gt;$url&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    --attribute-names ApproximateNumberOfMessages &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Attributes.ApproximateNumberOfMessages &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف &lt;code&gt;2&lt;/code&gt; للفواتير و&lt;code&gt;1&lt;/code&gt; للشحن، يعني الفلتر اشتغل. الحين جرب مهلة الإخفاء. استلم رسالة الشحن، ثم حاول مرة ثانية على طول:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws sqs receive-message --queue-url &lt;span class=&quot;token variable&quot;&gt;$SHIP_URL&lt;/span&gt; --wait-time-seconds &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Messages[0].Body&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text

aws sqs receive-message --queue-url &lt;span class=&quot;token variable&quot;&gt;$SHIP_URL&lt;/span&gt; --wait-time-seconds &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Messages[0].Body&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الأول يطبع &lt;code&gt;order 1: a book&lt;/code&gt;، والثاني ينتظر خمس ثواني ويطبع &lt;code&gt;None&lt;/code&gt;، لأن الرسالة مخفية. وما حذفناها، فانتظر 30 ثانية واستلمها مرة ثانية، وهالمرة احذفها عشان ينتهي الشغل:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;HANDLE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws sqs receive-message --queue-url $SHIP_URL --wait-time-seconds &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Messages[0].ReceiptHandle&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws sqs delete-message --queue-url &lt;span class=&quot;token variable&quot;&gt;$SHIP_URL&lt;/span&gt; --receipt-handle &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$HANDLE&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين الرسالة راحت نهائياً.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;التجربة تكلفتها شبه صفر، بس نظّف على أي حال. وحذف الموضوع يحذف اشتراكاته:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws sns delete-topic --topic-arn &lt;span class=&quot;token variable&quot;&gt;$TOPIC_ARN&lt;/span&gt;
aws sqs delete-queue --queue-url &lt;span class=&quot;token variable&quot;&gt;$SHIP_URL&lt;/span&gt;
aws sqs delete-queue --queue-url &lt;span class=&quot;token variable&quot;&gt;$BILL_URL&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;فصل الخدمات&lt;/strong&gt; يحصر الأعطال، ويمتص الضغط، ويخلي كل طرف يتوسع لحاله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQS&lt;/strong&gt; طابور: الرسالة تروح لمستهلك واحد، ولازم يحذفها قبل نهاية مهلة الإخفاء.&lt;/li&gt;
&lt;li&gt;أضف دايماً &lt;strong&gt;Long Polling&lt;/strong&gt; و&lt;strong&gt;DLQ&lt;/strong&gt;، وخل المعالجة آمنة لو تكررت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SNS&lt;/strong&gt; يوصل رسالة وحدة للكل، و&lt;strong&gt;Fan-out&lt;/strong&gt; مع SQS يضمن ما تفوت أحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kinesis Data Streams&lt;/strong&gt; يحفظ البيانات لأكثر من قارئ يعيد قراءتها، و&lt;strong&gt;Firehose&lt;/strong&gt; يوصلها للتخزين بدون كود.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 6&lt;/p&gt;
&lt;p&gt;صفحة الطلبات في موقع تذاكر تكتب مباشرة على RDS. ولما تنفتح تذاكر حفلة كبيرة، تنضغط القاعدة وتفشل الطلبات. والعملاء يتقبلون رسالة &amp;quot;استلمنا طلبك&amp;quot;، والتأكيد يوصل بعد دقيقة. وش يمتص الضغط؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نسخة قراءة للقاعدة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;طابور SQS، وعمال يكتبون بسرعة تتحملها القاعدة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;موضوع SNS يدفع كل طلب للقاعدة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Multi-AZ على القاعدة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الطابور يحفظ الطلبات، والعمال يكتبونها بسرعة تتحملها القاعدة. وهذا يناسب الحالة لأن العميل ما يحتاج الجواب النهائي فوراً.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; نسخ القراءة تخدم القراءة، والضغط هنا من الكتابة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; SNS يوصّل فوراً وما يحفظ الرسائل، فالضغط بيوصل كله مرة وحدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; النسخة الاحتياطية ما تاخذ أي حمل، فيبقى الضغط.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D9%88%D8%B3%D8%B9-%D9%85%D8%B9-%D8%A7%D9%84%D8%B7%D8%A7%D8%A8%D9%88%D8%B1&quot;&gt;التوسع مع الطابور&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html&quot;&gt;What is Amazon Simple Queue Service?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 6&lt;/p&gt;
&lt;p&gt;عامل ياخذ حوالي دقيقتين لإنتاج كل فاتورة، ومهلة الإخفاء في الطابور لسا على قيمتها الافتراضية. والعملاء يوصلهم نفس الفاتورة كم مرة. وش يغيّر الفريق؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;رفع مهلة الإخفاء فوق وقت المعالجة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تفعيل Long Polling&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;ربط طابور رسائل فاشلة (DLQ)&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إضافة عمال أكثر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;بعد 30 ثانية ترجع الرسالة تظهر والعامل الأول لسا شغال عليها، فياخذها عامل ثاني كمان. ولازم تكون المهلة أطول من وقت الشغل.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يقلل الردود الفاضية، وما يغير متى ترجع الرسالة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يلقط الرسائل اللي تفشل دايماً، وهذي تنجح وتتكرر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; العمال الزيادة بس ياخذون الرسائل اللي ترجع بشكل أسرع.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D9%87%D9%84%D8%A9-%D8%A7%D9%84%D8%A5%D8%AE%D9%81%D8%A7%D8%A1-visibility-timeout&quot;&gt;مهلة الإخفاء (Visibility Timeout)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html&quot;&gt;Amazon SQS visibility timeout&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 6&lt;/p&gt;
&lt;p&gt;لما ينعمل طلب، خدمات الشحن والفوترة والتحليل كلها تحتاج تعرف. وأي واحدة منها ممكن تتعطل ساعات، وإضافة خدمة جديدة ما لازم تغير الناشر. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;طابور SQS واحد تقرأ منه الخدمات الثلاث&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;الناشر يرسل مباشرة لطابور كل خدمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;موضوع SNS مع مشترك HTTP لكل خدمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;موضوع SNS، مع طابور SQS لكل خدمة مشترك فيه&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SNS يوصّل الرسالة الوحدة لكل مشترك، وطابور كل خدمة يحفظها لين تكون الخدمة جاهزة. والخدمة الجديدة بس تشترك بطابور جديد.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; كل رسالة تروح لمستهلك واحد، فباقي الخدمات تفوتها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الناشر لازم يتغير مع كل خدمة جديدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; SNS يعيد المحاولة فترة بس وما يحفظ الرسائل، فالعطل الطويل ممكن يضيعها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#fan-out-sns-%D9%85%D8%B9-sqs&quot;&gt;Fan-out: SNS مع SQS&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/sns/latest/dg/welcome.html&quot;&gt;What is Amazon SNS?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 6&lt;/p&gt;
&lt;p&gt;حساسات مزرعة رياح ترسل قراءات كل ثانية. وثلاث تطبيقات منفصلة تقرأ نفس البيانات مباشرة، وبعد إصلاح خطأ لازم واحد منها يعيد قراءة آخر ثلاثة أيام. أي خيار يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;طابور SQS عادي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;موضوع SNS عادي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Kinesis Data Streams، مع رفع مدة الاحتفاظ إلى ثلاثة أيام على الأقل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Data Firehose، يوصّل إلى S3&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;السجلات تبقى في التيار طول مدة الاحتفاظ سواء انقرأت أو لا، وكل مستهلك يقرأ من موقعه، فيقدر واحد يرجع ورا بدون ما يأثر على الباقي. والمدة الافتراضية 24 ساعة فقط.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الرسالة تروح لمستهلك واحد، وتروح لما تنحذف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; SNS ما يحفظ الرسائل، فما فيه شي تعيد قراءته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يجمّع البيانات ويوصلها للتخزين، فما يعطي قراءة فورية ولا إعادة قراءة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#kinesis-data-streams-%D8%AA%D9%8A%D8%A7%D8%B1-%D9%8A%D8%A8%D9%82%D9%89&quot;&gt;Kinesis Data Streams: تيار يبقى&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/streams/latest/dev/kinesis-extended-retention.html&quot;&gt;Change the data retention period&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 6&lt;/p&gt;
&lt;p&gt;بنك يعالج المعاملات عبر طابور. وداخل كل حساب لازم تمشي بالترتيب مع إزالة التكرار، والحسابات المختلفة لازم تتعالج بالتوازي. أي &lt;strong&gt;خيارين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;طابور عادي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;طابور FIFO&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;مجموعة رسائل وحدة لكل الحسابات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;مجموعة رسائل لكل حساب&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;مهلة إخفاء أطول&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;طابور FIFO يحافظ على الترتيب داخل مجموعة الرسائل ويزيل التكرار خلال 5 دقايق، ومجموعة لكل حساب تخلي الحسابات المختلفة تمشي بالتوازي.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا ما يضمن الترتيب، والرسالة ممكن توصل مرتين.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يحط كل المعاملات في صف واحد، فما يمشي شي بالتوازي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; هذا يعطي العمال وقت أكثر، وما يأثر على الترتيب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B7%D9%88%D8%A7%D8%A8%D9%8A%D8%B1-fifo&quot;&gt;طوابير FIFO&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html&quot;&gt;FIFO queue delivery logic in Amazon SQS&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 6&lt;/p&gt;
&lt;p&gt;مصنع يبي يرسل فيديو مباشر من كاميرات المراقبة إلى AWS، ويحفظه، ويحلله بعدين. أي خدمة مبنية لهذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Data Firehose&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;طابور SQS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;SNS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Kinesis Video Streams&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;تستقبل فيديو مباشر من الأجهزة، وتحفظه، وتخليك تشاهده أو تعالجه، مباشرة أو بعدين.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يوصّل السجلات للتخزين، وما هو مبني لفيديو مباشر من الأجهزة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الرسالة تحمل حتى 1 MiB، وهذا ما يناسب الفيديو.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يدفع رسائل قصيرة للمشتركين، وما يحفظ شي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#kinesis-data-streams-%D8%AA%D9%8A%D8%A7%D8%B1-%D9%8A%D8%A8%D9%82%D9%89&quot;&gt;Kinesis Data Streams: تيار يبقى&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html&quot;&gt;What is Amazon Kinesis Video Streams?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;الخدمات الحين مفصولة، بس وين يشتغل الكود نفسه؟ إلى الآن جوابنا سيرفر EC2 بكل إعداداته. في &lt;a href=&quot;/posts/aws-20-ecs-fargate-eks/&quot;&gt;&lt;strong&gt;الجزء العشرين&lt;/strong&gt;&lt;/a&gt; نغلف التطبيقات في حاويات ونشغلها بـ ECS وFargate وEKS.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>خدمات تخزين ونقل إضافية</title>
    <link href="https://blog.sultanops.com/posts/aws-18-storage-transfer/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-18-storage-transfer/</id>
    <summary>أنظمة الملفات الجاهزة في FSx، وربط مكتبك بتخزين السحابة عبر Storage Gateway، ونقل البيانات بـ DataSync وTransfer Family، ووش تسوي لو بياناتك أضخم من الإنترنت، مع مقارنة شاملة لخدمات التخزين.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;الأجزاء السابقة&lt;/a&gt; غطينا S3 بالتفصيل. بس فيه حالات ما يحلها: تطبيق Windows يحتاج مجلد مشترك، أو خوادم في مكتبك تبي توصل للسحابة، أو شريك يرسل ملفاته عبر SFTP، أو بيانات ضخمة تحتاج تنقلها.&lt;/p&gt;
&lt;p&gt;هذي خريطة الجزء:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;نظام ملفات Windows أو أداء عالي جداً&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Amazon FSx&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;خوادم مكتبك توصل لتخزين السحابة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Storage Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نقل ومزامنة بيانات كبيرة بشكل مجدول&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;DataSync&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;شركاء يرفعون ملفات عبر SFTP&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Transfer Family&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نقل كميات هائلة فعلياً&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Data Transfer Terminal&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;amazon-fsx-أنظمة-ملفات-جاهزة&quot; tabindex=&quot;-1&quot;&gt;Amazon FSx: أنظمة ملفات جاهزة &lt;a class=&quot;heading-anchor&quot; href=&quot;#amazon-fsx-أنظمة-ملفات-جاهزة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;شفنا &lt;a href=&quot;/posts/aws-05-ec2-storage/&quot;&gt;EFS&lt;/a&gt; لنظام ملفات Linux مشترك. &lt;strong&gt;FSx&lt;/strong&gt; يشغّل لك أنظمة ملفات معروفة كخدمة مُدارة، فما تحتاج تديرها بنفسك:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SMB&lt;/td&gt;
&lt;td&gt;تطبيقات Windows ومجلدات مشتركة، ومربوط بـ Active Directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for Lustre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lustre&lt;/td&gt;
&lt;td&gt;الحوسبة العالية وتدريب النماذج، ويتكامل مع S3، ولأجهزة Linux فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for NetApp ONTAP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NFS وSMB وiSCSI&lt;/td&gt;
&lt;td&gt;نقل أنظمة NetApp، وأنظمة تشغيل مختلفة على نفس البيانات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for OpenZFS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NFS&lt;/td&gt;
&lt;td&gt;أحمال Linux، ونقل أنظمة ZFS، ولقطات ونسخ فورية&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;واختيار &lt;strong&gt;FSx for Lustre&lt;/strong&gt; فيه خيارين: &lt;strong&gt;Scratch&lt;/strong&gt; رخيص وسريع لبيانات مؤقتة، بس البيانات ما لها نسخ، فلو تعطل قرص تضيع. و&lt;strong&gt;Persistent&lt;/strong&gt; لبيانات طويلة المدى مع نسخ داخل منطقة التوفر.&lt;/p&gt;
&lt;h2 id=&quot;storage-gateway-مكتبك-والسحابة&quot; tabindex=&quot;-1&quot;&gt;Storage Gateway: مكتبك والسحابة &lt;a class=&quot;heading-anchor&quot; href=&quot;#storage-gateway-مكتبك-والسحابة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;عندك خوادم في مكتبك وتبي تستفيد من السحابة، بدون تغيير التطبيقات؟ &lt;strong&gt;Storage Gateway&lt;/strong&gt; برنامج تشغّله عندك كجهاز افتراضي، ويقدم تخزين عادي لتطبيقاتك، وبياناته فعلياً في AWS، مع كاش محلي للملفات الأخيرة.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 230&quot; role=&quot;img&quot; aria-labelledby=&quot;gateway-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;gw-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;326&quot; y=&quot;14&quot; width=&quot;300&quot; height=&quot;202&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;476&quot; y=&quot;42&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;مكتبك&lt;/text&gt;
&lt;rect x=&quot;496&quot; y=&quot;70&quot; width=&quot;110&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;551&quot; y=&quot;105&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقاتك&lt;/text&gt;
&lt;rect x=&quot;342&quot; y=&quot;70&quot; width=&quot;118&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;401&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Gateway&lt;/text&gt;
&lt;text x=&quot;401&quot; y=&quot;116&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مع كاش محلي&lt;/text&gt;
&lt;text x=&quot;476&quot; y=&quot;168&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;NFS أو SMB أو iSCSI أو أشرطة&lt;/text&gt;
&lt;rect x=&quot;14&quot; y=&quot;14&quot; width=&quot;226&quot; height=&quot;202&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-accent)&quot; stroke-dasharray=&quot;6 6&quot;/&gt;
&lt;text x=&quot;127&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;AWS&lt;/text&gt;
&lt;rect x=&quot;34&quot; y=&quot;44&quot; width=&quot;190&quot; height=&quot;44&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;129&quot; y=&quot;71&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;rect x=&quot;34&quot; y=&quot;100&quot; width=&quot;190&quot; height=&quot;44&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;129&quot; y=&quot;127&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;لقطات EBS&lt;/text&gt;
&lt;rect x=&quot;34&quot; y=&quot;156&quot; width=&quot;190&quot; height=&quot;44&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;129&quot; y=&quot;183&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Glacier&lt;/text&gt;
&lt;line x1=&quot;496&quot; y1=&quot;100&quot; x2=&quot;462&quot; y2=&quot;100&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#gw-arrow)&quot;/&gt;
&lt;line x1=&quot;342&quot; y1=&quot;90&quot; x2=&quot;226&quot; y2=&quot;66&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#gw-arrow)&quot;/&gt;
&lt;line x1=&quot;342&quot; y1=&quot;100&quot; x2=&quot;226&quot; y2=&quot;122&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#gw-arrow)&quot;/&gt;
&lt;line x1=&quot;342&quot; y1=&quot;110&quot; x2=&quot;226&quot; y2=&quot;178&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#gw-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;gateway-caption&quot;&gt;التطبيقات في مكتبك تشوف تخزين عادي عبر Gateway، وهو يحفظ البيانات في S3 أو لقطات EBS أو Glacier.&lt;/figcaption&gt;
&lt;/figure&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;strong&gt;S3 File Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجلد NFS أو SMB&lt;/td&gt;
&lt;td&gt;كائنات في S3&lt;/td&gt;
&lt;td&gt;مجلدات مشتركة ونسخ احتياطية للملفات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Volume Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قرص iSCSI&lt;/td&gt;
&lt;td&gt;S3 مع لقطات EBS&lt;/td&gt;
&lt;td&gt;أقراص لخوادم قائمة، بكاش أو نسخة كاملة محلية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tape Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مكتبة أشرطة افتراضية&lt;/td&gt;
&lt;td&gt;S3 ثم Glacier&lt;/td&gt;
&lt;td&gt;برامج نسخ احتياطي تعتمد على الأشرطة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وفيه نوع رابع اسمه &lt;strong&gt;FSx File Gateway&lt;/strong&gt; ما عاد متاح للعملاء الجدد، وAWS تنصح بالاتصال بـ FSx مباشرة.&lt;/p&gt;
&lt;h2 id=&quot;نقل-البيانات&quot; tabindex=&quot;-1&quot;&gt;نقل البيانات &lt;a class=&quot;heading-anchor&quot; href=&quot;#نقل-البيانات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;datasync&quot; tabindex=&quot;-1&quot;&gt;DataSync &lt;a class=&quot;heading-anchor&quot; href=&quot;#datasync&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;DataSync&lt;/strong&gt; ينقل ويزامن بيانات كبيرة بشكل مجدول:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;من وين وإلى وين:&lt;/strong&gt; من خوادم NFS أو SMB أو HDFS أو تخزين كائني، إلى S3 أو EFS أو FSx، وبين خدمات AWS نفسها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;وكيل:&lt;/strong&gt; تحتاج تشغّل وكيل (Agent) عندك للنقل من مكتبك، وما تحتاجه بين خدمات AWS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ينقل اللي تغيّر فقط&lt;/strong&gt; في كل تشغيل، ويحافظ على الصلاحيات والتواريخ، ويتحقق من سلامة البيانات.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;transfer-family&quot; tabindex=&quot;-1&quot;&gt;Transfer Family &lt;a class=&quot;heading-anchor&quot; href=&quot;#transfer-family&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;عندك شركاء أو أنظمة قديمة ترسل ملفات عبر &lt;strong&gt;SFTP&lt;/strong&gt; أو &lt;strong&gt;FTPS&lt;/strong&gt; أو &lt;strong&gt;FTP&lt;/strong&gt; أو &lt;strong&gt;AS2&lt;/strong&gt;، وما تبي تدير سيرفر لها؟ &lt;strong&gt;Transfer Family&lt;/strong&gt; يعطيك نقطة استقبال مُدارة، والملفات تروح لـ S3 أو EFS. والمستخدمين من داخله، أو Active Directory، أو نظام هوية خاص فيك.&lt;/p&gt;
&lt;p&gt;ولاحظ إن FTP غير مشفّر، فما يتوفر إلا داخل VPC. وتدفع بالساعة على كل نقطة، حتى بدون استخدام.&lt;/p&gt;
&lt;h3 id=&quot;لما-تكون-البيانات-أضخم-من-الإنترنت&quot; tabindex=&quot;-1&quot;&gt;لما تكون البيانات أضخم من الإنترنت &lt;a class=&quot;heading-anchor&quot; href=&quot;#لما-تكون-البيانات-أضخم-من-الإنترنت&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;قبل ما تختار طريقة النقل، احسب. هذي المدة النظرية بسرعة الخط كاملة، والواقع أبطأ:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الحجم&lt;/th&gt;
&lt;th&gt;100 ميجابت&lt;/th&gt;
&lt;th&gt;1 جيجابت&lt;/th&gt;
&lt;th&gt;10 جيجابت&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1 TB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;22 ساعة&lt;/td&gt;
&lt;td&gt;ساعتين&lt;/td&gt;
&lt;td&gt;13 دقيقة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;10 TB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9 أيام&lt;/td&gt;
&lt;td&gt;22 ساعة&lt;/td&gt;
&lt;td&gt;ساعتين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;100 TB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;93 يوم&lt;/td&gt;
&lt;td&gt;9 أيام&lt;/td&gt;
&lt;td&gt;22 ساعة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1 PB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سنتين ونص&lt;/td&gt;
&lt;td&gt;93 يوم&lt;/td&gt;
&lt;td&gt;9 أيام&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;عندك هذي الخيارات للكميات الكبيرة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DataSync&lt;/strong&gt; لو خطك يتحمل، مع مزامنة مستمرة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct Connect&lt;/strong&gt; لو النقل كبير ومستمر، وشرحناه في &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;الجزء الرابع عشر&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Transfer Terminal&lt;/strong&gt;: مواقع فعلية تجيبها بأجهزة تخزينك، وتوصلها بشبكة AWS بسرعة عالية.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout-note&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-info&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;8.5&quot;/&gt;&lt;path d=&quot;M12 11v5M12 8h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;ماذا عن Snowball؟&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ممكن تقرأ عن &lt;strong&gt;AWS Snowball Edge&lt;/strong&gt;، وهي أجهزة ترسلها AWS، تعبيها، وترجعها لهم. بس الخدمة ما عادت متاحة للعملاء الجدد منذ نوفمبر 2025، و&lt;a href=&quot;https://aws.amazon.com/snowball/&quot;&gt;أعلنت AWS&lt;/a&gt; إنهاء دعمها في مناطقها التجارية يوم 31 ديسمبر 2026. وللحوسبة في المواقع البعيدة، AWS توجّه لـ &lt;strong&gt;Outposts&lt;/strong&gt;. ولو تذاكر لاختبار Solutions Architect، دليله لسا يذكر Snow Family، فتذكر الفكرة: تنقل البيانات على جهاز لما يكون الخط بطيء عليها.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;مقارنة-خدمات-التخزين&quot; tabindex=&quot;-1&quot;&gt;مقارنة خدمات التخزين &lt;a class=&quot;heading-anchor&quot; href=&quot;#مقارنة-خدمات-التخزين&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كائني&lt;/td&gt;
&lt;td&gt;ملفات وصور ونسخ احتياطية ومواقع ثابتة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;S3 Glacier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كائني للأرشيف&lt;/td&gt;
&lt;td&gt;بيانات نادراً ما تنطلب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EBS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قرص شبكي&lt;/td&gt;
&lt;td&gt;قرص لسيرفر واحد وقواعد بيانات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instance Store&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قرص محلي مؤقت&lt;/td&gt;
&lt;td&gt;أعلى سرعة لبيانات مؤقتة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EFS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملفات لـ Linux&lt;/td&gt;
&lt;td&gt;مجلد مشترك بين عدة سيرفرات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملفات SMB&lt;/td&gt;
&lt;td&gt;مجلدات مشتركة لتطبيقات Windows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for Lustre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملفات عالية الأداء&lt;/td&gt;
&lt;td&gt;الحوسبة العالية وتدريب النماذج&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for ONTAP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملفات بعدة بروتوكولات&lt;/td&gt;
&lt;td&gt;نقل أنظمة NetApp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FSx for OpenZFS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملفات NFS&lt;/td&gt;
&lt;td&gt;أحمال Linux ونقل أنظمة ZFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جسر&lt;/td&gt;
&lt;td&gt;مكتبك يوصل لتخزين السحابة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DataSync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نقل&lt;/td&gt;
&lt;td&gt;مزامنة مجدولة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transfer Family&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نقل&lt;/td&gt;
&lt;td&gt;استقبال ملفات عبر SFTP وأخواته&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;عملي-مزامنة-مع-datasync&quot; tabindex=&quot;-1&quot;&gt;عملي: مزامنة مع DataSync &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-مزامنة-مع-datasync&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بننقل ملفات بين حاويتين، وهذا ما يحتاج وكيل. من CloudShell، جهّز حاويتين وملفات:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;SRC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;series-src-&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;DST&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;series-dst-&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;

aws s3 mb s3://&lt;span class=&quot;token variable&quot;&gt;$SRC&lt;/span&gt;
aws s3 mb s3://&lt;span class=&quot;token variable&quot;&gt;$DST&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;file &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;.txt
  aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;.txt s3://&lt;span class=&quot;token variable&quot;&gt;$SRC&lt;/span&gt;/
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;

&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;source: &lt;span class=&quot;token variable&quot;&gt;$SRC&lt;/span&gt;  destination: &lt;span class=&quot;token variable&quot;&gt;$DST&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;افتح &lt;strong&gt;DataSync&lt;/strong&gt; في الكونسول، واضغط &lt;strong&gt;Create task&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;المصدر:&lt;/strong&gt; أنشئ موقع جديد من نوع S3، وحدد حاوية &lt;code&gt;series-src-...&lt;/code&gt;، واختر إنشاء دور IAM تلقائياً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الوجهة:&lt;/strong&gt; نفس الشي مع حاوية &lt;code&gt;series-dst-...&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الإعدادات:&lt;/strong&gt; سمّ المهمة &lt;code&gt;series-sync&lt;/code&gt;، واختر &lt;strong&gt;Enhanced&lt;/strong&gt; لو ظهر لك خيار الوضع، وخل الباقي على حاله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التشغيل:&lt;/strong&gt; أنشئ المهمة، ثم اضغط &lt;strong&gt;Start&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;لما تنتهي، تأكد من الوجهة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3 &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$DST&lt;/span&gt;/&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين أضف ملف واحد، وشغّل المهمة مرة ثانية:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;file 4&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; file4.txt
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; file4.txt s3://&lt;span class=&quot;token variable&quot;&gt;$SRC&lt;/span&gt;/&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;في صفحة التشغيل الجديد بتلقى ملف واحد انتقل، لأن DataSync ينقل اللي تغيّر فقط. وهذا اللي يفرق عن النسخ الكامل في كل مرة.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;التكلفة هنا سنتات قليلة. احذف المهمة والموقعين من DataSync، ثم الأدوار اللي انشأت من IAM. وأخيراً احذف الحاويتين:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3 rb s3://&lt;span class=&quot;token variable&quot;&gt;$SRC&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--force&lt;/span&gt;
aws s3 rb s3://&lt;span class=&quot;token variable&quot;&gt;$DST&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--force&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FSx&lt;/strong&gt; أنظمة ملفات جاهزة: Windows وLustre وONTAP وOpenZFS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Gateway&lt;/strong&gt; يخلي مكتبك يشوف السحابة كتخزين عادي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DataSync&lt;/strong&gt; للمزامنة المجدولة، و&lt;strong&gt;Transfer Family&lt;/strong&gt; لاستقبال SFTP.&lt;/li&gt;
&lt;li&gt;احسب مدة النقل قبل ما تقرر، وSnowball ما عاد متاح للجدد.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;شركة تنقل تطبيق Windows يحفظ ملفاته في مجلد SMB مشترك، والمستخدمين يدخلون عبر Active Directory. وتبي خدمة مُدارة بدون سيرفرات ملفات تشغلها. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;FSx for Windows File Server&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon EFS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;FSx for Lustre&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon S3&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;هذا يعطي تطبيقات Windows مجلد SMB حقيقي مرتبط بـ Active Directory، وAWS تشغله لك.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; EFS نظام ملفات مشترك لـ Linux، عبر NFS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا للحوسبة عالية الأداء، ويشتغل مع أجهزة Linux فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; S3 توصل له عبر API، وهو مو مجلد يفتحه التطبيق عبر SMB.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#amazon-fsx-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%AC%D8%A7%D9%87%D8%B2%D8%A9&quot;&gt;Amazon FSx: أنظمة ملفات جاهزة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html&quot;&gt;What is FSx for Windows File Server?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;فريق بحث يشغّل محاكاة ثلاثة أيام على مجموعة أجهزة Linux. تقرأ مدخلاتها من S3، وتحتاج سرعة نقل عالية جداً، وتحفظ نتائجها في S3، فلو تعطل نظام الملفات يعني بس إعادة تشغيل. أي خيار أقل تكلفة؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;FSx for Windows File Server&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;FSx for Lustre، بنظام ملفات Persistent&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;FSx for Lustre، بنظام ملفات Scratch&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon EFS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lustre مبني لهذي السرعة ومتكامل مع S3، وScratch الخيار الرخيص للبيانات المؤقتة، لأن ما فيه شي هنا يعتمد على بقاء البيانات بعد العطل.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا لمجلدات SMB، مو لمجموعات Linux عالية الأداء.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يناسب البيانات طويلة المدى، وبتدفع على نسخ ما يحتاجها الفريق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا مجلد مشترك عام، وما هو مبني لهذا المستوى من الأداء.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#amazon-fsx-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%AC%D8%A7%D9%87%D8%B2%D8%A9&quot;&gt;Amazon FSx: أنظمة ملفات جاهزة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html&quot;&gt;Deployment and storage class options for FSx for Lustre file systems&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;برنامج النسخ الاحتياطي في مستشفى يكتب على أشرطة فعلية، والموظفين ملّوا من تخزينها وشحنها. والمستشفى يبي النسخ في AWS، بدون تغيير برنامج النسخ. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;S3 File Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Tape Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Volume Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Transfer Family&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;هذا يعرض مكتبة أشرطة افتراضية لبرنامج النسخ، والبيانات تروح لـ S3 ثم Glacier.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يعرض للتطبيقات مجلد NFS أو SMB، وهذا البرنامج يكتب على أشرطة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يعرض للسيرفرات قرص iSCSI، مو مكتبة أشرطة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يستقبل ملفات عبر بروتوكولات مثل SFTP، وبرنامج الأشرطة ما يستخدمها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#storage-gateway-%D9%85%D9%83%D8%AA%D8%A8%D9%83-%D9%88%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9&quot;&gt;Storage Gateway: مكتبك والسحابة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/storagegateway/latest/tgw/WhatIsStorageGateway.html&quot;&gt;What is Tape Gateway?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;عميل جديد في AWS عنده 100 تيرابايت على أجهزة تخزين خاصة فيه، ولازم توصل S3 خلال أسبوعين. وخطه الوحيد سرعته 100 ميجابت. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;DataSync عبر الخط الحالي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;أجهزة Snowball Edge ترسلها AWS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;خط Direct Connect جديد&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Data Transfer Terminal&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الفريق ياخذ أجهزة تخزينه لموقع فعلي من AWS فيه اتصال عالي السرعة، ويرفع من هناك، فما يعود الخط البطيء مشكلة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; بالسرعة الكاملة، 100 تيرابايت على هذا الخط تاخذ حوالي 93 يوم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا مقفل على العملاء الجدد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; تجهيزه ياخذ أسابيع وأحياناً أشهر، فممكن يفوت الموعد.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%84%D9%85%D8%A7-%D8%AA%D9%83%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A3%D8%B6%D8%AE%D9%85-%D9%85%D9%86-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA&quot;&gt;لما تكون البيانات أضخم من الإنترنت&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/datatransferterminal/latest/userguide/what-is-dtt.html&quot;&gt;What is Data Transfer Terminal?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;شركة تترك مركز بياناتها. وسيرفر NFS حقها بحجم 30 تيرابايت لازم ينسخ إلى AWS ويبقى متزامن لين الانتقال، وشركاؤها يرسلون ملفات يومية عبر SFTP وما يقدرون يغيرون طريقتهم. أي &lt;strong&gt;خدمتين&lt;/strong&gt; تناسب؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Tape Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;DataSync&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;FSx for Lustre&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Volume Gateway&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Transfer Family&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DataSync ينسخ بيانات NFS، وفي كل تشغيل بعدها ينقل اللي تغيّر فقط. وTransfer Family يعطي الشركاء نقطة SFTP مُدارة، وملفاتهم تروح لـ S3 أو EFS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا لبرامج النسخ الاحتياطي اللي تكتب على أشرطة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا نظام ملفات عالي الأداء، وما ينقل البيانات من مركز البيانات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يعرض قرص iSCSI لسيرفرات الموقع، والشركة تترك موقعها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#datasync&quot;&gt;DataSync&lt;/a&gt; و&lt;a href=&quot;#transfer-family&quot;&gt;Transfer Family&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/datasync/latest/userguide/how-datasync-transfer-works.html&quot;&gt;How AWS DataSync works&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html&quot;&gt;What is AWS Transfer Family?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بهذا نكمل قسم التخزين. عندك الحين تطبيق قوي بقاعدة بيانات وشبكة وتخزين، بس كل أجزائه مربوطة ببعض مباشرة. في &lt;a href=&quot;/posts/aws-19-sqs-sns-kinesis/&quot;&gt;&lt;strong&gt;الجزء التاسع عشر&lt;/strong&gt;&lt;/a&gt; نبدأ قسم التطبيقات الحديثة، ونفصل بينها بـ SQS وSNS وKinesis.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>S3: الأمان والتشفير</title>
    <link href="https://blog.sultanops.com/posts/aws-17-s3-security/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-17-s3-security/</id>
    <summary>كيف تشفّر بياناتك في S3 ومن يمسك المفاتيح، وتفرض HTTPS، وتشارك ملف خاص برابط موقّع، وتفهم CORS، وتحمي بياناتك من الحذف بـ MFA Delete وObject Lock، مع تجربة عملية.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;الجزء الخامس عشر&lt;/a&gt; عرفنا إن كل شي خاص افتراضياً، وإن Block Public Access يحميك من الفتح بالغلط. هذا الجزء يكمل الطبقات الباقية: التشفير، ومشاركة الملفات بأمان، وحماية البيانات حتى من مسؤولي الحساب نفسهم.&lt;/p&gt;
&lt;h2 id=&quot;التشفير-المخزن&quot; tabindex=&quot;-1&quot;&gt;التشفير المخزّن &lt;a class=&quot;heading-anchor&quot; href=&quot;#التشفير-المخزن&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;عندك سؤالين: &lt;strong&gt;وين يصير التشفير؟&lt;/strong&gt; و&lt;strong&gt;مين يمسك المفتاح؟&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 214&quot; role=&quot;img&quot; aria-labelledby=&quot;enc-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;enc-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;320&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;التشفير عند الخادم (SSE): S3 يشفّر الملف لما يوصل&lt;/text&gt;
&lt;rect x=&quot;470&quot; y=&quot;34&quot; width=&quot;150&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقك&lt;/text&gt;
&lt;text x=&quot;545&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ملف عادي&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;34&quot; width=&quot;150&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;text x=&quot;95&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يشفّر ثم يخزّن&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مشفّر أثناء النقل بـ TLS&lt;/text&gt;
&lt;line x1=&quot;470&quot; y1=&quot;64&quot; x2=&quot;172&quot; y2=&quot;64&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#enc-arrow)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;التشفير عند العميل: تشفّره أنت قبل الإرسال&lt;/text&gt;
&lt;rect x=&quot;470&quot; y=&quot;144&quot; width=&quot;150&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;168&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقك&lt;/text&gt;
&lt;text x=&quot;545&quot; y=&quot;188&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يشفّر أولاً&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;144&quot; width=&quot;150&quot; height=&quot;58&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;168&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;text x=&quot;95&quot; y=&quot;188&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يخزّن زي ما وصل&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;164&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مشفّر قبل ما يطلع، وفوقه TLS&lt;/text&gt;
&lt;line x1=&quot;470&quot; y1=&quot;174&quot; x2=&quot;172&quot; y2=&quot;174&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#enc-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;enc-caption&quot;&gt;في SSE تشفّر S3 الملف بعد وصوله، وفي التشفير عند العميل ما تشوف S3 الملف بدون تشفير أبداً.&lt;/figcaption&gt;
&lt;/figure&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSE-S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;S3 بالكامل&lt;/td&gt;
&lt;td&gt;الافتراضي لكل كائن جديد، ويكفي لأغلب الحالات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSE-KMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;KMS، وتتحكم أنت في صلاحياته&lt;/td&gt;
&lt;td&gt;تبي سجل بكل استخدام للمفتاح، وتحكم أدق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DSSE-KMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;KMS، بطبقتين تشفير&lt;/td&gt;
&lt;td&gt;متطلبات تنظيمية تفرض طبقتين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSE-C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت، وترسله مع كل طلب&lt;/td&gt;
&lt;td&gt;مقفل افتراضياً في الحاويات الجديدة منذ أبريل 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;عند العميل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أنت بالكامل&lt;/td&gt;
&lt;td&gt;ما تبي AWS تشوف البيانات أبداً&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;انتبه-مع-sse-kms&quot; tabindex=&quot;-1&quot;&gt;انتبه مع SSE-KMS &lt;a class=&quot;heading-anchor&quot; href=&quot;#انتبه-مع-sse-kms&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;كل قراءة أو كتابة تنادي KMS، وKMS له حد لعدد الطلبات في الثانية حسب الـ Region. فلو عندك ضغط عالي، فعّل &lt;strong&gt;S3 Bucket Keys&lt;/strong&gt;: مفتاح وسيط على مستوى الحاوية يقلل طلبات KMS بنسبة كبيرة، ومعها التكلفة.&lt;/p&gt;
&lt;p&gt;ولازم من يقرأ الكائن يكون عنده صلاحية على S3 &lt;strong&gt;وعلى مفتاح KMS&lt;/strong&gt; معاً. وهذا سبب مشهور لخطأ &lt;code&gt;AccessDenied&lt;/code&gt; رغم إن سياسة S3 صحيحة.&lt;/p&gt;
&lt;h2 id=&quot;التشفير-أثناء-النقل&quot; tabindex=&quot;-1&quot;&gt;التشفير أثناء النقل &lt;a class=&quot;heading-anchor&quot; href=&quot;#التشفير-أثناء-النقل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;S3 تقبل HTTP وHTTPS. وعشان تفرض HTTPS، ارفض أي طلب غير مشفّر عبر الشرط &lt;code&gt;aws:SecureTransport&lt;/code&gt;:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Deny&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Principal&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;s3:*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
      &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:s3:::my-bucket&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:s3:::my-bucket/*&quot;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Condition&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;Bool&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;aws:SecureTransport&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;false&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وبنفس الطريقة تقدر تفرض نوع تشفير معين على كل رفع. والسياسة تُقيَّم قبل التشفير الافتراضي، فلو رفضت الطلب ما يوصل له أصلاً.&lt;/p&gt;
&lt;h2 id=&quot;مشاركة-ملف-خاص-الروابط-الموقعة&quot; tabindex=&quot;-1&quot;&gt;مشاركة ملف خاص: الروابط الموقّعة &lt;a class=&quot;heading-anchor&quot; href=&quot;#مشاركة-ملف-خاص-الروابط-الموقعة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تبي عميل يحمّل فاتورته، بدون ما تفتح الحاوية ولا تعطيه حساب؟ &lt;strong&gt;Pre-signed URL&lt;/strong&gt; رابط فيه توقيع وله مدة صلاحية:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;يحمل &lt;strong&gt;صلاحيات اللي وقّعه&lt;/strong&gt;، فلو هو ما يقدر يقرأ الملف، الرابط ما يشتغل.&lt;/li&gt;
&lt;li&gt;ينفع &lt;strong&gt;للتحميل والرفع&lt;/strong&gt;، مثل رفع صورة من المتصفح مباشرة لـ S3 بدون المرور بسيرفرك.&lt;/li&gt;
&lt;li&gt;مدته محدودة، ولو وقّعته بدور مؤقت ينتهي مع انتهاء الجلسة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;cors-لما-يمنعك-المتصفح&quot; tabindex=&quot;-1&quot;&gt;CORS: لما يمنعك المتصفح &lt;a class=&quot;heading-anchor&quot; href=&quot;#cors-لما-يمنعك-المتصفح&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CORS&lt;/strong&gt; حماية في المتصفح، مو في S3. &lt;strong&gt;الأصل&lt;/strong&gt; (Origin) هو البروتوكول والنطاق والمنفذ. فلو صفحة على &lt;code&gt;https://app.example.com&lt;/code&gt; طلبت ملف من &lt;code&gt;https://my-bucket.s3.amazonaws.com&lt;/code&gt;، فالمتصفح يعتبرهم أصلين مختلفين، ويسأل الحاوية: تسمحين؟&lt;/p&gt;
&lt;p&gt;لو طلع عندك خطأ CORS في المتصفح، أضف الإعدادات للحاوية:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;AllowedOrigins&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://app.example.com&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;AllowedMethods&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;PUT&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;AllowedHeaders&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;MaxAgeSeconds&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3000&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الحماية-من-الحذف&quot; tabindex=&quot;-1&quot;&gt;الحماية من الحذف &lt;a class=&quot;heading-anchor&quot; href=&quot;#الحماية-من-الحذف&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;حتى الصلاحيات الصحيحة ما تحميك من خطأ، أو حساب مخترق، أو برامج الفدية. عندك ثلاث طبقات:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MFA Delete&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تطلب رمز MFA لحذف إصدار نهائياً أو إيقاف الإصدارات&lt;/td&gt;
&lt;td&gt;يفعّله المستخدم الجذر فقط، عبر الأوامر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Object Lock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يمنع حذف أو تعديل الإصدار لمدة&lt;/td&gt;
&lt;td&gt;لازم الإصدارات مفعّلة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glacier Vault Lock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يقفل سياسة مخزن Glacier القديم للأبد&lt;/td&gt;
&lt;td&gt;للمخازن القديمة، وObject Lock أفضل لأي شي جديد&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;أوضاع-object-lock&quot; tabindex=&quot;-1&quot;&gt;أوضاع Object Lock &lt;a class=&quot;heading-anchor&quot; href=&quot;#أوضاع-object-lock&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مستخدمين عندهم صلاحية خاصة فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ما أحد، ولا حتى المستخدم الجذر&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وفيه كمان &lt;strong&gt;Legal Hold&lt;/strong&gt;: قفل بدون مدة محددة، يبقى لين تشيله، ومفيد للقضايا القانونية.&lt;/p&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;Compliance ما له رجعة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;لو قفلت ملف بوضع Compliance لمدة عشر سنين، بتدفع عليه عشر سنين، وما أحد يقدر يحذفه ولا دعم AWS. جرّب بوضع Governance ومدة قصيرة أول.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;السجلات-والمراقبة&quot; tabindex=&quot;-1&quot;&gt;السجلات والمراقبة &lt;a class=&quot;heading-anchor&quot; href=&quot;#السجلات-والمراقبة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Access Logs:&lt;/strong&gt; تسجّل كل طلب في حاوية &lt;strong&gt;ثانية&lt;/strong&gt;. لا تخليها نفس الحاوية، لأن كل سجل يولّد سجل جديد، فتكبر بلا نهاية وتكبر الفاتورة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudTrail:&lt;/strong&gt; يسجّل عمليات الإدارة، وعمليات البيانات لو فعّلتها، وبنشرحه في &lt;a href=&quot;/posts/aws-25-monitoring-auditing/&quot;&gt;الجزء الخامس والعشرين&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;access-points-لكل-فريق-بوابته&quot; tabindex=&quot;-1&quot;&gt;Access Points: لكل فريق بوابته &lt;a class=&quot;heading-anchor&quot; href=&quot;#access-points-لكل-فريق-بوابته&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لو عندك حاوية كبيرة يستخدمها فرق كثيرة، Bucket Policy تصير طويلة وخطرة. &lt;strong&gt;Access Points&lt;/strong&gt; تعطي كل فريق بوابة باسمها وسياستها:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;بوابة &lt;code&gt;finance&lt;/code&gt; تسمح لفريق المالية على &lt;code&gt;finance/*&lt;/code&gt; فقط.&lt;/li&gt;
&lt;li&gt;بوابة &lt;code&gt;sales&lt;/code&gt; تسمح لفريق المبيعات على &lt;code&gt;sales/*&lt;/code&gt; فقط.&lt;/li&gt;
&lt;li&gt;وتقدر تخلي بوابة تقبل من داخل VPC واحدة فقط.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;عملي-تشفير-ورابط-موقع-وفرض-https&quot; tabindex=&quot;-1&quot;&gt;عملي: تشفير ورابط موقّع وفرض HTTPS &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-تشفير-ورابط-موقع-وفرض-https&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنكمل بنفس الحاوية في &lt;code&gt;BUCKET&lt;/code&gt;. ارفع ملف وشوف تشفيره الافتراضي، ثم ارفع واحد بـ KMS:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;secret invoice&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; invoice.txt
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; invoice.txt s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/invoice.txt

aws s3api head-object &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; invoice.txt &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; ServerSideEncryption

aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; invoice.txt s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/invoice-kms.txt &lt;span class=&quot;token parameter variable&quot;&gt;--sse&lt;/span&gt; aws:kms

aws s3api head-object &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; invoice-kms.txt &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[ServerSideEncryption,SSEKMSKeyId]&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الأول &lt;code&gt;AES256&lt;/code&gt; يعني SSE-S3، والثاني &lt;code&gt;aws:kms&lt;/code&gt; مع معرّف المفتاح.&lt;/p&gt;
&lt;p&gt;الحين سوّ رابط موقّع مدته 60 ثانية، وجرّبه:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws s3 presign s3://$BUCKET/invoice.txt --expires-in &lt;span class=&quot;token number&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$URL&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;يطبع محتوى الملف، مع إن الحاوية خاصة. انتظر دقيقة وأعد نفس أمر &lt;code&gt;curl&lt;/code&gt;، وبيرجع &lt;code&gt;AccessDenied&lt;/code&gt; مع رسالة إن الطلب منتهي.&lt;/p&gt;
&lt;p&gt;والآن افرض HTTPS على الحاوية:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3api put-bucket-policy &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--policy&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;{
  &quot;Version&quot;: &quot;2012-10-17&quot;,
  &quot;Statement&quot;: [{
    &quot;Sid&quot;: &quot;DenyHttp&quot;,
    &quot;Effect&quot;: &quot;Deny&quot;,
    &quot;Principal&quot;: &quot;*&quot;,
    &quot;Action&quot;: &quot;s3:*&quot;,
    &quot;Resource&quot;: [&quot;arn:aws:s3:::&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;&quot;, &quot;arn:aws:s3:::&#39;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;/*&quot;],
    &quot;Condition&quot;: {&quot;Bool&quot;: {&quot;aws:SecureTransport&quot;: &quot;false&quot;}}
  }]
}&#39;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws s3 presign s3://$BUCKET/invoice.txt --expires-in &lt;span class=&quot;token number&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; /dev/null &lt;span class=&quot;token parameter variable&quot;&gt;-w&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https: %{http_code}&lt;span class=&quot;token entity&quot; title=&quot;&#92;n&quot;&gt;&#92;n&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$URL&lt;/span&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; /dev/null &lt;span class=&quot;token parameter variable&quot;&gt;-w&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;http: %{http_code}&lt;span class=&quot;token entity&quot; title=&quot;&#92;n&quot;&gt;&#92;n&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${URL&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;https&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;http&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;}&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;نفس الرابط يرجع &lt;code&gt;200&lt;/code&gt; مع HTTPS و&lt;code&gt;403&lt;/code&gt; مع HTTP.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;خلاص ما نحتاج هذي الحاوية. من صفحة S3 حددها واختر &lt;strong&gt;Empty&lt;/strong&gt; ثم &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;كل كائن جديد مشفّر بـ &lt;strong&gt;SSE-S3&lt;/strong&gt; تلقائياً، واختر &lt;strong&gt;SSE-KMS&lt;/strong&gt; لو تبي تحكم وسجل، مع &lt;strong&gt;Bucket Keys&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;افرض &lt;strong&gt;HTTPS&lt;/strong&gt; بشرط &lt;code&gt;aws:SecureTransport&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الروابط الموقّعة&lt;/strong&gt; تشارك ملف خاص مؤقتاً بدون فتح الحاوية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CORS&lt;/strong&gt; من المتصفح، وتحله بإعدادات الحاوية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object Lock&lt;/strong&gt; يحميك من الحذف، حتى من الجذر في وضع Compliance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;دور عنده صلاحية &lt;code&gt;s3:GetObject&lt;/code&gt; على حاوية. ويقدر يقرأ الكائنات المشفرة بـ SSE-S3، بس يطلع له &lt;code&gt;AccessDenied&lt;/code&gt; مع المشفرة بـ SSE-KMS ومفتاح Customer managed. وش الناقص؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;S3 Bucket Keys على الحاوية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;صلاحية &lt;code&gt;kms:Decrypt&lt;/code&gt; على هذا المفتاح&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;قاعدة CORS على الحاوية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;الشرط &lt;code&gt;aws:SecureTransport&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;قراءة كائن SSE-KMS تحتاج صلاحية على S3 وعلى مفتاح KMS معاً، وعشان كذا يطلع هذا الخطأ حتى لو سياسة S3 صحيحة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي تقلل طلبات KMS والتكلفة، وما تعطي أي صلاحية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; CORS قاعدة في المتصفح، وما لها علاقة بصلاحيات دور.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يفرض HTTPS، وهو يمنع مو يسمح.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%86%D8%AA%D8%A8%D9%87-%D9%85%D8%B9-sse-kms&quot;&gt;انتبه مع SSE-KMS&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html&quot;&gt;Using server-side encryption with AWS KMS keys&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;متجر إلكتروني يبي كل عميل يحمّل فاتورته من حاوية خاصة، برابط يوقف بعد 15 دقيقة. والعملاء ما عندهم حسابات AWS. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;سياسة حاوية تسمح بالقراءة العامة على &lt;code&gt;invoices/*&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;مستخدم IAM لكل عميل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;قاعدة CORS تسمح لنطاق المتجر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Pre-signed URL ينشئه الخادم الخلفي للمتجر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ Pre-signed URL فيه توقيع ومدة صلاحية، ويشتغل بصلاحيات اللي وقّعه، فتبقى الحاوية خاصة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; بهذي الطريقة أي أحد يقدر يقرأ أي فاتورة، في أي وقت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; إنشاء مستخدمين للعملاء وإدارتهم شغل ثقيل، وما له داعي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا إذن في المتصفح بين المواقع، وما يفتح الملفات الخاصة لأحد.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D8%B4%D8%A7%D8%B1%D9%83%D8%A9-%D9%85%D9%84%D9%81-%D8%AE%D8%A7%D8%B5-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9%D8%A9&quot;&gt;مشاركة ملف خاص: الروابط الموقّعة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html&quot;&gt;Download and upload objects with presigned URLs&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;صفحة على &lt;code&gt;https://app.example.com&lt;/code&gt; تحمّل JSON من حاوية عبر JavaScript. والمتصفح يعرض خطأ CORS، بينما نفس الطلب من &lt;code&gt;curl&lt;/code&gt; ينجح. وش يسوي الفريق؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إضافة قاعدة CORS على الحاوية تسمح لهذا الأصل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إيقاف Block Public Access&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تشفير الملف بـ SSE-KMS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تفعيل Versioning&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CORS حماية في المتصفح. المتصفح يسأل الحاوية هل هذا الأصل مسموح، و&lt;code&gt;curl&lt;/code&gt; ما يسأل، وعشان كذا المتصفح وحده اللي اعترض.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الطلب ينجح من &lt;code&gt;curl&lt;/code&gt;، فالوصول مو هو المشكلة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; التشفير ما له علاقة بالأصول اللي يقبلها المتصفح.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحتفظ بالإصدارات القديمة، وما يغير شي يفحصه المتصفح.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cors-%D9%84%D9%85%D8%A7-%D9%8A%D9%85%D9%86%D8%B9%D9%83-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD&quot;&gt;CORS: لما يمنعك المتصفح&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html&quot;&gt;Using cross-origin resource sharing (CORS)&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;بنك لازم يحتفظ بسجلاته سبع سنين، بطريقة ما يقدر أحد يحذفها خلالها، ولا حتى المستخدم الجذر. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;MFA Delete&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Object Lock بوضع Governance&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Object Lock بوضع Compliance&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;سياسة حاوية تمنع &lt;code&gt;s3:DeleteObject&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;في وضع Compliance، ما أحد يقدر يحذف إصدار مقفل أو يكتب فوقه لين تنتهي مدته، ولا حتى المستخدم الجذر، والمدة ما تنقص.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يطلب رمز MFA بس، فالمستخدم الجذر اللي معه الجهاز يقدر يحذف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; المستخدمين اللي عندهم صلاحية خاصة يقدرون يحذفون في هذا الوضع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; اللي عنده صلاحيات كافية يقدر يغير السياسة ببساطة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D9%88%D8%B6%D8%A7%D8%B9-object-lock&quot;&gt;أوضاع Object Lock&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html&quot;&gt;Locking objects with Object Lock&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;تدقيق يطلب شرطين على حاوية: ما تقبل الطلبات إلا عبر HTTPS، ويكون فيه سجل بكل استخدام لمفتاح التشفير. أي &lt;strong&gt;تغييرين&lt;/strong&gt; يحققون هذا؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إبقاء Block Public Access شغال&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;جعل التشفير الافتراضي SSE-S3&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;إضافة سياسة حاوية تمنع الطلبات لما يكون &lt;code&gt;aws:SecureTransport&lt;/code&gt; بقيمة false&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تفعيل Object Lock&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;جعل التشفير الافتراضي SSE-KMS&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;السياسة ترفض أي طلب غير مشفر، ومع SSE-KMS تقدر تدقق استخدام المفتاح في CloudTrail.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يمنع الوصول العام، وما ينظر إلى HTTP أو HTTPS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هنا S3 تمسك المفتاح بالكامل، فما يطلع لك سجل بكل استخدام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحمي من الحذف، وما يحقق أي شرط منهم.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D8%AE%D8%B2%D9%86&quot;&gt;التشفير المخزّن&lt;/a&gt; و&lt;a href=&quot;#%D8%A7%D9%84%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D9%86%D9%82%D9%84&quot;&gt;التشفير أثناء النقل&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html&quot;&gt;Security best practices for Amazon S3&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html&quot;&gt;Using server-side encryption with AWS KMS keys&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;S3 مو الخيار الوحيد. لو عندك نظام Windows، أو مكتب يبي يوصل لتخزين السحابة، أو ملايين الملفات تبي تنقلها؟ في &lt;a href=&quot;/posts/aws-18-storage-transfer/&quot;&gt;&lt;strong&gt;الجزء الثامن عشر&lt;/strong&gt;&lt;/a&gt; نغطي خدمات التخزين والنقل الباقية.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>S3: فئات التخزين ودورة الحياة</title>
    <link href="https://blog.sultanops.com/posts/aws-16-s3-classes-lifecycle/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-16-s3-classes-lifecycle/</id>
    <summary>مو كل ملف يستاهل نفس السعر. تعرف على فئات تخزين S3 من Standard إلى Deep Archive، ومتى تختار كل وحدة، وكيف تنقل قواعد دورة الحياة ملفاتك تلقائياً، وتوفر كثير على فاتورتك.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;الجزء الخامس عشر&lt;/a&gt; خزّنا كل شي بالطريقة الافتراضية. بس فكر في تطبيقك: صورة منتج تنطلب كل ثانية، وفاتورة عمرها خمس سنين ما يفتحها أحد إلا وقت التدقيق. ليش تدفع عليهم نفس السعر؟&lt;/p&gt;
&lt;p&gt;فئات التخزين تعطيك هذا الخيار: كل ما قل الوصول للملف، قل سعر تخزينه، وزادت تكلفة أو مدة استرجاعه.&lt;/p&gt;
&lt;h2 id=&quot;المتانة-والتوفر&quot; tabindex=&quot;-1&quot;&gt;المتانة والتوفر &lt;a class=&quot;heading-anchor&quot; href=&quot;#المتانة-والتوفر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;مصطلحين لازم تفرق بينهم:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;المتانة (Durability):&lt;/strong&gt; هل بيضيع الملف؟ 99.999999999% لكل الفئات، مع ملاحظة إن الفئات بمنطقة توفر واحدة تضيع بياناتها لو تدمرت المنطقة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التوفر (Availability):&lt;/strong&gt; هل تقدر توصل له الحين؟ يختلف من فئة لفئة، مثلاً 99.99% لـ Standard.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;الفئات&quot; tabindex=&quot;-1&quot;&gt;الفئات &lt;a class=&quot;heading-anchor&quot; href=&quot;#الفئات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&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;th&gt;السعر التقريبي&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بيانات تنطلب كثير&lt;/td&gt;
&lt;td&gt;فوري&lt;/td&gt;
&lt;td&gt;ما فيه&lt;/td&gt;
&lt;td&gt;0.023&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intelligent-Tiering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نمط وصول غير معروف&lt;/td&gt;
&lt;td&gt;فوري في الطبقات التلقائية&lt;/td&gt;
&lt;td&gt;ما فيه&lt;/td&gt;
&lt;td&gt;حسب الطبقة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standard-IA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مرة في الشهر تقريباً&lt;/td&gt;
&lt;td&gt;فوري، مع رسم استرجاع&lt;/td&gt;
&lt;td&gt;30 يوم&lt;/td&gt;
&lt;td&gt;0.0125&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;One Zone-IA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بيانات تقدر تعيد إنشاءها&lt;/td&gt;
&lt;td&gt;فوري، مع رسم&lt;/td&gt;
&lt;td&gt;30 يوم&lt;/td&gt;
&lt;td&gt;0.01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glacier Instant Retrieval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مرة في ثلاثة أشهر&lt;/td&gt;
&lt;td&gt;فوري، مع رسم أعلى&lt;/td&gt;
&lt;td&gt;90 يوم&lt;/td&gt;
&lt;td&gt;0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glacier Flexible Retrieval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مرة أو مرتين في السنة&lt;/td&gt;
&lt;td&gt;من دقايق إلى ساعات&lt;/td&gt;
&lt;td&gt;90 يوم&lt;/td&gt;
&lt;td&gt;0.0036&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glacier Deep Archive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أقل من مرة في السنة&lt;/td&gt;
&lt;td&gt;من 12 إلى 48 ساعة&lt;/td&gt;
&lt;td&gt;180 يوم&lt;/td&gt;
&lt;td&gt;0.00099&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;الأسعار بالدولار لكل جيجابايت في الشهر، تقريبية لمناطق أمريكا، فراجع صفحة الأسعار لمنطقتك.&lt;/p&gt;
&lt;p&gt;وكل هذي الفئات تحفظ البيانات في ثلاث مناطق توفر أو أكثر، إلا &lt;strong&gt;One Zone-IA&lt;/strong&gt;. وعندك كمان &lt;strong&gt;S3 Express One Zone&lt;/strong&gt;: أداء عالي جداً بزمن استجابة أقل من 10 ملي ثانية، في منطقة توفر واحدة، بحاوية من نوع خاص، وسعره أعلى. يناسب التحليل وتدريب النماذج اللي تحتاج سرعة كبيرة.&lt;/p&gt;
&lt;h3 id=&quot;intelligent-tiering-لو-ما-تعرف&quot; tabindex=&quot;-1&quot;&gt;Intelligent-Tiering: لو ما تعرف &lt;a class=&quot;heading-anchor&quot; href=&quot;#intelligent-tiering-لو-ما-تعرف&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;لو ما تدري كم بينطلب الملف، هذي الفئة تنقله لحالها حسب الاستخدام:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frequent Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;البداية&lt;/td&gt;
&lt;td&gt;فوري&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrequent Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بعد 30 يوم بدون وصول&lt;/td&gt;
&lt;td&gt;فوري&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Archive Instant Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بعد 90 يوم بدون وصول&lt;/td&gt;
&lt;td&gt;فوري&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Archive Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اختيارية، من 90 يوم&lt;/td&gt;
&lt;td&gt;ساعات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deep Archive Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اختيارية، من 180 يوم&lt;/td&gt;
&lt;td&gt;حتى 12 ساعة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;تدفع رسم مراقبة بسيط لكل كائن، وما فيه رسوم استرجاع، ولو انطلب الملف يرجع للطبقة الأولى.&lt;/p&gt;
&lt;h3 id=&quot;glacier-flexible-و-deep-archive-طلب-قبل-القراءة&quot; tabindex=&quot;-1&quot;&gt;Glacier Flexible و Deep Archive: طلب قبل القراءة &lt;a class=&quot;heading-anchor&quot; href=&quot;#glacier-flexible-و-deep-archive-طلب-قبل-القراءة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;في هذي الفئات ما تقدر تقرأ الملف مباشرة، لازم تطلب &lt;strong&gt;استرجاعه&lt;/strong&gt; أول، وتختار السرعة:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الفئة&lt;/th&gt;
&lt;th&gt;Expedited&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Bulk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexible Retrieval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 إلى 5 دقايق&lt;/td&gt;
&lt;td&gt;3 إلى 5 ساعات&lt;/td&gt;
&lt;td&gt;5 إلى 12 ساعة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deep Archive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ما فيه&lt;/td&gt;
&lt;td&gt;12 ساعة&lt;/td&gt;
&lt;td&gt;48 ساعة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;ثلاث حفر في الفئات الرخيصة&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;أقل مدة تخزين:&lt;/strong&gt; لو حذفت ملف من Glacier Deep Archive بعد شهر، تدفع 180 يوم كاملة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أقل حجم محسوب:&lt;/strong&gt; فئات IA وGlacier Instant تحسب أقل كائن 128 KB، فآلاف الملفات الصغيرة ممكن تكلف أكثر من Standard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;رسوم الاسترجاع:&lt;/strong&gt; لو تقرأ البيانات كثير، Standard-IA ممكن يصير أغلى من Standard.&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;دورة-الحياة-lifecycle&quot; tabindex=&quot;-1&quot;&gt;دورة الحياة (Lifecycle) &lt;a class=&quot;heading-anchor&quot; href=&quot;#دورة-الحياة-lifecycle&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ما تحتاج تنقل الملفات بيدك. قواعد &lt;strong&gt;Lifecycle&lt;/strong&gt; تسوي هذا تلقائياً حسب عمر الملف. مثلاً سجلات تطبيق:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 170&quot; role=&quot;img&quot; aria-labelledby=&quot;lifecycle-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;life-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;570&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يوم 0&lt;/text&gt;
&lt;rect x=&quot;520&quot; y=&quot;46&quot; width=&quot;100&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;570&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Standard&lt;/text&gt;
&lt;text x=&quot;445&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يوم 30&lt;/text&gt;
&lt;rect x=&quot;395&quot; y=&quot;46&quot; width=&quot;100&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;445&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Standard-IA&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يوم 90&lt;/text&gt;
&lt;rect x=&quot;270&quot; y=&quot;46&quot; width=&quot;100&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;72&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Glacier&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;92&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Flexible&lt;/text&gt;
&lt;text x=&quot;195&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يوم 365&lt;/text&gt;
&lt;rect x=&quot;145&quot; y=&quot;46&quot; width=&quot;100&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;195&quot; y=&quot;72&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Deep&lt;/text&gt;
&lt;text x=&quot;195&quot; y=&quot;92&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Archive&lt;/text&gt;
&lt;text x=&quot;70&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يوم 2555&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;46&quot; width=&quot;100&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;70&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;حذف&lt;/text&gt;
&lt;line x1=&quot;520&quot; y1=&quot;77&quot; x2=&quot;497&quot; y2=&quot;77&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#life-arrow)&quot;/&gt;
&lt;line x1=&quot;395&quot; y1=&quot;77&quot; x2=&quot;372&quot; y2=&quot;77&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#life-arrow)&quot;/&gt;
&lt;line x1=&quot;270&quot; y1=&quot;77&quot; x2=&quot;247&quot; y2=&quot;77&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#life-arrow)&quot;/&gt;
&lt;line x1=&quot;145&quot; y1=&quot;77&quot; x2=&quot;122&quot; y2=&quot;77&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#life-arrow)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;تخزين أرخص، واسترجاع أبطأ وأغلى&lt;/text&gt;
&lt;line x1=&quot;620&quot; y1=&quot;150&quot; x2=&quot;22&quot; y2=&quot;150&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#life-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;lifecycle-caption&quot;&gt;قاعدة واحدة تنقل الملف عبر الفئات مع تقدم عمره، ثم تحذفه بعد سبع سنين.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;والقاعدة فيها نوعين من الإجراءات، وتطبقها على بادئة أو وسم محدد:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;انقل الملف لفئة أرخص بعد عدد أيام&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Expiration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;احذف الملف بعد مدة، أو الإصدارات القديمة، أو الرفعات اللي ما اكتملت&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وأشياء تنتبه لها:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;النقل نازل فقط&lt;/strong&gt; على السلم، وأقل مدة قبل Standard-IA هي 30 يوم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الملفات الأصغر من 128 KB&lt;/strong&gt; ما تنتقل افتراضياً، لأن تكلفة نقلها أكبر من توفيرها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;النقل نفسه له رسم&lt;/strong&gt; لكل ألف كائن، فانتبه للملايين من الملفات الصغيرة.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout-tip&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-bulb&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.45 1 1.15 1 1.9V16h5v-.2c0-.75.4-1.45 1-1.9A6 6 0 0 0 12 3z&quot;/&gt;&lt;/svg&gt;&lt;span&gt;قاعدتين تضيفها لأي حاوية&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;احذف &lt;strong&gt;الرفعات الناقصة&lt;/strong&gt; (Incomplete Multipart Uploads) بعد أسبوع، لأنها تنحسب وما تظهر في القائمة. ولو الإصدارات مفعّلة، احذف &lt;strong&gt;الإصدارات القديمة&lt;/strong&gt; بعد مدة تناسبك.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;كيف-تعرف-وش-تختار&quot; tabindex=&quot;-1&quot;&gt;كيف تعرف وش تختار؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كيف-تعرف-وش-تختار&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ما تحتاج تخمن. عندك أدوات تقرأ استخدامك الفعلي:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Storage Class Analysis:&lt;/strong&gt; تراقب الوصول لبادئة أو حاوية، وتقترح متى تنقل من Standard إلى Standard-IA.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Lens:&lt;/strong&gt; لوحة على مستوى الحسابات كلها: الأحجام والنمو والحاويات اللي فيها رفعات ناقصة أو بدون تشفير. ولها مقاييس مجانية وأخرى متقدمة مدفوعة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ولو عندك ملايين الملفات وتبي تسوي شي عليها مرة وحدة، زي تغيير الفئة أو النسخ، &lt;strong&gt;S3 Batch Operations&lt;/strong&gt; تنفذه على قائمة من &lt;strong&gt;S3 Inventory&lt;/strong&gt;، مع تقرير بالنتائج.&lt;/p&gt;
&lt;p&gt;وفي المقابل، لو تشارك بيانات ضخمة مع جهة ثانية، &lt;strong&gt;Requester Pays&lt;/strong&gt; تخليهم يدفعون تكلفة الطلبات والتحميل بدالك.&lt;/p&gt;
&lt;p&gt;ولو بترفع ملايين الملفات الصغيرة اللي ما تقرأها وحدة وحدة، مثل السجلات، اجمعها في أرشيف واحد أول. كل &lt;code&gt;PUT&lt;/code&gt; طلب مدفوع، فرفعة وحدة كبيرة ممكن تكلف أقل بكثير من مليون رفعة صغيرة.&lt;/p&gt;
&lt;h2 id=&quot;عملي-فئات-وقاعدة-دورة-حياة&quot; tabindex=&quot;-1&quot;&gt;عملي: فئات وقاعدة دورة حياة &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-فئات-وقاعدة-دورة-حياة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنكمل بالحاوية من الجزء السابق. لو انتهت جلسة CloudShell، حط اسمها في &lt;code&gt;BUCKET&lt;/code&gt; من جديد. ارفع ملف في فئة محددة، وشوف الفئة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;monthly report&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; report.txt

aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; report.txt s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/reports/report.txt --storage-class STANDARD_IA

aws s3api head-object &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; reports/report.txt &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; StorageClass&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين أضف قاعدة دورة الحياة اللي في الرسم على بادئة &lt;code&gt;logs/&lt;/code&gt;:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3api put-bucket-lifecycle-configuration &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --lifecycle-configuration &lt;span class=&quot;token string&quot;&gt;&#39;{
  &quot;Rules&quot;: [{
    &quot;ID&quot;: &quot;logs-rule&quot;,
    &quot;Status&quot;: &quot;Enabled&quot;,
    &quot;Filter&quot;: {&quot;Prefix&quot;: &quot;logs/&quot;},
    &quot;Transitions&quot;: [
      {&quot;Days&quot;: 30, &quot;StorageClass&quot;: &quot;STANDARD_IA&quot;},
      {&quot;Days&quot;: 90, &quot;StorageClass&quot;: &quot;GLACIER&quot;},
      {&quot;Days&quot;: 365, &quot;StorageClass&quot;: &quot;DEEP_ARCHIVE&quot;}
    ],
    &quot;Expiration&quot;: {&quot;Days&quot;: 2555},
    &quot;AbortIncompleteMultipartUpload&quot;: {&quot;DaysAfterInitiation&quot;: 7}
  }]
}&#39;&lt;/span&gt;

aws s3api get-bucket-lifecycle-configuration &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Rules[0].Transitions&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وهذا الجزء الممتع: ارفع ملف لـ Glacier، وحاول تقراه:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;old invoice&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; old.txt
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; old.txt s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/archive/old.txt --storage-class GLACIER

aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/archive/old.txt -&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بيرجع خطأ &lt;code&gt;InvalidObjectState&lt;/code&gt;، لأن الملف محفوظ لكنه ما ينقرأ مباشرة. اطلب استرجاعه:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3api restore-object &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; archive/old.txt &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --restore-request &lt;span class=&quot;token string&quot;&gt;&#39;{&quot;Days&quot;: 1, &quot;GlacierJobParameters&quot;: {&quot;Tier&quot;: &quot;Standard&quot;}}&#39;&lt;/span&gt;

aws s3api head-object &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; archive/old.txt &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[StorageClass,Restore]&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف &lt;code&gt;ongoing-request=&amp;quot;true&amp;quot;&lt;/code&gt;. وبعد 3 إلى 5 ساعات يصير &lt;code&gt;false&lt;/code&gt;، ويتوفر نسخة مؤقتة تقراها ليوم واحد.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;التكلفة في هذي التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;الملفات صغيرة جداً، فتكلفتها أقل من سنت حتى مع أقل مدة في Glacier. وخل الحاوية لو بتكمل الجزء الجاي.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;كل ما قل الوصول، قل سعر التخزين&lt;/strong&gt;، وزادت تكلفة الاسترجاع أو مدته.&lt;/li&gt;
&lt;li&gt;لو ما تعرف نمط الوصول، &lt;strong&gt;Intelligent-Tiering&lt;/strong&gt; ينقل الملفات لحاله.&lt;/li&gt;
&lt;li&gt;انتبه لـ &lt;strong&gt;أقل مدة تخزين&lt;/strong&gt; و&lt;strong&gt;أقل حجم محسوب&lt;/strong&gt; و&lt;strong&gt;رسوم الاسترجاع&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle&lt;/strong&gt; تنقل الملفات وتحذفها تلقائياً، وأضف قاعدة للرفعات الناقصة دايماً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage Lens وStorage Class Analysis&lt;/strong&gt; تقرر بأرقام، مو بالتخمين.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;شركة ناشئة تطلق منصة بيانات جديدة. بعض الملفات ممكن تبقى أشهر ما أحد يلمسها وبعدين تنقرأ كثير، وما أحد يقدر يتوقع أيها. وتبي تخفض تكلفة التخزين، بدون رسوم استرجاع وبدون قواعد تديرها. أي فئة تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Standard-IA&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;One Zone-IA&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Glacier Flexible Retrieval&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Intelligent-Tiering&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;تراقب استخدام كل ملف وتنقله بين الطبقات لحالها، مقابل رسم مراقبة بسيط وبدون رسوم استرجاع.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي فيها رسم على كل استرجاع، فالملف اللي ينقرأ كثير ممكن تصير تكلفته أعلى.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذي فيها رسم استرجاع كمان، وتحفظ البيانات في منطقة توفر وحدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الملفات هنا تحتاج استرجاع قبل القراءة، وممكن ياخذ ساعات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#intelligent-tiering-%D9%84%D9%88-%D9%85%D8%A7-%D8%AA%D8%B9%D8%B1%D9%81&quot;&gt;Intelligent-Tiering: لو ما تعرف&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering.html&quot;&gt;Managing storage costs with Amazon S3 Intelligent-Tiering&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;خدمة فيديو تحتفظ بنسخ منخفضة الدقة من أفلامها، وتقدر تعيد إنتاجها من الأصول في أي وقت. وكل نسخة تنقرأ مرة في الشهر تقريباً، ولازم تفتح فوراً. أي فئة أقل تكلفة وتحقق هذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Standard&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;One Zone-IA&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Glacier Deep Archive&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Glacier Flexible Retrieval&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;النسخ ممكن تنعاد، فخسارتها مع منطقة توفر مو كارثة، وما تحتاج تدفع على ثلاث مناطق. والاسترجاع يبقى فوري.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي تنفع، بس بسعر أعلى على حماية هذي البيانات ما تحتاجها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الاسترجاع هنا ياخذ من 12 إلى 48 ساعة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; الملفات هنا تحتاج استرجاع قبل القراءة، ياخذ من دقايق لساعات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D9%81%D8%A6%D8%A7%D8%AA&quot;&gt;الفئات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html&quot;&gt;Understanding and managing Amazon S3 storage classes&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;سجلات تطبيق شركة لازم تبقى مقروءة فوراً 30 يوم، ثم تتأرشف بسعر رخيص سنة، ثم تنحذف. والفريق ما يبي أي سكربتات يشغلها. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;قاعدة Lifecycle على بادئة &lt;code&gt;logs/&lt;/code&gt;، فيها Transition وExpiration&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;دالة Lambda مجدولة تنقل الملفات وتحذفها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Storage Lens، بمقاييسه المتقدمة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Cross-Region Replication إلى Region أرخص&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;قاعدة Lifecycle تنقل الملفات لفئة أرخص عند العمر اللي تحدده، وتحذفها بعدين، بدون أي شي تشغله أنت.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا ينفع، بس هو كود لازم تكتبه وتصونه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يعرض لك أرقام، وما ينقل ولا يحذف شي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يزيد النسخ، وما يأرشف الأصول ولا يحذفها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AF%D9%88%D8%B1%D8%A9-%D8%A7%D9%84%D8%AD%D9%8A%D8%A7%D8%A9-lifecycle&quot;&gt;دورة الحياة (Lifecycle)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html&quot;&gt;Managing the lifecycle of objects&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;سكربت مدقق يحاول يقرأ ملف حجمه 20 ميجابايت محفوظ في Glacier Flexible Retrieval، ويطلع له خطأ &lt;code&gt;InvalidObjectState&lt;/code&gt;. والمدقق يحتاج الملف خلال 10 دقايق. وش يسوي الفريق؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إعطاء دور السكربت صلاحية &lt;code&gt;s3:GetObject&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;طلب استرجاع بخيار Bulk&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;طلب استرجاع بخيار Expedited&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إضافة قاعدة Lifecycle ترجّع الملف إلى Standard&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;في هذي الفئة لازم ينسترجع الملف قبل ما ينقرأ، وExpedited عادةً يجهز ملف بهذا الحجم خلال 1 إلى 5 دقايق.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الصلاحية الناقصة ترجّع &lt;code&gt;AccessDenied&lt;/code&gt;، مو هذا الخطأ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا أرخص خيار، بس ياخذ من 5 إلى 12 ساعة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; نقل Lifecycle ينزل مع الدرج بس، وما يرجع أبداً إلى Standard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#glacier-flexible-%D9%88-deep-archive-%D8%B7%D9%84%D8%A8-%D9%82%D8%A8%D9%84-%D8%A7%D9%84%D9%82%D8%B1%D8%A7%D8%A1%D8%A9&quot;&gt;Glacier Flexible و Deep Archive: طلب قبل القراءة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects-retrieval-options.html&quot;&gt;Understanding archive retrieval options&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;عشان يوفر، رفع فريق ملايين الصور بحجم 10 كيلوبايت إلى Standard-IA. والتطبيق يقرأها طول اليوم، والفاتورة زادت. أي &lt;strong&gt;سببين&lt;/strong&gt; يفسرون هذا؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Standard-IA فيها رسم مراقبة لكل كائن&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;كل كائن ينحسب 128 كيلوبايت على الأقل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;كل قراءة عليها رسم استرجاع&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Standard-IA سعر الجيجابايت فيها أعلى من Standard&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;Standard-IA تحفظ نسخة زيادة في منطقة توفر رابعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الصورة بحجم 10 كيلوبايت تنحسب 128 كيلوبايت في هذي الفئة، وسعر التخزين المنخفض ما يفيد إلا مع البيانات اللي نادراً تنقرأ. وبيانات بهذا الصغر وهذا الاستخدام مكانها Standard.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; رسم المراقبة حق Intelligent-Tiering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; سعر الجيجابايت فيها أقل، وعشان كذا تبدو مغرية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; تستخدم ثلاث مناطق أو أكثر زي Standard، فالتكلفة الزيادة مو من هنا.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D9%81%D8%A6%D8%A7%D8%AA&quot;&gt;الفئات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html&quot;&gt;Understanding and managing Amazon S3 storage classes&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بياناتك الحين في المكان المناسب بالسعر المناسب، بس مين يقدر يوصل لها؟ في &lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;&lt;strong&gt;الجزء السابع عشر&lt;/strong&gt;&lt;/a&gt; نغطي التشفير والروابط الموقّعة والقفل ضد الحذف.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>S3: أساسيات التخزين الكائني</title>
    <link href="https://blog.sultanops.com/posts/aws-15-s3-basics/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-15-s3-basics/</id>
    <summary>وش هو التخزين الكائني وكيف يختلف عن الأقراص، والحاويات والكائنات، ومين يقدر يوصل لها، والإصدارات والنسخ بين المناطق، واستضافة موقع ثابت، مع تجربة عملية تشوف فيها الإصدارات تنقذ ملف محذوف.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-05-ec2-storage/&quot;&gt;الجزء الخامس&lt;/a&gt; شفنا تخزين مربوط بالسيرفرات. بس الصور والفيديوهات والنسخ الاحتياطية والسجلات ما تحتاج سيرفر أصلاً، تحتاج مكان يحفظها بأمان ويوصلها وقت الطلب، مهما كبر حجمها. هذا &lt;strong&gt;S3&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;و&lt;strong&gt;S3&lt;/strong&gt; (Simple Storage Service) من أقدم خدمات AWS وأكثرها استخداماً. ما فيها مساحة تحجزها، وتدفع على اللي تخزنه. وAWS تصممها لمتانة 99.999999999%، يعني احتمال ضياع ملف عندك شبه معدوم.&lt;/p&gt;
&lt;p&gt;وتشوفها في كل مكان: نسخ احتياطية، وملفات المستخدمين، ومواقع ثابتة، وسجلات، وبحيرات بيانات للتحليل.&lt;/p&gt;
&lt;h2 id=&quot;التخزين-الكائني-مقابل-الأقراص&quot; tabindex=&quot;-1&quot;&gt;التخزين الكائني مقابل الأقراص &lt;a class=&quot;heading-anchor&quot; href=&quot;#التخزين-الكائني-مقابل-الأقراص&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;كتلي (EBS)&lt;/th&gt;
&lt;th&gt;ملفات (EFS)&lt;/th&gt;
&lt;th&gt;كائني (S3)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يشبه&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قرص&lt;/td&gt;
&lt;td&gt;مجلد مشترك&lt;/td&gt;
&lt;td&gt;مفتاح وملف عبر API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يوصل له&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفر واحد عادةً&lt;/td&gt;
&lt;td&gt;عدة سيرفرات&lt;/td&gt;
&lt;td&gt;أي أحد مسموح له عبر HTTP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تعديل ملف&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جزء منه&lt;/td&gt;
&lt;td&gt;جزء منه&lt;/td&gt;
&lt;td&gt;تستبدل الكائن كامل&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الحجم&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحجزه&lt;/td&gt;
&lt;td&gt;يكبر لحاله&lt;/td&gt;
&lt;td&gt;بلا حد عملي&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;والنقطة اللي تفرق في التصميم: S3 مو قرص تركّبه وتشغّل منه قاعدة بيانات، بس هو مثالي لأي ملف تقراه أو تكتبه كامل.&lt;/p&gt;
&lt;h2 id=&quot;الحاويات-والكائنات&quot; tabindex=&quot;-1&quot;&gt;الحاويات والكائنات &lt;a class=&quot;heading-anchor&quot; href=&quot;#الحاويات-والكائنات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 250&quot; role=&quot;img&quot; aria-labelledby=&quot;s3-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;s3-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;330&quot; y=&quot;14&quot; width=&quot;290&quot; height=&quot;222&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;series-files-12345&lt;/text&gt;
&lt;text x=&quot;475&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;حاوية في Region واحدة&lt;/text&gt;
&lt;rect x=&quot;350&quot; y=&quot;78&quot; width=&quot;250&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;102&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;index.html&lt;/text&gt;
&lt;rect x=&quot;350&quot; y=&quot;126&quot; width=&quot;250&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;photos/2026/trip.jpg&lt;/text&gt;
&lt;rect x=&quot;350&quot; y=&quot;174&quot; width=&quot;250&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;475&quot; y=&quot;198&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;logs/app.log&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;250&quot; height=&quot;222&quot; rx=&quot;14&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;145&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;كائن واحد&lt;/text&gt;
&lt;text x=&quot;230&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;المفتاح&lt;/text&gt;
&lt;text x=&quot;110&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;photos/2026/trip.jpg&lt;/text&gt;
&lt;text x=&quot;230&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;البيانات&lt;/text&gt;
&lt;text x=&quot;110&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;الملف نفسه&lt;/text&gt;
&lt;text x=&quot;230&quot; y=&quot;146&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Metadata&lt;/text&gt;
&lt;text x=&quot;110&quot; y=&quot;146&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;النوع والحجم والتاريخ&lt;/text&gt;
&lt;text x=&quot;230&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الوسوم&lt;/text&gt;
&lt;text x=&quot;110&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;team=media&lt;/text&gt;
&lt;text x=&quot;230&quot; y=&quot;214&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الإصدار&lt;/text&gt;
&lt;text x=&quot;110&quot; y=&quot;214&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;3sL4kq...&amp;#x200E;&lt;/text&gt;
&lt;line x1=&quot;350&quot; y1=&quot;145&quot; x2=&quot;272&quot; y2=&quot;145&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#s3-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;s3-caption&quot;&gt;الحاوية فيها كائنات، وكل كائن له مفتاح وبيانات ومعلومات عنه ووسوم وإصدار.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;الحاوية (Bucket):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;تعيش في Region واحدة تختارها، مع إن S3 تظهر كخدمة عامة في الكونسول.&lt;/li&gt;
&lt;li&gt;اسمها لازم يكون فريد على مستوى كل حسابات AWS، بحروف صغيرة وأرقام وشرطات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;الكائن (Object):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;حجمه لين 50 TB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;المفتاح&lt;/strong&gt; هو مساره الكامل، مثل &lt;code&gt;photos/2026/trip.jpg&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ما فيه مجلدات حقيقية.&lt;/strong&gt; &lt;code&gt;photos/2026/&lt;/code&gt; جزء من الاسم، والكونسول يعرضه كمجلد فقط.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;مين-يقدر-يوصل&quot; tabindex=&quot;-1&quot;&gt;مين يقدر يوصل؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#مين-يقدر-يوصل&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;كل شي في S3 &lt;strong&gt;خاص افتراضياً&lt;/strong&gt;. ولما يطلب أحد كائن، تجمع AWS كل القواعد: يوصل لو فيه قاعدة تسمح له وما فيه قاعدة تمنعه.&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;سياسة IAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;المستخدم أو الدور&lt;/td&gt;
&lt;td&gt;صلاحيات موظفيك وخدماتك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bucket Policy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الحاوية&lt;/td&gt;
&lt;td&gt;الوصول العام، وحسابات ثانية، وفرض قواعد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Block Public Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الحاوية أو الحساب&lt;/td&gt;
&lt;td&gt;قفل أمان يمنع الوصول العام مهما كانت السياسات&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;مثال: سيرفر EC2 يقرأ من S3؟ أعطه &lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;دور IAM&lt;/a&gt;. وحساب ثاني يقرأ؟ Bucket Policy تسمح له. وهذي سياسة تخلي حاوية كاملة عامة للقراءة، وهذا اللي يحتاجه موقع ثابت:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;JSON&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Principal&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;s3:GetObject&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;arn:aws:s3:::my-site-bucket/*&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;خل Block Public Access مفعّل&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;هو مفعّل افتراضياً، وكثير من تسريبات البيانات في S3 جات من حاويات انفتحت بالغلط. طفّه فقط لحاوية مقصود إنها عامة. وبنكمل الأمان بالتفصيل في &lt;a href=&quot;/posts/aws-17-s3-security/&quot;&gt;الجزء السابع عشر&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الإصدارات-versioning&quot; tabindex=&quot;-1&quot;&gt;الإصدارات (Versioning) &lt;a class=&quot;heading-anchor&quot; href=&quot;#الإصدارات-versioning&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لما تفعّلها، أي استبدال لكائن ينشئ إصدار جديد بدل ما يمسح القديم:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الكتابة فوق ملف:&lt;/strong&gt; الإصدار القديم يبقى، وتقدر ترجع له.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الحذف:&lt;/strong&gt; يضيف علامة حذف (Delete Marker)، والبيانات تبقى. احذف العلامة ويرجع الملف.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الإيقاف:&lt;/strong&gt; ما يمسح الإصدارات الموجودة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;وكل إصدار تدفع عليه، فاربطها بـ&lt;a href=&quot;/posts/aws-16-s3-classes-lifecycle/&quot;&gt;قواعد دورة الحياة&lt;/a&gt; عشان تنظف القديم.&lt;/p&gt;
&lt;h2 id=&quot;النسخ-بين-الحاويات-replication&quot; tabindex=&quot;-1&quot;&gt;النسخ بين الحاويات (Replication) &lt;a class=&quot;heading-anchor&quot; href=&quot;#النسخ-بين-الحاويات-replication&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;S3 تنسخ الكائنات الجديدة تلقائياً لحاوية ثانية، حتى في حساب ثاني. ولازم الإصدارات تكون مفعّلة في الجهتين.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;بين Regions (CRR)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;التوافق مع الأنظمة، والقرب من المستخدمين، والتعافي من الكوارث&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;داخل Region (SRR)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جمع السجلات في مكان واحد، أو نسخ الإنتاج لبيئة تجربة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وانتبه: الكائنات القديمة ما تنتقل إلا بـ &lt;strong&gt;Batch Replication&lt;/strong&gt;، والنسخ ما ينتقل عبر سلسلة حاويات، والحذف النهائي لإصدار ما ينسخ، عشان تبقى محمي من الحذف الخبيث.&lt;/p&gt;
&lt;h2 id=&quot;استضافة-موقع-ثابت&quot; tabindex=&quot;-1&quot;&gt;استضافة موقع ثابت &lt;a class=&quot;heading-anchor&quot; href=&quot;#استضافة-موقع-ثابت&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;S3 تقدر تقدم موقع HTML كامل: تفعّل &lt;strong&gt;Static website hosting&lt;/strong&gt;، وتحدد &lt;code&gt;index.html&lt;/code&gt;، وتخلي الكائنات عامة بسياسة زي اللي فوق.&lt;/p&gt;
&lt;p&gt;بس رابط الموقع هذا يشتغل بـ HTTP فقط. والأفضل في الإنتاج: حاوية خاصة قدامها &lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;CloudFront&lt;/a&gt; مع OAC، فتحصل HTTPS وسرعة أعلى بدون ما تفتح الحاوية.&lt;/p&gt;
&lt;h2 id=&quot;التفاعل-مع-الأحداث&quot; tabindex=&quot;-1&quot;&gt;التفاعل مع الأحداث &lt;a class=&quot;heading-anchor&quot; href=&quot;#التفاعل-مع-الأحداث&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;S3 تقدر ترسل إشعار لما يصير شي، مثل رفع صورة. وترسله لـ SQS أو SNS أو Lambda مباشرة، أو لـ &lt;strong&gt;EventBridge&lt;/strong&gt; لو تبي فلترة متقدمة ووجهات أكثر. والمثال المشهور: كل صورة ترتفع، دالة Lambda تسوي لها نسخة مصغرة. وبنطبق هذا في &lt;a href=&quot;/posts/aws-22-serverless-design/&quot;&gt;الجزء الثاني والعشرين&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;الأداء&quot; tabindex=&quot;-1&quot;&gt;الأداء &lt;a class=&quot;heading-anchor&quot; href=&quot;#الأداء&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;S3 تتحمل على الأقل &lt;strong&gt;3,500 كتابة و5,500 قراءة في الثانية لكل بادئة&lt;/strong&gt; (Prefix)، فتوزيع المفاتيح على عدة بادئات يكبر السعة. وعندك أدوات للملفات الكبيرة والمسافات البعيدة:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Multipart Upload&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ترفع الملف أجزاء بالتوازي، ولو فشل جزء تعيده فقط. مفضل فوق 100 MB، ولازم فوق 5 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transfer Acceleration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الرفع يمر بأقرب موقع حافة ثم شبكة AWS، للمسافات البعيدة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Byte-Range Fetches&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحمّل جزء محدد من الملف، فتسرّع التحميل بالتوازي أو تجيب اللي تحتاجه فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;عملي-الإصدارات-تنقذ-ملف-محذوف&quot; tabindex=&quot;-1&quot;&gt;عملي: الإصدارات تنقذ ملف محذوف &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-الإصدارات-تنقذ-ملف-محذوف&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;من CloudShell، أنشئ حاوية باسم فريد وارفع صفحة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;BUCKET&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;series-files-&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;&lt;span class=&quot;token environment constant&quot;&gt;$RANDOM&lt;/span&gt;
aws s3 mb s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;

&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;h1&gt;Version 1&amp;lt;/h1&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; index.html
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; index.html s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/
aws s3 &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;جرّب توصل للملف من الإنترنت. بيرجع &lt;code&gt;403&lt;/code&gt;، لأن كل شي خاص:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; /dev/null &lt;span class=&quot;token parameter variable&quot;&gt;-w&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;%{http_code}&lt;span class=&quot;token entity&quot; title=&quot;&#92;n&quot;&gt;&#92;n&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  https://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;.s3.&lt;span class=&quot;token variable&quot;&gt;$AWS_REGION&lt;/span&gt;.amazonaws.com/index.html&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين فعّل الإصدارات، واكتب فوق الملف، ثم احذفه:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3api put-bucket-versioning &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --versioning-configuration &lt;span class=&quot;token assign-left variable&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Enabled

&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;h1&gt;Version 2&amp;lt;/h1&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; index.html
aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; index.html s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/

aws s3 &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/index.html
aws s3 &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الملف اختفى من القائمة. بس شوف وش صار فعلاً:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3api list-object-versions &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--prefix&lt;/span&gt; index.html &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;{Versions:Versions[].[VersionId,IsLatest],Markers:DeleteMarkers[].[VersionId,IsLatest]}&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الإصدارين موجودين، وفوقهم علامة حذف. احذف العلامة ويرجع الملف:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;MARKER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws s3api list-object-versions &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; $BUCKET &lt;span class=&quot;token parameter variable&quot;&gt;--prefix&lt;/span&gt; index.html &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;DeleteMarkers[0].VersionId&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws s3api delete-object &lt;span class=&quot;token parameter variable&quot;&gt;--bucket&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--key&lt;/span&gt; index.html --version-id &lt;span class=&quot;token variable&quot;&gt;$MARKER&lt;/span&gt;

aws s3 &lt;span class=&quot;token function&quot;&gt;cp&lt;/span&gt; s3://&lt;span class=&quot;token variable&quot;&gt;$BUCKET&lt;/span&gt;/index.html -&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بيطبع &lt;code&gt;Version 2&lt;/code&gt;. رجع الملف وكأن ما انحذف.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;الحاوية اللي فيها إصدارات ما تنحذف بأمر بسيط. لو بتكمل الأجزاء الجاية خلها. وإلا من صفحة S3 حددها واختر &lt;strong&gt;Empty&lt;/strong&gt; ثم &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;S3&lt;/strong&gt; تخزين كائني بلا حد عملي، وتدفع على اللي تخزنه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الحاوية&lt;/strong&gt; في Region واحدة باسم فريد، و&lt;strong&gt;المفتاح&lt;/strong&gt; مسار الكائن الكامل.&lt;/li&gt;
&lt;li&gt;كل شي &lt;strong&gt;خاص افتراضياً&lt;/strong&gt;، وخل Block Public Access مفعّل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الإصدارات&lt;/strong&gt; تحميك من الحذف والكتابة بالغلط، و&lt;strong&gt;النسخ&lt;/strong&gt; ينقل الكائنات لحاوية ثانية.&lt;/li&gt;
&lt;li&gt;لموقع ثابت في الإنتاج: حاوية خاصة مع CloudFront.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;وكالة تصميم تحفظ ملفات عملائها في S3. والأسبوع اللي فات حذف موظف ملفات بالغلط، وسكربت كتب فوق ملفات ثانية. والوكالة تبي تقدر ترجّع النوعين من الحين وطالع، &lt;strong&gt;بأقل جهد&lt;/strong&gt;. وش تفعّل؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Block Public Access&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Same-Region Replication&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Versioning&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Transfer Acceleration&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;مع الإصدارات، الحذف يضيف علامة بس، والكتابة فوق الملف تنشئ إصدار جديد، فتبقى البيانات القديمة وتقدر ترجع لها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يمنع الوصول العام، وما يسوي شي مع الحذف أو الكتابة فوق الملفات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يحتاج الإصدارات أصلاً، ويضيف حاوية ثانية تدفع عليها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يسرّع الرفع للمسافات الطويلة، وما يحتفظ بنسخ قديمة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1%D8%A7%D8%AA-versioning&quot;&gt;الإصدارات (Versioning)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html&quot;&gt;Retaining multiple versions of objects with S3 Versioning&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;شركة تحفظ موقعها التسويقي في S3. وتبيه يشتغل بـ HTTPS على نطاقها، والحاوية تبقى خاصة. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;حاوية خاصة، قدامها CloudFront وOAC&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Static website hosting، مع حاوية عامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Static website hosting، مع إبقاء Block Public Access شغال&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;سيرفر EC2 ينسخ الملفات من S3 ويقدمها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudFront يعطيك HTTPS على نطاقك، وOAC يخلي CloudFront وحده يقرأ من الحاوية، فتبقى مقفلة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; رابط الموقع يشتغل بـ HTTP فقط، ولازم تكون الحاوية عامة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; رابط الموقع يحتاج كائنات عامة، فمع القفل يطلع للزوار &lt;code&gt;403&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يضيف سيرفر تشغله وتحدّثه، لموقع ما يحتاج سيرفر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D9%88%D9%82%D8%B9-%D8%AB%D8%A7%D8%A8%D8%AA&quot;&gt;استضافة موقع ثابت&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteEndpoints.html&quot;&gt;Website endpoints&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;استوديو أفلام يرفع ملفات فيديو حجمها 40 جيجابايت إلى S3 عبر اتصال غير مستقر. والرفع يفشل كثير قرب النهاية ويبدأ من جديد. وش يحل هذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Byte-range fetches&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Transfer Acceleration لحاله&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Versioning على الحاوية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Multipart upload&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Multipart upload يرفع الملف أجزاء بالتوازي، ولو فشل جزء تعيده هو بس. وهو كمان إلزامي لأي ملف فوق 5 جيجابايت.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذي لتحميل جزء من ملف، مو للرفع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يختصر الطريق للمسافات الطويلة، بس الرفع الفاشل لسا يبدأ من جديد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يحتفظ بالإصدارات القديمة، وما يساعد الرفع يكتمل.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%A3%D8%AF%D8%A7%D8%A1&quot;&gt;الأداء&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html&quot;&gt;Uploading and copying objects using multipart upload&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;جهة تنظيمية تطلب من شركة تحتفظ بنسخة من حاوية سجلاتها في Region ثانية، بما فيها الملفات الموجودة حالياً. والإصدارات شغالة في الطرفين. وش تجهز؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Cross-Region Replication لحاله&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Cross-Region Replication، مع Batch Replication للملفات الموجودة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Same-Region Replication، مع Batch Replication&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;قاعدة Lifecycle تنقل الملفات إلى الـ Region الثانية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;قاعدة النسخ تنسخ الكائنات الجديدة فقط، فالموجودة تحتاج Batch Replication. والاثنين مع بعض يعطونك نسخة كاملة في الـ Region الثانية تبقى محدثة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا ينسخ الكائنات اللي انكتبت بعد القاعدة فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبقي النسخة في نفس الـ Region، وهذا ما يحقق المطلوب.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; قواعد Lifecycle تغير فئة الملف أو تحذفه، وما تنقله بين Regions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-replication&quot;&gt;النسخ بين الحاويات (Replication)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html&quot;&gt;Replicating objects within and across Regions&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;سيرفر EC2 لازم يقرأ من حاوية خاصة، وفريق تحليل في حساب AWS ثاني لازم يقرأ منها كمان. وBlock Public Access لازم يبقى شغال. أي &lt;strong&gt;خطوتين&lt;/strong&gt; تناسب؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إعطاء السيرفر دور IAM بصلاحية قراءة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;حفظ مفاتيح وصول مستخدم في ملف على السيرفر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;جعل الحاوية مقروءة للعامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إضافة سياسة حاوية تسمح للحساب الثاني&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;نسخ الكائنات إلى قرص EBS يتشاركه الفريق&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الدور يعطي السيرفر صلاحيات مؤقتة بدون مفاتيح تحفظها، وسياسة الحاوية هي طريقتك تدخّل فيها حساب ثاني. وما فيهم شي يخلي البيانات عامة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; المفاتيح في ملف ممكن تتسرب، والدور يغنيك عنها تماماً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يكشف البيانات للكل، والقفل بيمنعه أصلاً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; هذا يزيد نسخ لازم تديرها، والقرص مو طريقة حساب ثاني يقرأ بياناتك.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D9%8A%D9%86-%D9%8A%D9%82%D8%AF%D8%B1-%D9%8A%D9%88%D8%B5%D9%84&quot;&gt;مين يقدر يوصل؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html&quot;&gt;Example 2: Bucket owner granting cross-account bucket permissions&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html&quot;&gt;Use an IAM role to grant permissions to applications running on Amazon EC2 instances&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بس هل كل ملف يستاهل نفس السعر؟ ملف ما ينفتح من سنتين لازم ما يكلفك مثل صورة تنطلب كل ثانية. في &lt;a href=&quot;/posts/aws-16-s3-classes-lifecycle/&quot;&gt;&lt;strong&gt;الجزء السادس عشر&lt;/strong&gt;&lt;/a&gt; نوفر كثير بفئات التخزين ودورة الحياة.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>VPC: ربط الشبكات ببعض</title>
    <link href="https://blog.sultanops.com/posts/aws-14-vpc-connectivity/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-14-vpc-connectivity/</id>
    <summary>كيف تربط شبكات VPC ببعض عبر Peering وTransit Gateway، وتوصل لخدمات AWS بشكل خاص عبر Endpoints، وتربط مكتبك بـ VPN أو Direct Connect، وتتحكم في تكلفة الشبكة، مع تجربة عملية لأكثر اتصالين فايدة.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-13-vpc/&quot;&gt;الجزء الثالث عشر&lt;/a&gt; بنينا شبكة معزولة. بس التطبيقات الحقيقية نادراً تبقى لحالها: عندك VPC ثانية لفريق ثاني، وسيرفرات تحتاج S3، ومكتب يحتاج يوصل لقاعدة البيانات.&lt;/p&gt;
&lt;p&gt;هذي خريطة الجزء، وارجع لها لما تحتار:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;شبكتين VPC يتكلمون&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VPC Peering&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;شبكة خاصة توصل لـ S3 أو DynamoDB بدون NAT&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Gateway Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;توصل لخدمات AWS ثانية أو خدمة شريك بشكل خاص&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Interface Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;مكتبك يوصل لـ AWS بسرعة عبر الإنترنت&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Site-to-Site VPN&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;أجهزة الموظفين توصل للشبكة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Client VPN&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;خط ثابت وكبير بين مكتبك وAWS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Direct Connect&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;شبكات ومكاتب كثيرة&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Transit Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;vpc-peering&quot; tabindex=&quot;-1&quot;&gt;VPC Peering &lt;a class=&quot;heading-anchor&quot; href=&quot;#vpc-peering&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Peering&lt;/strong&gt; يربط شبكتين VPC مباشرة، فكأنهم شبكة وحدة. وتربط حتى بين حسابات مختلفة أو Regions مختلفة. وقواعده:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;النطاقات ما تتداخل.&lt;/strong&gt; هذا اللي نبهناك له في الجزء السابق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ما ينتقل.&lt;/strong&gt; لو A مربوطة بـ B، وB مربوطة بـ C، فـ A ما توصل لـ C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تحتاج طريق في الجهتين.&lt;/strong&gt; تضيفه في جدول توجيه كل شبكة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;وما له رسم بالساعة، وتدفع فقط على نقل البيانات.&lt;/p&gt;
&lt;h2 id=&quot;vpc-endpoints-خدمات-aws-بدون-إنترنت&quot; tabindex=&quot;-1&quot;&gt;VPC Endpoints: خدمات AWS بدون إنترنت &lt;a class=&quot;heading-anchor&quot; href=&quot;#vpc-endpoints-خدمات-aws-بدون-إنترنت&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;افتراضياً، طلب سيرفرك الخاص لخدمة S3 يطلع عبر NAT، وتدفع على كل جيجابايت، مع إن الوجهة داخل AWS أصلاً. &lt;strong&gt;Endpoints&lt;/strong&gt; تعطيك طريق خاص ومباشر:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 210&quot; role=&quot;img&quot; aria-labelledby=&quot;endpoint-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;endpoint-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;470&quot; y=&quot;60&quot; width=&quot;150&quot; height=&quot;90&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;545&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;سيرفر خاص&lt;/text&gt;
&lt;text x=&quot;545&quot; y=&quot;122&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;في شبكة خاصة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;60&quot; width=&quot;150&quot; height=&quot;90&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;110&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;S3&lt;/text&gt;
&lt;rect x=&quot;245&quot; y=&quot;10&quot; width=&quot;150&quot; height=&quot;52&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-dasharray=&quot;5 5&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;32&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;NAT ثم الإنترنت&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;52&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مدفوع لكل جيجابايت&lt;/text&gt;
&lt;rect x=&quot;245&quot; y=&quot;148&quot; width=&quot;150&quot; height=&quot;52&quot; rx=&quot;8&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;170&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Gateway Endpoint&lt;/text&gt;
&lt;text x=&quot;320&quot; y=&quot;190&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;مجاني&lt;/text&gt;
&lt;line x1=&quot;470&quot; y1=&quot;85&quot; x2=&quot;397&quot; y2=&quot;40&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;4 4&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;40&quot; x2=&quot;170&quot; y2=&quot;85&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;4 4&quot;/&gt;
&lt;line x1=&quot;470&quot; y1=&quot;125&quot; x2=&quot;397&quot; y2=&quot;170&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#endpoint-arrow)&quot;/&gt;
&lt;line x1=&quot;245&quot; y1=&quot;170&quot; x2=&quot;172&quot; y2=&quot;125&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#endpoint-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;endpoint-caption&quot;&gt;بدل الطريق المدفوع عبر NAT، يوصل السيرفر الخاص إلى S3 عبر Gateway Endpoint المجاني، بدون ما يطلع للإنترنت.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Gateway Endpoint&lt;/th&gt;
&lt;th&gt;Interface Endpoint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الخدمات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;S3 وDynamoDB فقط&lt;/td&gt;
&lt;td&gt;أغلب خدمات AWS، وخدمات شركاء&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كيف يشتغل&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;طريق في جدول التوجيه&lt;/td&gt;
&lt;td&gt;واجهة شبكة بعنوان خاص في شبكتك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التكلفة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;td&gt;بالساعة لكل منطقة، ولكل جيجابايت&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;من مكتبك&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ما يوصل&lt;/td&gt;
&lt;td&gt;يوصل عبر VPN أو Direct Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-tip&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-bulb&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.45 1 1.15 1 1.9V16h5v-.2c0-.75.4-1.45 1-1.9A6 6 0 0 0 12 3z&quot;/&gt;&lt;/svg&gt;&lt;span&gt;أسهل توفير في الفاتورة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;فعّل Gateway Endpoint لـ S3 في كل VPC. مجاني، ويشيل زيارات S3 من حساب NAT.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;و&lt;strong&gt;Interface Endpoint&lt;/strong&gt; مبني على &lt;strong&gt;PrivateLink&lt;/strong&gt;، وهو يخليك كمان تقدم خدمتك لشبكات ثانية عبر NLB، بدون Peering وحتى لو نطاقاتهم متداخلة.&lt;/p&gt;
&lt;h2 id=&quot;ربط-مكتبك-site-to-site-vpn&quot; tabindex=&quot;-1&quot;&gt;ربط مكتبك: Site-to-Site VPN &lt;a class=&quot;heading-anchor&quot; href=&quot;#ربط-مكتبك-site-to-site-vpn&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Site-to-Site VPN&lt;/strong&gt; يربط شبكة مكتبك بالـ VPC عبر الإنترنت بنفق مشفّر، وتجهزه في وقت قصير. وله ثلاث قطع:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Customer Gateway:&lt;/strong&gt; يمثل جهازك في المكتب وعنوانه العام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Virtual Private Gateway:&lt;/strong&gt; بوابة VPN من جهة AWS، تركّبها على الـ VPC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VPN Connection:&lt;/strong&gt; الاتصال نفسه، ويجي بنفقين عشان التوفر.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;وبعدها فعّل &lt;strong&gt;Route Propagation&lt;/strong&gt; في جدول التوجيه عشان تعرف الـ VPC طرق المكتب. وكل نفق يعطيك لين 1.25 جيجابت، ولين 5 مع Transit Gateway.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VPN CloudHub:&lt;/strong&gt; يربط عدة مكاتب ببعض عبر نفس البوابة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client VPN:&lt;/strong&gt; لأجهزة الموظفين بدل المكاتب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;وإذا تبي VPN تتحكم فيه بالكامل على سيرفرك، شوف مقال &lt;a href=&quot;/posts/wireguard/&quot;&gt;WireGuard&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;direct-connect-خط-خاص&quot; tabindex=&quot;-1&quot;&gt;Direct Connect: خط خاص &lt;a class=&quot;heading-anchor&quot; href=&quot;#direct-connect-خط-خاص&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Direct Connect&lt;/strong&gt; خط فعلي خاص بين مكانك وAWS عبر موقع Direct Connect، فما يمر بالإنترنت العام. فسرعته ثابتة، ونقل البيانات الخارجة أرخص.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dedicated:&lt;/strong&gt; منفذ خاص فيك من 1 إلى 400 جيجابت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosted:&lt;/strong&gt; عن طريق شريك، بسرعات تبدأ أقل بكثير.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct Connect Gateway:&lt;/strong&gt; يوصلك بشبكات VPC في عدة Regions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;انتبه لثلاث نقاط: &lt;strong&gt;التجهيز ياخذ أسابيع&lt;/strong&gt; وأحياناً أشهر، و&lt;strong&gt;الخط مو مشفّر تلقائياً&lt;/strong&gt;، فاستخدم MACsec أو VPN فوقه، و&lt;strong&gt;الخط الواحد نقطة فشل واحدة&lt;/strong&gt;، فلأهم الأنظمة خل خطين في موقعين، أو VPN احتياطي.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Site-to-Site VPN&lt;/th&gt;
&lt;th&gt;Direct Connect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الطريق&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الإنترنت، مشفّر&lt;/td&gt;
&lt;td&gt;خط خاص&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التجهيز&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;دقايق أو ساعات&lt;/td&gt;
&lt;td&gt;أسابيع أو أشهر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السرعة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.25 جيجابت للنفق، و5 مع Transit Gateway&lt;/td&gt;
&lt;td&gt;من 1 إلى 400 جيجابت&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الأداء&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يتغير مع الإنترنت&lt;/td&gt;
&lt;td&gt;ثابت&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التكلفة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قليلة&lt;/td&gt;
&lt;td&gt;أعلى في البداية، وأرخص لنقل كبير&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;transit-gateway-محور-واحد&quot; tabindex=&quot;-1&quot;&gt;Transit Gateway: محور واحد &lt;a class=&quot;heading-anchor&quot; href=&quot;#transit-gateway-محور-واحد&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لما تكثر الشبكات، يصير Peering متعب، لأنه ما ينتقل، فتحتاج وصلة لكل زوج:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 250&quot; role=&quot;img&quot; aria-labelledby=&quot;tgw-caption&quot;&gt;
&lt;text x=&quot;480&quot; y=&quot;28&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Peering: عشر وصلات&lt;/text&gt;
&lt;g stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;&gt;
&lt;line x1=&quot;480&quot; y1=&quot;65&quot; x2=&quot;561&quot; y2=&quot;124&quot;/&gt;
&lt;line x1=&quot;480&quot; y1=&quot;65&quot; x2=&quot;530&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;480&quot; y1=&quot;65&quot; x2=&quot;430&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;480&quot; y1=&quot;65&quot; x2=&quot;399&quot; y2=&quot;124&quot;/&gt;
&lt;line x1=&quot;561&quot; y1=&quot;124&quot; x2=&quot;530&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;561&quot; y1=&quot;124&quot; x2=&quot;430&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;561&quot; y1=&quot;124&quot; x2=&quot;399&quot; y2=&quot;124&quot;/&gt;
&lt;line x1=&quot;530&quot; y1=&quot;219&quot; x2=&quot;430&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;530&quot; y1=&quot;219&quot; x2=&quot;399&quot; y2=&quot;124&quot;/&gt;
&lt;line x1=&quot;430&quot; y1=&quot;219&quot; x2=&quot;399&quot; y2=&quot;124&quot;/&gt;
&lt;/g&gt;
&lt;rect x=&quot;454&quot; y=&quot;50&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;480&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;535&quot; y=&quot;109&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;561&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;504&quot; y=&quot;204&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;530&quot; y=&quot;224&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;404&quot; y=&quot;204&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;430&quot; y=&quot;224&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;373&quot; y=&quot;109&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;399&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;text x=&quot;160&quot; y=&quot;28&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Transit Gateway: خمس وصلات&lt;/text&gt;
&lt;g stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot;&gt;
&lt;line x1=&quot;160&quot; y1=&quot;150&quot; x2=&quot;160&quot; y2=&quot;65&quot;/&gt;
&lt;line x1=&quot;160&quot; y1=&quot;150&quot; x2=&quot;241&quot; y2=&quot;124&quot;/&gt;
&lt;line x1=&quot;160&quot; y1=&quot;150&quot; x2=&quot;210&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;160&quot; y1=&quot;150&quot; x2=&quot;110&quot; y2=&quot;219&quot;/&gt;
&lt;line x1=&quot;160&quot; y1=&quot;150&quot; x2=&quot;79&quot; y2=&quot;124&quot;/&gt;
&lt;/g&gt;
&lt;rect x=&quot;134&quot; y=&quot;50&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;160&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;215&quot; y=&quot;109&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;184&quot; y=&quot;204&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;210&quot; y=&quot;224&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;84&quot; y=&quot;204&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;110&quot; y=&quot;224&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;53&quot; y=&quot;109&quot; width=&quot;52&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;79&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;VPC&lt;/text&gt;
&lt;rect x=&quot;112&quot; y=&quot;130&quot; width=&quot;96&quot; height=&quot;40&quot; rx=&quot;8&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;160&quot; y=&quot;155&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Transit GW&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;tgw-caption&quot;&gt;خمس شبكات تحتاج عشر وصلات Peering، أو خمس وصلات فقط لمحور Transit Gateway واحد.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Transit Gateway&lt;/strong&gt; محور مركزي تربط فيه الشبكات، وكل وحدة توصل لغيرها عبره:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;يربط كل شي:&lt;/strong&gt; شبكات VPC، واتصالات VPN، وDirect Connect، وTransit Gateway في Regions ثانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;جداول توجيه خاصة فيه:&lt;/strong&gt; تحدد مين يكلم مين، مثلاً تفصل الإنتاج عن التطوير.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;بين الحسابات:&lt;/strong&gt; تشاركه مع حسابات ثانية عبر خدمة RAM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سرعة VPN أعلى:&lt;/strong&gt; توزّع الزيارات على عدة أنفاق.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;وتدفع بالساعة على كل وصلة، وعلى البيانات. فلشبكتين أو ثلاث، Peering أبسط وأرخص.&lt;/p&gt;
&lt;h2 id=&quot;تكلفة-الشبكة&quot; tabindex=&quot;-1&quot;&gt;تكلفة الشبكة &lt;a class=&quot;heading-anchor&quot; href=&quot;#تكلفة-الشبكة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;نقل البيانات أكثر بند يفاجئ الناس. وهذي أسعار تقريبية في مناطق أمريكا، فراجع منطقتك:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;داخل لـ AWS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;داخل نفس منطقة التوفر بعنوان خاص&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;بين مناطق التوفر&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حوالي 0.01 دولار في كل اتجاه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;بين Regions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حوالي 0.02 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;خارج للإنترنت&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حوالي 0.09 دولار، ويقل مع الحجم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;عبر NAT Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حوالي 0.045 دولار زيادة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;S3 عبر Gateway Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجاني&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وكيف توفر:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;استخدم &lt;strong&gt;العناوين الخاصة&lt;/strong&gt; بين السيرفرات، لا العامة.&lt;/li&gt;
&lt;li&gt;خل الخدمات اللي تتكلم كثير في &lt;strong&gt;نفس منطقة التوفر&lt;/strong&gt;، لو يسمح تصميم التوفر عندك.&lt;/li&gt;
&lt;li&gt;فعّل &lt;strong&gt;Gateway Endpoint&lt;/strong&gt; لـ S3.&lt;/li&gt;
&lt;li&gt;قدّم المحتوى عبر &lt;strong&gt;CloudFront&lt;/strong&gt;، لأن النقل من مصدرك إليه مجاني.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;طبقات-الحماية&quot; tabindex=&quot;-1&quot;&gt;طبقات الحماية &lt;a class=&quot;heading-anchor&quot; href=&quot;#طبقات-الحماية&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الشبكة الفرعية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NACL&lt;/td&gt;
&lt;td&gt;عناوين تبي تمنعها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;السيرفر&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مجموعة الأمان&lt;/td&gt;
&lt;td&gt;أي منفذ ومصدر ما سمحت له&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تطبيق الويب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WAF&lt;/td&gt;
&lt;td&gt;هجمات الويب مثل SQL Injection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الهجمات الكبيرة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shield&lt;/td&gt;
&lt;td&gt;DDoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الـ VPC كلها&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Network Firewall&lt;/td&gt;
&lt;td&gt;فحص الزيارات والنطاقات عند الحدود&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وعن &lt;strong&gt;IPv6&lt;/strong&gt;: تقدر تضيفه للـ VPC، بس كل عناوينه عامة. فلو تبي السيرفرات تطلع بدون دخول، استخدم &lt;strong&gt;Egress-only Internet Gateway&lt;/strong&gt;، وهو مثل NAT لـ IPv6.&lt;/p&gt;
&lt;h2 id=&quot;عملي-endpoint-وpeering&quot; tabindex=&quot;-1&quot;&gt;عملي: Endpoint وPeering &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-endpoint-وpeering&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنكمل على شبكة &lt;a href=&quot;/posts/aws-13-vpc/&quot;&gt;الجزء الثالث عشر&lt;/a&gt;، بعد حذف NAT Gateway. فـ &lt;code&gt;private-server&lt;/code&gt; ما عنده طريق للإنترنت. والأوامر تستخدم المتغيرات &lt;code&gt;VPC&lt;/code&gt; و&lt;code&gt;RT_PRIVATE&lt;/code&gt;، ولو انتهت جلسة CloudShell حددها بيدك من صفحة VPC.&lt;/p&gt;
&lt;h3 id=&quot;gateway-endpoint&quot; tabindex=&quot;-1&quot;&gt;Gateway Endpoint &lt;a class=&quot;heading-anchor&quot; href=&quot;#gateway-endpoint&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;أعطِ &lt;code&gt;private-server&lt;/code&gt; دور IAM فيه &lt;code&gt;AmazonS3ReadOnlyAccess&lt;/code&gt;، مثل ما شرحنا في &lt;a href=&quot;/posts/aws-02-iam/&quot;&gt;الجزء الثاني&lt;/a&gt;. وعلى السيرفر جرّب:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws s3 &lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt; --cli-connect-timeout &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;ينتهي الوقت بعد عدة محاولات، لأن ما فيه طريق لـ S3. الحين من CloudShell أضف Endpoint:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ec2 create-vpc-endpoint --vpc-id &lt;span class=&quot;token variable&quot;&gt;$VPC&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --service-name com.amazonaws.&lt;span class=&quot;token variable&quot;&gt;$AWS_REGION&lt;/span&gt;.s3 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --route-table-ids &lt;span class=&quot;token variable&quot;&gt;$RT_PRIVATE&lt;/span&gt;

aws ec2 describe-route-tables --route-table-ids &lt;span class=&quot;token variable&quot;&gt;$RT_PRIVATE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;RouteTables[0].Routes[].[DestinationCidrBlock,DestinationPrefixListId,GatewayId]&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف طريق جديد يبدأ بـ &lt;code&gt;pl-&lt;/code&gt; ويشير لـ &lt;code&gt;vpce-&lt;/code&gt;. وأعد أمر &lt;code&gt;aws s3 ls&lt;/code&gt; على السيرفر، وبيرجع فوراً بقائمة الحاويات، أو فاضي لو ما عندك حاويات، بدون أي إنترنت.&lt;/p&gt;
&lt;h3 id=&quot;vpc-peering-1&quot; tabindex=&quot;-1&quot;&gt;VPC Peering &lt;a class=&quot;heading-anchor&quot; href=&quot;#vpc-peering-1&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;الحين نربط هذي الشبكة بالافتراضية، اللي فيها &lt;code&gt;web-1&lt;/code&gt; من &lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;الجزء الثالث&lt;/a&gt;. هات عنوانه الخاص:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ec2 describe-instances &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Name=tag:Name,Values=web-1&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Name=instance-state-name,Values=running&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Reservations[0].Instances[0].PrivateIpAddress&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;من &lt;code&gt;private-server&lt;/code&gt; جرّب &lt;code&gt;curl -m 5 http://WEB-PRIVATE-IP&lt;/code&gt;، وبينتهي الوقت. الحين أنشئ الربط واقبله:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;DEFAULT_VPC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-vpcs &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;isDefault,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;true &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Vpcs[0].VpcId&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;PEER&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-vpc-peering-connection &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --vpc-id $VPC --peer-vpc-id $DEFAULT_VPC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; VpcPeeringConnection.VpcPeeringConnectionId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id &lt;span class=&quot;token variable&quot;&gt;$PEER&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الربط وحده ما يكفي، فأضف الطريق في الجهتين:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ec2 create-route --route-table-id &lt;span class=&quot;token variable&quot;&gt;$RT_PRIVATE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --destination-cidr-block &lt;span class=&quot;token number&quot;&gt;172.31&lt;/span&gt;.0.0/16 --vpc-peering-connection-id &lt;span class=&quot;token variable&quot;&gt;$PEER&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;DEFAULT_RT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-route-tables &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;vpc-id,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;$DEFAULT_VPC &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;association.main,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;true &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;RouteTables[0].RouteTableId&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws ec2 create-route --route-table-id &lt;span class=&quot;token variable&quot;&gt;$DEFAULT_RT&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --destination-cidr-block &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.0.0/16 --vpc-peering-connection-id &lt;span class=&quot;token variable&quot;&gt;$PEER&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أعد &lt;code&gt;curl&lt;/code&gt; من &lt;code&gt;private-server&lt;/code&gt;، وبترجع صفحة &lt;code&gt;web-1&lt;/code&gt; عبر العنوان الخاص.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;احذف طريق الشبكة الافتراضية والربط بالأوامر تحت. ثم من صفحاتها احذف السيرفرين ونقطة الدخول والدور، وبعدها حدد &lt;code&gt;series-vpc&lt;/code&gt; واختر &lt;strong&gt;Actions&lt;/strong&gt; ثم &lt;strong&gt;Delete VPC&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws ec2 delete-route --route-table-id &lt;span class=&quot;token variable&quot;&gt;$DEFAULT_RT&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --destination-cidr-block &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.0.0/16

aws ec2 delete-vpc-peering-connection --vpc-peering-connection-id &lt;span class=&quot;token variable&quot;&gt;$PEER&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Peering&lt;/strong&gt; لشبكتين، وما ينتقل، و&lt;strong&gt;Transit Gateway&lt;/strong&gt; لما تكثر الشبكات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gateway Endpoint&lt;/strong&gt; مجاني لـ S3 وDynamoDB، و&lt;strong&gt;Interface Endpoint&lt;/strong&gt; لباقي الخدمات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VPN&lt;/strong&gt; سريع التجهيز عبر الإنترنت، و&lt;strong&gt;Direct Connect&lt;/strong&gt; خط خاص ياخذ وقت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;نقل البيانات&lt;/strong&gt; من أكبر المفاجآت في الفاتورة، فخطط له من البداية.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;تطبيق لمعالجة الطلبات في شبكة خاصة يكتب كثير على DynamoDB، والفريق لقى إن أغلب فاتورة NAT Gateway جاية من هذي الزيارات. وش يقلل هذي التكلفة &lt;strong&gt;بأقل جهد&lt;/strong&gt;؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;نقل السيرفرات إلى شبكة عامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;اتصال Peering مع VPC حق DynamoDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Gateway Endpoint لـ DynamoDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;خط Direct Connect إلى الـ Region&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ Gateway Endpoint يضيف مسار إلى DynamoDB يتخطى NAT، بدون رسوم إضافية وبدون تغيير في الكود.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يكشف سيرفرات لازم تبقى خاصة، والعناوين العامة مدفوعة كمان.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; DynamoDB مو VPC تقدر تربطها بـ Peering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يربط موقعك أنت بـ AWS، وما له علاقة بالزيارات داخل الـ VPC.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#vpc-endpoints-%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-aws-%D8%A8%D8%AF%D9%88%D9%86-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA&quot;&gt;VPC Endpoints: خدمات AWS بدون إنترنت&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-ddb.html&quot;&gt;Gateway endpoints for Amazon DynamoDB&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;فريق مدفوعات يشغّل واجهة API داخلية خلف Network Load Balancer. وأربعين VPC ثانية تحتاج تتصل فيها، وبعض نطاقاتهم تتداخل مع نطاقها، وما لازم يوصلون لأي شي ثاني في شبكتها. وش يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;VPC Peering مع كل وحدة من الأربعين&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;PrivateLink، مع Interface Endpoint في كل VPC&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Gateway Endpoint في كل VPC&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;عنوان عام للموزّع، مع قواعد جدار حماية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;مع PrivateLink، كل طرف ياخذ واجهة خاصة في شبكته الفرعية توصل لهذي الخدمة فقط، فما يسبب تداخل النطاقات أي تعارض.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Peering ما يشتغل مع النطاقات المتداخلة، ويربط الشبكات بالكامل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الـ Gateway Endpoint لـ S3 وDynamoDB فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يحط API داخلية على الإنترنت.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#vpc-endpoints-%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-aws-%D8%A8%D8%AF%D9%88%D9%86-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA&quot;&gt;VPC Endpoints: خدمات AWS بدون إنترنت&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/aws-privatelink.html&quot;&gt;AWS PrivateLink&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;شركة صغيرة لازم تربط شبكة مكتبها بـ VPC قبل الأسبوع الجاي. والزيارات قليلة، والميزانية محدودة، والبيانات لازم تكون مشفرة. أي خيار يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Site-to-Site VPN&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Direct Connect، بمنفذ Dedicated&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Client VPN&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;VPC Peering&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Site-to-Site VPN يمر عبر الإنترنت في نفق مشفر، وتقدر تجهزه بسرعة وبتكلفة قليلة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; تجهيزه ياخذ أسابيع أو أشهر، وتكلفته أعلى في البداية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا لأجهزة الموظفين، مو لشبكة مكتب كاملة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يربط شبكات VPC ببعض، وما يوصل لمكتب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B1%D8%A8%D8%B7-%D9%85%D9%83%D8%AA%D8%A8%D9%83-site-to-site-vpn&quot;&gt;ربط مكتبك: Site-to-Site VPN&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html&quot;&gt;What is AWS Site-to-Site VPN?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;شركة تكبر إلى 30 VPC على عدة حسابات، مع ثلاث مكاتب متصلة بـ VPN. وتبي كل الشبكات تتصل في مكان واحد، مع فصل الإنتاج عن التطوير. وش يناسب &lt;strong&gt;بأقل عبء تشغيلي&lt;/strong&gt;؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;VPC Peering بين كل زوج من الشبكات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;VPN CloudHub&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;VPC مشتركة وحدة مربوطة بالباقي بـ Peering&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Transit Gateway، بجداول توجيه منفصلة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Transit Gateway محور مركزي لشبكات VPC والـ VPN، وجداول توجيهه تحدد مين يتكلم مع مين، وينشارك بين الحسابات عبر RAM.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; ثلاثين شبكة تحتاج 435 اتصال، كل واحد بمساراته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يربط المكاتب ببعض عبر بوابة وحدة، مو مجموعة شبكات VPC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; Peering ما ينتقل، فالباقي ما يوصلون لبعض من خلالها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#transit-gateway-%D9%85%D8%AD%D9%88%D8%B1-%D9%88%D8%A7%D8%AD%D8%AF&quot;&gt;Transit Gateway: محور واحد&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html&quot;&gt;What is AWS Transit Gateway for Amazon VPC?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;بنك يوصل لـ AWS عبر خط Direct Connect واحد بسرعة 10 جيجابت. والتدقيق لقى مشكلتين: الخط نقطة فشل واحدة، وبياناته مو مشفرة. أي &lt;strong&gt;إجراءين&lt;/strong&gt; يعالجون هذا؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إضافة اتصال ثاني في موقع Direct Connect ثاني&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;ترقية الخط إلى 100 جيجابت&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تفعيل MACsec على الخط، أو تشغيل VPN فوقه&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إضافة Gateway Endpoint إلى الـ VPC&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;الانتقال إلى اتصال Hosted عن طريق شريك&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الخط الثاني في موقع ثاني يبقي البنك متصل لو تعطل خط أو موقع كامل. وMACsec أو VPN فوقه يضيف التشفير اللي ما يجي مع الخط افتراضياً.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الخط الأسرع لسا خط واحد، ولسا مو مشفر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يوصل لـ S3 وDynamoDB من داخل VPC، وما له علاقة بالخط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; هذا لسا خط واحد، والشريك ما يشفره لك.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#direct-connect-%D8%AE%D8%B7-%D8%AE%D8%A7%D8%B5&quot;&gt;Direct Connect: خط خاص&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/directconnect/latest/UserGuide/encryption-in-transit.html&quot;&gt;Encryption in AWS Direct Connect&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/directconnect/latest/UserGuide/resiliency_toolkit.html&quot;&gt;AWS Direct Connect Resiliency Toolkit&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بهذا نكمل قسم الشبكات. الآن تعرف طريق الزائر من اسم موقعك لين بياناته، وبقي لنا مكان يتخزن فيه أي شي بأي حجم. هذا موضوع القسم الجاي، ونبدأه في &lt;a href=&quot;/posts/aws-15-s3-basics/&quot;&gt;&lt;strong&gt;الجزء الخامس عشر&lt;/strong&gt;&lt;/a&gt; مع أساسيات S3.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>VPC: شبكتك الخاصة</title>
    <link href="https://blog.sultanops.com/posts/aws-13-vpc/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-13-vpc/</id>
    <summary>افتح الشبكة اللي كانت سيرفراتك تشتغل فيها، وافهم نطاقات العناوين والشبكات الفرعية وبوابات الإنترنت وNAT وجداول التوجيه والوصول الآمن وجداري الحماية وسجلات الزيارات، ثم ابنِ VPC من الصفر.</summary>
    <content type="html">&lt;p&gt;كل سيرفر شغّلناه في هذي السلسلة كان داخل شبكة ما بنيتها: الـ VPC الافتراضية اللي تنشئها AWS في كل Region. وهي تكفي للتجارب، بس التطبيق الحقيقي يحتاج تصميم تكون فيه قاعدة البيانات مخفية، ولكل طبقة مكانها.&lt;/p&gt;
&lt;h2 id=&quot;وش-هي-vpc&quot; tabindex=&quot;-1&quot;&gt;وش هي VPC؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وش-هي-vpc&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;VPC&lt;/strong&gt; (Virtual Private Cloud) شبكتك الخاصة داخل Region واحدة. تمتد على كل مناطق التوفر فيها، وما يدخلها أو يطلع منها شي إلا اللي تسمح له. هذا التصميم الشائع:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 356&quot; role=&quot;img&quot; aria-labelledby=&quot;vpc-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;vpc-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;14&quot; y=&quot;28&quot; width=&quot;612&quot; height=&quot;320&quot; rx=&quot;14&quot; fill=&quot;none&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot;/&gt;
&lt;text x=&quot;530&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;VPC 10.0.0.0/16&lt;/text&gt;
&lt;rect x=&quot;330&quot; y=&quot;66&quot; width=&quot;280&quot; height=&quot;268&quot; rx=&quot;12&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;470&quot; y=&quot;86&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقة توفر A&lt;/text&gt;
&lt;rect x=&quot;344&quot; y=&quot;96&quot; width=&quot;252&quot; height=&quot;88&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;523&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;شبكة عامة&lt;/text&gt;
&lt;text x=&quot;523&quot; y=&quot;152&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;10.0.1.0/24&lt;/text&gt;
&lt;rect x=&quot;354&quot; y=&quot;116&quot; width=&quot;96&quot; height=&quot;48&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;402&quot; y=&quot;145&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;NAT&lt;/text&gt;
&lt;rect x=&quot;344&quot; y=&quot;214&quot; width=&quot;252&quot; height=&quot;104&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;523&quot; y=&quot;258&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;شبكة خاصة&lt;/text&gt;
&lt;text x=&quot;523&quot; y=&quot;280&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;10.0.11.0/24&lt;/text&gt;
&lt;rect x=&quot;354&quot; y=&quot;240&quot; width=&quot;96&quot; height=&quot;52&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;402&quot; y=&quot;271&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;سيرفرات&lt;/text&gt;
&lt;rect x=&quot;30&quot; y=&quot;66&quot; width=&quot;280&quot; height=&quot;268&quot; rx=&quot;12&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;170&quot; y=&quot;86&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;منطقة توفر B&lt;/text&gt;
&lt;rect x=&quot;44&quot; y=&quot;96&quot; width=&quot;252&quot; height=&quot;88&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;117&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;شبكة عامة&lt;/text&gt;
&lt;text x=&quot;117&quot; y=&quot;152&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;10.0.2.0/24&lt;/text&gt;
&lt;rect x=&quot;190&quot; y=&quot;116&quot; width=&quot;96&quot; height=&quot;48&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;238&quot; y=&quot;145&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;NAT&lt;/text&gt;
&lt;rect x=&quot;44&quot; y=&quot;214&quot; width=&quot;252&quot; height=&quot;104&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;117&quot; y=&quot;258&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;شبكة خاصة&lt;/text&gt;
&lt;text x=&quot;117&quot; y=&quot;280&quot; text-anchor=&quot;middle&quot; class=&quot;d-code&quot;&gt;10.0.12.0/24&lt;/text&gt;
&lt;rect x=&quot;190&quot; y=&quot;240&quot; width=&quot;96&quot; height=&quot;52&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;238&quot; y=&quot;271&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;سيرفرات&lt;/text&gt;
&lt;line x1=&quot;402&quot; y1=&quot;240&quot; x2=&quot;402&quot; y2=&quot;166&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#vpc-arrow)&quot;/&gt;
&lt;line x1=&quot;238&quot; y1=&quot;240&quot; x2=&quot;238&quot; y2=&quot;166&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#vpc-arrow)&quot;/&gt;
&lt;line x1=&quot;402&quot; y1=&quot;116&quot; x2=&quot;402&quot; y2=&quot;46&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#vpc-arrow)&quot;/&gt;
&lt;line x1=&quot;238&quot; y1=&quot;116&quot; x2=&quot;238&quot; y2=&quot;46&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#vpc-arrow)&quot;/&gt;
&lt;rect x=&quot;210&quot; y=&quot;6&quot; width=&quot;220&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;30&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;بوابة الإنترنت&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;vpc-caption&quot;&gt;السيرفرات في شبكات خاصة، وتطلع للإنترنت عبر NAT في الشبكة العامة ثم بوابة الإنترنت، وما أحد يبدأ اتصال بها من الخارج.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;نطاقات-العناوين-كيف-تقرأ-cidr&quot; tabindex=&quot;-1&quot;&gt;نطاقات العناوين: كيف تقرأ CIDR &lt;a class=&quot;heading-anchor&quot; href=&quot;#نطاقات-العناوين-كيف-تقرأ-cidr&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;تكتب نطاق العناوين بصيغة &lt;strong&gt;CIDR&lt;/strong&gt;، مثل &lt;code&gt;10.0.0.0/16&lt;/code&gt;. والرقم بعد الشرطة يقول كم بت ثابت من أصل 32، فكل ما صغر الرقم كبر النطاق:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CIDR&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;code&gt;/32&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;عنوان واحد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/28&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;أصغر VPC أو شبكة فرعية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/24&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;256&lt;/td&gt;
&lt;td&gt;شبكة فرعية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/16&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;65,536&lt;/td&gt;
&lt;td&gt;أكبر VPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;كل العناوين&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.0.0.0/0&lt;/code&gt; يعني أي مكان&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;استخدم النطاقات الخاصة: &lt;code&gt;10.0.0.0/8&lt;/code&gt; أو &lt;code&gt;172.16.0.0/12&lt;/code&gt; أو &lt;code&gt;192.168.0.0/16&lt;/code&gt;. والـ VPC الافتراضية تستخدم &lt;code&gt;172.31.0.0/16&lt;/code&gt;.&lt;/p&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;اختر نطاق ما يتعارض&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;لو نطاقك يتداخل مع شبكة ثانية، ما تقدر تربطهم بسهولة بعدين. فكّر في مكتبك والشبكات الثانية اللي ممكن تتصل بها، وهذا موضوع &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;الجزء الرابع عشر&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الشبكات-الفرعية-subnets&quot; tabindex=&quot;-1&quot;&gt;الشبكات الفرعية (Subnets) &lt;a class=&quot;heading-anchor&quot; href=&quot;#الشبكات-الفرعية-subnets&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الـ Subnet جزء من نطاق الـ VPC، وأهم شي تعرفه عنها:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;تعيش في منطقة توفر واحدة.&lt;/strong&gt; فعشان التوفر العالي تحتاج شبكات في منطقتين على الأقل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS تحجز 5 عناوين&lt;/strong&gt; في كل شبكة: أول أربعة وآخر عنوان. فـ &lt;code&gt;/24&lt;/code&gt; يعطيك 251 عنوان مو 256.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;عامة&amp;quot; و&amp;quot;خاصة&amp;quot; مو إعداد.&lt;/strong&gt; الشبكة تصير عامة لما يكون في جدول توجيهها طريق لبوابة الإنترنت.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;جداول-التوجيه-وبوابة-الإنترنت&quot; tabindex=&quot;-1&quot;&gt;جداول التوجيه وبوابة الإنترنت &lt;a class=&quot;heading-anchor&quot; href=&quot;#جداول-التوجيه-وبوابة-الإنترنت&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;بوابة الإنترنت (Internet Gateway)&lt;/strong&gt; تربط الـ VPC بالإنترنت. و&lt;strong&gt;جدول التوجيه (Route Table)&lt;/strong&gt; يحدد وين تروح كل زيارة. فجدول الشبكة العامة يكون كذا:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;10.0.0.0/16&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;داخل الـ VPC، وهذا موجود دايماً&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0.0.0.0/0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;igw-...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;أي شي ثاني يروح للإنترنت&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وعشان يوصل أحد للسيرفر من الخارج، يحتاج عنوان عام كمان. وتذكر من &lt;a href=&quot;/posts/aws-04-ec2-pricing-networking/&quot;&gt;الجزء الرابع&lt;/a&gt; إن كل عناوين IPv4 العامة مدفوعة.&lt;/p&gt;
&lt;h2 id=&quot;nat-gateway-طلوع-بدون-دخول&quot; tabindex=&quot;-1&quot;&gt;NAT Gateway: طلوع بدون دخول &lt;a class=&quot;heading-anchor&quot; href=&quot;#nat-gateway-طلوع-بدون-دخول&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;السيرفر في الشبكة الخاصة يحتاج يطلع أحياناً، مثلاً لتحميل التحديثات، بس ما تبي أحد يدخل عليه. هذا دور &lt;strong&gt;NAT Gateway&lt;/strong&gt;: يجلس في الشبكة العامة، ويطلّع طلبات السيرفرات الخاصة بعنوانه هو، وما يقبل اتصال يبدأ من الخارج.&lt;/p&gt;
&lt;p&gt;وجدول الشبكة الخاصة فيه &lt;code&gt;0.0.0.0/0&lt;/code&gt; يشير لـ &lt;code&gt;nat-...&lt;/code&gt; بدل بوابة الإنترنت. وعندك أكثر من شكل:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;NAT Gateway لمنطقة واحدة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لازم واحد في كل منطقة توفر، وإلا تعطلت الشبكات الخاصة في باقي المناطق لو طاحت منطقته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NAT Gateway إقليمي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أحدث، ويتوسع تلقائياً للمناطق اللي فيها سيرفراتك، ويُحسب لكل منطقة شغّالة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NAT Instance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفر EC2 تديره بنفسك: تدفع على السيرفر بدل كل جيجابايت، وسرعته حسب حجمه، وما له تحويل تلقائي عند العطل، ولازم تطفي فحص Source/Destination. ممكن يكون أرخص للأحمال الصغيرة جداً، بس AWS توصي بـ NAT Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-warning&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-alert&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 4l9 16H3L12 4z&quot;/&gt;&lt;path d=&quot;M12 10v4M12 17h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;مفاجأة الفاتورة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;NAT Gateway ينحسب بالساعة، وعلى كل جيجابايت تمر من خلاله. وكثير يكتشفونه في الفاتورة متأخر. وفي الجزء الجاي بنشوف كيف تقلل هذي التكلفة.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;كيف-توصل-لسيرفر-خاص&quot; tabindex=&quot;-1&quot;&gt;كيف توصل لسيرفر خاص؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كيف-توصل-لسيرفر-خاص&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ما له عنوان عام، فكيف تدخل عليه؟&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bastion Host&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفر عام تدخل منه بـ SSH&lt;/td&gt;
&lt;td&gt;قديمة: مفاتيح ومنفذ مفتوح وسيرفر زيادة تأمّنه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EC2 Instance Connect Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نقطة داخل شبكتك توصلك بالسيرفر بدون عنوان عام&lt;/td&gt;
&lt;td&gt;مجانية، وبنستخدمها في التجربة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Session Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;طرفية عبر خدمة SSM، بدون منفذ 22&lt;/td&gt;
&lt;td&gt;يحتاج دور IAM، ويسجّل الجلسات&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;جدارين-حماية-مجموعات-الأمان-وnacl&quot; tabindex=&quot;-1&quot;&gt;جدارين حماية: مجموعات الأمان وNACL &lt;a class=&quot;heading-anchor&quot; href=&quot;#جدارين-حماية-مجموعات-الأمان-وnacl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;مجموعة الأمان&lt;/a&gt; تعرفها، وهي حول السيرفر. وفيه جدار ثاني اسمه &lt;strong&gt;NACL&lt;/strong&gt; حول الشبكة الفرعية:&lt;/p&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;NACL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المستوى&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;السيرفر&lt;/td&gt;
&lt;td&gt;الشبكة الفرعية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;القواعد&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سماح فقط&lt;/td&gt;
&lt;td&gt;سماح ومنع&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الحالة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تتذكر الاتصال، فالرد يطلع تلقائياً&lt;/td&gt;
&lt;td&gt;ما تتذكر، فلازم تسمح للرد كمان&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التقييم&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كل القواعد&lt;/td&gt;
&lt;td&gt;بالترتيب، وأول قاعدة تنطبق تكفي&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الافتراضي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الدخول ممنوع والخروج مسموح&lt;/td&gt;
&lt;td&gt;الافتراضية تسمح بالكل، والجديدة تمنع الكل&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وبما إن NACL ما تتذكر الاتصال، لازم تسمح لردود السيرفر عبر &lt;strong&gt;المنافذ المؤقتة&lt;/strong&gt; (عادةً &lt;code&gt;1024-65535&lt;/code&gt;)، وهذا يسبب أخطاء كثيرة.&lt;/p&gt;
&lt;p&gt;القاعدة العملية: خل NACL الافتراضية على حالها، واشتغل بمجموعات الأمان. واستخدم NACL لو تبي &lt;strong&gt;تمنع&lt;/strong&gt; نطاق عناوين بسرعة، لأن مجموعة الأمان ما تقدر تمنع.&lt;/p&gt;
&lt;h2 id=&quot;سجلات-الزيارات-flow-logs&quot; tabindex=&quot;-1&quot;&gt;سجلات الزيارات (Flow Logs) &lt;a class=&quot;heading-anchor&quot; href=&quot;#سجلات-الزيارات-flow-logs&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;لما ما يوصل طلب وما تعرف ليش، &lt;strong&gt;Flow Logs&lt;/strong&gt; تسجّل بيانات كل اتصال على مستوى VPC أو شبكة أو واجهة، وترسلها لـ CloudWatch Logs أو S3. والسطر يكون كذا:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Output&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;2 123456789012 eni-0abc 203.0.113.7 10.0.1.5 49152 22 6 5 300 1730000000 1730000060 REJECT OK&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;يعني: من &lt;code&gt;203.0.113.7&lt;/code&gt; إلى &lt;code&gt;10.0.1.5&lt;/code&gt; على المنفذ &lt;code&gt;22&lt;/code&gt;، وانرفض. وكيف تشخّص:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;الدخول مرفوض:&lt;/strong&gt; المشكلة في مجموعة الأمان أو NACL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الدخول مقبول والخروج مرفوض:&lt;/strong&gt; المشكلة في NACL، لأن مجموعة الأمان تسمح للرد تلقائياً.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;عملي-ابن-vpc-من-الصفر&quot; tabindex=&quot;-1&quot;&gt;عملي: ابنِ VPC من الصفر &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-ابن-vpc-من-الصفر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنبني شبكة فيها عامة وخاصة، ونشوف بأعيننا إن الفرق كله في جدول التوجيه. كل الأوامر من CloudShell. أول شي الشبكة والفروع:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;VPC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-vpc --cidr-block &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.0.0/16 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --tag-specifications &lt;span class=&quot;token string&quot;&gt;&#39;ResourceType=vpc,Tags=[{Key=Name,Value=series-vpc}]&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Vpc.VpcId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;AZ&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-availability-zones &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;AvailabilityZones[0].ZoneName&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;PUBLIC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-subnet --vpc-id $VPC --cidr-block &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.1.0/24 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --availability-zone $AZ &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Subnet.SubnetId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;PRIVATE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-subnet --vpc-id $VPC --cidr-block &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.11.0/24 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --availability-zone $AZ &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Subnet.SubnetId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين بوابة الإنترنت وجدول توجيه للشبكة العامة فقط:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;IGW&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-internet-gateway &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; InternetGateway.InternetGatewayId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws ec2 attach-internet-gateway --vpc-id &lt;span class=&quot;token variable&quot;&gt;$VPC&lt;/span&gt; --internet-gateway-id &lt;span class=&quot;token variable&quot;&gt;$IGW&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;RT_PUBLIC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-route-table --vpc-id $VPC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; RouteTable.RouteTableId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws ec2 create-route --route-table-id &lt;span class=&quot;token variable&quot;&gt;$RT_PUBLIC&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --destination-cidr-block &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.0.0/0 --gateway-id &lt;span class=&quot;token variable&quot;&gt;$IGW&lt;/span&gt;
aws ec2 associate-route-table --route-table-id &lt;span class=&quot;token variable&quot;&gt;$RT_PUBLIC&lt;/span&gt; --subnet-id &lt;span class=&quot;token variable&quot;&gt;$PUBLIC&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;مجموعة أمان تسمح من داخل الشبكة فقط، ونقطة دخول حتى نوصل للسيرفرات بدون فتح منفذ للعالم:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;SG&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-security-group --group-name series-sg &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--description&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;SSH and ping from inside the VPC&quot;&lt;/span&gt; --vpc-id $VPC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; GroupId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws ec2 authorize-security-group-ingress --group-id &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--protocol&lt;/span&gt; tcp &lt;span class=&quot;token parameter variable&quot;&gt;--port&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;22&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cidr&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.0.0/16
aws ec2 authorize-security-group-ingress --group-id &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--protocol&lt;/span&gt; icmp &lt;span class=&quot;token parameter variable&quot;&gt;--port&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cidr&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10.0&lt;/span&gt;.0.0/16

aws ec2 create-instance-connect-endpoint --subnet-id &lt;span class=&quot;token variable&quot;&gt;$PRIVATE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --security-group-ids &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt; --no-preserve-client-ip&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;وسيرفر في كل شبكة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;AMI&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ssm get-parameter &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; Parameter.Value &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws ec2 run-instances --image-id &lt;span class=&quot;token variable&quot;&gt;$AMI&lt;/span&gt; --instance-type t3.micro &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --subnet-id &lt;span class=&quot;token variable&quot;&gt;$PUBLIC&lt;/span&gt; --security-group-ids &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt; --associate-public-ip-address &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --tag-specifications &lt;span class=&quot;token string&quot;&gt;&#39;ResourceType=instance,Tags=[{Key=Name,Value=public-server}]&#39;&lt;/span&gt;

aws ec2 run-instances --image-id &lt;span class=&quot;token variable&quot;&gt;$AMI&lt;/span&gt; --instance-type t3.micro &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --subnet-id &lt;span class=&quot;token variable&quot;&gt;$PRIVATE&lt;/span&gt; --security-group-ids &lt;span class=&quot;token variable&quot;&gt;$SG&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --tag-specifications &lt;span class=&quot;token string&quot;&gt;&#39;ResourceType=instance,Tags=[{Key=Name,Value=private-server}]&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;انتظر كم دقيقة لين تجهز نقطة الدخول. ثم من EC2 حدد السيرفر، واضغط &lt;strong&gt;Connect&lt;/strong&gt;، وفي &lt;strong&gt;EC2 Instance Connect&lt;/strong&gt; اختر الاتصال عبر نقطة الدخول. وعلى كل سيرفر جرّب:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; https://checkip.amazonaws.com&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;public-server&lt;/code&gt;:&lt;/strong&gt; يطبع عنوانه العام.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;private-server&lt;/code&gt;:&lt;/strong&gt; ينتهي الوقت بدون جواب، لأن ما عنده طريق للإنترنت.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ومن الخاص جرّب &lt;code&gt;ping&lt;/code&gt; على العنوان الخاص للعام، وبيرد لأن طريق &lt;code&gt;local&lt;/code&gt; يربطهم.&lt;/p&gt;
&lt;h3 id=&quot;أضف-nat-gateway&quot; tabindex=&quot;-1&quot;&gt;أضف NAT Gateway &lt;a class=&quot;heading-anchor&quot; href=&quot;#أضف-nat-gateway&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;الحين خل الخاص يطلع للإنترنت. وهذي الخطوة مدفوعة بالساعة، فاحذفها بعد التجربة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;ALLOC&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 allocate-address &lt;span class=&quot;token parameter variable&quot;&gt;--domain&lt;/span&gt; vpc &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; AllocationId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;NAT&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-nat-gateway --subnet-id $PUBLIC --allocation-id $ALLOC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; NatGateway.NatGatewayId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws ec2 &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; nat-gateway-available --nat-gateway-ids &lt;span class=&quot;token variable&quot;&gt;$NAT&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;RT_PRIVATE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 create-route-table --vpc-id $VPC &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; RouteTable.RouteTableId &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
aws ec2 create-route --route-table-id &lt;span class=&quot;token variable&quot;&gt;$RT_PRIVATE&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --destination-cidr-block &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.0.0/0 --nat-gateway-id &lt;span class=&quot;token variable&quot;&gt;$NAT&lt;/span&gt;
aws ec2 associate-route-table --route-table-id &lt;span class=&quot;token variable&quot;&gt;$RT_PRIVATE&lt;/span&gt; --subnet-id &lt;span class=&quot;token variable&quot;&gt;$PRIVATE&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أعد نفس أمر &lt;code&gt;curl&lt;/code&gt; على &lt;code&gt;private-server&lt;/code&gt;. هذي المرة يطبع عنوان، وهو عنوان NAT Gateway مو عنوان السيرفر. فالسيرفر طلع للإنترنت، وما زال ما أحد يقدر يبدأ اتصال به.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;احذف NAT Gateway من صفحته في VPC، وبعد ما يختفي حرر الـ Elastic IP من صفحته في EC2. لو بتكمل &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;الجزء الرابع عشر&lt;/a&gt; مباشرة، خل الـ VPC والسيرفرات. وإلا احذف السيرفرات ونقطة الدخول، ثم حدد الـ VPC واختر &lt;strong&gt;Actions&lt;/strong&gt; ثم &lt;strong&gt;Delete VPC&lt;/strong&gt;، وهي تحذف الباقي معها.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VPC&lt;/strong&gt; شبكتك الخاصة في Region، وتقسمها لشبكات فرعية في مناطق التوفر.&lt;/li&gt;
&lt;li&gt;الشبكة &lt;strong&gt;عامة&lt;/strong&gt; لو في جدولها طريق لبوابة الإنترنت، وإلا فهي &lt;strong&gt;خاصة&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NAT Gateway&lt;/strong&gt; يخلي الخاصة تطلع بدون ما أحد يدخل، وانتبه لتكلفته.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مجموعات الأمان&lt;/strong&gt; تتذكر الاتصال وتسمح فقط، و&lt;strong&gt;NACL&lt;/strong&gt; ما تتذكر وتقدر تمنع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flow Logs&lt;/strong&gt; تقول لك وين انرفض الاتصال.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 6&lt;/p&gt;
&lt;p&gt;سيرفر جديد له عنوان عام، ومجموعة الأمان حقته تسمح بـ HTTPS من أي مكان، ومع هذا ما أحد يقدر يوصل له من الإنترنت. والـ VPC مربوط فيها بوابة إنترنت، وجدول توجيه الشبكة الفرعية فيه مسار &lt;code&gt;local&lt;/code&gt; فقط. وش الناقص؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;مسار &lt;code&gt;0.0.0.0/0&lt;/code&gt; لبوابة الإنترنت في جدول توجيه الشبكة الفرعية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;NAT Gateway في نفس الشبكة الفرعية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;قاعدة خروج للردود في مجموعة الأمان&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;اتصال Peering مع الـ VPC الافتراضية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الشبكة الفرعية تصير عامة لما يكون جدول توجيهها يشير لبوابة إنترنت. وبدون هذا المسار، ما فيه طريق للخروج، حتى مع وجود عنوان عام.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; NAT يخلي السيرفرات الخاصة تطلع، وما يقبل اتصال يبدأ من الخارج.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; مجموعة الأمان تتذكر الاتصال، فالرد يطلع تلقائياً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; Peering يربط شبكتين VPC، وما يعطي طريق للإنترنت.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%8A%D9%87-%D9%88%D8%A8%D9%88%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA&quot;&gt;جداول التوجيه وبوابة الإنترنت&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html&quot;&gt;Enable internet access for a VPC using an internet gateway&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 6&lt;/p&gt;
&lt;p&gt;فريق يخطط لشبكة فرعية لازم تستوعب 30 سيرفر. والعناوين محدودة، فيبي أصغر نطاق يكفي. أي واحد يختار؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;&lt;code&gt;/29&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;&lt;code&gt;/28&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;&lt;code&gt;/27&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;&lt;code&gt;/26&lt;/code&gt;&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AWS تحجز 5 عناوين في كل شبكة فرعية. و&lt;code&gt;/27&lt;/code&gt; فيه 32، يبقى منها 27، فما يكفي. و&lt;code&gt;/26&lt;/code&gt; فيه 64، يبقى منها 59.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; أصغر شبكة فرعية تسمح فيها AWS هي &lt;code&gt;/28&lt;/code&gt;، فهذا ما ينشأ أصلاً.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يبقى منه 11 عنوان بس.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يبقى منه 27 عنوان، ناقص ثلاثة عن المطلوب.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%81%D8%B1%D8%B9%D9%8A%D8%A9-subnets&quot;&gt;الشبكات الفرعية (Subnets)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html&quot;&gt;Subnet CIDR blocks&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 6&lt;/p&gt;
&lt;p&gt;تطبيق يشتغل في شبكات خاصة على منطقتي توفر، ويتشاركون NAT Gateway لمنطقة واحدة في المنطقة الأولى. ولما تعطلت هذي المنطقة، بقت سيرفرات المنطقة الثانية سليمة، بس انقطع عنها الإنترنت. وش يحل هذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;بوابة إنترنت إضافية للمنطقة الثانية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;NAT Gateway في المنطقة الثانية، وكل شبكة خاصة توجّه للي في منطقتها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Elastic IP ثاني على الـ NAT Gateway الحالي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;نقل الـ NAT Gateway إلى شبكة خاصة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ NAT Gateway لمنطقة واحدة يعيش في منطقته، فلو طاحت انقطع كل اللي يعتمدون عليه. ولما يكون فيه واحد في كل منطقة، يبقى العطل في منطقته. وRegional NAT Gateway يعطيك نفس النتيجة تلقائياً.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; الـ VPC لها بوابة إنترنت وحدة، والشبكات الخاصة ما توجّه لها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; العناوين الزيادة ما تطلعه من المنطقة المعطلة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; الـ NAT Gateway يجلس في الشبكة العامة، وهذا يقطعه عن الإنترنت.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#nat-gateway-%D8%B7%D9%84%D9%88%D8%B9-%D8%A8%D8%AF%D9%88%D9%86-%D8%AF%D8%AE%D9%88%D9%84&quot;&gt;NAT Gateway: طلوع بدون دخول&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-basics.html&quot;&gt;NAT gateway basics&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 6&lt;/p&gt;
&lt;p&gt;عشان يمنع فريق نطاق عناوين مزعج، أنشأ NACL جديدة فيها قاعدة منع لهذا النطاق، وقاعدة سماح دخول للمنفذ 443. والحين ما أحد من الزوار يقدر يفتح الموقع. وFlow Logs تعرض الطلبات &lt;code&gt;ACCEPT&lt;/code&gt; والردود &lt;code&gt;REJECT&lt;/code&gt;. وش يسوي الفريق؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إضافة قاعدة منع للنطاق في مجموعة الأمان&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إضافة قاعدة خروج للردود في مجموعة الأمان&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;إضافة قاعدة خروج في NACL تسمح للمنافذ المؤقتة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;حذف قاعدة سماح الدخول من NACL&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;NACL ما تتذكر الاتصال، والجديدة تمنع كل شي ما سمحت له، فالردود تحتاج قاعدة خاصة فيها. والدخول المقبول مع الخروج المرفوض يشير مباشرة لـ NACL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; مجموعة الأمان تسمح فقط، فما تقبل قاعدة منع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; مجموعة الأمان تتذكر الاتصال، فكانت تخلي الرد يطلع من الأساس.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يمنع الطلبات كمان.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AC%D8%AF%D8%A7%D8%B1%D9%8A%D9%86-%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%86-%D9%88nacl&quot;&gt;جدارين حماية: مجموعات الأمان وNACL&lt;/a&gt; و&lt;a href=&quot;#%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%B2%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-flow-logs&quot;&gt;سجلات الزيارات (Flow Logs)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/userguide/custom-network-acl.html&quot;&gt;Custom network ACLs for your VPC&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 6&lt;/p&gt;
&lt;p&gt;المهندسين يحتاجون طرفية على سيرفرات في شبكة خاصة. والسيرفرات لازم تبقى بدون عناوين عامة، والفريق ما يبي سيرفر زيادة يحدّثه ويأمّنه. أي &lt;strong&gt;خيارين&lt;/strong&gt; يناسبون؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Bastion Host في شبكة عامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;NAT Gateway، مع قاعدة SSH&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Session Manager، مع دور IAM على السيرفرات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Elastic IP على كل سيرفر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;EC2 Instance Connect Endpoint في الـ VPC&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الاثنين يوصلون للسيرفر بدون عنوان عام وبدون سيرفر زيادة تشغله. وSession Manager كمان ما يحتاج منفذ 22، ويسجّل الجلسات.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا هو السيرفر الزيادة اللي الفريق ما يبيه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الـ NAT Gateway يطلّع الزيارات فقط، وما يقبل اتصال يبدأ من الخارج.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يعطي السيرفرات عناوين عامة، وهذا الممنوع بالضبط.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%83%D9%8A%D9%81-%D8%AA%D9%88%D8%B5%D9%84-%D9%84%D8%B3%D9%8A%D8%B1%D9%81%D8%B1-%D8%AE%D8%A7%D8%B5&quot;&gt;كيف توصل لسيرفر خاص؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html&quot;&gt;Session Manager&lt;/a&gt; و&lt;a href=&quot;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-with-ec2-instance-connect-endpoint.html&quot;&gt;EC2 Instance Connect Endpoint&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 6 من 6&lt;/p&gt;
&lt;p&gt;فريق جهّز NAT Instance في شبكة عامة ووجّه جدول توجيه الشبكة الخاصة له، ومع هذا السيرفرات الخاصة ما توصل للإنترنت. ومجموعات الأمان تسمح بالزيارات. وش الأرجح إنه نسيه؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Elastic IP على كل سيرفر خاص&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إطفاء فحص Source/Destination على الـ NAT Instance&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;جدول توجيه ثاني للشبكة العامة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Gateway Endpoint للإنترنت&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;سيرفر EC2 لازم عادةً يكون مصدر زياراته أو وجهتها. والـ NAT Instance يمرر زيارات غيره، فلازم يكون هذا الفحص مطفي.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; السيرفرات الخاصة تطلع بعنوان الـ NAT Instance، وما تحتاج عناوين خاصة فيها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الشبكة العامة تحتاج مسارها لبوابة الإنترنت فقط، وهذا ما يضيف شي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; الـ Gateway Endpoint يوصل لـ S3 وDynamoDB، مو للإنترنت.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#nat-gateway-%D8%B7%D9%84%D9%88%D8%B9-%D8%A8%D8%AF%D9%88%D9%86-%D8%AF%D8%AE%D9%88%D9%84&quot;&gt;NAT Gateway: طلوع بدون دخول&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/vpc/latest/userguide/work-with-nat-instances.html&quot;&gt;Enable private resources to communicate outside the VPC&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;شبكتك الحين جاهزة، بس معزولة. في &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;&lt;strong&gt;الجزء الرابع عشر&lt;/strong&gt;&lt;/a&gt; نربطها بشبكات ثانية، وبخدمات AWS، وبمكتبك.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>CloudFront وGlobal Accelerator: أقرب لزوارك</title>
    <link href="https://blog.sultanops.com/posts/aws-12-cloudfront-global-accelerator/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-12-cloudfront-global-accelerator/</id>
    <summary>ليش المسافة تبطّئ موقعك، وكيف يحفظ CloudFront نسخ قريبة من الزوار، وكيف تحمي مصدرك وتمسح الكاش، ووش يسوي Global Accelerator للزيارات اللي ما تنخزّن، ومتى تختار كل واحد.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-11-dns-route53/&quot;&gt;الجزء الحادي عشر&lt;/a&gt; صار لموقعك اسم، بس سيرفره لسا في مكان واحد. والزائر البعيد طلبه يعبر قارات وشبكات كثيرة على الإنترنت العام، وكل طلب ياخذ وقت.&lt;/p&gt;
&lt;p&gt;عندك خدمتين لهذي المشكلة: &lt;strong&gt;CloudFront&lt;/strong&gt; يحفظ نسخة قريبة من الزائر، و&lt;strong&gt;Global Accelerator&lt;/strong&gt; يختصر الطريق نفسه.&lt;/p&gt;
&lt;h2 id=&quot;cloudfront-نسخة-قريبة-من-كل-زائر&quot; tabindex=&quot;-1&quot;&gt;CloudFront: نسخة قريبة من كل زائر &lt;a class=&quot;heading-anchor&quot; href=&quot;#cloudfront-نسخة-قريبة-من-كل-زائر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CloudFront&lt;/strong&gt; شبكة توصيل محتوى (CDN). تستخدم &lt;a href=&quot;/posts/aws-01-global-infrastructure/&quot;&gt;مواقع الحافة&lt;/a&gt; المنتشرة حول العالم، فأول زائر يطلب ملف يجيبه CloudFront من مصدرك ويحفظه، واللي بعده في نفس المنطقة ياخذه من موقع الحافة مباشرة.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 220&quot; role=&quot;img&quot; aria-labelledby=&quot;cf-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;cf-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;490&quot; y=&quot;24&quot; width=&quot;130&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;555&quot; y=&quot;50&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;زائر&lt;/text&gt;
&lt;text x=&quot;555&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;في آسيا&lt;/text&gt;
&lt;rect x=&quot;490&quot; y=&quot;136&quot; width=&quot;130&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;555&quot; y=&quot;162&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;زائر&lt;/text&gt;
&lt;text x=&quot;555&quot; y=&quot;182&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;في أوروبا&lt;/text&gt;
&lt;rect x=&quot;255&quot; y=&quot;24&quot; width=&quot;150&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;330&quot; y=&quot;50&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;موقع حافة&lt;/text&gt;
&lt;text x=&quot;330&quot; y=&quot;70&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يحفظ نسخة&lt;/text&gt;
&lt;rect x=&quot;255&quot; y=&quot;136&quot; width=&quot;150&quot; height=&quot;60&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;330&quot; y=&quot;162&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;موقع حافة&lt;/text&gt;
&lt;text x=&quot;330&quot; y=&quot;182&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يحفظ نسخة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;64&quot; width=&quot;150&quot; height=&quot;92&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;95&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;المصدر&lt;/text&gt;
&lt;text x=&quot;95&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;ALB أو S3 أو سيرفر&lt;/text&gt;
&lt;text x=&quot;95&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;في Region واحدة&lt;/text&gt;
&lt;line x1=&quot;490&quot; y1=&quot;54&quot; x2=&quot;407&quot; y2=&quot;54&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cf-arrow)&quot;/&gt;
&lt;line x1=&quot;490&quot; y1=&quot;166&quot; x2=&quot;407&quot; y2=&quot;166&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#cf-arrow)&quot;/&gt;
&lt;line x1=&quot;255&quot; y1=&quot;54&quot; x2=&quot;172&quot; y2=&quot;94&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;4 4&quot;/&gt;
&lt;line x1=&quot;255&quot; y1=&quot;166&quot; x2=&quot;172&quot; y2=&quot;126&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;4 4&quot;/&gt;
&lt;text x=&quot;228&quot; y=&quot;115&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لو ما عنده&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;cf-caption&quot;&gt;كل زائر يصل لأقرب موقع حافة، وموقع الحافة ما يرجع للمصدر إلا لو ما عنده نسخة صالحة.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ووش تستفيد؟&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;سرعة أعلى:&lt;/strong&gt; الجواب من مكان قريب.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ضغط أقل على المصدر:&lt;/strong&gt; أغلب الطلبات تنتهي عند الحافة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;حماية:&lt;/strong&gt; تجي مع Shield Standard ضد هجمات DDoS، وتقدر تضيف WAF.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPS مجاني:&lt;/strong&gt; بشهادة من ACM، وتشغيل TLS عند الحافة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;المصادر-origins&quot; tabindex=&quot;-1&quot;&gt;المصادر (Origins) &lt;a class=&quot;heading-anchor&quot; href=&quot;#المصادر-origins&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;المصدر هو المكان الأصلي للمحتوى. وأهم شي إن الزوار ما يتخطون CloudFront ويوصلون له مباشرة:&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;حاوية S3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مواقع ثابتة وملفات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;OAC&lt;/strong&gt; يخلي CloudFront وحده يقرأ منها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ALB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تطبيقات ديناميكية&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;VPC Origins&lt;/strong&gt; يخلي الموزّع في شبكة خاصة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;سيرفر EC2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تطبيق على سيرفر&lt;/td&gt;
&lt;td&gt;VPC Origins، أو مجموعة أمان تسمح لنطاقات CloudFront فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;أي سيرفر HTTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حتى خارج AWS&lt;/td&gt;
&lt;td&gt;ترويسة سرية يتحقق منها السيرفر&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وبنشرح S3 بالتفصيل في &lt;a href=&quot;/series/aws/#section-6&quot;&gt;قسم التخزين الكائني&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;وش-ينخزن-وكم&quot; tabindex=&quot;-1&quot;&gt;وش ينخزّن وكم؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#وش-ينخزن-وكم&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مفتاح الكاش (Cache Key):&lt;/strong&gt; افتراضياً الرابط. وكل ما أضفت له ترويسات أو كوكيز، قلّت فرص إيجاد نسخة جاهزة، فخله بأقل ما يمكن.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مدة الصلاحية:&lt;/strong&gt; من ترويسة &lt;code&gt;Cache-Control&lt;/code&gt; عند المصدر، أو من إعدادات CloudFront.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;السلوكيات (Behaviors):&lt;/strong&gt; قواعد حسب المسار، مثل &lt;code&gt;/images/*&lt;/code&gt; بمدة طويلة و&lt;code&gt;/api/*&lt;/code&gt; بدون كاش. فنطاق واحد يخدم المحتوى الثابت والديناميكي.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;مسح-الكاش&quot; tabindex=&quot;-1&quot;&gt;مسح الكاش &lt;a class=&quot;heading-anchor&quot; href=&quot;#مسح-الكاش&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;لو غيّرت ملف، النسخة القديمة تبقى لين تنتهي صلاحيتها. وعندك حلين:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Invalidation:&lt;/strong&gt; تطلب من CloudFront يمسح مسارات، مثل &lt;code&gt;/*&lt;/code&gt;. وأول 1000 مسار في الشهر مجانية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إصدار في اسم الملف:&lt;/strong&gt; مثل &lt;code&gt;main.css?v=12&lt;/code&gt;، فالإصدار الجديد رابط جديد. وهذا الحل الأفضل للملفات الثابتة.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout-note&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-info&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;8.5&quot;/&gt;&lt;path d=&quot;M12 11v5M12 8h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;مثال حقيقي&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;روابط CSS وJavaScript في هذي المدونة فيها إصدار يتغيّر مع كل نشر، عشان الزائر ياخذ النسخة الجديدة بدون أي مسح.&lt;/p&gt;
&lt;/aside&gt;
&lt;h3 id=&quot;ميزات-إضافية&quot; tabindex=&quot;-1&quot;&gt;ميزات إضافية &lt;a class=&quot;heading-anchor&quot; href=&quot;#ميزات-إضافية&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Geo Restriction:&lt;/strong&gt; تسمح أو تمنع دول معينة، مثل محتوى مرخّص لبلد واحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;روابط موقّعة (Signed URLs):&lt;/strong&gt; لمحتوى مدفوع أو خاص، برابط له مدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudFront Functions وLambda@Edge:&lt;/strong&gt; كود قصير يشتغل عند الحافة، مثل التحويلات وتعديل الترويسات.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;الأسعار&quot; tabindex=&quot;-1&quot;&gt;الأسعار &lt;a class=&quot;heading-anchor&quot; href=&quot;#الأسعار&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;عندك طريقتين، والأسعار ممكن تتغير فراجعها قبل ما تقرر:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;حسب الاستخدام:&lt;/strong&gt; تدفع على البيانات الخارجة والطلبات، ويختلف السعر حسب المنطقة. وكل شهر عندك 1 TB و10 ملايين طلب مجاناً. و&lt;strong&gt;Price Classes&lt;/strong&gt; تخليك تستثني المناطق الأغلى، مقابل تغطية أقل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;خطط ثابتة:&lt;/strong&gt; Free وPro وBusiness وPremium بسعر شهري لكل توزيعة بدون مفاجآت، وتشمل خدمات ثانية مثل WAF.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ونقل البيانات من S3 أو ALB إلى CloudFront مجاني.&lt;/p&gt;
&lt;h3 id=&quot;cloudfront-أو-نسخ-s3-بين-regions&quot; tabindex=&quot;-1&quot;&gt;CloudFront أو نسخ S3 بين Regions؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#cloudfront-أو-نسخ-s3-بين-regions&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CloudFront&lt;/th&gt;
&lt;th&gt;S3 Cross-Region Replication&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التغطية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كل مواقع الحافة&lt;/td&gt;
&lt;td&gt;الـ Regions اللي تختارها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;البيانات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نسخ مؤقتة لين تنتهي صلاحيتها&lt;/td&gt;
&lt;td&gt;نسخ كاملة تتحدث باستمرار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;محتوى ثابت لكل العالم&lt;/td&gt;
&lt;td&gt;بيانات متغيرة تبيها قريبة في Regions محددة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;global-accelerator-طريق-أسرع&quot; tabindex=&quot;-1&quot;&gt;Global Accelerator: طريق أسرع &lt;a class=&quot;heading-anchor&quot; href=&quot;#global-accelerator-طريق-أسرع&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بعض الزيارات ما تنخزّن: لعبة عبر UDP، أو مكالمة صوتية، أو طلب دفع. لازم توصل لتطبيقك نفسه، وعلى الإنترنت العام تمر بشبكات كثيرة وتأخير غير ثابت.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Global Accelerator&lt;/strong&gt; يدخّل الزائر شبكة AWS الخاصة من أقرب موقع حافة، ويكمل الطريق عليها لين تطبيقك.&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 220&quot; role=&quot;img&quot; aria-labelledby=&quot;ga-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;ga-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;text x=&quot;320&quot; y=&quot;22&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;بدونه: شبكات كثيرة وتأخير غير ثابت&lt;/text&gt;
&lt;rect x=&quot;510&quot; y=&quot;36&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;66&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الزائر&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;36&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;66&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقك&lt;/text&gt;
&lt;polyline points=&quot;510,61 450,44 390,76 320,46 250,78 190,48 132,61&quot; fill=&quot;none&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;4 4&quot;/&gt;
&lt;circle cx=&quot;450&quot; cy=&quot;44&quot; r=&quot;5&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;circle cx=&quot;390&quot; cy=&quot;76&quot; r=&quot;5&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;circle cx=&quot;320&quot; cy=&quot;46&quot; r=&quot;5&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;circle cx=&quot;250&quot; cy=&quot;78&quot; r=&quot;5&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;circle cx=&quot;190&quot; cy=&quot;48&quot; r=&quot;5&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;320&quot; y=&quot;128&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;معه: شبكة AWS الخاصة من أقرب موقع حافة&lt;/text&gt;
&lt;rect x=&quot;510&quot; y=&quot;146&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;565&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;الزائر&lt;/text&gt;
&lt;rect x=&quot;360&quot; y=&quot;146&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;415&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;موقع حافة&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;146&quot; width=&quot;110&quot; height=&quot;50&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;75&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تطبيقك&lt;/text&gt;
&lt;line x1=&quot;510&quot; y1=&quot;171&quot; x2=&quot;472&quot; y2=&quot;171&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#ga-arrow)&quot;/&gt;
&lt;line x1=&quot;360&quot; y1=&quot;171&quot; x2=&quot;132&quot; y2=&quot;171&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;3&quot; marker-end=&quot;url(#ga-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;ga-caption&quot;&gt;بدل ما يقطع الطلب الإنترنت العام كله، يدخل شبكة AWS من أقرب موقع حافة ويكمل عليها.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;عنوانين-ثابتين-عبر-anycast&quot; tabindex=&quot;-1&quot;&gt;عنوانين ثابتين عبر Anycast &lt;a class=&quot;heading-anchor&quot; href=&quot;#عنوانين-ثابتين-عبر-anycast&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;في الإنترنت العادي (&lt;strong&gt;Unicast&lt;/strong&gt;)، كل عنوان له جهاز واحد. وفي &lt;strong&gt;Anycast&lt;/strong&gt;، عدة أماكن تشارك نفس العنوان، والشبكة توصلك لأقربها.&lt;/p&gt;
&lt;p&gt;Global Accelerator يعطيك &lt;strong&gt;عنوانين ثابتين&lt;/strong&gt; من هذا النوع، يشيرون لموزّعات ALB أو NLB أو سيرفرات EC2 أو Elastic IP، حتى في أكثر من Region. وهذا يعطيك:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;عناوين ما تتغير:&lt;/strong&gt; عميلك يقدر يسمح لها في جدار الحماية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تحويل سريع:&lt;/strong&gt; يتابع صحة التطبيق وينقل الزيارات، بدون ما تنتظر انتهاء كاش DNS عند الناس.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تحكم في الزيارات:&lt;/strong&gt; تحدد نسبة كل Region، فتقدر تجرب نسخة جديدة في واحدة منها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;حماية:&lt;/strong&gt; Shield Standard، وتطبيقك ما ينكشف مباشرة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;وتكلفته رسم ثابت بالساعة مع رسم إضافي على البيانات، فما هو مجاني مثل طبقة CloudFront.&lt;/p&gt;
&lt;h3 id=&quot;أيهم-تختار&quot; tabindex=&quot;-1&quot;&gt;أيهم تختار؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#أيهم-تختار&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CloudFront&lt;/th&gt;
&lt;th&gt;Global Accelerator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;البروتوكولات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTTP وHTTPS&lt;/td&gt;
&lt;td&gt;أي TCP أو UDP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يخزّن؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نعم&lt;/td&gt;
&lt;td&gt;لا، يوصّل الطلب فقط&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;العناوين&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تتغير، وتستخدم اسم نطاق&lt;/td&gt;
&lt;td&gt;عنوانين ثابتين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يناسب&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مواقع وصور وفيديو وواجهات API&lt;/td&gt;
&lt;td&gt;ألعاب ومكالمات وIoT، أو حاجة لعناوين ثابتة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;لو تطبيقك HTTP، ابدأ بـ CloudFront.&lt;/p&gt;
&lt;h2 id=&quot;الصورة-الكاملة-حتى-الآن&quot; tabindex=&quot;-1&quot;&gt;الصورة الكاملة حتى الآن &lt;a class=&quot;heading-anchor&quot; href=&quot;#الصورة-الكاملة-حتى-الآن&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;مسار الزائر صار كذا: &lt;strong&gt;Route 53&lt;/strong&gt; تعطيه العنوان، ثم &lt;strong&gt;CloudFront&lt;/strong&gt; يجاوبه من أقرب موقع لو عنده نسخة، وإلا يوصّل طلبه لـ &lt;strong&gt;ALB&lt;/strong&gt;، وهو يوزّعه على سيرفرات &lt;strong&gt;Auto Scaling&lt;/strong&gt;، اللي تقرأ من &lt;strong&gt;ElastiCache&lt;/strong&gt; و&lt;strong&gt;RDS&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;عملي-شوف-الكاش-بعينك&quot; tabindex=&quot;-1&quot;&gt;عملي: شوف الكاش بعينك &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-شوف-الكاش-بعينك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;بنحط CloudFront قدام سيرفرك &lt;code&gt;web-1&lt;/code&gt; من &lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;الجزء الثالث&lt;/a&gt;، لأنه يسمح بـ HTTP من أي مكان. من CloudShell:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;ORIGIN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-instances &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Name=tag:Name,Values=web-1&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Name=instance-state-name,Values=running&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Reservations[0].Instances[0].PublicDnsName&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

aws cloudfront create-distribution &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --origin-domain-name &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ORIGIN&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Distribution.[Id,DomainName]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;احفظ المعرّف والاسم من الجدول، وانتظر لين تجهز، وهذا ياخذ كم دقيقة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudfront &lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt; distribution-deployed &lt;span class=&quot;token parameter variable&quot;&gt;--id&lt;/span&gt; YOUR-DISTRIBUTION-ID&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين اطلب الصفحة ثلاث مرات، وشوف الترويسات:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; /dev/null &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; - https://YOUR-DOMAIN.cloudfront.net &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-iE&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;^(x-cache|age|x-amz-cf-pop)&quot;&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;أول طلب يرجع &lt;code&gt;Miss from cloudfront&lt;/code&gt;، واللي بعده &lt;code&gt;Hit from cloudfront&lt;/code&gt; مع &lt;code&gt;age&lt;/code&gt; يزيد. و&lt;code&gt;x-amz-cf-pop&lt;/code&gt; يوريك موقع الحافة اللي جاوبك.&lt;/p&gt;
&lt;p&gt;الحين غيّر الصفحة على السيرفر من EC2 Instance Connect:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;h1&gt;New version&amp;lt;/h1&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tee&lt;/span&gt; /usr/share/nginx/html/index.html&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;افتح رابط CloudFront، وبتلقى الصفحة القديمة لأنها لسا في الكاش. امسحها من CloudShell:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws cloudfront create-invalidation &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --distribution-id YOUR-DISTRIBUTION-ID &lt;span class=&quot;token parameter variable&quot;&gt;--paths&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/*&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بعد لحظات تظهر الصفحة الجديدة.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;التوزيعة ما تنحذف مباشرة. من صفحتها في الكونسول اضغط &lt;strong&gt;Disable&lt;/strong&gt;، وانتظر لين تنتهي، ثم &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CloudFront&lt;/strong&gt; يحفظ نسخ قريبة من الزوار، فالموقع يسرع والضغط يقل على المصدر.&lt;/li&gt;
&lt;li&gt;خل مصدرك &lt;strong&gt;خاص&lt;/strong&gt; عبر OAC أو VPC Origins، عشان ما أحد يتخطى CloudFront.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إصدار في اسم الملف&lt;/strong&gt; أفضل من مسح الكاش في كل مرة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global Accelerator&lt;/strong&gt; ما يخزّن، بس يوصّل أي TCP أو UDP عبر شبكة AWS بعنوانين ثابتين.&lt;/li&gt;
&lt;li&gt;لو تطبيقك HTTP ابدأ بـ CloudFront.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;لعبة جماعية ترسل زياراتها عبر UDP لسيرفرات في Regionين. واللاعبين يشتكون من تأخير غير ثابت، وبعض الشركاء ما يقدرون يسمحون في جدران الحماية إلا لعناوين ثابتة. أي خدمة تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon CloudFront، بكل مواقع الحافة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;AWS Global Accelerator&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Route 53، بسجلات Latency&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;S3 Cross-Region Replication&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Global Accelerator يوصّل أي TCP أو UDP عبر شبكة AWS من أقرب موقع حافة، ويعطيك عنوانين ثابتين ينحطون في جدار الحماية.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; CloudFront يخدم HTTP وHTTPS، مو زيارات UDP حق لعبة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يختار Region بس، فالزيارات لسا تمر بالإنترنت العام، والعناوين مو ثابتة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا ينسخ ملفات S3، وما له علاقة بزيارات اللعبة المباشرة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#global-accelerator-%D8%B7%D8%B1%D9%8A%D9%82-%D8%A3%D8%B3%D8%B1%D8%B9&quot;&gt;Global Accelerator: طريق أسرع&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://aws.amazon.com/global-accelerator/faqs/&quot;&gt;AWS Global Accelerator FAQs&lt;/a&gt; في موقع AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;أكاديمية على الإنترنت تحفظ ملفات دوراتها في S3 وتقدمها عبر CloudFront. والزوار لسا يقدرون يفتحون الملفات مباشرة من رابط الحاوية، ويتخطون CloudFront بالكامل. وش يقفل هذي الثغرة؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Geo restriction على التوزيعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Signed URLs على التوزيعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;OAC، مع سياسة حاوية تسمح لـ CloudFront فقط&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Invalidation لـ &lt;code&gt;/*&lt;/code&gt; على التوزيعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;مع OAC، يوقّع CloudFront طلباته إلى S3، وسياسة الحاوية تقبل هذي الطلبات فقط، فتبقى الحاوية مقفلة على الكل.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يحدد الدول داخل CloudFront، ورابط الحاوية يبقى مفتوح.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يتحكم في اللي يمر عبر CloudFront، ورابط الحاوية يبقى مفتوح.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يمسح النسخ من الكاش، وما يغير شي في مين يوصل للحاوية.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A7%D9%84%D9%85%D8%B5%D8%A7%D8%AF%D8%B1-origins&quot;&gt;المصادر (Origins)&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html&quot;&gt;Restrict access to an Amazon S3 origin&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;نطاق واحد يخدم صور المنتجات تحت &lt;code&gt;/images/*&lt;/code&gt; وواجهة API مباشرة تحت &lt;code&gt;/api/*&lt;/code&gt;. والصور لازم تبقى في الكاش شهر، وردود الـ API ما تنخزن أبداً. وش أبسط طريقة لهذا في CloudFront؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;توزيعتين، كل وحدة بنطاقها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Invalidation لـ &lt;code&gt;/api/*&lt;/code&gt; بعد كل طلب&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Global Accelerator قدام الـ API&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;توزيعة وحدة، مع Behavior لكل مسار&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الـ Behavior يطبق قواعده الخاصة على نمط مسار، فتوزيعة وحدة على نطاق واحد تقدر تحتفظ بالصور مدة طويلة، وتمرر الـ API مباشرة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يقسم الموقع على نطاقين بدون حاجة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الـ Invalidation ياخذ وقت وما هو مصمم لكل طلب، والمسارات تصير مدفوعة بعد الحصة الشهرية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا ما يخزن شي، فما يفيد الصور بشي.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%88%D8%B4-%D9%8A%D9%86%D8%AE%D8%B2%D9%86-%D9%88%D9%83%D9%85&quot;&gt;وش ينخزّن وكم؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesCacheBehavior.html&quot;&gt;Cache behavior settings&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;فريق يغيّر &lt;code&gt;main.css&lt;/code&gt; كم مرة في اليوم. والزوار أحياناً يشوفون التنسيق القديم، والفريق مل من مسح الكاش بعد كل إصدار. وش الحل الأفضل على المدى الطويل؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;وضع إصدار في رابط الملف، وتغييره مع كل إصدار&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إعطاء الملف مدة صلاحية سنة، بدون إصدار&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;شيل CloudFront، وتقديم الملف من المصدر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;نسخ الملف إلى حاوية في كل Region&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الإصدار الجديد يعني رابط جديد، فياخذ الزوار النسخة الجديدة فوراً، بدون انتظار انتهاء القديمة وبدون أي مسح.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; الزوار بيبقون على النسخة القديمة مدة أطول.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يضيّع السرعة، ويرجّع الحمل على المصدر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يزيد نسخ لازم تبقى متطابقة، والقديمة تبقى في الكاش.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%85%D8%B3%D8%AD-%D8%A7%D9%84%D9%83%D8%A7%D8%B4&quot;&gt;مسح الكاش&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/UpdatingExistingObjects.html&quot;&gt;Use file versioning to update or remove content&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;موقع أخبار يلاحظ إن أغلب طلبات CloudFront لسا توصل للمصدر، حتى لمقالات نادراً تتغير. ومفتاح الكاش فيه كل الكوكيز والترويسات، والمصدر يرسل &lt;code&gt;Cache-Control: max-age=60&lt;/code&gt;. أي &lt;strong&gt;تغييرين&lt;/strong&gt; يزيدون نسبة الطلبات اللي ترد من الحافة؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Invalidation لـ &lt;code&gt;/*&lt;/code&gt; كل ساعة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;شيل الكوكيز والترويسات اللي ما تعتمد عليها الصفحات من مفتاح الكاش&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;وضع Global Accelerator قدام المصدر&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;إرسال &lt;code&gt;max-age&lt;/code&gt; أطول من المصدر للمقالات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;إضافة توزيعة ثانية لنفس المحتوى&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;كل قيمة زيادة في المفتاح تقسم الصفحة الوحدة لنسخ كثيرة، والمدة القصيرة ترجّع الطلبات للمصدر بعد وقت قصير. ولما تصلح الاثنين، يلقى زوار أكثر نسخة جاهزة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; هذا يفضي الكاش، فتزيد المشكلة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا ما يخزن، فالطلبات لسا توصل للمصدر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E:&lt;/strong&gt; بيكون لها نفس المفتاح ونفس المدة، فتتكرر نفس المشكلة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%88%D8%B4-%D9%8A%D9%86%D8%AE%D8%B2%D9%86-%D9%88%D9%83%D9%85&quot;&gt;وش ينخزّن وكم؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cache-hit-ratio.html&quot;&gt;Increase the proportion of requests that are served directly from the CloudFront caches&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;كل هذا يوصّل الزائر لبوابة شبكتك، بس كيف تنبني الشبكة نفسها؟ في &lt;a href=&quot;/posts/aws-13-vpc/&quot;&gt;&lt;strong&gt;الجزء الثالث عشر&lt;/strong&gt;&lt;/a&gt; نفتح VPC ونبني واحدة من الصفر.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>DNS وRoute 53: عنوان موقعك</title>
    <link href="https://blog.sultanops.com/posts/aws-11-dns-route53/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-11-dns-route53/</id>
    <summary>كيف يتحول اسم مثل example.com إلى عنوان، ووش تعني أنواع السجلات، والفرق بين CNAME وAlias، وسياسات التوجيه وفحوصات الصحة في Route 53، مع تجربة عملية بدون ما تشتري نطاق.</summary>
    <content type="html">&lt;p&gt;موزّع الحمل في تطبيقنا من &lt;a href=&quot;/posts/aws-07-auto-scaling/&quot;&gt;الجزء السابع&lt;/a&gt; اسمه شي زي &lt;code&gt;web-alb-1234567890.eu-central-1.elb.amazonaws.com&lt;/code&gt;. ما أحد بيكتب هذا. الزائر يبي &lt;code&gt;shop.example.com&lt;/code&gt;، واللي يربط بينهم هو &lt;strong&gt;DNS&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;هذا القسم عن طريق الزائر لتطبيقك: الاسم في هذا الجزء، والسرعة في الجزء الجاي، ثم الشبكة الخاصة اللي يعيش فيها كل شي.&lt;/p&gt;
&lt;h2 id=&quot;كيف-يشتغل-dns&quot; tabindex=&quot;-1&quot;&gt;كيف يشتغل DNS؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كيف-يشتغل-dns&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DNS دليل هاتف الإنترنت: تسأله باسم، ويجاوبك بعنوان. وما فيه سيرفر واحد يعرف كل شي، فالجواب يجي عبر سلسلة:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 300&quot; role=&quot;img&quot; aria-labelledby=&quot;dns-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;dns-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;500&quot; y=&quot;110&quot; width=&quot;120&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;560&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;المتصفح&lt;/text&gt;
&lt;rect x=&quot;290&quot; y=&quot;110&quot; width=&quot;130&quot; height=&quot;70&quot; rx=&quot;10&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;355&quot; y=&quot;140&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Resolver&lt;/text&gt;
&lt;text x=&quot;355&quot; y=&quot;162&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;يسأل بدالك&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;14&quot; width=&quot;170&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;105&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;السيرفرات الجذرية&lt;/text&gt;
&lt;text x=&quot;105&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;روح اسأل &amp;#x200E;.com&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;116&quot; width=&quot;170&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;105&quot; y=&quot;142&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;سيرفرات &amp;#x200E;.com&lt;/text&gt;
&lt;text x=&quot;105&quot; y=&quot;164&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;روح اسأل Route 53&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;218&quot; width=&quot;170&quot; height=&quot;62&quot; rx=&quot;10&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;105&quot; y=&quot;244&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Route 53&lt;/text&gt;
&lt;text x=&quot;105&quot; y=&quot;266&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;العنوان 192.0.2.10&lt;/text&gt;
&lt;line x1=&quot;500&quot; y1=&quot;145&quot; x2=&quot;422&quot; y2=&quot;145&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-start=&quot;url(#dns-arrow)&quot; marker-end=&quot;url(#dns-arrow)&quot;/&gt;
&lt;text x=&quot;461&quot; y=&quot;135&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;1&lt;/text&gt;
&lt;text x=&quot;461&quot; y=&quot;168&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;5&lt;/text&gt;
&lt;line x1=&quot;290&quot; y1=&quot;130&quot; x2=&quot;192&quot; y2=&quot;45&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-start=&quot;url(#dns-arrow)&quot; marker-end=&quot;url(#dns-arrow)&quot;/&gt;
&lt;text x=&quot;254&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;2&lt;/text&gt;
&lt;line x1=&quot;290&quot; y1=&quot;145&quot; x2=&quot;192&quot; y2=&quot;147&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-start=&quot;url(#dns-arrow)&quot; marker-end=&quot;url(#dns-arrow)&quot;/&gt;
&lt;text x=&quot;241&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;3&lt;/text&gt;
&lt;line x1=&quot;290&quot; y1=&quot;160&quot; x2=&quot;192&quot; y2=&quot;249&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-start=&quot;url(#dns-arrow)&quot; marker-end=&quot;url(#dns-arrow)&quot;/&gt;
&lt;text x=&quot;254&quot; y=&quot;222&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;4&lt;/text&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;dns-caption&quot;&gt;الـ Resolver يمر على السيرفرات الجذرية ثم سيرفرات &amp;#x200E;.com ثم سيرفرات أسماء النطاق، ويرجع بالعنوان للمتصفح.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ol&gt;
&lt;li&gt;متصفحك يسأل الـ &lt;strong&gt;Resolver&lt;/strong&gt;، وهو عادةً من شركة الإنترنت أو خدمة عامة مثل &lt;code&gt;1.1.1.1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;الـ Resolver يسأل &lt;strong&gt;السيرفرات الجذرية&lt;/strong&gt;، وهي توجّهه لسيرفرات &lt;code&gt;.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;سيرفرات &lt;code&gt;.com&lt;/code&gt; توجّهه لسيرفرات أسماء النطاق.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سيرفرات أسماء النطاق&lt;/strong&gt; تعطيه الجواب النهائي.&lt;/li&gt;
&lt;li&gt;الـ Resolver يرجّع العنوان للمتصفح، ويحتفظ به لمدة &lt;strong&gt;TTL&lt;/strong&gt;، فاللي يسأل بعدك يلقى الجواب فوراً.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;وهذي المصطلحات اللي بتمر عليك:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Domain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;example.com&lt;/code&gt;: الاسم اللي تملكه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subdomain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blog.example.com&lt;/code&gt;: اسم تحته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Registrar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الشركة اللي تشتري منها الاسم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hosted Zone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الحاوية اللي فيها سجلات النطاق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Record&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سجل واحد: اسم يشير لقيمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;كم يقدر الـ Resolver يتذكر الجواب&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;route-53&quot; tabindex=&quot;-1&quot;&gt;Route 53 &lt;a class=&quot;heading-anchor&quot; href=&quot;#route-53&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Route 53&lt;/strong&gt; خدمة DNS من AWS، واسمها من منفذ DNS رقم 53. وعندها ثلاث مهام: تحفظ سجلات نطاقك وتجاوب عنها، وتسجّل النطاقات، وتراقب صحة تطبيقك وتوجّه الزوار على أساسها. وAWS تلتزم فيها بتوفر 100%.&lt;/p&gt;
&lt;h3 id=&quot;hosted-zones&quot; tabindex=&quot;-1&quot;&gt;Hosted Zones &lt;a class=&quot;heading-anchor&quot; href=&quot;#hosted-zones&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;عامة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أي أحد على الإنترنت&lt;/td&gt;
&lt;td&gt;&lt;code&gt;example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;خاصة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;داخل شبكات VPC تحددها فقط&lt;/td&gt;
&lt;td&gt;&lt;code&gt;db.series.internal&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;كل واحدة تكلف حوالي نص دولار في الشهر، مع مبلغ بسيط على الاستعلامات.&lt;/p&gt;
&lt;h3 id=&quot;أنواع-السجلات&quot; tabindex=&quot;-1&quot;&gt;أنواع السجلات &lt;a class=&quot;heading-anchor&quot; href=&quot;#أنواع-السجلات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;عنوان IPv4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blog.example.com&lt;/code&gt; إلى &lt;code&gt;192.0.2.10&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AAAA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;عنوان IPv6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blog.example.com&lt;/code&gt; إلى &lt;code&gt;2001:db8::10&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CNAME&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;اسم ثاني&lt;/td&gt;
&lt;td&gt;&lt;code&gt;www.example.com&lt;/code&gt; إلى &lt;code&gt;example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفرات أسماء النطاق&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ns-1.awsdns-01.org&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سيرفرات البريد&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mail.example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TXT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نص حر، مثل إثبات ملكية النطاق&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v=spf1 ...&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;cname-أو-alias&quot; tabindex=&quot;-1&quot;&gt;CNAME أو Alias؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#cname-أو-alias&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;عندك مشكلة شائعة: CNAME ما ينفع على النطاق الأساسي &lt;code&gt;example.com&lt;/code&gt;، وأنت تبيه يشير لموزّع الحمل. الحل هو &lt;strong&gt;Alias&lt;/strong&gt;، وهو نوع خاص في Route 53:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;CNAME&lt;/th&gt;
&lt;th&gt;Alias&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;يشير إلى&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أي اسم&lt;/td&gt;
&lt;td&gt;موارد AWS مثل ALB وCloudFront وAPI Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;النطاق الأساسي&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ما ينفع&lt;/td&gt;
&lt;td&gt;ينفع&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الاستعلامات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مدفوعة&lt;/td&gt;
&lt;td&gt;مجانية لموارد AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحدده أنت&lt;/td&gt;
&lt;td&gt;تحدده Route 53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;صحة الهدف&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ما يتابعها&lt;/td&gt;
&lt;td&gt;يقدر يتابعها&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;القاعدة بسيطة: لو الهدف على AWS، استخدم Alias. ولاحظ إنه ما يشير لاسم DNS حق سيرفر EC2.&lt;/p&gt;
&lt;h3 id=&quot;اختيار-ttl&quot; tabindex=&quot;-1&quot;&gt;اختيار TTL &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختيار-ttl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;مدة طويلة:&lt;/strong&gt; استعلامات أقل وتكلفة أقل، بس أي تغيير ياخذ وقت عشان ينتشر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مدة قصيرة:&lt;/strong&gt; التغيير ينتشر بسرعة، بس الاستعلامات تزيد.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout-tip&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-bulb&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.45 1 1.15 1 1.9V16h5v-.2c0-.75.4-1.45 1-1.9A6 6 0 0 0 12 3z&quot;/&gt;&lt;/svg&gt;&lt;span&gt;قبل أي نقل&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;لو بتنقل موقعك لسيرفر ثاني، قلّل TTL إلى 60 ثانية قبلها بيوم. سوّ النقل، وتأكد إن كل شي تمام، ثم ارجع زوّدها.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;سياسات-التوجيه&quot; tabindex=&quot;-1&quot;&gt;سياسات التوجيه &lt;a class=&quot;heading-anchor&quot; href=&quot;#سياسات-التوجيه&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&amp;quot;التوجيه&amp;quot; هنا ما يعني إن الزيارات تمر عبر Route 53. هي تختار وش الجواب اللي تعطيه فقط، وبعدها يتصل الزائر مباشرة بالعنوان.&lt;/p&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Simple&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;سجل واحد، وممكن فيه أكثر من قيمة&lt;/td&gt;
&lt;td&gt;سيرفر واحد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Weighted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بنسب تحددها&lt;/td&gt;
&lt;td&gt;تجربة نسخة جديدة على 10% من الزوار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الـ Region الأقل تأخير للزائر&lt;/td&gt;
&lt;td&gt;تطبيق في أكثر من Region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الأساسي طالما سليم، وإلا الاحتياطي&lt;/td&gt;
&lt;td&gt;التعافي من الكوارث&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Geolocation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حسب دولة الزائر أو قارته&lt;/td&gt;
&lt;td&gt;لغة أو محتوى حسب البلد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Geoproximity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حسب المسافة، مع تكبير أو تصغير نطاق كل موقع&lt;/td&gt;
&lt;td&gt;نقل الزيارات تدريجياً بين المناطق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IP-based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;حسب نطاق IP الزائر&lt;/td&gt;
&lt;td&gt;شبكات معروفة عندك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multivalue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;لين 8 سجلات سليمة&lt;/td&gt;
&lt;td&gt;توزيع بسيط، وما يغني عن موزّع الحمل&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-note&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-info&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;circle cx=&quot;12&quot; cy=&quot;12&quot; r=&quot;8.5&quot;/&gt;&lt;path d=&quot;M12 11v5M12 8h.01&quot;/&gt;&lt;/svg&gt;&lt;span&gt;الأقرب مو دايماً الأسرع&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Geolocation&lt;/strong&gt; يختار حسب مكان الزائر، حتى لو فيه موقع أسرع له، فهو يناسب القوانين واللغة. لو هدفك السرعة، اختر &lt;strong&gt;Latency&lt;/strong&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;فحوصات-الصحة&quot; tabindex=&quot;-1&quot;&gt;فحوصات الصحة &lt;a class=&quot;heading-anchor&quot; href=&quot;#فحوصات-الصحة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;عشان Failover وغيرها تشتغل، لازم Route 53 تعرف مين سليم:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;أجهزة فحص حول العالم تطلب عنوانك عبر HTTP أو HTTPS أو TCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Calculated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يجمع نتائج عدة فحوصات في نتيجة وحدة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CloudWatch Alarm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;يعتمد على إنذار، وهذا الحل للموارد الخاصة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;وأجهزة الفحص من الإنترنت، فما توصل لسيرفر في شبكة خاصة، ولازم مجموعة الأمان تسمح لنطاقاتها لو تفحص هدف عام.&lt;/p&gt;
&lt;h2 id=&quot;نطاق-مشترى-من-مكان-ثاني&quot; tabindex=&quot;-1&quot;&gt;نطاق مشترى من مكان ثاني &lt;a class=&quot;heading-anchor&quot; href=&quot;#نطاق-مشترى-من-مكان-ثاني&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;شراء النطاق وإدارة سجلاته شيئين منفصلين. لو اشتريت نطاقك من شركة ثانية وتبي Route 53 تجاوب عنه:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;أنشئ &lt;strong&gt;Hosted Zone&lt;/strong&gt; عامة باسم النطاق.&lt;/li&gt;
&lt;li&gt;انسخ سيرفرات الأسماء الأربعة من سجل &lt;strong&gt;NS&lt;/strong&gt; فيها.&lt;/li&gt;
&lt;li&gt;الصقها في إعدادات النطاق عند الشركة اللي اشتريت منها.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;بعد ما ينتشر التغيير، Route 53 تصير هي اللي تجاوب.&lt;/p&gt;
&lt;p&gt;ولو عندك شبكة في مكتبك، تقدر تربط DNS حقها مع AWS عبر &lt;strong&gt;Resolver Endpoints&lt;/strong&gt;: الداخلي (Inbound) يخلي شبكتك تسأل عن أسماء AWS الخاصة، والخارجي (Outbound) يخلي AWS تسأل عن أسماء شبكتك. وهذا يحتاج اتصال بين الشبكتين، وهو موضوع &lt;a href=&quot;/posts/aws-14-vpc-connectivity/&quot;&gt;الجزء الرابع عشر&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;عملي-توجيه-بالنسب-بدون-شراء-نطاق&quot; tabindex=&quot;-1&quot;&gt;عملي: توجيه بالنسب بدون شراء نطاق &lt;a class=&quot;heading-anchor&quot; href=&quot;#عملي-توجيه-بالنسب-بدون-شراء-نطاق&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;الـ Hosted Zone الخاصة تخليك تجرب كل هذا بدون نطاق حقيقي. وبنستخدم سيرفرك &lt;code&gt;web-1&lt;/code&gt; من &lt;a href=&quot;/posts/aws-03-ec2-first-server/&quot;&gt;الجزء الثالث&lt;/a&gt; داخل الشبكة الافتراضية. من CloudShell، أنشئ النطاق الخاص:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;VPC_ID&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws ec2 describe-vpcs &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;isDefault,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;true &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Vpcs[0].VpcId&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;ZONE_ID&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;aws route53 create-hosted-zone &lt;span class=&quot;token parameter variable&quot;&gt;--name&lt;/span&gt; series.internal &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --caller-reference &lt;span class=&quot;token string&quot;&gt;&quot;demo-&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;date&lt;/span&gt; +%s&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--vpc&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;VPCRegion&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;$AWS_REGION,VPCId&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;$VPC_ID &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token parameter variable&quot;&gt;--query&lt;/span&gt; HostedZone.Id &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; text&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;الحين أضف سجلين لنفس الاسم، 80% للنسخة القديمة و20% للجديدة. والعناوين هنا وهمية، لأن DNS يجاوب فقط وما يتصل بها:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;CHANGES&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;{&quot;Changes&quot;:[
  {&quot;Action&quot;:&quot;CREATE&quot;,&quot;ResourceRecordSet&quot;:{&quot;Name&quot;:&quot;app.series.internal&quot;,&quot;Type&quot;:&quot;A&quot;,&quot;TTL&quot;:5,
    &quot;SetIdentifier&quot;:&quot;old&quot;,&quot;Weight&quot;:80,&quot;ResourceRecords&quot;:[{&quot;Value&quot;:&quot;10.0.0.80&quot;}]}},
  {&quot;Action&quot;:&quot;CREATE&quot;,&quot;ResourceRecordSet&quot;:{&quot;Name&quot;:&quot;app.series.internal&quot;,&quot;Type&quot;:&quot;A&quot;,&quot;TTL&quot;:5,
    &quot;SetIdentifier&quot;:&quot;new&quot;,&quot;Weight&quot;:20,&quot;ResourceRecords&quot;:[{&quot;Value&quot;:&quot;10.0.0.20&quot;}]}}
]}&#39;&lt;/span&gt;

aws route53 change-resource-record-sets &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --hosted-zone-id &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ZONE_ID&lt;/span&gt;&quot;&lt;/span&gt; --change-batch &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$CHANGES&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;ادخل على السيرفر من EC2 Instance Connect، وأرسل 20 سؤال. والتجربة تاخذ دقيقتين لأننا ننتظر انتهاء TTL في كل مرة:&lt;/p&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dnf &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; bind-utils

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;seq&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;dig&lt;/span&gt; +short app.series.internal
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sort&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;uniq&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;p&gt;بتشوف توزيع قريب من 16 مقابل 4. جرّب كمان &lt;code&gt;dig +trace aws.amazon.com&lt;/code&gt;، وبتشوف السلسلة اللي في الرسم خطوة بخطوة.&lt;/p&gt;
&lt;p&gt;ولو عندك نطاق، أضف سجل &lt;strong&gt;A&lt;/strong&gt; من نوع &lt;strong&gt;Alias&lt;/strong&gt; يشير لموزّع الحمل، وصار موقعك باسمك.&lt;/p&gt;
&lt;aside class=&quot;callout callout-security&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-shield&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M12 3l7.5 3v5.5c0 4.6-3.2 8.3-7.5 9.5-4.3-1.2-7.5-4.9-7.5-9.5V6L12 3z&quot;/&gt;&lt;path d=&quot;M9 12l2 2 4-4&quot;/&gt;&lt;/svg&gt;&lt;span&gt;احذف بعد التجربة&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;الـ Hosted Zone اللي تنحذف خلال 12 ساعة من إنشائها ما تنحسب. لازم تحذف السجلات أولاً، ثم النطاق:&lt;/p&gt;
&lt;/aside&gt;
&lt;figure class=&quot;code-block&quot; dir=&quot;ltr&quot;&gt;
&lt;figcaption class=&quot;code-bar&quot;&gt;&lt;span class=&quot;code-lang&quot; lang=&quot;en&quot;&gt;Bash&lt;/span&gt;&lt;button type=&quot;button&quot; class=&quot;copy-btn&quot; data-copy hidden&gt;&lt;svg class=&quot;icon icon-copy&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;rect x=&quot;8.5&quot; y=&quot;8.5&quot; width=&quot;11.5&quot; height=&quot;11.5&quot; rx=&quot;2&quot;/&gt;&lt;path d=&quot;M15.5 8.5V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7.5a2 2 0 0 0 2 2h2.5&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;icon icon-check&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M5 12.5l4.5 4.5L19 7.5&quot;/&gt;&lt;/svg&gt;&lt;span class=&quot;copy-label&quot;&gt;نسخ&lt;/span&gt;&lt;/button&gt;&lt;/figcaption&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;aws route53 change-resource-record-sets &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --hosted-zone-id &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ZONE_ID&lt;/span&gt;&quot;&lt;/span&gt; --change-batch &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${CHANGES&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;CREATE&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;DELETE}&lt;/span&gt;&quot;&lt;/span&gt;

aws route53 delete-hosted-zone &lt;span class=&quot;token parameter variable&quot;&gt;--id&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$ZONE_ID&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNS&lt;/strong&gt; يحول الاسم لعنوان عبر سلسلة، والجواب ينحفظ لمدة &lt;strong&gt;TTL&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Route 53&lt;/strong&gt; تحفظ سجلاتك، وHosted Zone ممكن تكون عامة أو خاصة.&lt;/li&gt;
&lt;li&gt;لو الهدف على AWS استخدم &lt;strong&gt;Alias&lt;/strong&gt;، وهو ينفع على النطاق الأساسي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سياسات التوجيه&lt;/strong&gt; تختار الجواب فقط، والزيارات ما تمر عبرها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;فحوصات الصحة&lt;/strong&gt; هي اللي تخلي Failover يشتغل.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;موقع مخبز يشتغل خلف Application Load Balancer، وصاحبه يبي اللي يكتب النطاق الأساسي &lt;code&gt;example.com&lt;/code&gt; يوصل له. وعناوين الموزّع ممكن تتغير في أي وقت. أي سجل يناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;سجل CNAME على &lt;code&gt;example.com&lt;/code&gt;، يشير لاسم الموزّع&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;سجل A فيه عناوين الموزّع الحالية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;سجل TXT فيه اسم الموزّع&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;سجل A من نوع Alias، يشير للموزّع&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Alias ينفع على النطاق الأساسي، ويتابع عناوين الموزّع المتغيرة بدالك، والاستعلامات عن موارد AWS مثل هذا مجانية.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; CNAME ما ينفع على النطاق الأساسي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; أول ما تتغير العناوين، يصير السجل يشير لمكان غلط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; سجل TXT فيه نص حر، والمتصفحات ما تستخدمه عشان تلقى السيرفر.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#cname-%D8%A3%D9%88-alias&quot;&gt;CNAME أو Alias؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html&quot;&gt;Choosing between alias and non-alias records&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;خدمة بث تشتغل في Regionين، فرانكفورت والبحرين. ورخصتها تشترط إن زوار السعودية ياخذون نسخة البحرين دايماً، حتى لو كانت فرانكفورت أسرع لهم. أي سياسة توجيه تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Geolocation&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Latency&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Weighted&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Multivalue&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Geolocation يختار حسب مكان الزائر مو حسب السرعة، وهذا اللي يحتاجه شرط الرخصة.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يرسل الزائر لأسرع Region، وممكن تكون فرانكفورت.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا يقسم الزيارات بنسب، مهما كانت دولة الزائر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يرجّع عدة سجلات سليمة، بدون أي اعتبار للدولة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B3%D9%8A%D8%A7%D8%B3%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%8A%D9%87&quot;&gt;سياسات التوجيه&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-geo.html&quot;&gt;Geolocation routing&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;تطبيق داخلي يستخدم سجل Failover في Hosted Zone خاصة. وسيرفراته الأساسية لها عناوين خاصة فقط، ولازم تبقى كذا. كيف تعرف Route 53 إن الأساسي سليم؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;فحص Endpoint على العناوين الخاصة للسيرفرات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;عناوين عامة للسيرفرات، عشان توصل لها أجهزة الفحص&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;فحص صحة مبني على CloudWatch Alarm يراقب الأساسي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;فحص Calculated يجمع فحوصات Endpoint على السيرفرات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;أجهزة الفحص في Route 53 جاية من الإنترنت، فما توصل لعنوان خاص. أما CloudWatch Alarm فيقدر يراقب مقياس من السيرفرات، وفحص الصحة يتبع الإنذار.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; أجهزة الفحص برا الشبكة، وما توصل لعنوان خاص.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يخالف شرط إن السيرفرات تبقى خاصة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يجمع فحوصات ثانية بس، وهي لسا ما توصل للسيرفرات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%81%D8%AD%D9%88%D8%B5%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%AD%D8%A9&quot;&gt;فحوصات الصحة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-private-hosted-zones.html&quot;&gt;Configuring failover in a private hosted zone&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;شركة ناشئة اشترت نطاقها من شركة ثانية وتبي يبقى التسجيل عندها، بس Route 53 هي اللي ترد على سجلات النطاق. وش لازم تسوي؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تنقل تسجيل النطاق إلى Route 53 أول&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تنشئ Hosted Zone عامة، وتحط سيرفرات أسمائها في إعدادات النطاق عند الشركة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;تنشئ Hosted Zone خاصة، وتربط الـ VPC فيها&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تنشئ Resolver Endpoint داخلي في الـ VPC&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;شراء الاسم والرد عليه شيئين منفصلين. وأول ما تضيف الشركة سيرفرات أسماء Route 53، تصير Route 53 هي اللي ترد.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; النقل اختياري، وما تحتاجه عشان تدير السجلات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الـ Zone الخاصة ترد داخل شبكات VPC تحددها فقط، مو للعامة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا يخلي شبكة المكتب تسأل عن الأسماء الخاصة، وما له علاقة بالردود العامة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D9%86%D8%B7%D8%A7%D9%82-%D9%85%D8%B4%D8%AA%D8%B1%D9%89-%D9%85%D9%86-%D9%85%D9%83%D8%A7%D9%86-%D8%AB%D8%A7%D9%86%D9%8A&quot;&gt;نطاق مشترى من مكان ثاني&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/migrate-dns-domain-in-use.html&quot;&gt;Making Route 53 the DNS service for a domain that&#39;s in use&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;فريق يبي يرسل 10% من الزوار لإصدار جديد من تطبيقه، ويرجّع هذي الزيارات خلال دقايق لو صار أي شي. أي &lt;strong&gt;خطوتين&lt;/strong&gt; تناسب؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;إنشاء سجلين Weighted بنفس الاسم، بوزن 90 و10&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;إنشاء سجلات Geolocation لدولة وحدة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;رفع TTL السجلات إلى يوم كامل قبل البداية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;وضع عناوين الإصدارين في سجل Simple واحد&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;استخدام TTL قصير على هذي السجلات، مثل 60 ثانية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;سجلات Weighted تقسم الردود بالنسب اللي تحددها، والـ TTL القصير يعني التغيير يوصل للزوار بسرعة، لأن الـ Resolver يتذكر الجواب هذي المدة فقط.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا يختار حسب المكان، مو حسب نسبة من الزوار.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الـ Resolver بيحتفظ بالجواب القديم لحد يوم، فيصير الرجوع بطيء.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; سجل Simple ما يعطيك طريقة تحدد فيها النسبة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B3%D9%8A%D8%A7%D8%B3%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%8A%D9%87&quot;&gt;سياسات التوجيه&lt;/a&gt; و&lt;a href=&quot;#%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-ttl&quot;&gt;اختيار TTL&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-weighted.html&quot;&gt;Weighted routing&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;الحين موقعك له اسم، بس سيرفره لسا في مكان واحد، والزائر البعيد ينتظر. في &lt;a href=&quot;/posts/aws-12-cloudfront-global-accelerator/&quot;&gt;&lt;strong&gt;الجزء الثاني عشر&lt;/strong&gt;&lt;/a&gt; نقرّبه منه مع CloudFront وGlobal Accelerator.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>أي قاعدة بيانات تختار؟</title>
    <link href="https://blog.sultanops.com/posts/aws-10-choosing-database/"/>
    <updated>2026-11-02T00:00:00Z</updated>
    <published>2026-11-02T00:00:00Z</published>
    <id>https://blog.sultanops.com/posts/aws-10-choosing-database/</id>
    <summary>علائقية أو مفتاح وقيمة أو مستندات أو رسم بياني أو سلاسل زمنية أو بحث. وش يناسب كل نوع، وكيف تختار من قواعد بيانات AWS الكثيرة بأسئلة بسيطة، وكيف تكبر طبقة البيانات في تطبيق حقيقي خطوة بخطوة.</summary>
    <content type="html">&lt;p&gt;في &lt;a href=&quot;/posts/aws-08-rds-aurora/&quot;&gt;الجزء الثامن&lt;/a&gt; و&lt;a href=&quot;/posts/aws-09-elasticache/&quot;&gt;التاسع&lt;/a&gt; شفنا RDS وAurora وElastiCache. بس لو فتحت قائمة AWS بتلقى أكثر من عشر خدمات قواعد بيانات، وهنا يبدأ الضياع.&lt;/p&gt;
&lt;p&gt;السؤال الصحيح مو &amp;quot;وش أفضل قاعدة بيانات؟&amp;quot;، لأن ما فيه جواب واحد. السؤال: &lt;strong&gt;وش يناسب هذي البيانات بالذات؟&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;أسئلة-تبدأ-بها&quot; tabindex=&quot;-1&quot;&gt;أسئلة تبدأ بها &lt;a class=&quot;heading-anchor&quot; href=&quot;#أسئلة-تبدأ-بها&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;قبل ما تفتح أي خدمة، جاوب على هذي الأسئلة:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;strong&gt;وش شكل البيانات؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جداول مترابطة، أو مستندات متغيرة، أو علاقات، أو قراءات عبر الزمن&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كيف بتقراها؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بمفتاح، أو باستعلامات معقدة تربط جداول، أو ببحث في النص، أو بتجميع ملايين الصفوف&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كم القراءة مقابل الكتابة؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;الكثير من القراءة يتحل بكاش ونسخ قراءة، والكثير من الكتابة يحتاج تصميم مختلف&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كم الحجم وكم النمو؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جيجابايت عادية أو بيانات تكبر بلا سقف&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كم لازم تكون دقيقة؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تحويل مبلغ يحتاج معاملات صارمة، وعدد الإعجابات يتحمل تأخير&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;كم تقدر تدير؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;فريق صغير يفضل خدمة تتوسّع لحالها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;وش يعرف فريقك؟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;معرفة الفريق تختصر عليك أخطاء كثيرة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;أنواع-قواعد-البيانات&quot; tabindex=&quot;-1&quot;&gt;أنواع قواعد البيانات &lt;a class=&quot;heading-anchor&quot; href=&quot;#أنواع-قواعد-البيانات&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&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;خدمة AWS&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;strong&gt;علائقية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;جداول مترابطة ومعاملات&lt;/td&gt;
&lt;td&gt;RDS وAurora&lt;/td&gt;
&lt;td&gt;طلبات وحسابات وفواتير&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مفتاح وقيمة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قيمة تجيبها بمفتاحها، بحجم ضخم&lt;/td&gt;
&lt;td&gt;DynamoDB&lt;/td&gt;
&lt;td&gt;سلات شراء وملفات مستخدمين&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;مستندات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSON بحقول مختلفة&lt;/td&gt;
&lt;td&gt;DocumentDB وDynamoDB&lt;/td&gt;
&lt;td&gt;كتالوجات ومحتوى&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;في الذاكرة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بيانات سريعة&lt;/td&gt;
&lt;td&gt;ElastiCache وMemoryDB&lt;/td&gt;
&lt;td&gt;كاش وجلسات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;أعمدة واسعة&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;صفوف بأسلوب Cassandra وكتابة عالية&lt;/td&gt;
&lt;td&gt;Keyspaces&lt;/td&gt;
&lt;td&gt;أنظمة Cassandra قائمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;رسم بياني&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;روابط بين الأشياء&lt;/td&gt;
&lt;td&gt;Neptune&lt;/td&gt;
&lt;td&gt;شبكات اجتماعية وكشف احتيال&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;سلاسل زمنية&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قراءات عبر الزمن&lt;/td&gt;
&lt;td&gt;Timestream for InfluxDB&lt;/td&gt;
&lt;td&gt;حساسات ومقاييس&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;بحث&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;نصوص تبحث داخلها&lt;/td&gt;
&lt;td&gt;OpenSearch&lt;/td&gt;
&lt;td&gt;بحث الموقع والسجلات&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;تحليلات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تجميع على بيانات ضخمة&lt;/td&gt;
&lt;td&gt;Redshift&lt;/td&gt;
&lt;td&gt;تقارير الإدارة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ملفات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ملفات بأي شكل&lt;/td&gt;
&lt;td&gt;S3 مع Athena&lt;/td&gt;
&lt;td&gt;سجلات وأرشيف&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;علائقية-أو-nosql&quot; tabindex=&quot;-1&quot;&gt;علائقية أو NoSQL؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#علائقية-أو-nosql&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;هذا أول قرار، والفرق الحقيقي في طريقة التفكير:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;علائقية (SQL)&lt;/th&gt;
&lt;th&gt;NoSQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التصميم&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;تصمم الجداول، ثم تكتب أي استعلام&lt;/td&gt;
&lt;td&gt;تحدد الاستعلامات أولاً، ثم تصمم عليها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;الاستعلامات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;مرنة، مع ربط الجداول&lt;/td&gt;
&lt;td&gt;محدودة، وسريعة في المسار اللي صممته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;المعاملات&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;قوية&lt;/td&gt;
&lt;td&gt;تختلف من خدمة لخدمة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;التوسّع&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;القراءة سهلة، والكتابة غالباً بسيرفر أكبر&lt;/td&gt;
&lt;td&gt;أفقي، بأداء ثابت مع الحجم&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;aside class=&quot;callout callout-tip&quot;&gt;&lt;p class=&quot;callout-title&quot;&gt;&lt;svg class=&quot;icon icon-bulb&quot; viewBox=&quot;0 0 24 24&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;path d=&quot;M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.45 1 1.15 1 1.9V16h5v-.2c0-.75.4-1.45 1-1.9A6 6 0 0 0 12 3z&quot;/&gt;&lt;/svg&gt;&lt;span&gt;ابدأ علائقية إلا لو عندك سبب&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;أغلب التطبيقات تناسبها قاعدة علائقية، خصوصاً لو ما تعرف كل استعلاماتك من البداية. واختر NoSQL لسبب واضح، مو لأنها &amp;quot;تتوسّع&amp;quot; وبس.&lt;/p&gt;
&lt;/aside&gt;
&lt;h3 id=&quot;خدمات-بتمر-عليك&quot; tabindex=&quot;-1&quot;&gt;خدمات بتمر عليك &lt;a class=&quot;heading-anchor&quot; href=&quot;#خدمات-بتمر-عليك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DynamoDB:&lt;/strong&gt; مفتاح وقيمة بدون سيرفرات، وأداء ثابت بأي حجم. بنشرحها في &lt;a href=&quot;/posts/aws-21-lambda-api-dynamodb/&quot;&gt;الجزء الحادي والعشرين&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DocumentDB:&lt;/strong&gt; مستندات متوافقة مع MongoDB، فتناسبك لو تنقل تطبيق MongoDB قائم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MemoryDB:&lt;/strong&gt; ذاكرة سريعة مثل Valkey لكن بيانات تدوم، فتقدر تستخدمها كقاعدة أساسية وليس كاش فقط.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyspaces:&lt;/strong&gt; متوافقة مع Apache Cassandra، بدون سيرفرات تديرها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Neptune:&lt;/strong&gt; للبيانات اللي قيمتها في العلاقات، زي &amp;quot;أصدقاء أصدقائي اللي اشتروا هذا&amp;quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timestream for InfluxDB:&lt;/strong&gt; لقراءات الحساسات والمقاييس. والنسخة القديمة LiveAnalytics مقفلة على العملاء الجدد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenSearch:&lt;/strong&gt; بحث نصي وتحليل سجلات، وعادةً نسخة من بياناتك مو المصدر الأساسي.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redshift:&lt;/strong&gt; مستودع بيانات للتقارير الضخمة. بنشرحه في &lt;a href=&quot;/posts/aws-23-athena-redshift-glue/&quot;&gt;الجزء الثالث والعشرين&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;كيف-تقرر&quot; tabindex=&quot;-1&quot;&gt;كيف تقرر؟ &lt;a class=&quot;heading-anchor&quot; href=&quot;#كيف-تقرر&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;مر على الأسئلة من فوق لتحت، وأول &amp;quot;نعم&amp;quot; هي نقطة بدايتك:&lt;/p&gt;
&lt;figure class=&quot;diagram&quot;&gt;
&lt;svg viewBox=&quot;0 0 640 406&quot; role=&quot;img&quot; aria-labelledby=&quot;choose-caption&quot;&gt;
&lt;defs&gt;
&lt;marker id=&quot;choose-arrow&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;
&lt;path d=&quot;M0 0L10 5L0 10z&quot; fill=&quot;var(--color-accent)&quot;/&gt;
&lt;/marker&gt;
&lt;/defs&gt;
&lt;rect x=&quot;220&quot; y=&quot;10&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;نسخة مؤقتة تسرّع القراءة؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;10&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;34&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;ElastiCache&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;29&quot; x2=&quot;162&quot; y2=&quot;29&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;23&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;48&quot; x2=&quot;420&quot; y2=&quot;66&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;404&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;68&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;92&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;بحث داخل نصوص أو سجلات؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;68&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;92&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;OpenSearch&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;87&quot; x2=&quot;162&quot; y2=&quot;87&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;81&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;106&quot; x2=&quot;420&quot; y2=&quot;124&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;404&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;126&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;تقارير على بيانات ضخمة؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;126&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Redshift, Athena&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;145&quot; x2=&quot;162&quot; y2=&quot;145&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;139&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;164&quot; x2=&quot;420&quot; y2=&quot;182&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;404&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;184&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;208&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;قيمة البيانات في العلاقات بين الأشياء؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;184&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;208&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Neptune&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;203&quot; x2=&quot;162&quot; y2=&quot;203&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;222&quot; x2=&quot;420&quot; y2=&quot;240&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;404&quot; y=&quot;236&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;242&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;266&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;قراءات عبر الزمن من حساسات مثلاً؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;242&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;266&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;Timestream&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;261&quot; x2=&quot;162&quot; y2=&quot;261&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;255&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;280&quot; x2=&quot;420&quot; y2=&quot;298&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;404&quot; y=&quot;294&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;300&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-surface)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;324&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;قراءة بمفتاح بسيط على حجم ضخم؟&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;300&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-sunken)&quot; stroke=&quot;var(--color-line-strong)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;324&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;DynamoDB&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;319&quot; x2=&quot;162&quot; y2=&quot;319&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;text x=&quot;191&quot; y=&quot;313&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;نعم&lt;/text&gt;
&lt;line x1=&quot;420&quot; y1=&quot;338&quot; x2=&quot;420&quot; y2=&quot;356&quot; stroke=&quot;var(--color-line-strong)&quot; stroke-width=&quot;2&quot;/&gt;
&lt;text x=&quot;404&quot; y=&quot;352&quot; text-anchor=&quot;middle&quot; class=&quot;d-small&quot;&gt;لا&lt;/text&gt;
&lt;rect x=&quot;220&quot; y=&quot;358&quot; width=&quot;400&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;420&quot; y=&quot;382&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;بيانات تطبيق عادية&lt;/text&gt;
&lt;rect x=&quot;20&quot; y=&quot;358&quot; width=&quot;140&quot; height=&quot;38&quot; rx=&quot;8&quot; fill=&quot;var(--color-accent-soft)&quot; stroke=&quot;var(--color-accent)&quot;/&gt;
&lt;text x=&quot;90&quot; y=&quot;382&quot; text-anchor=&quot;middle&quot; class=&quot;d-label&quot;&gt;RDS, Aurora&lt;/text&gt;
&lt;line x1=&quot;220&quot; y1=&quot;377&quot; x2=&quot;162&quot; y2=&quot;377&quot; stroke=&quot;var(--color-accent)&quot; stroke-width=&quot;2&quot; marker-end=&quot;url(#choose-arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;figcaption id=&quot;choose-caption&quot;&gt;تبدأ من أعلى، وكل &quot;نعم&quot; تعطيك خدمة تبدأ بها، ولو ما انطبق شي فقاعدة علائقية هي الاختيار الافتراضي.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;وهذا دليل بداية مو قانون. التطبيق الواحد عادةً يستخدم أكثر من نوع، وكل نوع بيانات يروح للي يناسبه.&lt;/p&gt;
&lt;h2 id=&quot;طبقة-بيانات-تكبر-مع-تطبيقك&quot; tabindex=&quot;-1&quot;&gt;طبقة بيانات تكبر مع تطبيقك &lt;a class=&quot;heading-anchor&quot; href=&quot;#طبقة-بيانات-تكبر-مع-تطبيقك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ما تحتاج كل هذا من أول يوم. تخيل متجر إلكتروني يكبر مع الوقت:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;الإطلاق:&lt;/strong&gt; قاعدة RDS واحدة تكفي. ولما تبدأ تستقبل طلبات حقيقية، فعّل &lt;strong&gt;Multi-AZ&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الزوار زادوا والقراءة ثقلت:&lt;/strong&gt; أضف &lt;strong&gt;ElastiCache&lt;/strong&gt; للصفحات الرئيسية والجلسات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التقارير صارت تبطّئ الموقع:&lt;/strong&gt; وجّهها لـ &lt;strong&gt;نسخة قراءة&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;بحث المنتجات ضعيف:&lt;/strong&gt; أضف &lt;strong&gt;OpenSearch&lt;/strong&gt; وعبّيه من قاعدة البيانات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الإدارة تبي تحليلات سنوات:&lt;/strong&gt; انقل البيانات لـ &lt;strong&gt;S3 مع Athena&lt;/strong&gt; أو &lt;strong&gt;Redshift&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;صار عندك زوار حول العالم:&lt;/strong&gt; انتقل لـ &lt;strong&gt;Aurora Global Database&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;كل خطوة جات بعد مشكلة حقيقية قستها، مو قبلها. أي خدمة زايدة تعني تكلفة وتعقيد وشي ثاني ممكن يتعطّل.&lt;/p&gt;
&lt;h3 id=&quot;أخطاء-شائعة&quot; tabindex=&quot;-1&quot;&gt;أخطاء شائعة &lt;a class=&quot;heading-anchor&quot; href=&quot;#أخطاء-شائعة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;اختيار NoSQL لأنها &amp;quot;تتوسّع&amp;quot;:&lt;/strong&gt; ثم تكتشف إنك تحتاج استعلامات ما صممت لها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تشغيل التقارير على قاعدة الإنتاج:&lt;/strong&gt; استعلام واحد ثقيل يبطّئ الموقع كله.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;تخزين الملفات داخل قاعدة البيانات:&lt;/strong&gt; حطها في S3، واحفظ رابطها في القاعدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;معاملة الكاش كمصدر للحقيقة:&lt;/strong&gt; لو ضاع، لازم ما يضيع معه شي مهم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-AZ في بيئة التطوير:&lt;/strong&gt; تكلفة مضاعفة بدون فايدة غالباً.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;الخلاصة&quot; tabindex=&quot;-1&quot;&gt;الخلاصة &lt;a class=&quot;heading-anchor&quot; href=&quot;#الخلاصة&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;اسأل عن &lt;strong&gt;شكل البيانات وطريقة قراءتها&lt;/strong&gt; قبل اسم الخدمة.&lt;/li&gt;
&lt;li&gt;ابدأ &lt;strong&gt;علائقية&lt;/strong&gt; إلا لو عندك سبب واضح لغيرها.&lt;/li&gt;
&lt;li&gt;التطبيق الواحد يستخدم أكثر من نوع، وكل بيانات تروح للي يناسبها.&lt;/li&gt;
&lt;li&gt;أضف كل خدمة لما &lt;strong&gt;تقيس مشكلة حقيقية&lt;/strong&gt;، مو قبلها.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;اختبر-نفسك&quot; tabindex=&quot;-1&quot;&gt;اختبر نفسك &lt;a class=&quot;heading-anchor&quot; href=&quot;#اختبر-نفسك&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class=&quot;quiz-intro&quot;&gt;قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.&lt;/p&gt;
&lt;div class=&quot;quiz-deck&quot; data-quiz-deck data-next=&quot;التالي&quot; data-previous=&quot;السابق&quot; data-finish=&quot;اعرض النتيجة&quot; data-right=&quot;إجابتك صحيحة&quot; data-wrong=&quot;إجابتك غلط&quot; data-score=&quot;نتيجتك: {score} من {total}&quot; data-retry=&quot;أعد المحاولة&quot;&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 1 من 5&lt;/p&gt;
&lt;p&gt;عيادة تبني نظام حجوزات فيه مواعيد ومرضى ومدفوعات. البيانات مترابطة، والمدفوعات تحتاج معاملات صارمة، والفريق الصغير لسا ما يعرف كل التقارير اللي بيحتاجها. وين يبدأ؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;DynamoDB، لأنها تتوسع بلا حدود&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;RDS أو Aurora، بتصميم علائقي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;ElastiCache، لأن الذاكرة أسرع شي&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Neptune، لأن البيانات فيها علاقات&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;البيانات المترابطة والمعاملات والاستعلامات اللي ما تقدر تتوقعها كلها تشير لقاعدة علائقية. وهي الخيار المعقول افتراضياً إلا لو فيه سبب واضح.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; بتصمم حول استعلامات معروفة من البداية، وبيصعب إضافة تقارير جديدة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الكاش مو مصدر الحقيقة، فما ينفع تكون المدفوعات فيه.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; Neptune يناسب شبكات العلاقات العميقة، مو الجداول المترابطة العادية.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%B9%D9%84%D8%A7%D8%A6%D9%82%D9%8A%D8%A9-%D8%A3%D9%88-nosql&quot;&gt;علائقية أو NoSQL؟&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/decision-guides/latest/databases-on-aws-how-to-choose/databases-on-aws-how-to-choose.html&quot;&gt;Choosing an AWS database service&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 2 من 5&lt;/p&gt;
&lt;p&gt;تطبيق اجتماعي يبي يقترح &amp;quot;ناس ممكن تعرفهم&amp;quot; بتتبع أصدقاء الأصدقاء عبر عدة خطوات، وبرد سريع. أي خدمة تناسب أكثر؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;RDS، مع ربط جداول لكل خطوة&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;ElastiCache، مع قائمة لكل مستخدم&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Timestream for InfluxDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Neptune&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;D&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;القيمة هنا في العلاقات نفسها، وNeptune مبني يمشي عبر أعداد كبيرة منها بزمن استجابة منخفض.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; ينفع لخطوة أو خطوتين، بس الربط يثقل كل ما زادت الخطوات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; تقدر تخزن قوائم جاهزة، بس لسا لازم شي يحسبها.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا للقراءات عبر الوقت، وما له علاقة بالعلاقات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%A8%D8%AA%D9%85%D8%B1-%D8%B9%D9%84%D9%8A%D9%83&quot;&gt;خدمات بتمر عليك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/decision-guides/latest/databases-on-aws-how-to-choose/databases-on-aws-how-to-choose.html&quot;&gt;Choosing an AWS database service&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 3 من 5&lt;/p&gt;
&lt;p&gt;عشرة آلاف حساس ترسل قراءة حرارة كل دقيقة، والمهندسين يبون متوسط كل ساعة لكل حساس خلال آخر أسبوع. أي خدمة مبنية لهذا؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Timestream for InfluxDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon Neptune&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon DocumentDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon OpenSearch Service&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;A&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;هذي قراءات عبر الوقت، وقواعد السلاسل الزمنية مبنية تخزنها وتجمعها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا للعلاقات بين الأشياء.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; هذا لمستندات JSON بحقول مختلفة.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا أساساً للبحث في النصوص وتحليل السجلات.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA&quot;&gt;أنواع قواعد البيانات&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influxdb.html&quot;&gt;What is Timestream for InfluxDB?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;1&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 4 من 5&lt;/p&gt;
&lt;p&gt;شركة تبي تنقل تطبيق MongoDB قائم إلى خدمة مُدارة في AWS &lt;strong&gt;بأقل تغيير في الكود&lt;/strong&gt;. أي خدمة تناسب؟&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;Amazon DynamoDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;Amazon Keyspaces&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;Amazon DocumentDB&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;Amazon Aurora&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;C&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DocumentDB متوافق مع MongoDB، فنموذج المستندات وكثير من الكود ممكن يبقون زي ما هم.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; واجهتها ونموذج بياناتها مختلفين، فبينكتب كود الوصول للبيانات من جديد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B:&lt;/strong&gt; هذا متوافق مع Cassandra، مو MongoDB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; هذا علائقي، فبتحتاج تعيد تصميم المستندات كجداول.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%A8%D8%AA%D9%85%D8%B1-%D8%B9%D9%84%D9%8A%D9%83&quot;&gt;خدمات بتمر عليك&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/documentdb/latest/developerguide/what-is.html&quot;&gt;What is Amazon DocumentDB?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section class=&quot;quiz&quot; data-quiz data-pick=&quot;2&quot; tabindex=&quot;-1&quot;&gt;
&lt;p class=&quot;quiz-number&quot;&gt;السؤال 5 من 5&lt;/p&gt;
&lt;p&gt;فريق مبيعات يبي تقارير على طلبات خمس سنوات، يعني مليارات الصفوف، والاستعلامات ما لازم تبطئ قاعدة الإنتاج. أي &lt;strong&gt;طريقتين&lt;/strong&gt; تناسب؟ (اختر اثنين.)&lt;/p&gt;
&lt;ul class=&quot;quiz-options&quot;&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;A&lt;/span&gt;&lt;span&gt;تشغيل التقارير على قاعدة الإنتاج بالليل&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;B&lt;/span&gt;&lt;span&gt;تحميل البيانات إلى Amazon Redshift&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;C&lt;/span&gt;&lt;span&gt;حفظ الطلبات في ElastiCache&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;D&lt;/span&gt;&lt;span&gt;تشغيل التقارير على نسخة Multi-AZ الاحتياطية&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;button type=&quot;button&quot; class=&quot;quiz-option&quot; data-correct disabled&gt;&lt;span class=&quot;quiz-letter&quot; lang=&quot;en&quot;&gt;E&lt;/span&gt;&lt;span&gt;تصدير البيانات إلى S3، والاستعلام منها بـ Athena&lt;/span&gt;&lt;/button&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;quiz-result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;
&lt;details class=&quot;quiz-answer&quot;&gt;&lt;summary&gt;اعرض الجواب&lt;/summary&gt;
&lt;p class=&quot;quiz-correct&quot;&gt;الجواب الصحيح: &lt;strong lang=&quot;en&quot;&gt;B + E&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;الطريقتين يبعدون التحليل الثقيل عن الإنتاج. وRedshift يناسب التقارير الثقيلة المتكررة، وAthena يناسب الأسئلة العابرة بدون سيرفرات تشغلها.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; استعلام ثقيل واحد ممكن يضر أي شي شغال وقتها، وهي قاعدة علائقية مو مبنية لتحليل بهذا الحجم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C:&lt;/strong&gt; الكاش نسخة مؤقتة، وصغير وغالي جداً على بيانات خمس سنوات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D:&lt;/strong&gt; النسخة الاحتياطية في Multi-AZ ما ينقرأ منها.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;للمراجعة: &lt;a href=&quot;#%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9&quot;&gt;أخطاء شائعة&lt;/a&gt; في هذا الجزء، و&lt;a href=&quot;https://docs.aws.amazon.com/athena/latest/ug/what-is.html&quot;&gt;What is Amazon Athena?&lt;/a&gt; في وثائق AWS.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;بهذا نكمل قسم قواعد البيانات. تطبيقك الحين يشتغل ويتوسّع، وبياناته في أمان، بس كيف يوصل له الزوار باسم موقعك؟ هذا موضوع القسم الجاي، ونبدأه في &lt;a href=&quot;/posts/aws-11-dns-route53/&quot;&gt;&lt;strong&gt;الجزء الحادي عشر&lt;/strong&gt;&lt;/a&gt; مع DNS وRoute 53.&lt;/p&gt;
</content>
  </entry>
</feed>
