2017-03-16 33 views
0

AWS RDSのMySQLデータベースにアクセスするには、C#.NETコアでAWS Lambdaを使用できますか?AWS Lambda C#経由でMySQLサーバーにアクセスするには?

私はnugetから「Pomelo.EntityFrameworkCore.MySql」V1.1を試してみましたが、AWSラムダにそれをシフトする前に、コンソールアプリケーション(.NETのコア)で働いてテストしました。

私は、Visual Studio Professionalのアップデート3および.NETのコア1.0.1を実行しています - VS 2015ツーリングプレビュー2.

を私のテストコードは簡単です...ちょうどAWS RDSでMySQLデータベースを開くためにテスト、物事が働いていましたコンソールアプリケーションで正常に出力されましたが、エラー "操作はこのプラットフォームではサポートされていません。"をラムダに移動したときに表示しています。

RDS MySQLデータベースにアクセスするためのLambda C#のこのサンプルや問題を解決する方法はありますか?以下は

私のテストコード、

Function.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Amazon.Lambda.Core; 
using Amazon.Lambda.Serialization; 
using Microsoft.EntityFrameworkCore; 

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. 
[assembly: LambdaSerializerAttribute(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] 

namespace AWSLambda1 
{ 
    public class Function 
    { 
     /// <summary> 
     /// A simple function that takes a string and does a ToUpper 
     /// </summary> 
     /// <param name="input"></param> 
     /// <param name="context"></param> 
     /// <returns></returns> 
     public string FunctionHandler(ILambdaContext context) 
     { 
      Console.WriteLine("Lambda starting"); 
      using (var mySQLcontext = new MyContext()) 
      { 
       // Create database 
       mySQLcontext.Database.EnsureCreated(); 
      } 
      return "Lambda stopped"; 
     } 
    } 

    public class MyContext : DbContext 
    { 
     //public DbSet<User> Users { get; set; } 

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
      => optionsBuilder 
       .UseMySql(@"Server=your_dbsvr_host;database=testDB;uid=admin;pwd=password123"); 
    } 
} 

project.json

{ 
    "version": "1.0.0-*", 
    "buildOptions": { 
    }, 

    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "type": "platform", 
     "version": "1.0.0" 
    }, 
    "Amazon.Lambda.Core": "1.0.0*", 
    "Amazon.Lambda.Serialization.Json": "1.0.1", 
    "Amazon.Lambda.Tools": { 
     "type": "build", 
     "version": "1.3.0-preview1" 
    }, 
    "Pomelo.EntityFrameworkCore.MySql": "1.1.0" 
    }, 

    "tools": { 
    "Amazon.Lambda.Tools" : "1.3.0-preview1" 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": "dnxcore50" 
    } 
    } 
} 

ラムダエラー応答

です
{ 
    "errorType": "PlatformNotSupportedException", 
    "errorMessage": "Operation is not supported on this platform.", 
    "stackTrace": [ 
    "at System.Runtime.InteropServices.OSPlatform.get_Windows()", 
    "at MySql.Data.Serialization.ConnectionSettings..ctor(MySqlConnectionStringBuilder csb)", 
    "at MySql.Data.MySqlClient.MySqlConnection.set_ConnectionString(String value)", 
    "at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalConnection.get_DbConnection()", 
    "at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalConnection.Open()", 
    "at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlDatabaseCreator.Exists(Boolean retryOnNotExists)", 
    "at Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureCreated()", 
    "at AWSLambda1.Function.FunctionHandler(ILambdaContext context)", 
    "at lambda_method(Closure , Stream , Stream , ContextInfo)" 
    ] 
} 

答えて

0

問題は、project.jsonファイルに「実行時」の指定がないことです。これは、ラムダで実行されている.Net Coreのみに固有のものではありませんが、すべての.Net Coreアプリで必要です。

構文は次のようになります。.Net Core RID's、有効なランタイムのリストを持っています。また

"runtimes": { 
     "win10-x64": {} 
    } 

、ここでのランタイム識別子のMicrosoftのドキュメントがあります。 「win10-x64の」ランタイムはラムダ

の罰金です
0
あなたが1.1.1に1月2017

Pomelo.EntityFrameworkCore.MySqlパッケージのアップデートで修正された基礎となるMySqlConnector libary、中this bugに実行しているように見えます

ますMySqlConnectorの新しいバージョンを導入し、このバグを修正してください。

関連する問題