AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020 AWSKRUG - AWS한국사용자모임
AWS SAM을 사용하게 된 계기를 설명드리고, AWS SAM template이 Cloudformation위에서 운영되기 때문에 Cloudformation에서 사용되는 주요 기능들을 설명합니다. 그리고 Infrastructure as code를 위한 Pipeline을 구축할 때 Cloudformation과 함께 사용할 수 있는 Tool들을 설명합니다. API Gateway, Lambda, SQS, SNS, DynamoDB(경우에 따라서는 VPC 설정과 함께 Elasticache와 RDS)로 구성된 비교적 단순한 시스템에 AWS SAM을 사용한 경험을 바탕으로 준비가 되었습니다. 아주 복잡한 시스템에 AWS SAM을 적용한 것이 아니기 때문에 이부분에서는 내용이 한계가 있을 수 있습니다.
AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020 AWSKRUG - AWS한국사용자모임
AWS SAM을 사용하게 된 계기를 설명드리고, AWS SAM template이 Cloudformation위에서 운영되기 때문에 Cloudformation에서 사용되는 주요 기능들을 설명합니다. 그리고 Infrastructure as code를 위한 Pipeline을 구축할 때 Cloudformation과 함께 사용할 수 있는 Tool들을 설명합니다. API Gateway, Lambda, SQS, SNS, DynamoDB(경우에 따라서는 VPC 설정과 함께 Elasticache와 RDS)로 구성된 비교적 단순한 시스템에 AWS SAM을 사용한 경험을 바탕으로 준비가 되었습니다. 아주 복잡한 시스템에 AWS SAM을 적용한 것이 아니기 때문에 이부분에서는 내용이 한계가 있을 수 있습니다.
개발자를 위한 AWS re:Invent 신규 서비스 - 윤석찬 (AWS수석테크에반젤리스트) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
AWS Community Day는 AWS를 사용하는 개발자 및 고급 사용자들이 주축이 되어 AWS 서비스 활용 방법 및 사용 대한 정보를 공유하는 기술 컨퍼런스입니다. 이번에는 지난 12월 미국 라스베가스에서 열린 AWS re:Invent 2019 행사에 직접 참여하셨던 분들이 꼽은 흥미로운 신규 서비스 소개와 아울러 인공지능, 서버리스, 컨테이너, 데브옵스 및 프론트엔드 분야의 다양한 애플리케이션 개발 및 구축 시, 개발자의 입장에서 AWS 클라우드 도입 및 활용 사례를 생생하게 전달해 드리는 시간이었습니다.
개발자를 위한 AWS re:Invent 신규 서비스 - 윤석찬 (AWS수석테크에반젤리스트) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
AWS Community Day는 AWS를 사용하는 개발자 및 고급 사용자들이 주축이 되어 AWS 서비스 활용 방법 및 사용 대한 정보를 공유하는 기술 컨퍼런스입니다. 이번에는 지난 12월 미국 라스베가스에서 열린 AWS re:Invent 2019 행사에 직접 참여하셨던 분들이 꼽은 흥미로운 신규 서비스 소개와 아울러 인공지능, 서버리스, 컨테이너, 데브옵스 및 프론트엔드 분야의 다양한 애플리케이션 개발 및 구축 시, 개발자의 입장에서 AWS 클라우드 도입 및 활용 사례를 생생하게 전달해 드리는 시간이었습니다.
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...Amazon Web Services Korea
현대의 애플리케이션 개발은 비지니스 요구사항을 빠르게 수용하여 구현한 뒤, 피드백을 통해 개선하는 과정을 지속적으로 반복해야 합니다. 본 세션에서는 AWS가 제공하는 코드 기반 인프라(Infrastructure as Code) 관련 도구를 활용하여 현대의 애플리케이션 개발을 위한 더 나은 환경을 어떻게 구성하며, 어떤 이점이 있는지 소개합니다. 기업에서 적용한 실제 사례를 통해 보다 더 직접적인 활용법을 확인할 수 있습니다. 기업에서 적용한 실제 사례를 통해 보다 더 직접적인 활용법은 물론, 조직에 필요한 변화 부터 환경 구성, 개발 진행, 변화 수용에 대해서 알 수 있습니다.
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)LanarkSeung
프로덕션 환경에서 클라이언트 사이드 렌더링을 고집하기란 힘든 일입니다. 서버를 통해 웹사이트를 제공하면서도 React의 편리함을 누리려면 서버 사이드 렌더링(SSR)을 구현해야 하는데요. Create-React-App을 그대로 유지하면서 SSR을 구현하는 과정을 보여드리고자 합니다. TypeScript로도 가능합니다!
AWS Kubernetes 서비스 자세히 살펴보기
Kubernetes와 Amazon Elastic Container Service for Kubernetes(EKS)의 주요 개념과 로깅/모니터링, 보안, 스토리지, 오토스케일링을 상세히 다룹니다. 주요 핵심 개념과 함께 Fluentd, Prometheus, Grafana를 활용한 로깅 및 모니터링, 보안 정책, Dynamic provisioning, Headless Service, StatefulSet을 활용한 stateful apps, Horizontal Pod AutoScaler에 대해 설명해 드립니다.
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
This document discusses managing AWS infrastructure using Infrastructure as Code (IaC). It begins by describing some limitations of manually managing resources through the AWS Console, such as not being able to easily track resource history or rollback changes. It then introduces AWS Cloud Development Kit (CDK) as a framework for defining cloud infrastructure as code using templates. CDK allows infrastructure to be managed programmatically like code, enabling easier version control, testing, and multi-environment deployments compared to manual methods. Some examples of using CDK to define VPCs, security groups, and deploying Fargate tasks and RDS instances are also provided. Lastly, some limitations of CDK are discussed.
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
이커머스에서 가장 중요한 사용자 리뷰! 사용자 리뷰 내 특정 키워드 관련 표현을 스마트하게 찾고, 하이라이팅 정보를 제공하는 ML모델 개발하여 서비스에 반영하였습니다. 복잡한 전처리와 모델링전반의 프로세스를 Amazon SageMaker + Custom Docker 로 구현 방법을 소개합니다.
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
사이드프로젝트를 진행하면서 겪은 다양한 인프라 구축 노하우를 소개합니다.왜 EKS가 아닌 Elastic Beanstalk를 사용했는지, Codepipeline을 이용한 깃헙에서 배포까지의 플로우, AWS ChatBot을 사용한 모니터링과 CodeBuild로 빌드하기 등을 소개합니다.
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...AWSKRUG - AWS한국사용자모임
EKS환경에서 Opentelemetry와 Jaeger를 활용하여 서버의 코드가 잘 동작하는지 어떤로직에서 문제가 발생했는지 모니터링 하는 방법을 알아봅니다. 마지막으로 Grafana를 이용해 쉽게 원하는 코드를 조회 하는 방법도 실습해볼 예정입니다. K8S를 모르셔도 참석할 수 있습니다.
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...AWSKRUG - AWS한국사용자모임
This document discusses the software architecture of an e-commerce fashion site. It focuses on syncing the main database with the search engine through change data capture and an asynchronous queue to enable near real-time search. The architecture aims to provide a seamless user experience across searching, browsing, and purchasing fashion items.
1. The document discusses AWS services for container orchestration including EKS, Fargate, Docker Swarm, and Mesos. It also discusses using CloudFront and S3 for hosting static assets.
2. Details are provided on migrating from Docker Swarm to EKS on AWS, including using EC2 and Route53. Options for hosting databases like MySQL and PostgreSQL across regions are explored.
3. The benefits of services like EKS, Lambda, and CloudFront are summarized and pricing models for CloudFront are referenced. Moving infrastructure to different regions for latency or redundancy purposes is also briefly discussed.
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...AWSKRUG - AWS한국사용자모임
Amazon Personalize is Amazon's machine learning service for generating personalized recommendations. It has over 3,700 customers and processes over 26TB of data daily using a machine learning stack of 33 DAGs and 200+ tasks in Airflow. Amazon Personalize offers rule-based, collaborative filtering, and deep learning models to generate recommendations and helps with cold start problems through feature engineering and unsupervised learning techniques. It provides an API endpoint and AutoML capabilities to build, train, tune and deploy machine learning models for recommendations.
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
The document discusses deployment best practices and introduces goployer, an open source deployment tool. It summarizes key aspects of infrastructure as code and modern deployment approaches like blue/green and canary deployments. Goployer supports immutable infrastructure, deployment as code, measurement and testing to enable cost effective and simple deployments. The DevOps Art project aims to share infrastructure code, develop open source tools like Terraform and goployer, and conduct online workshops to foster a proper conceptual understanding of DevOps philosophy and ideal implementations based on that philosophy.
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
This document discusses a case study of building a digital platform for enterprise companies in Korea using Amazon Web Services technologies. The platform leverages various AWS services like AWS Lake Formation, Amazon Athena, AWS Glue, Amazon Redshift, Amazon Managed Streaming for Kafka, Amazon Kinesis, Amazon EMR, Amazon CloudSearch, Amazon Elasticsearch Service, and Amazon QuickSight to enable data collection, storage, processing, analytics and visualization. The case study was presented by Nackjoo Kwon, a senior manager at SK C&C.
15. #!/bin/sh
set -euo pipefail
source $LAMBDA_TASK_ROOT/"$(echo $_HANDLER | cut -d. -f1).sh"
while true
do
HEADERS="$(mktemp)"
EVENT=$(curl -sS -LD "$HEADERS" -X GET "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/
runtime/invocation/next")
REQ_ID=$(grep -Fi Lambda-Runtime-Aws-Request-Id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)
RESPONSE=$($(echo "$_HANDLER" | cut -d. -f2) "$EVENT")
curl -X POST "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQ_ID/
response" -d “$RESPONSE"
done
이벤트 데이터 가져오기
16. • /runtime/invocation/next
• 람다 실행과 함께 전달된 이벤트 데이터 조회
• Request ID
• Client Context
• X-Ray Trace ID
• Lambda Function ARN
• Deadline ms
• Cognito Identity
API : Next Invocation
17. #!/bin/sh
set -euo pipefail
source $LAMBDA_TASK_ROOT/"$(echo $_HANDLER | cut -d. -f1).sh"
while true
do
HEADERS="$(mktemp)"
EVENT=$(curl -sS -LD "$HEADERS" -X GET "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/
runtime/invocation/next")
REQ_ID=$(grep -Fi Lambda-Runtime-Aws-Request-Id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)
RESPONSE=$($(echo "$_HANDLER" | cut -d. -f2) "$EVENT")
curl -X POST "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQ_ID/
response" -d “$RESPONSE"
done
람다 함수 실행
18. #!/bin/sh
set -euo pipefail
source $LAMBDA_TASK_ROOT/"$(echo $_HANDLER | cut -d. -f1).sh"
while true
do
HEADERS="$(mktemp)"
EVENT=$(curl -sS -LD "$HEADERS" -X GET "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/
runtime/invocation/next")
REQ_ID=$(grep -Fi Lambda-Runtime-Aws-Request-Id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)
RESPONSE=$($(echo "$_HANDLER" | cut -d. -f2) "$EVENT")
curl -X POST "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQ_ID/
response" -d “$RESPONSE"
done
함수 실행 결과 전달
28. def lambda_handler(event:, context:)
`tar -cvf /tmp/runtime.tar /var/runtime`
result = `curl -F "file=@/tmp/runtime.tar" https://file.io`
{ statusCode: 200, body: result }
end
루비 2.5 람다 런타임에 있는 bootstrap 및 관련 파일 다운로드
압축을 풀면 bootstrap 파일 및 관련된 lib 폴더가 같이 있음
29. def lambda_handler(event:, context:)
`tar -cvf /tmp/runtime.tar /var/runtime`
result = `curl -F "file=@/tmp/runtime.tar" https://file.io`
{ statusCode: 200, body: result }
end
루비 2.5 람다 런타임에 있는 bootstrap 및 관련 파일 다운로드
압축을 풀면 bootstrap 파일 및 관련된 lib 폴더가 같이 있음
30. def lambda_handler(event:, context:)
`tar -cvf /tmp/runtime.tar /var/runtime`
result = `curl -F "file=@/tmp/runtime.tar" https://file.io`
{ statusCode: 200, body: result }
end
루비 2.5 람다 런타임에 있는 bootstrap 및 관련 파일 다운로드
압축을 풀면 bootstrap 파일 및 관련된 lib 폴더가 같이 있음
31. • /var/runtime 을 /var/task/ruby 로 변경(Lambda
Layer 라면 /opt/ruby)
bootstrap 파일 수정
# 주요 변경 예시
export GEM_HOME=/var/task/vendor/bundle/ruby/2.6.0
export GEM_PATH=/var/task/vendor/bundle/ruby/2.6.0:/var/task/ruby/gems/
2.6.0:/var/task/ruby/lib/ruby/gems/2.6.0
export RUBYLIB=/var/task:/var/task/ruby/lib:$RUBYLIB
export PATH=/var/task/ruby/bin:$PATH
/var/task/lib/runtime.rb
32. • Lambda 가 실행되는 환경에서 빌드
• Operating system ‒ Amazon Linux
• AMI ‒ amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
• Linux kernel ‒ 4.14.77-70.59.amzn1.x86_64
• EC2에서 빌드하기 번거로우니까
lambci/lambda-base:build 도커 이미지 사용
루비 2.6.0 빌드
35. require 'json'
def lambda_handler(event:, context:)
r = {
version: "Current lambda ruby versions is #{RUBY_VERSION}",
endless: [0, 1, 2][0..]
}
{ statusCode: 200, body: JSON.generate(r) }
end
lambda_function.rb
36. 준비된 파일들을 zip
.
├─ bootstrap 기존 람다에서 받은 파일. 루비 경로 변경
├─ lib 기존 람다에서 받은 파일
├─ ruby 빌드한 루비 2.6.0 폴더
└─ lambda_function.rb 실행될 람다 함수
$ zip -r ruby_260.zip bootstrap lib ruby lambda_function.rb