Aws lambda 在gitlab ci的localstack中运行lambdas

Aws lambda 在gitlab ci的localstack中运行lambdas,aws-lambda,gitlab,gitlab-ci,localstack,Aws Lambda,Gitlab,Gitlab Ci,Localstack,因此,我在本地(笔记本电脑上)运行localstack,可以将无服务器应用程序部署到它,然后调用Lambda。 然而,在gitlab ci中,我真的很难做到同样的事情。 这是.gitlab-ci.yml的相关部分: integration-test: stage: integration-test image: node:14-alpine3.12 tags: - docker services: - name: localstack/localstack

因此,我在本地(笔记本电脑上)运行localstack,可以将无服务器应用程序部署到它,然后调用Lambda。
然而,在gitlab ci中,我真的很难做到同样的事情。
这是.gitlab-ci.yml的相关部分:

integration-test:
  stage: integration-test
  image: node:14-alpine3.12
  tags:
    - docker
  services:
    - name: localstack/localstack
      alias: localstack
  variables:
    LAMBDA_EXECUTOR: docker
    HOSTNAME_EXTERNAL: localstack
    DEFAULT_REGION: eu-west-1
    USE_SSL: "false"
    DEBUG: "1"
    AWS_ACCESS_KEY_ID: test
    AWS_SECRET_ACCESS_KEY: test
    AWS_DEFAULT_REGION: eu-west-1
  script:
    - npm ci
    - npx sls deploy --stage local
    - npx jest --testMatch='**/*.integration.js'
  only:
    - merge_requests
localstack启动,部署工作正常。但是,一旦调用lambda(在集成测试中),localstack就会尝试创建一个容器以供lambda在其中运行,此时它会失败,并出现以下情况:

Lambda process returned error status code: 1. Result: . Output:\\nCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\\nmust specify at least one container source (.....)
我试图将
DOCKER\u HOST
设置为
tcp://docker:2375
,但随后出现以下故障:

Lambda process returned error status code: 1. Result: . Output:\\nerror during connect: Post http://docker:2375/v1.29/containers/create: dial tcp: lookup docker on 169.254.169.254:53: no such host\
DOCKER\u主机
设置为
tcp://localhost:2375
也有抱怨:

Lambda process returned error status code: 1. Result: . Output:\\nCannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running?\\nmust specify at least one container source
有人让lambdas在共享gitlab Runner的localstack中运行过吗?

感谢您的帮助:)

在docker中运行docker通常是个坏主意,因为这是一个很大的安全漏洞。授予对本地docker守护程序的访问权等于授予运行程序的root权限

如果您仍然希望使用主机上安装的docker生成容器,请参阅官方文档-

这可以归结为

volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
转到runner配置中的
[runners.docker]
部分

问题是,你为什么需要docker?根据,将
LAMBDA_EXECUTOR
设置为
local

在本地计算机上的临时目录中运行Lambda函数


这应该是解决您的问题的最佳方法,并且不会损害您的runner主机的安全。

我强烈建议不要在Gitlab CI中使用localstack。“最佳实践”将是实际部署到AWS中并在那里运行测试。这是Gitlab的一大优点,类似这样的事情很容易做到。Lambda_Executor设置为
local
仅适用于Python lambdas。仅通过LAMBDA_EXECUTOR=docker支持Java和节点: