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"、line 122、in main status = self .run(options、args)ファイル "/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/commands/install.py"、line 311 in run os.path。 join(options.target_dir、item)ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py"、line 292、in move raise Error、 "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()
私が続けたのは、/ライブラリ/Python/2.7/site-packagesに移動して、sudo pip install MySQL-python(-t /なし)を実行したときにダウンロードされたMySQLdbフォルダー/ファイルをコピーすることです(私はここで私が何か間違っていることを確認してください)、私のラムダプロジェクトに、そしてコンテンツをlambda_function.pyと一緒に圧縮してAWS Lambdaにアップロードしました。
それから私は得る:
モジュール 'lambda_function'をインポートできません:MySQLdbという名前のモジュールはありません
どんな助けや提案にも感謝します!
編集
sudo pip install MySQL-python -t / pathToProjectを機能させることができましたが(コメントの助けをありがとう)、ラムダ関数を実行すると次のようになります:
モジュール 'lambda_function'をインポートできません:/var/task/_mysql.so:無効なELFヘッダー
Linuxボックスで作業すれば、問題なく動作するはずですが(一部の人からの提案による)、OS Xボックスで動作させることができるかどうか疑問に思っています。
Lambdaのようなユースケースでは、PyMySQLのような純粋なpython実装を使用すると、はるかに幸せになります。
これは、PythonデータベースAPI仕様に準拠したMySQLdbに代わるものです。トリガーされたLambdaイベントのようなほとんどの場合、それは同じくらい速くなります。
私はそれをプロダクションで頻繁に使用してきました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加