SAM AWS - тестирование AWS Lambda, которые зависят от слоев - PullRequest
0 голосов
/ 16 октября 2019

Я использую AWS SAM Framework для создания Lambda и API-шлюзов для сопряженных сервисов. Я сталкиваюсь с некоторыми трудностями при запуске модульных и интеграционных тестов для моих функций lambdas, которые используют слои (служебные функции, модели, контроллеры, конфигурации ...)

Я могу заглушить некоторые функции, но другие необходимыособенно некоторые библиотеки, которые я хочу разместить на слое (например, lodash, ...).

Заранее благодарю за помощь.

Уточнение

У меня есть проект, который структурирован следующим образом

  • serverless-poi
    • events / =>содержит все события для локальных тестов
    • lambda-create-poi
      • tests / unit / lambda-create-poi-spec
      • index
      • package
    • lambda-delete-poi
    • lambda-update-poi
    • lambda-list-poi
    • lambda-list-poi
    • layer-poi
      • nodejs /
        • пакет
        • conf
        • модели
        • контроллеры
        • утилиты
        • some-shared-lib (например, lodash, bluebird, ...)

Вседругие лямбды имеют ту же структуру, что и лямбда-создание-пои.

Я планирую индустриализовать развертывание через bitbucket-ci. Мой конвейер выглядит так:

image: amazon/lambda-build-node10.x
pipelines:
branches:
master:
- parallel: 
   - step:
        name: lambda-create-poi
        caches:
          - node
        script:
          - cd lambda-create-poi
          - npm install
          - npm test

    - step:
        name: Same for other lambdas
        caches:
          - node
        script:
          #- cd lambda-xxxx
          #- npm install
          #- npm test

- step:
   name:  Package  
   script:      
        - pipe: atlassian/aws-sam-deploy:0.2.3
          variables:
             AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
             AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
             AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
             S3_BUCKET: $S3_BUCKET
             STACK_NAME: 'my-stack-name'
             SAM_TEMPLATE: 'template.yaml'
             CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
             COMMAND: 'package-only'
- step:
    name:  Upload to S3  
    script:
        - pipe: atlassian/aws-s3-deploy:0.3.2
          variables:
            AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
            AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
            AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
            S3_BUCKET: $S3_BUCKET
            # template packaged.yml after pipe atlassian/aws-sam-deploy package-only execution
            LOCAL_PATH: '.bitbucket/pipelines/generated/pipeline/pipes/atlassian/aws-sam-deploy'
            EXTRA_ARGS: '--exclude=* --include=packaged.yml'

- step:
    name: Deploy stack  
    script:
        - pipe: atlassian/aws-sam-deploy:0.2.3
          variables:
           AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
           AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
           AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
           S3_BUCKET: $S3_BUCKET
           STACK_NAME: 'my-stack-name'
           TEMPLATE: 'https://bucket-access-lambda.s3-eu-west-1.amazonaws.com/packaged.yml'  
           CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
           WAIT: 'true'
           WAIT_INTERVAL: 60
           COMMAND: 'deploy-only'

Моя проблема в параллельном шаге - не могу найти слой для модульного тестирования. Все юнит-тесты не пройдены (мне нужно заглушить все слои, если я использую утилиты)

Спасибо за вашу помощь.

...