Amazon Lambda函数登录 TypeScript - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Lambda函数登录 TypeScript

Amazon Lambda自动监控 Lambda 函数并将日志条目发送到亚马逊。 CloudWatch您的 Lambda 函数带有 CloudWatch 日志日志组和每个函数实例的日志流。Lambda 运行时系统环境会将每次调用的详细信息以及函数代码的其他输出发送到该日志流。有关 CloudWatch 日志的更多信息,请参阅将 Amazon CloudWatch 日志与 Amazon Lambda

要从函数代码输出日志,可以使用控制台对象上的方法。如需更详细的日志记录,可以使用任何写入 stdout 或 stderr 的日志记录库。

工具和库

Powertools for Amazon Lambda (TypeScript) 是一个开发者工具包,用于实现无服务器最佳实践并提高开发人员速度。日志记录实用程序提供经优化的 Lambda 日志记录程序,其中包含有关所有函数的函数上下文的附加信息,输出结构为 JSON。请使用该实用程序执行以下操作:

  • 从 Lambda 上下文中捕获关键字段,冷启动并将日志记录输出结构化为 JSON

  • 根据指示记录 Lambda 调用事件(默认情况下禁用)

  • 通过日志采样仅针对一定百分比的调用输出所有日志(默认情况下禁用)

  • 在任何时间点将其他键附加到结构化日志

  • 使用自定义日志格式设置程序(自带格式设置程序),从而在与组织的日志记录 RFC 兼容的结构中输出日志

使用 Powertools Amazon Lambda 进行 (TypeScript) 和结构Amazon SAM化日志记录

按照以下步骤下载、构建和部署带有集成的 Powertools for Amazon Lambda (TypeScript) 模块的 Hello World 示例 TypeScript 应用程序。Amazon SAM此应用程序实现了基本的 API 后端,并使用 Powertools 发送日志、指标和跟踪。它由 Amazon API Gateway 端点和 Lambda 函数组成。当您向 API Gateway 终端节点发送 GET 请求时,Lambda 函数会调用、使用嵌入式指标格式向其发送日志和指标 CloudWatch,并将跟踪发送到。Amazon X-Ray该函数将返回一条 hello world 消息。

先决条件

要完成本节中的步骤,您必须满足以下条件:

部署示例 Amazon SAM 应用程序
  1. 使用 Hello World TypeScript 模板初始化应用程序。

    sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs18.x
  2. 构建应用程序。

    cd sam-app && sam build
  3. 部署应用程序。

    sam deploy --guided
  4. 按照屏幕上的提示操作。要在交互式体验中接受提供的默认选项,请按 Enter

    注意

    因为HelloWorldFunction 可能没有定义授权,这样可以吗? ,请务必输入y

  5. 获取已部署应用程序的 URL:

    aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
  6. 调用 API 端点:

    curl <URL_FROM_PREVIOUS_STEP>

    如果成功,您将会看到如下响应:

    {"message":"hello world"}
  7. 要获取该函数的日志,请运行 sam logs。有关更多信息,请参阅《Amazon Serverless Application Model 开发人员指南》中的 使用日志

    sam logs --stack-name sam-app

    该日志输出类似于以下示例:

    2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.552000 START RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Version: $LATEST 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.594000 2022-08-31T09:33:10.557Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390556,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[{"Name":"ColdStart","Unit":"Count"}]}]},"service":"helloWorld","ColdStart":1} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.595000 2022-08-31T09:33:10.595Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"level":"INFO","message":"This is an INFO log - sending HTTP 200 - hello world response","service":"helloWorld","timestamp":"2022-08-31T09:33:10.594Z"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.655000 2022-08-31T09:33:10.655Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390655,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[]}]},"service":"helloWorld"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 END RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 REPORT RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Duration: 201.55 ms Billed Duration: 202 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 252.42 ms XRAY TraceId: 1-630f2ad5-1de22b6d29a658a466e7ecf5 SegmentId: 567c116658fbf11a Sampled: true
  8. 这是一个可以通过互联网访问的公有 API 端点。我们建议您在测试后删除该端点。

    sam delete

管理日志保留日期

删除函数时,日志组不会自动删除。为避免无限期存储日志,请删除该日志组,或者配置保留期,之后 CloudWatch 自动删除日志。要设置日志保留日期,请将以下内容添加到您的 Amazon SAM 模板中:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7

将 Powertools 用于 Amazon Lambda (TypeScript),使用Amazon CDK用于结构化日志记录

按照以下步骤下载、构建和部署带有集成的 Powertools for Amazon Lambda (TypeScript) 模块的 Hello World 示例 TypeScript 应用程序。Amazon CDK此应用程序实现了基本的 API 后端,并使用 Powertools 发送日志、指标和跟踪。它由 Amazon API Gateway 端点和 Lambda 函数组成。当您向 API Gateway 终端节点发送 GET 请求时,Lambda 函数会调用、使用嵌入式指标格式向其发送日志和指标 CloudWatch,并将跟踪发送到。Amazon X-Ray该函数将返回一条 hello world 消息。

先决条件

要完成本节中的步骤,您必须满足以下条件:

部署示例 Amazon CDK 应用程序
  1. 为您的新应用程序创建一个项目目录。

    mkdir hello-world cd hello-world
  2. 初始化该应用程序。

    cdk init app --language typescript
  3. 添加 @types/aws-lambda 软件包作为开发依赖项。

    npm install -D @types/aws-lambda
  4. 安装 Powertools Logger 实用程序

    npm install @aws-lambda-powertools/logger
  5. 打开 lib 目录。你应该会看到一个名为 hello-world-stack.ts 的文件。在此目录中创建两个新文件:hello-world.function.tshello-world.ts

  6. 打开 hello-world.function.ts,然后将以下代码添加到该文件。这是适用于 Lambda 函数的代码。

    import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { logger.info('This is an INFO log - sending HTTP 200 - hello world response'); return { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; };
  7. 打开 hello-world.ts,然后将以下代码添加到该文件。它包含NodejsFunction 构造,它创建 Lambda 函数,为 Powertools 配置环境变量,并将日志保留时间设置为一周。它还包括用于创建 REST API 的LambdaRestApi 构造

    import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; import { RetentionDays } from 'aws-cdk-lib/aws-logs'; import { CfnOutput } from 'aws-cdk-lib'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function', { environment: { Powertools_SERVICE_NAME: 'helloWorld', LOG_LEVEL: 'INFO', }, logRetention: RetentionDays.ONE_WEEK, }); const api = new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); new CfnOutput(this, 'apiUrl', { exportName: 'apiUrl', value: api.url, }); } }
  8. 打开 hello-world-stack.ts. 这是定义您的 Amazon CDK 堆栈的代码。使用以下代码替换该代码:

    import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } }
  9. 转回项目目录。

    cd hello-world
  10. 部署您的应用程序。

    cdk deploy
  11. 获取已部署应用程序的 URL:

    aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text
  12. 调用 API 端点:

    curl <URL_FROM_PREVIOUS_STEP>

    如果成功,您将会看到如下响应:

    {"message":"hello world"}
  13. 要获取该函数的日志,请运行 sam logs。有关更多信息,请参阅《Amazon Serverless Application Model 开发人员指南》中的 使用日志

    sam logs --stack-name HelloWorldStack

    该日志输出类似于以下示例:

    2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.047000 START RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Version: $LATEST 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.050000 { "level": "INFO", "message": "This is an INFO log - sending HTTP 200 - hello world response", "service": "helloWorld", "timestamp": "2022-08-31T14:48:37.048Z", "xray_trace_id": "1-630f74c4-2b080cf77680a04f2362bcf2" } 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 END RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 REPORT RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Duration: 34.60 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 57 MB Init Duration: 173.48 ms
  14. 这是一个可以通过互联网访问的公有 API 端点。我们建议您在测试后删除该端点。

    cdk destroy

使用 Lambda 控制台

调用 Lambda 函数后,您可以使用 Lambda 控制台查看日志输出。

如果可以在嵌入式代码编辑器中测试代码,则可以在执行结果中找到日志。使用控制台测试功能调用函数时,可以在详细信息部分找到日志输出

使用控制 CloudWatch 台

您可以使用亚马逊 CloudWatch 控制台查看所有 Lambda 函数调用的日志。

在 CloudWatch 控制台上查看日志
  1. 在 CloudWatch 控制台上打开日志组页面

  2. 为您的函数选择日志组 (/aws/lambda/ your-function-name)。

  3. 创建日志流。

每个日志流对应一个函数实例。日志流会在您更新 Lambda 函数以及创建更多实例来处理多个并发调用时显示。要查找特定调用的日志,建议您使用 Amazon X-Ray 检测函数。X-Ray 会在追踪中记录有关请求和日志流的详细信息。

如需使用将日志和跟踪与 X-Ray 相关联的示例应用程序,请参阅 Amazon Lambda 错误处理器示例应用程序