私はAWSラムダ内側次のスクリプト実行しています:「のbotoこのモジュールのために必要な」エラーAnsible
#!/usr/bin/python
from __future__ import print_function
import json
import os
import ansible.inventory
import ansible.playbook
import ansible.runner
import ansible.constants
from ansible import utils
from ansible import callbacks
print('Loading function')
def run_playbook(**kwargs):
stats = callbacks.AggregateStats()
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb = callbacks.PlaybookRunnerCallbacks(
stats, verbose=utils.VERBOSITY)
# use /tmp instead of $HOME
ansible.constants.DEFAULT_REMOTE_TMP = '/tmp/ansible'
out = ansible.playbook.PlayBook(
callbacks=playbook_cb,
runner_callbacks=runner_cb,
stats=stats,
**kwargs
).run()
return out
def lambda_handler(event, context):
return main()
def main():
out = run_playbook(
playbook='little.yml',
inventory=ansible.inventory.Inventory(['localhost'])
)
return(out)
if __name__ == '__main__':
main()
をしかし、私は次のエラーを取得:(このコメントによると、しかしfailed=True msg='boto required for this module'
をhttps://github.com/ansible/ansible/issues/5734#issuecomment-33135727 )、 できます。
しかし、私は自分のスクリプトでそれをどう言いますか?または、別のhosts
ファイルを作成してスクリプトに含めることはできますか?
もしそうなら、どうですか?
[EDIT - 1]として、私はホストとinventory=ansible.inventory.Inventory('hosts')
は、ファイルの行を追加した :しかし、私はこのエラーを取得
[localhost]
127.0.0.1 ansible_python_interpreter=/usr/local/bin/python
:だから/bin/sh: /usr/local/bin/python: No such file or directory
を、pythonのAWSの内側に配置されている場所ラムダ?
私はラムダの展開パッケージに他のパッケージをインストールして同じようにboto
をインストール:pip install boto -t <folder-name>
どうしてあなたはbotoをインストールしたのですか?代わりに、MacOSのHomebrewパッケージマネージャーのデフォルトのディレクトリ構造に関する記事を参照してください。ここAWSラムダとの接続は何ですか? – techraf
@techraf答えを更新しました。 AWS Lambdaでは、すべてのパッケージとスクリプトが同じルートフォルダに存在する必要があります。 [スクリプトは私のローカルでうまくいきます]。だから、Lambdaがbotoパッケージを取り込む場所に何らかの問題があるはずです。 – Dawny33