...
Cloud9 환경이 준비되는 것을 볼 수 있습니다. Cloud9이 가용해질 때까지 잠시 기다립니다. (약 1분 내외면 웹 상에서 개발을 할 수 있는 환경을 구축할 수 있습니다.)
작업 진행중 (2022-02-17)
Cloud9 구동 화면
다음과 같이 구동이 되면, 하단의 Terminal 환경을 통해 아래와 같은 CLI 명령을 수행할 수 있습니다.
...
아키텍처 다이어그램에 나와 있던 인프라를 하나씩 만들어 보겠습니다.
DynamoDB부터 만듭니다. CDK API Reference에 들어가면 다양한 리소스를 다룰 수 있는 것을 알 수 있습니다.
정보 |
---|
CDK API Reference - https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.htmlaws_cdk — AWS Cloud Development Kit 2.12.0 documentation (amazon.com) |
DynamoDB를 생성할 것이므로 아래 aws-dynamodb의 Overview를 들어갑니다.
https://docs.aws.amazon.com/cdk/api/latest/docs/aws-dynamodb-readme.html aws_cdk.aws_dynamodb — AWS Cloud Development Kit 2.12.0 documentation (amazon.com)
Python에서는 aws_cdk에 aws_dynamodb 패키지를 활용할 수 있는 것을 볼 수 있습니다.
...
Lambda 함수 코드를 만들었으니 Lambad 함수가 리소스로 배포되어야 합니다.
Lambda 함수를 만들기 위해서 AWS CDK를 참고하겠습니다. https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-readme.html
aws_cdk.aws_lambda — AWS Cloud Development Kit 2.12.0 documentation (amazon.com)
url_short_stack.py 파일에 aws_lambda를 사용하기 위해서 import에 추가합니다. (, aws_lambda 코드 추가, 이때 lambda_ 로 호출합니다.)
코드 블럭 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
from aws_cdk import ( # Duration, Stack, aws_dynamodb as dynamodb, aws_lambda as lambda_ ) |
Lambda 함수를 선언합니다. 이때 Python은 lambda 키워드를 이미 가지고 있기 때문에 _를 추가하여 사용합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
function = lambda_.Function(self, "backend", runtime=lambda_.Runtime.PYTHON_3_9, handler="handler.main", code=lambda_.Code.from_asset("./lambda")) |
Lambda 함수 리소스 배포
배포 Lambda 함수 확인
배포한 Lambda 함수 콘솔에 들어가서 확인이 가능합니다.
Lambda 함수에 DynamoDB Table로의 접근 권한 부여
...
다음과 같은 형태의 코드가 작성이 완료되었습니다.
CDK diff 기능
새로운 CDK 명령인 diff 기능입니다. 리소스에 대한 변경 사항을 확인할 수 있습니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cdk diff |
IAM 설정이 변경된 것을 볼 수 있으며, DDB mapping에 대한 Lambda 함수에 정책이 추가된 것을 볼 수 있습니다. backend라는 Lambda 함수가 이 정책을 쓰는 주체가 되는 것을 알 수 있습니다.
Lambda 함수가 수정된 것을 볼 수 있으며, 환경 변수 값이 추가되었고 새롭게 만들어진 정책이 적용된 것을 볼 수 있습니다.
...
cdk를 deploy 하면 아래와 같이 변경 사항을 적용할지를 적용할지 물어보고, y를 선택하면 배포 되는 것을 확인할 수 있습니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cdk deploy |
API Gateway 리소스 정의
이번에는 API를 연결하기 위해서 API Gateway를 추가 하겠습니다.
먼저 API Gateway를 Import 해야 합니다. 사용 방법은 CDK API 레퍼런스를 참조합니다.
https://docs.aws.amazon.com/cdk/api/latest/docs/aws-apigateway-readme.htmlaws_cdk.aws_apigateway — AWS Cloud Development Kit 2.12.0 documentation (amazon.com)
해당 패키지를 추가합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
from aws_cdk import core, ( # Duration, Stack, aws_dynamodb as dynamodb, aws_lambda as lambda_, aws_apigateway as apigateway ) |
API Gateway를 선언하겠습니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
api = aws_apigateway.LambdaRestApi(self, "api", handler=function) |
...
다음과 같이 API가 배포되는 것을 볼 수 있습니다. Endpoint URL이 생성됩니다.
테스트
배포된 API Endpoint URL이 정상 동작이 되는지 확인해 봅시다.
배포가 완료되면 Outputs에 나와 있는 배포된 URL을 복사해서 웹 브라우저 주소창에 넣고 확인합니다. (본인의 프로젝트에서 생성된 URL을 이용하여 테스트 하세요.)
https://vp8tpwdmd4pqy4zo7jd9.execute-api.ap-northeast-2.amazonaws.com/prod/
호출에 대한 정당한 200 OK 메시지를 받는 것을 알 수 있습니다. 사용 방법에 맞춰서 한 번 호출해 봅시다.
...
아마존닷컴에 접속할 수 있는 URL을 만들어 보겠습니다. (본인의 프로젝트에서 생성된 URL을 이용하여 테스트 하세요.)
https://vp8tpwdmd4pqy4zo7jd9.execute-api.ap-northeast-2.amazonaws.com/prod/?targetUrl=https://www.amazon.com
생성된 URL을 입력할 경우, 정상적으로 Redirect 되는지 확인해 봅시다. (본인의 프로젝트에서 생성된 URL을 이용하여 테스트 하세요.)
https://vp8tpwdmd4pqy4zo7jd9.execute-api.ap-northeast-2.amazonaws.com/prod/7c9b02b8de32adf6
잘 동작하는 것을 볼 수 있습니다.
...
경고 |
---|
작업 진행중 (2022-02-17) 아래는 수정 이전이므로 동작을 보장하지 않습니다. |
미션 2. 부하 테스트 및 모니터링 대시보드 작성
...