web-dev-qa-db-ja.com

AWS LambdaはRDS mySQLデータベースに接続してデータベースを更新できますか?

AWS Lambda関数をRDS mysqlデータベースに接続しようとしています。
ラムダ関数からデータベースを更新したかっただけです。 IAMロールとアクセスポリシーを指定することでRDSにアクセスできますか?.
mysql client。を使用してmysqlデータベースに接続できますが、ラムダを試してみるとそれができません。これが私のコードです。

console.log('Loading function');
var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();
var mysql = require('mysql');
exports.handler = function(event, context) {
    //console.log('Received event:', JSON.stringify(event, null, 2));  
    var operation = event.operation;
    delete event.operation;
    switch (operation) {
        case 'create':
            var conn = mysql.createConnection({
                Host: 'lamdatest.********.rds.amazonaws.com', // RDS endpoint 
                user: 'user', // MySQL username 
                password: 'password', // MySQL password 
                database: 'rdslamda'
            });
            conn.connect();
            console.log("connecting...");
            conn.query('INSERT INTO login (name,password) VALUES("use6","password6")', function(err, info) {
                console.log("insert: " + info.msg + " /err: " + err);
            });
            console.log("insert values in to database");
            break;
        case 'read':
            dynamo.getItem(event, context.done());
            break;

        default:
            context.fail(new Error('Unrecognized operation "' + operation + '"'));

    }
    context.succeed();
};
42
ARUNBALAN NV

はい。 AWS LambdaからMySql RDSデータベースにアクセスできます。

node-mysqlライブラリを使用できます。

ただし、それに伴う大きな注意事項があります。

AWS Lambdaは(現在)VPC内のプライベートサブネットにアクセスできません。したがって、AWS LambdaがRDSデータベースにアクセスするには、パブリックにアクセスできる必要があります。これは、セキュリティ上のリスクになる可能性があります。

更新(2015-10-30):AWS Lambdaは今後のVPCサポートを発表しました( re:Invent 2015 )、これはずっと長い間問題になりません。

更新(2015-11-17):AWS LambdaはまだVPCをサポートしていません。

更新(2016-02-11):AWS LambdaがVPCリソースにアクセスできるようになりました:

https://aws.Amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/

この機能を実現するために、Lambda関数は実際にはサブネットのVPC内で実行されます。この機能にはいくつかの注意事項があります。

  • VPCサブネットには、Lambdaのスケーリングを処理するのに十分な空きIPアドレスが必要です
  • Lambda関数にインターネットアクセスが必要な場合、指定されたVPCサブネットにはインターネットゲートウェイまたはNATが必要です
77
Matt Houser

このチュートリアルを試してください: http://docs.aws.Amazon.com/lambda/latest/dg/vpc-rds.html

このチュートリアルでは、次のことを行います。

デフォルトのAmazon VPCでAmazon RDS MySQLデータベースエンジンインスタンスを起動します。

MySQLインスタンスで、サンプルテーブル(Employee)を含むデータベース(ExampleDB)を作成します。

ExampleDBデータベースにアクセスするLambda関数を作成し、テーブル(Employee)を作成し、いくつかのレコードを追加して、テーブルからレコードを取得します。

Lambda関数を手動で呼び出し、クエリ結果を確認します。

6
Pallav

LambdaはNode.jsJava、およびPythonをバックエンドプログラミング/スクリプト言語として使用するため、RDSに接続するために間違いなく使用できます。 ( リンク

最後に、 This は、RDSに接続する際のIAMロールの指定に関するドキュメントです。 (下の画像を参照):

enter image description here

4
Jordan

ラムダ関数からデータベースを更新したかっただけです。 IAMロールとアクセスポリシーを指定することでRDSにアクセスできますか?.

いいえ、あなたがすることはできません。接続するには、DB url/username/passwordを提供する必要があります。プライベートサブネットにある場合、同じVPCでLambdaを実行する必要がある場合があります。以下のポインタを参照してください。

Mysql client。を使用してmysqlデータベースに接続できますが、ラムダを試してみるとそれができません。

これは厳密ないいえ、いいえです!本当に必要でない限り、インターネットからRDSにアクセスできません。プライベートサブネットで実行し、それに応じて他のAWSサービスを設定してください。

Lambdaからリソースへのアクセスにタイムアウトが発生している場合、私の終わりから2セントです。

  1. デフォルトでは、Lambdaにはインターネットアクセスがあり、オンラインリソースにアクセスできます。
  2. Lambdaは、VPCのプライベートサブネットにあるサービスにアクセスできません。
  3. プライベートサブネットのサービスに接続するには、lambda is private subnetを実行する必要があります。そのためには、[ネットワーク]セクションに移動して、VPC、サブネット、セキュリティグループを構成する必要があります。
  4. ただし、これを行うと、インターネットアクセスが失われることに注意してください。まだインターネットアクセスが必要な場合は、パブリックサブネットのNATゲート​​ウェイまたはNATインスタンスを起動し、プライベートサブネットからこのNATへのルートを構成する必要があります。
  5. ラムダからプライベートサブネットのRDSに接続しようとしたときに、これに直面しました。 KMSを使用して一部の環境変数を暗号化し、復号化部分ではインターネットアクセスが必要なので、NATゲート​​ウェイを使用する必要がありました。

詳細- http://docs.aws.Amazon.com/lambda/latest/dg/vpc.html#vpc-internet

AWS Lambdaからpostgres RDSに接続する方法

PS:上記のリンクは、追加の関連情報がある個人ブログに移動します。

2
Aniket Thakur