برنامه نویسی

ساخت توابع Golang Lambda – انجمن DEV

استفاده از CDK برای ساخت توابع Golang Lambda یک فرآیند بسیار ساده و کار با آن به اندازه کافی آسان است. به خوبی مستند شده است و زیر کلاسی است Function کلاس تعریف شده در aws-cdk-lib/aws-lambda. در مورد CDK یا آنچه می تواند برای شما انجام دهد مطمئن نیستید؟ اینجا را بخوانید تا شروع کنید و ببینید این همه هیاهو برای چیست.

اخیراً چندین مقاله نوشته‌ام که دارای CDK با نمونه‌های TypeScript هستند که ساخت Lambdas مبتنی بر Golang را برجسته می‌کنند. اما متوجه شدم که برخی از قابلیت‌های اضافی را نشان نداده‌ام Construct افشا می کند. من می خواهم مجموعه ای از گزینه های زیر را بررسی کنم.

  • نقطه ورود
  • زمان اجرا انتخاب شد
  • تایم اوت
  • نام تابع
  • تعریف محیط لامبدا
  • ساخت آرگومان ها از جمله ساخت پرچم ها

مثالی برای ادامه این مقاله.

new GoFunction(scope, "ExampleFuncHandler", {
    entry: path.join(__dirname, "./example-func"),
    functionName: "example-func",
    timeout: Duration.seconds(30),
    bundling: {
        goBuildFlags: ['-ldflags "-s -w"'],
    },
    environment: {
        LOG_LEVEL: "INFO",
        TABLE_NAME: "ExampleTable",
    },
});
وارد حالت تمام صفحه شوید

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

نقطه ورود

entry: path.join(__dirname, "./example-func");
وارد حالت تمام صفحه شوید

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

ویژگی ورودی در GoFunction به سازه می گوید که کجا خود را پیدا کند main.go یا نقطه “ورود”.

زمان اجرا

استقرار توابع Golang Lambda شما پس از ساخت، چند گزینه را هنگام انتخاب آن محیط زمان اجرا فراهم می کند. شخصاً، انتخاب به این نتیجه می رسد:

  • آیا می خواهید پیش فرض را اجرا کنید؟
  • آیا می خواهید توانایی اجرای برنامه های افزودنی Lambda را داشته باشید؟

اگر پاسخ هر یک از آن‌ها مثبت است، کافیست زمان اجرا پیش‌فرض را که Construct انتخاب می‌کند، بمانید. این AL2 (Amazon Linux 2) خواهد بود. اگر بخواهید این را از کنسول انتخاب کنید، در گزینه های Custom Runtime قرار خواهد گرفت. به خاطر داشته باشید که هنگام استفاده از AL2، باید باینری خود را نامگذاری کنید bootstrap.

نام تابع

functionName: "example-func",
وارد حالت تمام صفحه شوید

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

این یکی سرراست است. تنها توصیه من در اینجا این است که وقتی چیزها در یک “برنامه” یا گروه بندی مشترک قرار می گیرند، آنها را با پیشوند مشابه نامگذاری کنید.

تایم اوت

timeout: Duration.seconds(30),
وارد حالت تمام صفحه شوید

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

همچنین سرراست. اما هنگام ساخت توابع Golang Lambda، به تایم اوت توجه کنید. این است Duration که می خواهید تابع شما منتظر پاسخ در کد شما باشد. خیلی پایین نروید اما خیلی هم بالا نروید. و در کد خود، همیشه وقتی می دانید که می توانید، برگردید.

تعریف محیط لامبدا

environment: {
    LOG_LEVEL: "INFO",
    TABLE_NAME: "ExampleTable",
},
وارد حالت تمام صفحه شوید

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

تمام تلاش خود را بکنید تا پارامترهایی را که ممکن است در متغیرهای محیطی تغییر کنند، لحاظ کنید. اگر اطلاعات نوع حساسی دارید، از SSM یا Secrets Manager استفاده کنید، اما برای مواردی مانند نام جدول یا سطوح گزارش، متغیرها عالی هستند. با CDK، می‌توانید اینها را با توابعی پر کنید تا سطوح گزارش یا ویژگی‌های ساختارهای جدول را برای نام جدول واکشی کنید.

یک تابع Log Level ساده ممکن است شبیه این باشد

export const getLogLevel = (stage: StageEnvironment): string => {
    switch (stage) {
        case StageEnvironment.DEV:
        case StageEnvironment.QA:
            return "debug";
    }

    return "error";
};
وارد حالت تمام صفحه شوید

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

آرگومان بسازید

یکی از چیزهایی که من در تمام مقالاتم مستندسازی را از دست داده‌ام، این بخش از ساختار GoFunction است. هنگام ساخت توابع Golang Lambda، می توانید انتخاب کنید که از نصب محلی Golang خود استفاده کنید یا ساخت را مجبور کنید در یک ظرف Docker اتفاق بیفتد. من به دلیل سرعت در ساخت‌های محلی در مک خود تمایل دارم در Docker ایجاد نکنم (این یک چیز کند مستند است).

با این حال می خواهم استفاده از آن را توصیه کنم goBuildFlags برای برش اندازه فایل اجرایی خود. شما این کار را به این صورت انجام می دهید:

bundling: {
    goBuildFlags: ['-ldflags "-s -w"'],
},
وارد حالت تمام صفحه شوید

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

با Golang، ‘ldflags’ مخفف Linker Flags است و به ابزار ساخت Golang آموزش می دهد که چگونه باینری را کنار هم قرار دهد. دو پرچمی که من توصیه می کنم این هستند -s و -w. پر گولنگ:

> go tool link
-s  disable symbol table
-w  disable DWARF generation
وارد حالت تمام صفحه شوید

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

این دو گزینه باید فایل اجرایی شما را بین 20 تا 25 درصد کوچک کنند که تا حدودی بر موارد زیر تأثیر دارد.

  • باینری کوچکتر، راه اندازی سریعتر و شروع سردتر است
  • باینری کوچکتر، کمتر در S3 در طول فرآیند CI/CD کپی می شود

بسته شدن

CDK نحوه ساخت و استقرار راه حل ها را در AWS تغییر داده است. و نقش مهمی در پذیرش کامل Golang به عنوان زبان اصلی من برای ساخت برنامه‌های بدون سرور داشت. امیدوارم که چند نکته را مورد توجه قرار داده باشید. این ldflags قطعه‌ای است که من آن را در بسیاری از مکان‌ها مستند نمی‌بینم و به راحتی می‌توان آن را به دست آورد.

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

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

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

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