2017-03-05 7 views
0

ich das folgende Skript in AWS Lambda leite:„Boto für dieses Modul erforderlich“ Fehler 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() 

Allerdings bekomme ich folgende Fehlermeldung: failed=True msg='boto required for this module'

Doch nach diesem Kommentar (https://github.com/ansible/ansible/issues/5734#issuecomment-33135727), Es klappt.

Aber ich verstehe nicht, wie erwähne ich das in meinem Skript? Oder kann ich eine separate hosts Datei haben und sie in das Skript aufnehmen, so wie ich mein Playbook nenne?

Wenn ja, wie?

[EDIT - 1] ich die Linie inventory=ansible.inventory.Inventory('hosts') mit Hosts hinzugefügt haben Datei als:

[localhost] 
127.0.0.1 ansible_python_interpreter=/usr/local/bin/python 

Aber ich diesen Fehler: /bin/sh: /usr/local/bin/python: No such file or directory

Also, wo ist Python innerhalb AWS befindet Lambda?

Ich installierte boto wie ich andere Pakete in dem Lambda unter Deployment-Paket installiert: pip install boto -t <folder-name>

+0

Warum wird nicht erwähnt, wie Sie Boto installiert haben? Stattdessen verweisen Sie auf einen Artikel über die Standard-Verzeichnisstruktur des Homebrew-Paketmanagers auf macOS. Wie ist die Verbindung zu AWS Lambda hier? – techraf

+0

@techraf Die Antwort wurde aktualisiert. In AWS Lambda sollten sich alle Pakete und Skripts im selben Stammordner befinden. [Das Skript funktioniert gut in meinem lokalen]. Es muss also ein Problem geben, wo Lambda das Boto-Paket abholt. – Dawny33

Antwort

0

Der bash Befehl which python wird in der Regel der Position des binären Python geben. Es gibt ein Beispiel, wie man ein Bash-Skript von AWS Lambda here aufruft.

Verwandte Themen