cos*_*iry 5 python amazon-web-services aws-lambda aws-sam-cli aws-sam
我在一个单一存储库工作,其中有一个AWS SAM (lambda) 应用程序。结构或多或少像这样:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_folder1\n \xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1.py\n\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_folder2\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_folder3\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file3.py\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sam-app\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 events\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 event.json\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 samconfig.toml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 template.yaml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hello_world\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n :preview:\n numpy\n pandas\n ...\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app.py\n :preview:\n import pandas\n from my_folder1.my_folder2.my_folder3.file3 import MyClass\n ...\n\n .\n .\n .\n more_folders...\n .\n .\n .\nRun Code Online (Sandbox Code Playgroud)\n\n您可以将我的申请分为三个部分:
\n\npandas、numpy等。这些包很少更改。有时我会添加一个新的。它们需要很长时间才能安装。它们需要构建在与 lambda 运行时相对应的 docker 容器中(任何使用过 numpy/pandas 的人都已经学会了这一点)。Mono 存储库中的源代码,从我的 lambda 隐式调用。因此,如果您按照上面的预览进行操作。\nmy_folder1.my_folder2.my_folder3.file3可能如下所示:
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_folder1\n \xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1.py\n\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_folder2\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_folder3\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file3.py\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sam-app\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 events\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 event.json\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 samconfig.toml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 template.yaml\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hello_world\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n :preview:\n numpy\n pandas\n ...\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app.py\n :preview:\n import pandas\n from my_folder1.my_folder2.my_folder3.file3 import MyClass\n ...\n\n .\n .\n .\n more_folders...\n .\n .\n .\nRun Code Online (Sandbox Code Playgroud)\n\n此代码经常更改。不需要构建 docker 镜像。
./my_folder1/sam-app/hello_world/app.py假设我运行该sam build --use-container命令。这很棒!它创建.aws-sam/build/MyFunction/pandas、.aws-sam/build/MyFunction/numpy等。这些 pip 包是针对 amazon-linux 构建的,可以由 lambda 使用。问题是我的本地导入(例如from my_folder1.my_folder2.my_folder3.file3 import MyClass)显然会失败。
我的问题是:是否可以使用现有模板规范将我的代码的本地导入同步到我的 sam 应用程序? 有关模板规范的最佳文档
\n\n附加信息:
\n\n目前我如何解决这个问题?\n我编写如下所示的 bash 脚本并在之后运行它们sam build --use-container:
.\n.\n.\nrsync "${EXCLUSIONS[@]}" -r $LOCAL_MODULES0 $LOCAL_MODULES1 ./.aws-sam/build/${FUNCTION}/my_folder2\nrsync "${EXCLUSIONS[@]}" -r $LOCAL_MODULES2 $LOCAL_MODULES3 ./.aws-sam/build/${FUNCTION}/\n.\n.\n.\nRun Code Online (Sandbox Code Playgroud)\n\n它将相关的本地目录复制/同步到构建目录中,看起来就像是 pip 安装的一样。因为 lambda 必须已经在 python 路径中具有该文件夹。
\n\n我也有一个专门用于./my_folder1/sam-app/hello_world/.
糟糕的事情:
\n\n我想要的东西:
\n\nsam build --use-container --dependencies- 在 docker 镜像上构建外部包(使用 pip 安装的东西)。需要很长时间,但只需要完成一次(除非删除/添加依赖项)。sam build- 由于--dependencies未指定,仅将代码./my_folder1/sam-app/hello_world/与 template.yaml 中指定的任何本地目录一起安装sam local invoke- 应该sam build && sam local invoke| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |