运行 Ansible in AWS Lambda 时无法创建本地目录错误
Unable to create local directories error while running Ansible in AWS Lambda
我是运行以下运行剧本的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 正在旋转的容器中存在权限问题。
那么,我该如何解决呢?此外,根据 this discussion,Lambda 支持将文件写入 /tmp 目录。那么,如何将 local_tmp
设置到该目录?
您只能在 AWS Lambda 环境中写入 /tmp
。您无法在该环境中创建 ~/tmp
目录。看起来你需要改变这个:
local_tmp = ~/tmp
对此:
local_tmp = /tmp
我是运行以下运行剧本的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 正在旋转的容器中存在权限问题。
那么,我该如何解决呢?此外,根据 this discussion,Lambda 支持将文件写入 /tmp 目录。那么,如何将 local_tmp
设置到该目录?
您只能在 AWS Lambda 环境中写入 /tmp
。您无法在该环境中创建 ~/tmp
目录。看起来你需要改变这个:
local_tmp = ~/tmp
对此:
local_tmp = /tmp