scrutinizer에서 AWS SAM CLI Local 실행

5648 단어 devopsaws
AWS SAM CLI Local을 실행하려고 하면 곧 다음 메시지가 표시됩니다.

Error: Running AWS SAM projects locally requires Docker. Have you got it installed?


AWS SAM에는 Docker API 버전 v1.35가 필요하며 SAM LOCAL을 시작할 때 Docker API에 ping endpoint 을 쿼리합니다. Scrutinizer는 기본적으로 더 낮은 버전의 Docker를 실행하므로 이 끝점을 호출하면 400 상태 코드가 생성됩니다.

Scrutinizer에서 최신 버전의 Docker 사용



최신 버전을 사용하기 위해 scrutinizer는 원격 도커 엔진을 제공합니다.

build:
  environment:
    docker: 
      remote_engine: true


AWS SAM 로컬 설치



AWS SAM Local 설치는 매우 간단합니다.

project_setup:
    before:
      # Install SAM CLI
      - pip install aws-sam-cli==1.12.0 # Fixed to version because of a bug in SAM Local: https://github.com/aws/aws-sam-cli/issues/2436
      - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
      - unzip awscliv2.zip
      - sudo ./aws/install

      # Configure AWS defaults
      - aws configure set aws_access_key_id scrutinizer_fake_key
      - aws configure set aws_secret_access_key scrutinizer_fake_secret
      - aws configure set default.region eu-west-1

      # Install the readmodel
      - make install
      - make set_up_dynamodb

      # Start Lambda
      - command: sam local start-lambda -t cloudformation.yaml 
        background: true 


소스 코드를 사용 가능하게 만들기



원격 엔진은 Scrutinizer 컨테이너에 저장된 코드에 액세스할 수 없습니다. 즉, AWS SAM Local이 다음 결과를 제공합니다.
sam local {"errorType":"Runtime.HandlerNotFound"}
이는 AWS SAM Local이 Cloudformation 코드에서 정의된 핸들러를 찾을 수 없다는 것을 의미합니다.

원격 엔진에서 소스 코드를 사용할 수 있도록 하려면 중간 도커 컨테이너를 사용할 수 있습니다.

- docker run -v /home/scrutinizer/build:/remote-host -d --name cp-container busybox
- docker cp /home/scrutinizer/build cp-container:/remote-host


그러면 코드가 busybox에 연결된 볼륨에 복사되고 이 볼륨은 AWS SAM Local에서 사용됩니다.

이 문제를 해결하는 데 사용되는 도구


  • --debug AWS SAM 로컬 명령의 플래그
  • 정말 빨리 답장해주시는 스크루티나이저 지원!

  • 철저한 조사자 설정 완료




    build:
      environment:
        docker: 
          remote_engine: true
      project_setup:
        before:
          # Install SAM CLI
          - pip install aws-sam-cli
          - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
          - unzip awscliv2.zip
          - sudo ./aws/install
    
          # Configure AWS defaults
          - aws configure set aws_access_key_id scrutinizer_fake_key
          - aws configure set aws_secret_access_key scrutinizer_fake_secret
          - aws configure set default.region eu-west-1
    
          # Copy data to remote docker volume 
          - docker run -v /home/scrutinizer/build:/remote-host -d --name cp-container busybox
          - docker cp /home/scrutinizer/build/code cp-container:/remote-host/code
    
          # Start API and Lambda
          - command: sam local start-lambda -t cloudformation.yaml
            background: true  
      tests:
        override:
          - sam local invoke -t cloudformation.yaml "ProcessStream" --no-event
    

    좋은 웹페이지 즐겨찾기