Как развернуть несколько python сценариев вместе как несколько aws лямбда-функций? - PullRequest
2 голосов
/ 12 апреля 2020

AWS новичок здесь

У меня есть репозиторий на gitlab, который имеет ветку с именем automatic_invoice_generator. В этой ветке содержится следующее содержимое:

  • Script1.py
  • Script2.py
  • Script3.py
  • .gitlab-ci. yml

Теперь мне нужно развернуть эти три кода как три разные aws лямбда-функции. Сейчас я создал 3 разных ветви из automatic_invoice_generator branch, script1_branch, script2_branch, script3_branch и для каждой ветви (я немного изменил файл .gitlab-ci.yml, чтобы он подходил для конкретного скрипта ).

Мой .gitlab-ci.yml файл для Script1.py выглядит следующим образом:

image: ubuntu:latest

variables:
    GIT_SUBMODULE_STRATEGY: recursive
    LAMBDA_NAME: Script1
    AWS_DEFAULT_REGION: eu-central-1
    S3_BUCKET: invoice-bucket

stages:
  - deploy

production:
  stage: deploy
  script:
    - apt-get -y update
    - apt-get -y install python3-pip python3.7 zip
    - python3.7 -m pip install --upgrade pip
    - python3.7 -V
    - pip3.7 install virtualenv
    - mv Script1.py ~
    - mv csv_data~
    - mv requirements.txt ~

    # Move submodules
    - mv edilite/edilite ~
    - mv edilite/pydifact/pydifact ~

    # Setup virtual environment
    - mkdir ~/forlambda
    - cd ~/forlambda
    - virtualenv -p python3 venv
    - source venv/bin/activate

    - pip3.7 install -r ~/requirements.txt -t ~/forlambda/venv/lib/python3.7/site-packages/

    # Package environment and dependencies
    - cd ~/forlambda/venv/lib/python3.7/site-packages/
    - zip -r9 ~/forlambda/archive.zip .
    - cd ~
    - zip -g ~/forlambda/archive.zip Script1.py
    - zip -r ~/forlambda/archive.zip csv_data/*
    - zip -r ~/forlambda/archive.zip edilite/*
    - zip -r ~/forlambda/archive.zip pydifact/*

    # Upload package to S3
    # Install AWS CLI
    - pip install awscli --upgrade # --user
    - export PATH=$PATH:~/.local/bin  # Add to PATH

    # Configure AWS connection
    - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
    - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
    - aws configure set default.region $AWS_DEFAULT_REGION
    - aws sts get-caller-identity --output text --query 'Account'  # current account
    - aws s3 cp ~/forlambda/archive.zip s3://$S3_BUCKET/$LAMBDA_NAME-deployment.zip

Я использую один и тот же файл .gitlab-ci.yml для всех ветвей (script1_branch, * 1032) *, script3_branch), только изменяя LAMBDA_NAME и имя .py сценариев. Когда я запускаю файлы .gitlab-ci.yml для всех 3 веток, запускается код и создаются 3 разные лямбда-функции, и код работает отлично.

Что я хотел бы знать, если есть способ, которым я могу измените мой .gitlab-ci.yml файл, с помощью которого я могу вместо создания 3 разных веток для 3 разных скриптов (script1_branch, script2_branch, script3_branch) создать только одну ветку из automatic_invoice_generator (скажем all_scripts_branch) и развернуть все 3 сценария одновременно как три разные лямбда-функции?

Я немного новичок как в aws, так и в gitlab, поэтому любая помощь приветствуется.

1 Ответ

2 голосов
/ 12 апреля 2020

Рассмотрим следующую заглушку .gitlab-ci.yml, которая иллюстрирует использование функции привязки GitLab CI YAML (https://docs.gitlab.com/ee/ci/yaml/#anchors) для уменьшения дублирования кода:

image: alpine

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  AWS_DEFAULT_REGION: eu-central-1
  S3_BUCKET: invoice-bucket

stages:
  - deploy

.job_template: &job_definition  # Hidden key that defines an anchor named 'job_definition'
  stage: deploy
  script:
    - echo zip -g ~/forlambda/archive.zip ${LAMBDA_NAME}.py
    - echo aws s3 cp ~/forlambda/archive.zip s3://$S3_BUCKET/${LAMBDA_NAME}-deployment.zip

production1:
  variables:
    LAMBDA_NAME: Script1
  <<: *job_definition           # Merge the contents of the 'job_definition' alias

production2:
  variables:
    LAMBDA_NAME: Script2
  <<: *job_definition           # Merge the contents of the 'job_definition' alias

Ссылки: - https://docs.gitlab.com/ee/ci/yaml/#anchors - https://gitlab.com/gitlab-org/gitlab-foss/issues/24535

...