如何配置 VPC 中的 AWS Lambda 以便能够登录到另一个 Cloudwatch 日志组?

问题描述 投票:0回答:2

如何配置 VPC 中的 AWS Lambda ,使其能够登录到 Cloudwatch 日志组(而不是与 lambda 本身关联的日志组)?

这是必需的,这样我就可以避免每个请求创建的摘要日志的成本,例如:

2022-02-10T10:16:19.133+00:00 START RequestId: 52cbfd7e-71ec-4499-a292-7c81c94535f3 Version: $LATEST 2022-02-10T10:16:24.250+00:00 END RequestId: 52cbfd7e-71ec-4499-a292-7c81c94535f3 2022-02-10T10:16:24.250+00:00 REPORT RequestId: 52cbfd7e-71ec-4499-a292-7c81c94535f3 Duration: 5100.10 ms Billed Duration: 7412 ms Memory Size: 256 MB Max Memory Used: 201 MB Init Duration: 2311.15 ms
因此,我希望将自己的日志记录到单独的 Cloudwatch 日志组,并添加 

Deny

 策略以防止记录到默认情况下与 lambda 关联的默认 Cloudwatch 组。

我正在使用 NLog,所以到目前为止我已经完成了以下操作(遵循 Nlog

此处的说明):

    已安装Nuget包AWS.Logger.Nlog
  • 添加了
  • nlog.config
    并将其设置为
    copy if newer
    
    

nlog.config

的内容:

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwConfigExceptions="true"> <extensions> <add assembly="AWS.Logger.NLog" /> </extensions> <targets> <target name="logconsole" xsi:type="Console" /> <target name="aws" type="AWSTarget" logGroup="my-lambda-logs" region="us-east-1"/> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logconsole,aws" /> </rules> </nlog>

    我的cloudwatch日志组的名称是
  • my-lambda-logs
    ,区域设置为
    us-east-1
    
    
当我现在运行 lambda 时,我遇到超时,因为它无法从 VPC 内登录到 Cloudwatch。

c# amazon-web-services aws-lambda amazon-cloudwatch nlog
2个回答
2
投票
  1. 如果您尚未创建 lambda,请在 VPC 中创建它,指定您的私有子网 ID 并附加一个安全组,该安全组至少允许在端口

    443

     TCP 又名 
    HTTPS
     上进行出站(出口)通信。

  2. 在 AWS 控制台上的 VPC 内,在您希望登录到的区域中为

    Cloudwatch Logs

     创建一个 VPC 终端节点(位于与 lambda VPC 配置相同的子网中)。这将允许您的 lambda 在 VPC 内使用普通的 cloudwatch 端点,而不会留下任何日志流量离开 AWS 网络。

    确保将
  1. Private Dns Enabled
    设置为
    true(如果创建时找不到,可以在创建后修改)

    为您的新 VPC 终端节点指定一个安全组,其中包括入站(入口)规则,以允许 lambda 的安全组通过
  1. 端口 443进行通信。

  1. 现在您可以与 Cloudwatch 通信,您只需创建日志组并为您的 lamda 提供允许其记录到您的 cloudwatch 日志组的策略。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-east-1:369074612400:log-group:my-lambda-logs:*", "arn:aws:logs:us-east-1:369074612400:log-group:my-lambda-logs:*:*" ], "Effect": "Allow" } ]
    }

在本示例中,cloudwatch 日志组的 ARN 为:

arn:aws:日志:us-east-1:000000000001:日志组:

my-lambda-logs

...但您可以从 AWS 控制台获取您的(它将包含您的账户 ID 和 Cloudwatch 组的正确区域。

您的 lambda 现在应该能够使用 NLog(或其他日志框架)来记录到 Cloudwatch 日志。


0
投票
当 Lambda 函数配置为在 VPC 内运行时,该函数可以访问 VPC 内的资源(例如数据库)。但是,默认情况下它无法直接访问互联网。

为了允许 Lambda 函数将日志发送到 CloudWatch Logs,AWS 使用接口 VPC 终端节点在 VPC 和 CloudWatch Logs 之间建立私有连接。这允许将日志私下发送到 CloudWatch Logs,而无需通过公共互联网。

用户无需为 CloudWatch Logs 手动创建 VPC 终端节点。当 Lambda 函数配置为在 VPC 内运行时,AWS 会自动创建和管理此终端节点。

© www.soinside.com 2019 - 2024. All rights reserved.