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

جدول محتویات
- تابع Lambda@Edge را ایجاد کنید
- تابع Lambda@Edge را در CloudFront اجرا کنید
- متریک ها و گزارش ها
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 اعمال شود.