通过aws codebuild为nodejs lambda创建zip文件的问题

时间:2017-06-30 19:41:45

标签: node.js amazon-web-services aws-lambda aws-codebuild

我想通过aws codebuild进程为我的nodejs lambda创建一个zip工件 - 这样lambda函数可以在S3中使用这个zip文件作为源代码,我们在codebuild中使用git commit id进行管理的部署“证明”

我在github-repo中的文件结构是

grep -A1 -B1 -n hhhh abcd.txt | sed -e 's/[^0-9].*$//' -e 's/$/s|^|#|/' | sed -f- abcd.txt

现在对于nodejs lambda项目我想要没有zip文件夹的zip文件(我们需要lambda中的nodejs项目)所以zip应该直接包含以下文件

folder1
   - myfile.js
   - otherfile.js
folder2
   - otherfiles.js
package.json

的问题:

1)S3中的输出zip包含在文件夹中,即.zip-> rootfolder-> myfile.js而不是我们需要.zip-> myfiles.js 这对于lambda来说是不可用的,因为对于nodejs它应该有root zip文件而不是它们内部(文件夹内没有相对路径)

2)路径 - 你可以看到myfile.js在一个文件夹里面我想要相对路径被省略 - 我试过丢弃路径但问题是所有的node_module文件也在文件夹中而不是在文件夹中作为丢弃path适用于它们 - 我可以只为myfile.js而不是node_module文件夹设置discard path吗? 我目前的yaml文件:

- myfile.js
- node_module ==> folder from codebuild via npm install command 

如果有人能为此提供解决方案会很棒吗?

如果解决方案不包含更改github-repo文件夹结构并且我想在该repo中为其他文件重复此操作以创建其他lambda函数,那将会很棒。

编辑:

我使用下面的yaml文件,在@awsnitin回答

之后一切正常
artifacts:
  files:
    - folder/myfile.js
    - node_modules/**/*
  discard-paths: yes 

1 个答案:

答案 0 :(得分:8)

不幸的是丢弃路径在这种情况下不起作用。最佳选择是将必要的文件作为构建逻辑(buildspec.yml)的一部分复制到新文件夹,并在工件部分中指定该文件夹。这是一个示例buildspec文件

post_build:
    commands:
      - mkdir build-output
      - cp -R folder/myfile.js node_modules/ build-output
artifacts:
  files:
    - build-output/**/*