如何配置 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
此处的说明):
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>
my-lambda-logs
,区域设置为
us-east-1
443
TCP 又名
HTTPS
上进行出站(出口)通信。
Cloudwatch Logs
创建一个 VPC 终端节点(位于与 lambda VPC 配置相同的子网中)。这将允许您的 lambda 在 VPC 内使用普通的 cloudwatch 端点,而不会留下任何日志流量离开 AWS 网络。
Private Dns Enabled
设置为true(如果创建时找不到,可以在创建后修改)
{
"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"
}
]
}
arn:aws:日志:us-east-1:000000000001:日志组:...但您可以从 AWS 控制台获取您的(它将包含您的账户 ID 和 Cloudwatch 组的正确区域。my-lambda-logs
您的 lambda 现在应该能够使用 NLog(或其他日志框架)来记录到 Cloudwatch 日志。
为了允许 Lambda 函数将日志发送到 CloudWatch Logs,AWS 使用接口 VPC 终端节点在 VPC 和 CloudWatch Logs 之间建立私有连接。这允许将日志私下发送到 CloudWatch Logs,而无需通过公共互联网。
用户无需为 CloudWatch Logs 手动创建 VPC 终端节点。当 Lambda 函数配置为在 VPC 内运行时,AWS 会自动创建和管理此终端节点。