forecast_mlops/forecast_mlops_stack.py 파일을 열어서 살펴봅니다.
실습에 사용 될 MLOps 파이프라인 및 데이터가 저장 될 S3 bucket, 파이프라인을 트리거 할 Lambda 함수, 예측 데이터 쿼리를 위한 Athena 등의 서비스 리소스들이 정의되어 있습니다.
이와 같이 CDK를 사용하여 익숙한 프로그래밍 언어를 사용하여 손쉽게 AWS 서비스들을 정의할 수 있습니다.
실습에 사용되는 모든 Lambda 소스와 인프라 소스는 Python으로 개발,
testing-data/params.json 파일을 열어 봅니다.
파이프라인 및 Amazon Forecast에서 사용 될 여러가지 Parameter 값들을 정의 한 파일 입니다.
"AlgorithmArn": "arn:aws:forecast:::algorithm/Deep_AR_Plus",
를 지우고 "PerformAutoML": false
값을 true로 변경하면 Predictor 생성시 가장 최적의 성능을 내는 알고리즘을 자동으로 선택 합니다.
AutoML의 경우 수행하는데 많은 시간이 소요되므로 이번 실습에서는 설정값을 변경하지 않고 default로 DeepAR+ 알고리즘을 선택하여 Predictor를 생성할 것입니다.
{
"DatasetGroup": {
"DatasetGroupName":"ForecastDemoGroup",
"Domain": "CUSTOM"
},
"Predictor": {
"PredictorName": "ForecastDemoPredictor",
"AlgorithmArn": "arn:aws:forecast:::algorithm/Deep_AR_Plus",
"ForecastHorizon": 60,
"FeaturizationConfig":{
"ForecastFrequency":"D"
},
"PerformAutoML": false
},
"Forecast": {
"ForecastName": "ForecastDemo",
"ForecastTypes":[
"0.10",
"0.50",
"0.90"
]
},
"TimestampFormat": "yyyy-MM-dd",
"Datasets": [
{
"DatasetName": "ForecastDemoTargetTimeSeries",
"Domain": "CUSTOM",
"DatasetType": "TARGET_TIME_SERIES",
"DataFrequency": "D",
"Schema": {
"Attributes": [
{
"AttributeName":"timestamp",
"AttributeType":"timestamp"
},
{
"AttributeName":"item_id",
"AttributeType":"string"
},
{
"AttributeName":"target_value",
"AttributeType":"float"
}
]
}
}
],
"PerformDelete": false
}
cdk.json 파일을 열어봅니다.
my-address@email.com
값을 본인의 이메일로 변경 후 저장합니다.
파이프라인 동작 완료, 실패시 SNS 알람을 받을 이메일 주소 입니다.
다음 명령어로 샘플 CDK 코드가 정상적으로 빌드 되는지 확인 합니다.
cdk synth
정상적으로 빌드가 되면 cdk.out/forecast-mlops.template.json 파일이 생성된 것을 확인할 수 있습니다.
CDK app으로 정의된 리소스들이 CloudFormation 템플릿 형태로 합성되어 생성됩니다.
CloudFormation을 직접 작성했다면 약 1740 line 의 템플릿 코드를 작성해야 하지만 CDK를 이용하여 약 350 line의 Python 코드로 필요한 AWS 리소스 및 파이프 라인을 정의한 것을 확인할 수 있습니다.
이와 같은 리소스 정의의 간편함이 CDK의 큰 장점 중 하나 입니다.
이제 CDK로 정의 된 리소스들을 배포합니다.
다음 명령어를 터미널 창에 입력하여 ForecastMlopsStack을 배포합니다.
cdk deploy
배포가 완료 되었으면 입력했던 email 주소로 AWS Notification - Subscription Confirmation 라는 제목으로 AWS SNS Topic에 대한 구독 메일이 수신 되었을 것 입니다.
해당 메일의 Confirm subscription 링크를 클릭하여 구독을 승인 합니다.
CloudFormation Console로 이동하여 Stack이 잘 배포되었는지 확인합니다.
Output 탭으로 이동하여 ForecastBucketName 값을 복사합니다.
Cloud9 터미널 창에서 다음 명령어를 실행하여 params.json 파일을 ForecastBucket으로 복사합니다.
{ForecastBucketName}
은 복사한 값으로 변경하여 실행합니다.
aws s3 cp testing-data/params.json s3://{ForecastBucketName}
다음 명령어를 실행하여 dummy e-commerce 판매량 시계열 데이터를 ForecastBucket에 업로드 합니다.
aws s3 sync testing-data/ s3://{ForecastBucketName}