برنامه نویسی

با CloudFront شروع کنید – قسمت 4: عملکرد Lambda@Edge

جدول محتویات

  1. تابع Lambda@Edge را ایجاد کنید
  2. تابع Lambda@Edge را در CloudFront اجرا کنید
  3. متریک ها و گزارش ها

1. تابع Lambda@Edge را ایجاد کنید

در این قسمت یک تابع Lambda@Edge ایجاد می کنیم.

توضیحات تصویر

توضیحات تصویر

انجام تنظیمات:

  • “نویسنده از ابتدا” را انتخاب کنید
  • “ایجاد تابع” را انتخاب کنید
  • نام: “LambdaEdgeImmersionDayLabFunction”
  • زمان اجرا: “Node.js 18.x”

توضیحات تصویر

نقش: “ایجاد نقش جدید از الگوهای خط مشی AWS”

  • نام نقش: “lambda_edge_execution_role”
  • الگوهای خط‌مشی: “مجوزهای اساسی Lambda@Edge (برای راه‌انداز CloudFront)”
  • روی “ایجاد تابع” کلیک کنید

توضیحات تصویر

ایجاد تابع Lambda را تمام کنید. شما با موفقیت یک نقش IAM جدید ایجاد کرده اید که برای اجازه دادن به CloudFront برای فراخوانی Lambda و ورود به CloudWatch استفاده می شود.

توضیحات تصویر

برگه را انتخاب کنید تست

  • انتخاب کنید ایجاد رویداد آزمایشی جدید
  • نام رویداد: “TestEvent”

توضیحات تصویر

json زیر را جایگزین Hello World JSON کنید:

{
    "Records": [
      {
        "cf": {
          "config": {
            "distributionDomainName": "d123.cloudfront.net",
            "distributionId": "EDFDVBD6EXAMPLE",
            "eventType": "viewer-request",
            "requestId": "MRVMF7KydIvxMWfJIglgwHQwZsbG2IhRJ07sn9AkKUFSHS9EXAMPLE=="
          },
          "request": {
            "clientIp": "2001:0db8:85a3:0:0:8a2e:0370:7334",
            "method": "GET",
            "querystring": "size=large",
            "uri": "/picture.jpg",
            "headers": {
              "host": [
                {
                  "key": "Host",
                  "value": "d111111abcdef8.cloudfront.net"
                }
              ],
              "user-agent": [
                {
                  "key": "User-Agent",
                  "value": "curl/7.51.0"
                }
              ]
            },
            "origin": {
              "custom": {
                "customHeaders": {
                  "my-origin-custom-header": [
                    {
                      "key": "My-Origin-Custom-Header",
                      "value": "Test"
                    }
                  ]
                },
                "domainName": "example.com",
                "keepaliveTimeout": 5,
                "path": "/custom_path",
                "port": 443,
                "protocol": "https",
                "readTimeout": 5,
                "sslProtocols": [
                  "TLSv1",
                  "TLSv1.1"
                ]
              },
              "s3": {
                "authMethod": "origin-access-identity",
                "customHeaders": {
                  "my-origin-custom-header": [
                    {
                      "key": "My-Origin-Custom-Header",
                      "value": "Test"
                    }
                  ]
                },
                "domainName": "my-bucket.s3.amazonaws.com",
                "path": "/s3_path",
                "region": "us-east-1"
              }
            }
          }
        }
      }
    ]
  }

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیحات تصویر

به رابط عملکرد Lambda برگردید و انتخاب کنید کد

const handler = (event, context, callback) => {
    console.log("Request Event:" + JSON.stringify(event, null, 2));

    const requestHeaders = event.Records[0].cf.request.headers;

    var htmlContent;

    //Insert code to generate the html content content here.

    const response = {
        status: '200',
        statusDescription: 'OK',
        headers: {
            'cache-control': [{
                key: 'Cache-Control',
                value: 'max-age=100'
            }],
            'content-type': [{
                key: 'Content-Type',
                value: 'text/html'
            }],
            'content-encoding': [{
                key: 'Content-Encoding',
                value: 'UTF-8'
            }],
        },
        body: htmlContent,
    };

    callback(null, response);
};

module.exports.handler = handler;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • صرفه جویی
  • انتخاب کنید مستقر کنید
  • سپس انتخاب کنید تست

توضیحات تصویر

چشم انداز تست نتایج

توضیحات تصویر

نتیجه اعدام را ببینیم. توجه داشته باشید که خروجی یک نسخه JSON از پاسخ HTTP 200 است که CloudFront از آن برای پاسخ به درخواست استفاده می کند. در این مورد، پاسخ هنوز بدن از دست رفته است.

توضیحات تصویر

در خروجی Log، می‌توانیم ببینیم که رویداد آزمایشی که ما پیکربندی کرده‌ایم به‌عنوان یک رویداد درخواست در ورودی تابع ثبت می‌شود. این JSON ویژگی های درخواست دریافت شده توسط CloudFront را نشان می دهد که قابل خواندن یا تغییر است. در این تمرین سرصفحه ها را می خوانیم و نتیجه را به صورت یک جدول HTML زیبا برمی گردانیم.

توضیحات تصویر

کامنت را با کد مورد نیاز برای تولید بدنه HTML جایگزین کنید. می توانید از console.log برای خروجی و اشکال زدایی کد خود استفاده کنید.

exports.handler = (event, context, callback) => {
    const requestHeaders = event.Records[0].cf.request.headers;

    let str="<table border="1" width="100%">" +
              '<thead>' +
                '<tr><td><h1>Header</h1></td><td><h1>Value</h1></td></tr>' +
              '</thead>' +
              '<tbody>';

    for (const key in requestHeaders) {
      if (requestHeaders.hasOwnProperty(key)) {
        str += '<tr><td>' + key + '</td><td>' + requestHeaders[key][0].value + '</td></tr>';
      }
    }

    str += '</tbody></table>';

    const htmlContent = `
      <html lang="en">
        <body>
          <table border="1" width="100%">
            <thead>
              <tr><td><h1>Lambda@Edge Lab</h1></td></tr>
            </thead>
            <tfoot>
              <tr><td>Immersion Days - Edge Services - Module 3</td></tr>
            </tfoot>
            <tbody>
              <tr><td>Response sent by API</td></tr>
            </tbody>
            <tbody>
              <tr><td>${str}</td></tr>
            </tbody>
          </table>
        </body>
      </html>
    `;

    const response = {
      status: '200',
      statusDescription: 'OK',
      headers: {
        'cache-control': [{ key: 'Cache-Control', value: 'max-age=100' }],
        'content-type': [{ key: 'Content-Type', value: 'text/html' }],
        'content-encoding': [{ key: 'Content-Encoding', value: 'UTF-8' }],
      },
      body: htmlContent,
    };

    callback(null, response);
  };

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • صرفه جویی
  • انتخاب کنید مستقر کنید
  • انتخاب کنید تست

توضیحات تصویر

مشاهده نتیجه آزمون

توضیحات تصویر

به تابع Lambda برگردید، انتخاب کنید نسخه ها

توضیحات تصویر

وارد

version 1

و انتخاب کنید انتشار

توضیحات تصویر

ایجاد تابع Lambda را با استفاده از CloudFront کامل کنید.

توضیحات تصویر

2. تابع Lambda@Edge را در CloudFront مستقر کنید

در این بخش، CloudFront را به عنوان یک ماشه برای عملکرد Lambda شما اضافه می کنیم.

توضیحات تصویر

در همان کنسول لامبدا، شما نسخه 1 تابع Lambda را پیاده سازی کرده اید. روی دکمه Add trigger کلیک کنید و CloudFront را انتخاب کنید.

توضیحات تصویر

روی Deploy to Lambda@Edge کلیک کنید.

توضیحات تصویر

ماشه را برای استفاده از CloudFront Distribution و Cache Behavior با تنظیمات زیر پیکربندی کنید:

  • توزیع:
  • رفتار حافظه پنهان: “/serverless”
  • رویداد CloudFront: درخواست مبدا
  • “من تصدیق می کنم که در هنگام استقرار یک نسخه جدید از این عملکرد با ماشه بالا منتشر می شود و در تمام مناطق AWS موجود تکرار می شود” را انتخاب کنید.
  • کلیک مستقر کنید

توضیحات تصویر

استقرار برای توزیع CloudFront تقریباً 5 دقیقه طول می کشد. در برخی موارد بسته به موقعیت مکانی خود می توانید تست را در کمتر از 5 دقیقه شروع کنید.

توضیحات تصویر

برگشت به لامبدا رابط و انتخاب کنید ماکت ها.

توضیحات تصویر

اکنون تابع Lambda خود را در لیست توابع لامبدا جستجو کنید و یک Replica تابع Lambda را در us-east-1 برای تابع Lambda که ایجاد کرده اید پیدا خواهید کرد.

توضیحات تصویر

هنگامی که به سایر مناطق AWS حرکت می کنید، متوجه خواهید شد که در تمام مناطقی که CloudFront دارای کش لبه منطقه ای است، یک ماکت تابع Lambda وجود دارد. اینها توابع Lambda هستند که زمانی که توزیع CloudFront شما Lambda@Edge را اجرا می کند، فراخوانی می شوند. هنگامی که توزیع CloudFront شما مستقر شد، توزیع CloudFront خود را با دسترسی به Distribution در یک مرورگر با مسیر بدون سرور آزمایش کنید.

توضیحات تصویر

3. معیارها و سیاهههای مربوط

برای ایجاد ترافیک از مکان های جغرافیایی مختلف، می توانید از CloudShell برای ارسال درخواست های HTTP استفاده کنید. این یک محیط پوسته است که شامل ابزار curl برای تعامل ایمن با منابع AWS شما است. چندین درخواست را با استفاده از ابزار curl ارسال کنید تا از مناطق مختلف ترافیک به CloudFront ایجاد کنید.

توضیحات تصویر

به کنسول AWS Lambda بروید و یک منطقه AWS در نزدیکی یکی از مکان هایی که برای ارسال درخواست انتخاب کرده اید انتخاب کنید.

توضیحات تصویر

مشاهده گزارش های CloudWatch.

توضیحات تصویر

مشاهده رویدادهای گزارش دقیق.

توضیحات تصویر

منابع را پاکسازی کنید

سطل S3 را حذف کنید

  • مرحله 1: وارد کنسول مدیریت AWS شوید.

  • مرحله 2: سرویس S3 را انتخاب کنید.

  • مرحله 3: سطلی را که می خواهید حذف کنید انتخاب کنید.

  • مرحله 4: روی دکمه Delete bucket در بالای صفحه کلیک کنید.

  • مرحله 5: نام سطل را در کادر تایید وارد کنید و روی Delete کلیک کنید.

توجه: اگر سطل حاوی اشیایی باشد، نمی‌توانید مستقیماً سطل را حذف کنید. قبل از حذف سطل باید تمام اشیاء موجود در سطل را حذف کنید. اگر می خواهید برخی از اشیاء خاص را حذف کنید، شی مورد نظر را انتخاب کرده و روی دکمه Delete کلیک کنید.

از رابط خط فرمان AWS (CLI) برای حذف یک سطل استفاده کنید

همچنین می توانید از AWS CLI برای حذف سطل ها استفاده کنید. در اینجا مراحل حذف یک سطل با استفاده از AWS CLI آمده است:

  • مرحله 1: Command Prompt یا Terminal را باز کنید.

  • مرحله 2: وارد AWS CLI شوید.

  • مرحله 3: از دستور زیر برای حذف سطل استفاده کنید:

aws s3 rb s3://bucket-name --force
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کجا، bucket-name نام سطلی است که می‌خواهید حذف کنید. گزینه –force برای تایید حذف سطل استفاده می شود.

توجه: اگر سطل حاوی اشیایی باشد، نمی‌توانید مستقیماً سطل را حذف کنید. قبل از حذف سطل باید تمام اشیاء موجود در سطل را حذف کنید. اگر می خواهید برخی از اشیاء خاص را حذف کنید، از دستور aws s3 rm برای حذف آنها استفاده کنید.

با مراحل بالا، می توانید با استفاده از رابط کاربری یا AWS CLI یک سطل را در AWS S3 حذف کنید. اطمینان حاصل کنید که قبل از حذف سطل از تمام اطلاعات خود نسخه پشتیبان تهیه کرده اید و این کار را با دقت انجام دهید.

EC2 را خاتمه دهید

  • مرحله 1: وارد کنسول مدیریت AWS شوید

    • برای حذف EC2، ابتدا باید وارد کنسول مدیریت AWS شوید. این کار را می توان با رفتن به https://aws.amazon.com و ورود به حساب کاربری AWS خود انجام داد.
  • مرحله 2: نمونه EC2 را برای حذف جستجو کنید

    • پس از ورود به کنسول مدیریت AWS، باید نمونه EC2 را که می‌خواهید حذف کنید، پیدا کنید. می‌توانید از موتورهای جستجو استفاده کنید یا فهرست‌های نمونه EC2 را برای یافتن نمونه‌هایی که می‌خواهید حذف کنید، مرور کنید.
  • مرحله 3: نمونه EC2 را حذف کنید

  • هنگامی که یک نمونه EC2 را برای حذف پیدا کردید، می توانید با انجام مراحل زیر آن را حذف کنید:

    • روی نمونه EC2 که می خواهید حذف کنید کلیک راست کنید.
    • از منوی ظاهر شده گزینه “Instance State” را انتخاب کنید.
    • برای حذف نمونه EC2، “Terminate” را انتخاب کنید.
    • شما یک هشدار برای تایید حذف نمونه EC2 دریافت خواهید کرد. اگر مطمئن هستید که می خواهید نمونه EC2 را حذف کنید، “Yes, Terminate” را انتخاب کنید.

CloudFront Distribution را حذف کنید

  • مرحله 1: به کنسول AWS دسترسی پیدا کنید

  • ابتدا باید با حساب کاربری خود در https://console.aws.amazon.com/ وارد کنسول AWS شوید.

  • مرحله 2: CloudFront را انتخاب کنید. سرویس

  • پس از ورود به کنسول AWS، باید سرویس CloudFront را با کلیک بر روی نماد «سرویس‌ها» در نوار بالا و جستجوی CloudFront انتخاب کنید. برای یافتن سریعتر سرویس می توانید کلمه کلیدی “CloudFront” را در کادر جستجو وارد کنید.

  • مرحله 3: CloudFront Distribution را برای حذف انتخاب کنید

  • در صفحه CloudFront، لیستی از توزیع‌های CloudFront را مشاهده خواهید کرد. با کلیک کردن روی نام، توزیع CloudFront را که می‌خواهید حذف کنید، پیدا کرده و انتخاب کنید.

  • مرحله 4: توزیع CloudFront را حذف کنید

  • پس از انتخاب CloudFront Distribution برای حذف، باید روی دکمه «تنظیمات توزیع» کلیک کنید. در صفحه تنظیمات توزیع، دکمه “حذف” را خواهید دید. روی این دکمه کلیک کنید و با وارد کردن “بله” در گفتگوی تایید، حذف CloudFront Distribution را تایید کنید.

توجه: هنگام حذف CloudFront Distribution، تمام اطلاعات مربوط به آن از سیستم حذف می شود و قابل بازیابی نیست. بنابراین، قبل از انجام عملیات حذف، مطمئن شوید که از اطلاعات مهم خود نسخه پشتیبان تهیه کرده اید.

حذف تابع لامبدا

  • مرحله 1: وارد حساب AWS خود شوید و به صفحه مدیریت خدمات Lambda بروید.

  • مرحله 2: تابع Lambda را که می خواهید حذف کنید، پیدا کرده و انتخاب کنید.

  • مرحله 3: روی دکمه Actions کلیک کنید و Delete Function را انتخاب کنید.

  • مرحله 4: حذف را با فشار دادن Delete تایید کنید.

توجه: شما نمی توانید یک عملکرد حذف شده Lambda را بازیابی کنید.

لبه لامبدا را بردارید

  • مرحله 1: وارد حساب AWS خود شوید و به صفحه مدیریت خدمات Lambda بروید.

  • مرحله 2: تب Functions را انتخاب کرده و تابع Lambda مورد استفاده Lambda Edge را انتخاب کنید.

  • مرحله 3: تب Triggers را پیدا کرده و کلیک کنید و Edge Association را انتخاب کنید.

  • مرحله 4: روی دکمه Delete کلیک کنید و با فشار دادن Yes تأیید کنید.

توجه: پس از حذف Lambda Edge، باید حدود 10 دقیقه صبر کنید تا تغییرات در شبکه CDN اعمال شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا