Aws lambda 在gitlab ci的localstack中运行lambdas
因此,我在本地(笔记本电脑上)运行localstack,可以将无服务器应用程序部署到它,然后调用Lambda。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
然而,在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和节点: