在AWS Lambda中运行Ansible时出现无法创建本地目录错误

在AWS Lambda中运行Ansible时出现无法创建本地目录错误,ansible,aws-lambda,ansible-2.x,Ansible,Aws Lambda,Ansible 2.x,我正在运行以下运行剧本的Python脚本: #!/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 callba

我正在运行以下运行剧本的Python脚本:

#!/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 = '/test'

    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='/test/little.yml',
    )
    return(out)


if __name__ == '__main__':
    main()
这是我的
ansible.cfg
文件:

[ssh_connection]
ssh_args=-o ForwardAgent=yes
retries=2
sk_sudo_pass = yes

[defaults]
remote_user = root
host_key_checking = False
#remote_tmp     = tmp
local_tmp      = ~/tmp
调用lambda函数时,出现以下错误:

START RequestId: ccfe076e-0016-11e7-befa-7ba330223a64 Version: $LATEST
module initialization error: Unable to create local directories(/home/sbx_user1080/tmp): [Errno 30] Read-only file system: '/home/sbx_user1080'

END RequestId: ccfe076e-0016-11e7-befa-7ba330223a64
意味着Ansible无法创建
tmp
文件,因为Lambda正在旋转的容器中存在权限问题。


那么,我该如何解决这个问题呢?另外,根据,Lambda支持将文件写入/tmp目录。那么,如何将
local\u tmp
设置到该目录?

您只能在AWS Lambda环境中写入
/tmp
。您无法在该环境中创建
~/tmp
目录。看起来您需要更改以下内容:

local\u tmp=~/tmp

为此:


local\u tmp=/tmp
您只能在AWS Lambda环境中写入
/tmp
。您无法在该环境中创建
~/tmp
目录。看起来您需要更改以下内容:

local\u tmp=~/tmp

为此:


local\u tmp=/tmp

您的代码是否恰好基于JoséCoelho在Medium上的这一点(不确定@JoséCoelho:2398842是否是相同的José)。代码看起来几乎相同(不是抱怨),但我很新,我不确定它是否类似于更通用的代码,而不是真正暗示您通过关注我所在的博客(将我带到这里:)来解决这个错误/问题。您的代码是否恰好基于JoséCoelho在Medium上的这一点(不确定@JoséCoelho:2398842是否是同一个José)?。代码看起来几乎完全相同(不是投诉),但我很新,所以我不确定它是否类似于更通用的代码,而不是真正暗示您通过关注我的博客(将我带到这里:)这似乎对我有效。问题没有提到它将两个文件相对放置在何处,但
ansible.cfg
与py脚本的路径似乎相同。这似乎对我有效。问题没有提到它将两个文件相对放置在何处,而是
ansible.cfg
与py脚本的路径相同这似乎有效。