2

私は、ServiceStack .Redis.Coreライブラリ(バージョン1.0.44)を使用して、私のLambda関数からAWS Elasticache(Redis)を活用しようとしています。私のローカルマシン(mac osx)からラムダを実行すると、すべて正常に動作します。私はエラーなしでAWS Redisキャッシュと対話できます。しかしServiceStack RedisがAWS Lambdaで動作しない

、私は彼らのラムダサーバー上でコードを実行するためにAWSへの私の機能を展開するとき、もはや作品とServiceStack.Text.EnvライブラリがPlatformNotSupportedException例外がスローされます。

{ 
    "errorType": "RedisException", 
    "errorMessage": "[13:50:14.793] Unable to Connect: sPort: 55382, Error: The type initializer for 'ServiceStack.Text.Env' threw an exception. 
    at ServiceStack.Redis.RedisNativeClient.FlushSendBuffer() 
    at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead)", 
    "stackTrace": [ 
    "at ServiceStack.Redis.RedisNativeClient.CreateConnectionError(Exception originalEx)", 
    "at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead)", 
    "at ServiceStack.Redis.RedisNativeClient.get_Info()", 
    "at ServiceStack.Redis.RedisClient.GetServerRole()", 
    "at ServiceStack.Redis.RedisResolver.CreateRedisClient(RedisEndpoint config, Boolean master)", 
    "at ServiceStack.Redis.RedisManagerPool.GetClient()", 
    **snip** 
    "at lambda_method(Closure , Stream , Stream , ContextInfo)" 
    ], 
    "cause": { 
    "errorType": "TypeInitializationException", 
    "errorMessage": "The type initializer for 'ServiceStack.Text.Env' threw an exception.", 
    "stackTrace": [ 
     "at ServiceStack.Redis.RedisNativeClient.FlushSendBuffer()", 
     "at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead)" 
    ], 
    "cause":  { 
     "errorType": "PlatformNotSupportedException", 
     "errorMessage": "Operation is not supported on this platform.", 
     "stackTrace": [ 
     "at System.Runtime.InteropServices.OSPlatform.get_Linux()", 
     "at ServiceStack.Text.Env..cctor()" 
     ] 
    } 
    } 
} 

だから、使用することが可能ですAWS Lambdaで動作している場合はServiceStack.Redis.Coreパッケージ?

+1

OSXでアプリケーションをビルドしてラムダにアップロードしましたか? – dashmug

+0

はい、.NET Standard 1.6フレームワークをターゲットとした私のmac上に構築されました。 FWIWラムダの他のすべてがうまく動作します。コードがServiceStack.Redisとの対話をトリガーするときだけ、この例外がスローされます。 – Jez

+0

LambdaはLinux上で動作するので、Linuxマシン上でコードをコンパイルし、コンパイルしたコードをLambdaにアップロードする必要があります。 – dashmug

答えて

3

この例外は、AWS Lambdaが.NETコアのRuntimeInformation.IsOSPlatform(OSPlatform.Linux) APIを実装していないために、アプリケーションが実行されているOSを検出できないためです。

これは、added a fix to catchです。この実装されていないAPIはv4.5.15から利用できます。現在はavailable on MyGetです。

+1

新しいパッケージがうまくいった!ありがとう! – Jez

関連する問題