Hello大家好,我们今天继续讨论AWS Lambda的内容。
Lambda的网络
首先,我们来讨论一下Lambda的网络,联网相关的内容。
在部署Lambda时,在默认情况下,Lambda函数是部署和运行在AWS的一个安全的VPC中,是在您的VPC之外的。在这种环境下,Lambda函数是可以访问Internet 外部的API,以及通过Internet和AWS的服务进行通信,比如Lambda函数可以通过DynamoDB的公有Endpoint地址与其进行通信。
但是,注意,在这种情况下如果您有一个VPC,且在您的VPC内私有子网有一些资源,比如只能通过私有地址访问的RDS,那么在这种情况下,您的Lambda函数是无法访问到私有子网中的资源的,比如这个RDS。因为AWS的这个安全VPC和您的私有子网之间没有相关的路由。
那如何解决这个问题呢?方案就是将您的Lambda函数连接到您账户中的VPC,函数在运行时就可以访问VPC内的私有资源。
将Lambda函数连接到了VPC时,Lambda 在函数的 VPC 配置中会为VPC的每个子网和安全组组合创建一个ENI,然后通过在安全组配置相应访问规则,Lambda函数就可以通过私有子网访问RDS。
那现在还有一个问题,现在Lambda函数在VPC内,之前的外部API就无法访问了。如果需要访问外部的API,就需要通过公有子网的NAT网关或者实例,然后通过internet网关 访问外部的API。
最后,让我们看看函数如何访问DynamoDB,当然函数同样是可以通过NAT网关或者NAT实例,然后通过internet网关访问DynamoDB。但是这种方式不是通过私有网络访问的,而且我们可能需要为NAT网关/实例以及internet网关支付费用。所以这种方式是可行的,但是不是最佳实践。
最佳实践是通过创建DynamoDB的网关终端节点,然后私有子网的Lambda函数通过终端节点访问DynamoDB,这样的话访问都是通过私有网络,而不通过internet,当然前提是要您配置好相应的路由表。
好,如果在以后遇到Lambda函数部署的问题,您需要掌握上面讲的函数部署在VPC外,以及连接至VPC后,对应函数需要访问的资源,评估并确定方案 ;以及面对不同的业务场景,选择最佳的实现方案。
最后,无论您的Lambda函数是部署在VPC外还是连接到了VPC,都可以与CloudWatch Logs通信。也就是说这两种情况函数都是可以发送日志到CloudWatch Logs的。 这是AWS内部实现的,不需要我们考虑两者网络的情况。
Lambda 日志、监控以及追踪
好,接下来我们讨论Lambda 日志、监控以及追踪。
首先有CloudWatch,我们知道Lambda和CloudWatch服务集成,Lambda的执行日志都会发送并存储至Cloudwatch logs,而无论Lambda函数部署在您的VPC内还是VPC外。
可以通过Cloudwatch指标,查看Lambda的一些指标,如:成功调用、错误率、延迟、超时等等。
Lambda函数的日志写入Cloudwatch,需要分配函数执行角色,并添加相应的如写入Cloudwatch权限,这样才能够正常写入日志,这一点要注意。
接下来是X-Ray,X-Ray是用于分布式追踪,可以使用X-Ray来追踪Lambda函数。只需要在Lambda的配置中开启,AWS就会为您启动一个X-Ray守护进程;或者也可以在代码中使用AWS SDK添加X-Ray指针。同样,需要注意Lambda函数的执行角色要分配相应的与X-Ray访问的权限。
好的,以上就是我们今天课时的内容,我们讨论了AWS Lambda - 第二部分的内容,希望能够给大家带来帮助。