使用 greengrass 在本地设备上执行 lambda 函数
Execute lambda function on local device using greengrass
我正在尝试学习 AWS greengrass,所以我一直在学习本教程 https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-gs.html,该教程逐步解释了如何在 raspberry pi 上设置 greengrass 并使用 lambda 函数发布一些消息。
一个简单的lambda函数如下:
import greengrasssdk
import platform
from threading import Timer
import time
# Creating a greengrass core sdk client
client = greengrasssdk.client('iot-data')
# Retrieving platform information to send from Greengrass Core
my_platform = platform.platform()
def greengrass_hello_world_run():
if not my_platform:
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core.')
else:
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core running on platform: {}'.format(my_platform))
# Asynchronously schedule this function to be run again in 5 seconds
Timer(5, greengrass_hello_world_run).start()
# Execute the function above
greengrass_hello_world_run()
# This is a dummy handler and will not be invoked
# Instead the code above will be executed in an infinite loop for our example
def function_handler(event, context):
return
这里可行,但我试图通过使用 lambda 函数做一些额外的工作(例如打开文件并写入文件)来更好地理解它。
我修改了 greengrass_hello_world_run()
函数如下
def greengrass_hello_world_run():
if not my_platform:
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core.')
else:
stdout = "hello from greengrass\n"
with open('/home/pi/log', 'w') as file:
for line in stdout:
file.write(line)
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core running on platform: {}'.format(my_platform))
我希望在部署时,我本地 pi 上的守护程序 运行ning 应该在给定目录中创建该文件,因为我相信 greengrass 核心会尝试 运行 在本地设备上执行此 lambda 函数。但是它不会创建任何文件,也不会发布任何内容,因为我相信这段代码可能会被破坏。不确定如何,我尝试查看 cloudwatch,但没有看到任何事件或错误报告。
如能提供任何帮助,我们将不胜感激,
干杯!
我想我找到了答案,我们必须在 lambda 环境中创建资源,并确保授予 lambda 读写权限以访问该资源。默认情况下,lambda 只能访问 /tmp
文件夹。
这是 link 文档
https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html
对此的几点思考...
如果您在 GG 组设置中打开本地日志记录,它将开始在您的 PI 上本地写入日志。设置为:
日志位于:/greengrass/ggc/var/log/system
如果您 tail
python_runtime.log
您可以看到 lambda 执行中的任何错误。
如果您想访问本地资源,您需要在您的 GG 组定义中创建一个资源。然后您可以授予此访问权限,您可以在其中写入文件。
完成后您需要部署您的组以使更改生效。
我正在尝试学习 AWS greengrass,所以我一直在学习本教程 https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-gs.html,该教程逐步解释了如何在 raspberry pi 上设置 greengrass 并使用 lambda 函数发布一些消息。
一个简单的lambda函数如下:
import greengrasssdk
import platform
from threading import Timer
import time
# Creating a greengrass core sdk client
client = greengrasssdk.client('iot-data')
# Retrieving platform information to send from Greengrass Core
my_platform = platform.platform()
def greengrass_hello_world_run():
if not my_platform:
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core.')
else:
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core running on platform: {}'.format(my_platform))
# Asynchronously schedule this function to be run again in 5 seconds
Timer(5, greengrass_hello_world_run).start()
# Execute the function above
greengrass_hello_world_run()
# This is a dummy handler and will not be invoked
# Instead the code above will be executed in an infinite loop for our example
def function_handler(event, context):
return
这里可行,但我试图通过使用 lambda 函数做一些额外的工作(例如打开文件并写入文件)来更好地理解它。
我修改了 greengrass_hello_world_run()
函数如下
def greengrass_hello_world_run():
if not my_platform:
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core.')
else:
stdout = "hello from greengrass\n"
with open('/home/pi/log', 'w') as file:
for line in stdout:
file.write(line)
client.publish(topic='hello/world', payload='hello Sent from Greengrass Core running on platform: {}'.format(my_platform))
我希望在部署时,我本地 pi 上的守护程序 运行ning 应该在给定目录中创建该文件,因为我相信 greengrass 核心会尝试 运行 在本地设备上执行此 lambda 函数。但是它不会创建任何文件,也不会发布任何内容,因为我相信这段代码可能会被破坏。不确定如何,我尝试查看 cloudwatch,但没有看到任何事件或错误报告。
如能提供任何帮助,我们将不胜感激, 干杯!
我想我找到了答案,我们必须在 lambda 环境中创建资源,并确保授予 lambda 读写权限以访问该资源。默认情况下,lambda 只能访问 /tmp
文件夹。
这是 link 文档
https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html
对此的几点思考...
如果您在 GG 组设置中打开本地日志记录,它将开始在您的 PI 上本地写入日志。设置为:
日志位于:/greengrass/ggc/var/log/system
如果您 tail
python_runtime.log
您可以看到 lambda 执行中的任何错误。
如果您想访问本地资源,您需要在您的 GG 组定义中创建一个资源。然后您可以授予此访问权限,您可以在其中写入文件。
完成后您需要部署您的组以使更改生效。