Bỏ qua để đến nội dung

Hàm Lambda trong Python

Generator Python Lambda Function cung cấp khả năng thêm một lambda function vào một dự án python hiện có.

Generator này tạo một python lambda handler mới với cấu hình hạ tầng AWS CDK hoặc Terraform. Backend được tạo sử dụng AWS Lambda cho triển khai serverless, với tùy chọn type-safety sử dụng Parser từ AWS Lambda Powertools. Nó thiết lập AWS Lambda Powertools cho khả năng quan sát, bao gồm logging, AWS X-Ray tracing và Cloudwatch Metrics.

Bạn có thể tạo một Lambda Function mới theo hai cách:

  1. Install the Nx Console VSCode Plugin if you haven't already
  2. Open the Nx Console in VSCode
  3. Click Generate (UI) in the "Common Nx Commands" section
  4. Search for @aws/nx-plugin - py#lambda-function
  5. Fill in the required parameters
    • Click Generate
    Parameter Type Default Description
    project Required string - The project to add the lambda function to
    functionName Required string - The name of the function to add
    functionPath string - The path within the project source directory to add the function to
    eventSource string Any Optional event source model to use for the lambda function
    iacProvider string Inherit The preferred IaC provider. By default this is inherited from your initial selection.

    Generator sẽ thêm các file sau vào dự án của bạn:

    • Thư mục<module-name>
      • <lambda-function>.py Triển khai function

    Nếu tùy chọn functionPath được cung cấp, generator sẽ thêm các file cần thiết vào đường dẫn được chỉ định:

    • Thư mục<module-name>
      • Thư mục<custom-path>
        • <function-name>.py Triển khai function

    Vì generator này cung cấp infrastructure as code dựa trên iacProvider bạn đã chọn, nó sẽ tạo một dự án trong packages/common bao gồm các CDK constructs hoặc Terraform modules liên quan.

    Dự án infrastructure as code chung được cấu trúc như sau:

    • Thư mụcpackages/common/constructs
      • Thư mụcsrc
        • Thư mụcapp/ Constructs cho infrastructure cụ thể của một dự án/generator
        • Thư mụccore/ Constructs chung được tái sử dụng bởi các constructs trong app
        • index.ts Entry point xuất các constructs từ app
      • project.json Các build targets và cấu hình của dự án

    Generator tạo infrastructure as code để triển khai function của bạn dựa trên iacProvider đã chọn:

    Generator tạo các CDK construct có thể được sử dụng để triển khai function của bạn, nằm trong thư mục packages/common/constructs.

    Triển khai function chính nằm trong <function-name>.py. Đây là một ví dụ:

    import os
    from aws_lambda_powertools import Logger, Metrics, Tracer
    from aws_lambda_powertools.metrics import MetricUnit
    from aws_lambda_powertools.utilities.parser import event_parser
    from aws_lambda_powertools.utilities.parser.models import EventBridgeModel
    from aws_lambda_powertools.utilities.typing import LambdaContext
    os.environ["POWERTOOLS_METRICS_NAMESPACE"] = "Foo"
    os.environ["POWERTOOLS_SERVICE_NAME"] = "Foo"
    logger: Logger = Logger()
    metrics: Metrics = Metrics()
    tracer: Tracer = Tracer()
    @tracer.capture_lambda_handler
    @metrics.log_metrics
    @event_parser(model=EventBridgeModel)
    def lambda_handler(event: EventBridgeModel, context: LambdaContext):
    logger.info("Received event", extra={"event": event.model_dump() })
    metrics.add_metric(name="InvocationCount", unit=MetricUnit.Count, value=1)
    try:
    # TODO: Implement
    metrics.add_metric(name="SuccessCount", unit=MetricUnit.Count, value=1)
    # TODO: Implement success response if required
    except Exception as e:
    logger.exception(e)
    metrics.add_metric(name="ErrorCount", unit=MetricUnit.Count, value=1)
    # TODO: Implement error response if required

    Generator tự động thiết lập một số tính năng:

    1. Tích hợp AWS Lambda Powertools cho khả năng quan sát
    2. Thu thập metrics
    3. Type-safety sử dụng @event_parser

    Generator cấu hình structured logging sử dụng AWS Lambda Powertools.

    def lambda_handler(event: EventBridgeModel, context: LambdaContext):
    logger.info("Received event", extra={"event": event.model_dump()})

    Logger tự động bao gồm:

    • Các request event
    • Thông tin Lambda context
    • Chỉ báo cold start

    AWS X-Ray tracing được cấu hình tự động. Bạn có thể thêm các subsegment tùy chỉnh vào traces của mình:

    def lambda_handler(event: EventBridgeModel, context: LambdaContext):
    # Tạo một subsegment mới
    with tracer.provider.in_subsegment("function-subsegment"):
    # Logic của bạn ở đây
    return ....

    CloudWatch metrics được thu thập tự động cho mỗi request. Bạn có thể thêm các metric tùy chỉnh:

    def lambda_handler(event: EventBridgeModel, context: LambdaContext):
    metrics.add_metric(name="NewMetric", unit=MetricUnit.Count, value=1)
    return ...

    Các metric mặc định bao gồm:

    • Số lần invocation
    • Số lần thành công/thất bại
    • Các metric cold start

    Nếu bạn đã chọn một eventSource khi tạo lambda function, function của bạn được trang bị @event_parser từ AWS Lambda Powertools. Ví dụ:

    @event_parser(model=EventBridgeModel)
    def lambda_handler(event: EventBridgeModel, context: LambdaContext):
    event.detail_type # <- type-safe với IDE autocompletion

    Điều này cho phép bạn định nghĩa các data model sử dụng Pydantic, theo cách tương tự như làm việc với Fast API.

    Nếu bạn không muốn type cho event của mình, bạn chỉ cần chọn Any cho eventSource.

    Generator tự động cấu hình Python bundling cho các deployment package Lambda sử dụng uv:

    Terminal window
    pnpm nx run <project-name>:bundle

    Quá trình này sử dụng:

    1. uv export để export các Python dependency của bạn vào file requirements.txt
    2. uv pip install để cài đặt các dependency cho nền tảng target (x86_64-manylinux2014) cho triển khai Lambda

    Generator này tạo ra mã infrastructure as code bằng CDK hoặc Terraform dựa trên iacProvider bạn đã chọn. Bạn có thể sử dụng nó để triển khai function của mình.

    Generator này tạo ra một CDK construct để triển khai function của bạn trong thư mục common/constructs. Bạn có thể sử dụng nó trong một ứng dụng CDK:

    import { MyProjectMyFunction } from ':my-scope/common-constructs';
    export class ExampleStack extends Stack {
    constructor(scope: Construct, id: string) {
    // Add the function to your stack
    const fn = new MyProjectMyFunction(this, 'MyFunction');
    }
    }

    Điều này thiết lập:

    1. AWS Lambda function
    2. CloudWatch log group
    3. Cấu hình X-Ray tracing
    4. CloudWatch metrics namespace

    Function này sau đó có thể được sử dụng làm target cho bất kỳ lambda event source nào:

    Ví dụ dưới đây minh họa mã CDK để gọi lambda function của bạn theo lịch trình sử dụng EventBridge:

    import { Rule, Schedule } from 'aws-cdk-lib/aws-events';
    import { LambdaFunction } from 'aws-cdk-lib/aws-events-targets';
    import { MyProjectMyFunction } from ':my-scope/common-constructs';
    export class ExampleStack extends Stack {
    constructor(scope: Construct, id: string) {
    // Add the function to your stack
    const fn = new MyProjectMyFunction(this, 'MyFunction');
    // Add the function to an EventBridge scheduled rule
    const eventRule = new Rule(this, 'MyFunctionScheduleRule', {
    schedule: Schedule.cron({ minute: '15' }),
    targets: [new LambdaFunction(fn)],
    });
    }
    }