2017-06-13 122 views
0

我有一个lambda应用程序需要使用Memcached引擎访问Elasticache。访问Elasticache - 从Lambda的memcached

我已经正确配置了我的弹性缓存,甚至可以从Elastic beanstalk访问它。我通过telnet连接到我的节点进行测试。

从LAMBDA访问elasticache,我也做了以下内容:

  1. 配置我的缓存,并确定了连接,从我的节点
  2. 设置我的功能,从相同的运行设置和获取缓存的项目VPC作为我的集群
  3. 为我的缓存(子网组)使用的子网分配了我的功能,并驻留在同一个VPC中。
  4. 分配我的函数打开端口11211
  5. 我的功能作用已连接(AWSLambdaFUllAccess,AWSLambdaBasicExecutionRole和AWSLambdaVPCAccessExecutionRole)以下政策安全组。

还有什么我需要做的吗?

我获取日志中的以下

Error Enyim.Caching.MemcachedClient: Create PooledSocket 
    Error Enyim.Caching.MemcachedClient: Could not init pool. 
    Debug Enyim.Caching.MemcachedClient: Mark as dead was requested for 
Unspecified/mynodeurl.cache.amazonaws.com:11211 
Debug Enyim.Caching.MemcachedClient: FailurePolicy.ShouldFail(): True 
Warning Enyim.Caching.MemcachedClient: Marking node 
Unspecified/mynodeurl.cache.amazonaws.com:11211 as dead 
Debug Enyim.Caching.MemcachedClient: Node 
Unspecified/mynodeurl.cache.amazonaws.com:11211 is dead. 
Debug Enyim.Caching.MemcachedClient: Starting the recovery timer. 
Debug Enyim.Caching.MemcachedClient: Timer started. 
Information Enyim.Caching.MemcachedClient: MemcachedInitPool-cost: 43.048ms 
Debug Enyim.Caching.MemcachedClient: Acquiring stream from pool. 
Unspecified/mynodeurl.cache.amazonaws.com:11211 
Debug Enyim.Caching.MemcachedClient: Pool is dead or disposed, returning null 
Unspecified/mynodeurl.cache.amazonaws.com:11211 
EnyimMemcached Started. 

感谢

+0

您对安全组的评论尚不清楚。它听起来像你在Lambda函数的安全组上打开端口11211,这是错误的。您是否在分配给ElastiCache集群的安全组中创建了规则,以便Lambda函数可以访问? –

+0

感谢您的回复@MarkB。你是对的。我为我的lambda函数使用与我的Elasticache节点相同的安全组。我的Lambda安全组应具有哪些设置?它目前只有端口11211和出站的入站规则 - 全部 – Akin

+0

您应该添加一些您使用的示例代码,也许在客户端配置中缺少某些东西。 –

回答

0

听起来你正在使用Enyim.Caching.MemcachedClient的版本错误。在编写本文时,Lambda只支持.netstandard 1.6而不是1.6.1。

Enyim有一个非常早期的客户端版本可以工作。 https://www.nuget.org/packages/EnyimMemcachedCore/1.0.0.6

如果您启用完整日志记录,则会看到“无法初始化池”附带的异常为“此平台不支持操作”。

我有这个完全相同的问题。