AWS SAM CLI에서 HttpApi의 로컬 에뮬레이션이 지원되었으므로 WSL2 Docker에서 사용해 보았습니다.
소개
여러분 AWS SAM CLI를 사용하고 계십니까?
AWS SAM CLI 라고 말하면 올해의 7월에 공식 출시 되어 얼마 지나지 않습니다만, AWS Lambda의 로컬 에뮬레이트로부터 환경 구축까지 할 수 있는 AWS Lambda를 사용하는데 있어서 강력한 툴입니다.
그런 AWS SAM CLI입니다만, 오늘(2020년 10월 30일)에 릴리스된 v1.7.0로 아래 그림과 같은 HttpApi와 Lambda를 조합한 환경의 로컬 에뮬레이트를 할 수 있게 되었습니다.
이전부터 HttpApi에 대한 지원이있었습니다.
실은 이전부터 HttpApi의 지원은 있어, 무려 2019년 12월 5일에 릴리스 된 v0.37.0의 단계에서 AWS상에 구축할 수 있었습니다.
문서 도 준비되어 있어 환경 구축만 하면 문제 없게 사용할 수 있었습니다만 SAM의 주요 기능인 로컬 에뮬레이트는 대상외였습니다.
동작 확인
실제로 HttpAPI의 로컬 에뮬레이트를 실행해 보겠습니다.
운영 환경
실은 이전부터 HttpApi의 지원은 있어, 무려 2019년 12월 5일에 릴리스 된 v0.37.0의 단계에서 AWS상에 구축할 수 있었습니다.
문서 도 준비되어 있어 환경 구축만 하면 문제 없게 사용할 수 있었습니다만 SAM의 주요 기능인 로컬 에뮬레이트는 대상외였습니다.
동작 확인
실제로 HttpAPI의 로컬 에뮬레이트를 실행해 보겠습니다.
운영 환경
개발 컨테이너 구축
로컬로 설치하고 싶지 않기 때문에 WSL2의 Docker 내에서 완결되도록 구축합니다.
먼저 WSL에 작업 폴더를 만들고 VSCode에서 엽니다.
powershell에서 명령을 입력합니다.
wsl # WSLに切り替え
mkdir /path/to/your/workspace/sam-sample # 作業用フォルダを作成
code -r /path/to/your/workspace/sam-sample # 作業用フォルダをVSCodeで開く
이제 VSCode가 열리므로
Ctrl + Shift + p
명령 팔레트를 열고 개발 컨테이너 템플릿을 만듭니다.>Remote-Containers:Add Development Container Configuration Files...
그 중에서
Python 3
를 선택합니다.※ 나오지 않는 사람은
Show ALL Definetions...
를 선택하십시오. Python 3
가 나올 것입니다.그러면 개발 컨테이너의 템플릿이 폴더에 만들어집니다.
AWS SAM CLI는 Docker를 사용하므로 호스트의 docker.sock를 마운트합니다.
.devcontainer.json
의 name
또는 build
와 동일한 계층 구조에이 행을 추가하십시오."mounts": ["source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"],
정의한 환경을 엽니다.
Ctrl + Shift + p
에서 명령 팔레트를 열고 정의한 환경을 엽니다.>Remote-Containers:Reopen in Container
AWS SAM CLI 설치
root@***:/workspaces/sam-sample# pip3 install aws-sam-cli
root@***:/workspaces/sam-sample# sam --version
SAM CLI, version 1.7.0
프로젝트 만들기
sam init
명령으로 프로젝트를 초기화합니다.root@***:/workspaces/sam-sample# sam init
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Which runtime would you like to use?
1 - nodejs12.x
2 - python3.8
3 - ruby2.7
4 - go1.x
5 - java11
6 - dotnetcore3.1
7 - nodejs10.x
8 - python3.7
9 - python3.6
10 - python2.7
11 - ruby2.5
12 - java8.al2
13 - java8
14 - dotnetcore2.1
Runtime: 2
Project name [sam-app]:
Cloning app templates from https://github.com/awslabs/aws-sam-cli-app-templates.git
AWS quick start application templates:
1 - Hello World Example
2 - EventBridge Hello World
3 - EventBridge App from scratch (100+ Event Schemas)
4 - Step Functions Sample App (Stock Trader)
5 - Elastic File System Sample App
Template selection: 1
-----------------------
Generating application:
-----------------------
Name: sam-app
Runtime: python3.8
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Next steps can be found in the README file at ./sam-app/README.md
Hello World용 템플릿이 완성됩니다.
이 상태에서는 아직 이전
RestAPI
을 사용하는 구성이므로 조금만 수정합니다.하지만
Type: Api
부분을 Type: HttpApi
로 전환하면됩니다.실행
sam local start-api
에서 실행합니다.root@***:/workspaces/sam-sample# cd sam-app/
root@***:/workspaces/sam-sample/sam-app# sam local start-api -v /path/to/your/workspace/sam-sample/sam-app
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2020-10-30 06:25:31 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
방금전
Type: HttpApi
으로 전환한/hello
의 Lambda 함수가 인식되고 있는 것을 알 수 있습니다.Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
브라우저에서 액세스하면
hello world
가 올바르게 표시되고 HttApi
지원을 확인할 수 있습니다.덧붙여서
sam local start-api
때 붙인 -v
옵션은 이번 중요하고, AWS SAM CLI를 Docker내에서 실행하는 경우는 호스트상의 프로젝트의 경로를 지정해 줄 필요가 있으므로 주의해 주세요.sam local start-api --help
...
-v, --docker-volume-basedir TEXT
Specifies the location basedir where the SAM
file exists. If the Docker is running on a
remote machine, you must mount the path
where the SAM file exists on the docker
machine and modify this value to match the
remote machine.
이전 버전에서 사용해보기
root@***:/workspaces/sam-sample/sam-app# pip3 install aws-sam-cli==1.6.2
root@***:/workspaces/sam-sample/sam-app# sam --version
SAM CLI, version 1.6.2
root@***:/workspaces/sam-sample/sam-app# sam local start-api -v /path/to/your/workspace/sam-sample/sam-app
Error: Template does not have any APIs connected to Lambda functions
이전 버전에서는 원래 API로 인식되지 않았습니다.
여담
이번에 전달한 AWS SAM CLI의 HttpApi 지원입니다만, 이 기능의 PR에 공헌하였습니다.
원래 열려 있던 PR에 대해서 부족한 기능을 PR했을 뿐입니다만, 실은 최초의 OSS 활동이었으므로 매우 긴장했습니다. . .
또한 OSS라는 불특정 인간이 커밋하는 리포지토리 관리 방법도 배울 수 있었기 때문에 OSS 활동은 중요하다고 인식할 수 있었습니다.
OSS 활동을 한 적이없는 분도 겁없이 도전하는 것이 좋습니다.
Reference
이 문제에 관하여(AWS SAM CLI에서 HttpApi의 로컬 에뮬레이션이 지원되었으므로 WSL2 Docker에서 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/WinterYukky/items/3d272bedab9afb93d344
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(AWS SAM CLI에서 HttpApi의 로컬 에뮬레이션이 지원되었으므로 WSL2 Docker에서 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/WinterYukky/items/3d272bedab9afb93d344텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)