AWS SAM에서 Lambda와 API Gateway를 배포해 보았습니다 (Python)
10533 단어 serverlesssam람다APIGatewayAWS
소개
지금까지 간단하게 Lambda를 만져 왔지만 AWS SAM을 사용하고 싶었기 때문에 시도했습니다.sam init
로 만든 README.md를 따릅니다.
환경
다양한 설치
AWS CLI
커맨드로 AWS의 각종 서비스 등을 사용할 수 있게 됩니다.
설치 후 aws configure
에서 자격 증명을 설정합니다.
도커
Docker를 설치합니다. 설치된 경우 다음!
AWS SAM
$ pip install aws-sam-cli
사용해보기
샘플 작성
$ sam init --runtime python3.6 --name sample
[+] Initializing project structure...
[SUCCESS] - Read sample/README.md for further instructions on how to proceed
[*] Project initialization is now complete
또한, runtime 부분을 바꾸면 다른 언어로 할 수 있습니다. (이하 sam init --help
보다)
-r, --runtime [python3.6|python2.7|python|nodejs6.10|nodejs8.10|nodejs4.3|nodejs|dotnetcore2.0|dotnetcore1.0|dotnetcore|dotnet|go1.x|go|java8|java]
필수 라이브러리 설치
build 폴더 이하에 필요한 파일 등을 모으십시오.
$ pip install -r requirements.txt -t hello_world/build/
$ cp hello_world/*.py hello_world/build/
로컬 테스트
먼저 API를 시작합니다.
$ sam local start-api
다음으로 엔드포인트에 액세스합시다.
$ curl http://127.0.0.1:3000/hello
StatusCode : 200
StatusDescription : OK
Content : {"message": "hello world", "location": "xxx.xxx.xxx.xxx"}
RawContent : HTTP/1.0 200 OK
Content-Length: 57
Content-Type: application/json
Date: Sat, 11 Aug 2018 12:29:28 GMT
Server: Werkzeug/0.14.1 Python/3.6.3
{"message": "hello world", "location": "xxx.xxx.xxx.xx...
Forms : {}
Headers : {[Content-Length, 57], [Content-Type, application/json], [Date, Sat, 11 Aug 2018 12:29:28 GMT], [Se
rver, Werkzeug/0.14.1 Python/3.6.3]}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 57
움직였습니다! !
런타임에 docker.errors.APIError: 500 Server Error: Internal Server Error ("b'Drive has not been shared'")
라는 오류가 발생하면 아래를 참조하여 Docker 공유 설정을 수행합니다.
$ sam init --runtime python3.6 --name sample
[+] Initializing project structure...
[SUCCESS] - Read sample/README.md for further instructions on how to proceed
[*] Project initialization is now complete
-r, --runtime [python3.6|python2.7|python|nodejs6.10|nodejs8.10|nodejs4.3|nodejs|dotnetcore2.0|dotnetcore1.0|dotnetcore|dotnet|go1.x|go|java8|java]
$ pip install -r requirements.txt -t hello_world/build/
$ cp hello_world/*.py hello_world/build/
$ sam local start-api
$ curl http://127.0.0.1:3000/hello
StatusCode : 200
StatusDescription : OK
Content : {"message": "hello world", "location": "xxx.xxx.xxx.xxx"}
RawContent : HTTP/1.0 200 OK
Content-Length: 57
Content-Type: application/json
Date: Sat, 11 Aug 2018 12:29:28 GMT
Server: Werkzeug/0.14.1 Python/3.6.3
{"message": "hello world", "location": "xxx.xxx.xxx.xx...
Forms : {}
Headers : {[Content-Length, 57], [Content-Type, application/json], [Date, Sat, 11 Aug 2018 12:29:28 GMT], [Se
rver, Werkzeug/0.14.1 Python/3.6.3]}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 57
패키징
코드를 저장하는 S3 버킷을 만듭니다. 이미 있다면 다음!
$ aws s3 mb s3://gnk263-lambda-bucket
그런 다음 S3 버킷에 패키징합니다.
$ sam package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket gnk263-lambda-bucket
Uploading to 1729e204b620d03419b6ec4a99b8fac9 1047173 / 1047173.0 (100.00%)
Successfully packaged artifacts and wrote output template to file packaged.yaml.
Execute the following command to deploy the packaged template
aws cloudformation deploy --template-file D:\xxx\yyy\packaged.yaml --stack-name <YOUR STACK NAME>
배포
그런 다음 배포합니다. 1분 정도 기다립니다. 웹 브라우저에서 CloudFormation에 액세스하면 움직이는 것을 볼 수 있습니다.
$ sam deploy --template-file packaged.yaml --stack-name sam-sample --capabilities CAPABILITY_IAM
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - sam-sample
API Gateway 엔드포인트 얻기
$ aws cloudformation describe-stacks --stack-name sam-sample --query 'Stacks[].Outputs'
[
[
{
"Description": "Implicit IAM Role created for Hello World function",
"OutputKey": "HelloWorldFunctionIamRole",
"OutputValue": "arn:aws:iam::yyyyyyy:role/sam-sample-HelloWorldFunctionRole-1RAI3BIXXK7RS"
},
{
"Description": "API Gateway endpoint URL for Prod stage for Hello World function",
"OutputKey": "HelloWorldApi",
"OutputValue": "https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/"
},
{
"Description": "Hello World Lambda Function ARN",
"OutputKey": "HelloWorldFunction",
"OutputValue": "arn:aws:lambda:ap-northeast-1:yyyyyyyy:function:sam-sample-HelloWorldFunction-10SCXHEFU9F2H"
}
]
]
동작 확인
검색한 엔드포인트에 액세스해 봅니다.
$ curl https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/
StatusCode : 200
StatusDescription : OK
Content : {"message": "hello world", "location": "xxx.xxx.xxx.xxx"}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
x-amzn-RequestId: c6a52235-9d77-11e8-9c19-e5ad43c51296
x-amz-apigw-id: Ldwi6G_UNjMFdTA=
X-Amzn-Trace-Id: Root=1-5b6efadf-18477a72e6ee65fc3d0b2342;Sampled=0
...
Forms : {}
Headers : {[Connection, keep-alive], [x-amzn-RequestId, c6a52235-9d77-11e8-9c19-e5ad43c51296], [x-amz-apigw-i
d, Ldwi6G_UNjMFdTA=], [X-Amzn-Trace-Id, Root=1-5b6efadf-18477a72e6ee65fc3d0b2342;Sampled=0]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 56
성공했습니다!
웹 브라우저에서 모습을 살펴보기
s3
상단
버킷 안에
API 게이트웨이
상단
상세
람다
상단
CloudFormation
참고
Reference
이 문제에 관하여(AWS SAM에서 Lambda와 API Gateway를 배포해 보았습니다 (Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gnk263/items/ec57a454aec53808c1d4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)