--- title: Gitlab CI/CD - AWS Lmabda + Docker --- ###### tags: `AWS` `CI/CD` `Docker` `Serverless` # Gitlab CI/CD 實戰 - 部署AWS Lmabda , 透過Docker + 多環境 + 多Runner + ServerlessFramework ### 環境說明: 已有兩台不同的實體機運行git runner,分別給予tag: projectName,dev; projectName,prod,以區分環境。 ## .gitlab-ci.yml ``` stages: - base-image - deploy-lambda .dev-ut: tags: - projectName - dev only: refs: - ut - develop # 此段示範 ut, dev 可共用ut 環境進行測試。 或者你想單獨拉出dev也可 - /^(feature/)+.*/ variables: VER: ut services: - docker:18-dind .dev-uat: tags: - projectName - dev only: refs: - uat variables: VER: uat services: - docker:18-dind .prod: tags: - projectName - prod only: refs: - master variables: VER: prod services: - docker:18-dind .tokyo-var: variables: AWS_REGION: ap-northeast-1 REGION: tokyo .singapore-var: variables: AWS_REGION: ap-southeast-1 REGION: singapore .base-images-changes-script: stage: base-image image: tiangolo/docker-with-compose:latest only: changes: - gitlab-ci/docker/* - docker-compose.yml before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY script: - docker-compose build worker - docker-compose push worker .lambda-changes-script: stage: deploy-lambda when: manual image: registry.gitlab.com/projectName1/projectName-tools:$VER only: changes: - fns/**/* - serverless.* script: - sls deploy --stage $VER --region $AWS_REGION dev-ut-base-image-worker: extends: - .dev-ut - .base-images-changes-script dev-uat-base-image-worker: extends: - .dev-uat - .base-images-changes-script prod-base-image-worker: extends: - .prod - .base-images-changes-script dev-ut-lambda-apn1: extends: - .dev-ut - .tokyo-var - .lambda-changes-script dev-uat-lambda-apn1: extends: - .dev-uat - .tokyo-var - .lambda-changes-script prod-lambda-apn1: extends: - .prod - .tokyo-var - .lambda-changes-script ``` ## dockder-compose.yml: ``` version: "3" services: worker: image: registry.gitlab.com/teamName/projectName:${VER:-latest} build: context: gitlab-ci/docker dockerfile: Dockerfile ``` ## dockerfile: ``` FROM docker:18 # install nodejs and git RUN apk add --update \ python3 \ nodejs \ npm \ git \ python3-dev libffi-dev openssl-dev gcc libc-dev make \ curl \ jq # https://stackoverflow.com/questions/52196518/could-not-get-uid-gid-when-building-node-docker RUN npm config set unsafe-perm true RUN npm config set python python3.7 # install confd RUN curl -sSL https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 -o /usr/local/bin/confd && \ chmod +x /usr/local/bin/confd RUN curl -sSL https://bootstrap.pypa.io/get-pip.py | python3 - # and then install awscli RUN pip install awscli RUN export PYTHON=python3.7 RUN pip install --upgrade pip # install serverless, deploy時需要使用 RUN npm install -g serverless # 安裝requirements.tst RUN npm install --save serverless-python-requirements ``` ## requirements.txt 此為要帶入AWS Lambda Function Layer層的包,提供python於lambda運行時使用 ``` requests==2.23.0 boto3==1.15.6 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up