web-dev-qa-db-ja.com

PythonでAWS LambdaでMySQLを使用する際の問題

AWS Lambdaで立ち上げて実行しようとしていますPython(Python btw)の初心者)が、MySQL依存関係を含める際にいくつかの問題があります。指示 こちら 私のMacで。

ステップ3では、プロジェクトのルートでコマンドを実行すると問題が発生します。

Sudo pip install MySQL-python -t /

エラー:

例外:トレースバック(最後の最後の呼び出し):ファイル "/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.Egg/pip/basecommand.py"、122行目、メインステータス= self .run(options、args)ファイル「/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.Egg/pip/commands/install.py」の311行目は、os.pathを実行します。 join(options.target_dir、item)File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py"、行292、in move raiseエラー、 "Destination path '%s 「すでに存在しています」%real_dstエラー:宛先パス '/MySQL_python-1.2.5-py2.7.Egg-info/MySQL_python-1.2.5-py2.7.Egg-info'はすでに存在します

私は次のラムダ関数を書くことになります(私のMacでうまく動作します):

import MySQLdb

def lambda_handler(event, context):
   # Open database connection
   db = MySQLdb.connect(...)

   # prepare a cursor object using cursor() method
   cursor = db.cursor()

   sql = "SELECT * FROM Users"

   try:
      # Execute the SQL command
      cursor.execute(sql)
      # Fetch all the rows in a list of lists.
      results = cursor.fetchall()
      for row in results:
         fname = row[0]
         lname = row[1]
         age = row[2]
         sex = row[3]
         income = row[4]
         # Now print fetched result
         print ("lname=%s" %(lname))
   except:
      print "Error: unable to fecth data"

   # disconnect from server
   db.close()

私がやったことは、/Library/Python/2.7/site-packagesに移動し、Sudo pip install MySQL-python(-t /なし)を実行したときにダウンロードされたMySQLdbフォルダー/ファイルをコピーすることです(私は私がここで何か間違っていることを確認してください)、ラムダプロジェクトに、ラムダ関数.pyと一緒にコンテンツを圧縮し、AWS Lambdaにアップロードしました。

その後、私は得る:

モジュール 'lambda_function'をインポートできません:MySQLdbという名前のモジュールはありません

ヘルプや提案に感謝します!

[〜#〜] edit [〜#〜]

Sudo pipにMySQL-python -t/pathToProjectをインストールさせることができました(コメントの助けに感謝します)が、ラムダ関数を実行するとこれが得られます:

モジュール 'lambda_function'をインポートできません:/var/task/_mysql.so:無効なELFヘッダー

Linuxボックスで作業する場合、(一部の人が示唆するように)正常に動作するはずですが、OS Xボックスから動作させることができるかどうか疑問に思っています。

25
Guy Daher

Lambdaのようなユースケースでは、 PyMySQL のような純粋なpython実装を使用すると、ずっと幸せになります。

Python Database API 仕様に準拠するMySQLdbの代替品です。トリガーされたLambdaイベントのようなほとんどの場合、同じように高速になります。

私は本番環境で多く使用してきましたが、非常に効果的です。

9
systemjack

2つのパッケージをアップロードしてラムダレイヤーを更新するだけです。-sqlalchemy-PyMySQL(mysqlclientの代わりに使用するドライバー)

ドライバーのURLを「mysql + pymysql:// ...」に更新します。

これにより、既存の環境でLambda環境と互換性のあるpymysqlドライバーを使用できます。

RDSのVPCエンドポイントを設定することを忘れないでください。これにより、パフォーマンスとセキュリティがチェックされます。

1
Pranav Nandan

Amazon Linuxインスタンスを使用してpythonパッケージをビルドし、Lambdaデプロイメントパッケージに含める必要があります。 この優れた記事 実行方法についてこの記事に記載されているパッケージは、必要なパッケージとは異なりますが、同様に、ラムダ用にpsycopg2とpymssqlを構築するのに役立ちました。

0
nanestev