SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
SEOUL
AWS SAM으로 서버리스
아키텍처 운영하기
이재면 / DevOps Engineer, MyMusicTaste
발표자 소개
DevOps Engineer
Geek이 되어 가는 중
Behavioral science
멋진 멘토가 되는 것이 꿈
목차
- AWS SAM을 사용한 이유
- Cloudformation 기능 설명
- Pipeline
⚠ API Gateway, Lambda, SQS, SNS, DynamoDB등으로 구성된
간단한 시스템에 AWS SAM이 적용되었습니다.
⚠ AWS SAM과 Cloudformation이 익숙하지 않은 분도 들을 수 있도록
발표자료를 준비하였습니다.
⚠ 발표 예제는 Github(jaemyunlee/2020-aws-community-day-seoul)
에서 확인 할 수 있습니다.
AWS SAM을 선택한 이유
과제
❗API gateway, DynamoDB, SNS, SQS, Lambda로
구성된 서비스 개발이 진행.
❗Infrastructure as code를 통해서 배포를 구성.
❗이미 ECS로 구성된 resources들이 Terraform으로
구성되어 있었음
🤔 Terraform으로 계속 작업???
I ❤ Terraform
provider "aws" {
version = "~>2.44"
region = "ap-northeast-2"
}
resource "aws_lambda_function" "example" {
function_name = "ServerlessExample"
s3_bucket = "aws-community-day-example"
s3_key = "v1.0.0/example.zip"
handler = "main.handler"
runtime = "nodejs10.x"
role = aws_iam_role.lambda_exec.arn
}
resource "aws_iam_role" "lambda_exec" {
name = "serverless_example_lambda"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
I ❤ Terraform
resource "aws_api_gateway_deployment" "example" {
depends_on = [
aws_api_gateway_integration.lambda_root,
]
rest_api_id = aws_api_gateway_rest_api.example.id
stage_name = "test"
}
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowAPIGatewayInvoke"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.example.function_name
principal = "apigateway.amazonaws.com"
source_arn =
"${aws_api_gateway_rest_api.example.execution_arn}/*/*"
}
resource "aws_api_gateway_rest_api" "example" {
name = "ServerlessExample"
description = "Terraform Serverless Application Example"
}
resource "aws_api_gateway_method" "proxy_root" {
rest_api_id = aws_api_gateway_rest_api.example.id
resource_id =
aws_api_gateway_rest_api.example.root_resource_id
http_method = "GET"
authorization = "NONE"
}
resource "aws_api_gateway_integration" "lambda_root" {
rest_api_id = aws_api_gateway_rest_api.example.id
resource_id = aws_api_gateway_method.proxy_root.resource_id
http_method = aws_api_gateway_method.proxy_root.http_method
integration_http_method = "POST"
type = "AWS_PROXY"
uri =
aws_lambda_function.example.invoke_arn
}
I started to like SAM 🐿
Transform: "AWS::Serverless-2016-10-31"
Description: "example template"
Resources:
Api:
Type: "AWS::Serverless::Api"
Properties:
StageName: test
TracingEnabled: false
EndpointConfiguration: REGIONAL
ServerlessExample:
Type: "AWS::Serverless::Function"
Properties:
FunctionName: serverless_example_lambda
Runtime: nodejs10.x
Handler: main.handler
CodeUri:
Bucket: aws-community-day-example
Key: v1.0.0/example.zip
Events:
PublicApi:
Type: Api
Properties:
Path: /
Method: GET
RestApiId: !Ref Api
I started to like SAM 🐿
I still ❤ Terraform. However...😝
SAM(Serverless Application Model)은 Serverless를
위한 Tool로 편리하게 Abstraction되어 있습니다.
SAM template에서 Globals로 공통적인
Configuration을 설정할 수도 있고,AutoPublishAlias
옵션으로 쉽게 alias와 versioning을 관리하고, Canary
배포도 간단하게 설정할 수 있었습니다.
😸 저는 서버리스에 있어서는 SAM이 더
직관적이었습니다.
SAM template 구조 설명
Transform: "AWS::Serverless-2016-10-31"
Description: "example template"
Globals:
Function:
Runtime: nodejs10.x
Timeout: 10
Resources:
Api:
Type: "AWS::Serverless::Api"
Properties:
StageName: test
TracingEnabled: false
EndpointConfiguration: REGIONAL
ServerlessExample:
Type: "AWS::Serverless::Function"
Properties:
FunctionName: serverless_example_lambda
Handler: main.handler
CodeUri:
Bucket: aws-community-day-example
Key: v1.0.0/example.zip
Events:
PublicApi:
Type: Api
Properties:
Path: /
Method: GET
RestApiId: !Ref Api
공통적인
설정
SAM resource type
SAM resource type
Event source type
SAM template 설명
SAM의 Resource type는 아래와 같이 있습니다.
AWS::Serverless::Function
AWS::Serverless::Api
AWS::Serverless::HttpApi
AWS::Serverless::Application
AWS::Serverless::SimpleTable
AWS::Serverless::LayerVersion
🤔 여기에 없는 Resource는 Cloudformation의
Syntax를 그대로 사용하시면 됩니다. (예,
AWS::SQS::Queue)
SAM template 설명
SAM의 Event source type는 아래와 같이 있습니다.
S3
SNS
Kinesis
DynamoDB
SQS
Api
Schedule
CloudWatchEvent
EventBridgeRule
CloudWatchLogs
IoTRule
AlexaSkill
Cognito
SAM template 설명
아래의 링크를 가시면 SAM Specification을 더 자세히
볼 수 있습니다.
https://github.com/awslabs/serverless-application-model/blob/mas
ter/versions/2016-10-31.md
AWS SAM Commands
SAM commands
sam deploy
SAM template으로
Stack을 만들고 정의된
AWS resource들이
만들어집니다.
sam build
Lambda code를
build하고 Deployment
artifact 만듭니다.
Python의 경우
requirements.txt에 있는
dependency들을
설치합니다. 기본적으로
.aws-sam/build 폴더에
artifact가 저장됩니다.
sam package
Dependency들이 다
포함된 코드를 zip으로
압축하여 S3에
upload합니다. SAM
Template에서 local
주소를 가리키고 있던
것을 S3 location으로
변경하여 최종 SAM
template를 만듭니다.
sam build
requirements.txt의
requests package가
설치됨
sam build
Lambda가 실행되는
Amazon Linux AMI에
맞는 package가 설치
sam build --use-container
f your Lambda function
depends on packages
that have natively
compiled programs, you
can use the
--use-container flag.
sam package
sam package
sam deploy
sam deploy --template-file packaged.yaml 
--stack-name aws-community-day-example-stack 
--parameter-overrides Environment=beta 
--capabilities CAPABILITY_IAM --region=ap-northeast-2
로컬환경에서 테스트
🔆 sam local
🔆
sam local generate-event
sam local invoke
sam local start-api
sam local start-lambda
로컬환경에서 테스트
Amazon API Gateway
RegisterCat
SearchCat
POST
/cat/
GET
/cat/
test-cat-table
test-cat-table
Put Item
Get Item
Stream
SendMessage
로컬환경에서 테스트
def lambda_handler(event, context):
logger.debug(event)
body = json.loads(event.get('body'))
cat = Cat(**body)
repository = DynamoDBCatRepository(session, os.environ['TABLE_NAME'])
repository.add(cat)
return {
'statusCode': 201
}
Amazon API Gateway
RegisterCat
SearchCat
POST
/cat/
GET
/cat/
def lambda_handler(event, context):
logger.debug(event)
query__param = event.get('queryStringParameters')
repository = DynamoDBCatRepository(session, os.environ['TABLE_NAME'])
cat = repository.get(**query__param)
return {
'statusCode': 200,
'body': cat.json()
}
로컬환경에서 테스트 class DynamoDBCatRepository(NewCat):
def __init__(self, session, table_name):
self.session = session
self.table_name = table_name
def add(self, cat):
self.session.put_item(
TableName=self.table_name,
Item={
'species': {'S': cat.species},
'name': {'S': cat.name},
'age': {'N': str(cat.age)}
}
)
def _get(self, name):
response = self.session.get_item(
TableName=self.table_name,
Key={'name': {'S': name}}
)
item = response.get('Item')
if not item:
return None
data = dynamodb_json.loads(item)
return Cat(**data)
class NewCat(abc.ABC):
@abc.abstractmethod
def add(self, cat):
pass
@abc.abstractmethod
def _get(self, name):
pass
def get(self, name):
cat = self._get(name)
if cat is None:
raise CatNotRegisteredException()
return cat
로컬환경에서 테스트
def lambda_handler(event, context):
logger.debug(event)
body = json.loads(event.get('body'))
cat = Cat(**body)
repository = FakeCatRepository()
repository.add(cat)
return {
'statusCode': 201
}
class FakeCatRepository(NewCat):
def __init__(self, cats=[]):
self.cats = cats
def add(self, cat):
self.cats.append(cat)
def _get(self, name):
for cat in self.cats:
if cat.name == name:
return cat
return None
sam local start-api
sam local start-api
$ curl -X POST -H "Content-Type: application/json" 
-d '{"name":"durian", "species":"bengal","age":10}'
localhost:3000/cat/
sam local start-api
sam local start-api --docker-network
Amazon API Gateway
RegisterCat
SearchCat
POST
/cat/
GET
/cat/
test-cat-table
test-cat-table
Put Item
Get Item
sam local start-api --docker-network
version: '3'
services:
dynamodb:
image: amazon/dynamodb-local
ports:
- "3306:3306"
networks:
- my_network
volumes:
- db-data:/home/dynamodblocal/data
dbsetup:
build: ./
networks:
- my_network
depends_on:
- dynamodb
environment:
- AWS_ACCESS_KEY_ID=foo
- AWS_SECRET_ACCESS_KEY=bar
- AWS_DEFAULT_REGION=ap-northeast-2
volumes:
db-data:
networks:
my_network:
$ docker-compose up
$ sam local start-api
--docker-network=local_dynamodb_my_network
sam local start-api --docker-network
session = boto3.client('dynamodb')
if os.getenv('ENV') == 'test':
session = boto3.client('dynamodb', endpoint_url='http://dynamodb:8000')
def lambda_handler(event, context):
logger.debug(event)
body = json.loads(event.get('body'))
cat = Cat(**body)
repository = DynamoDBCatRepository(session, os.environ['TABLE_NAME'])
repository.add(cat)
return {
'statusCode': 201
}
로컬환경에서 테스트
from application import Cat, NewCatMessage, FakeSender
from lambda_logger import logger
from utils import parse_dynamodb_stream_event
def lambda_handler(event, context):
logger.debug(event)
for event in event.get('Records'):
data = parse_dynamodb_stream_event(event)
if data:
cat = Cat(**data)
message = NewCatMessage(cat.name, cat.get_age_level())
sender = FakeSender(message)
sender.send()
test-cat-table SendMessage
sam local generate-event dynamodb update > event.json
sam local invoke --event event.json SendMessage
Stream
event.json
sam local invoke
sam local lambda
import boto3
import botocore
lambda_client = boto3.client('lambda',
aws_access_key_id="foo",
aws_secret_access_key="bar",
region_name="ap-northeast-2",
endpoint_url="http://127.0.0.1:3001/",
use_ssl=False,
verify=False,
config=botocore.client.Config(
signature_version=botocore.UNSIGNED,
read_timeout=10,
retries={'max_attempts': 0},
)
)
response = lambda_client.invoke(FunctionName="LambdaName")
$ sam local lambda LambdaName
AWS Cloudformation
Options
Core YAML/JSON Macro/Transform High-level Language Custom Resource
AWS SAM
AWS Cloudformation Macro
AWS CDK Call remote APIs
Resources not supported yet
proxies to external resources
AWS SAM은 AWS::Serverless의 resource들이
Cloudformation이랑 호환될 수 있도록 변환합니다.
Cloudformation에서 지원하는 기능들을 대부분 사용할
수 있습니다.
Cloudformation
Parameters
parameter로 input을 dynamic하게
설정하여 Stack을 생성 또는
업데이트 할 수 있습니다.
Parameters:
Environment:
Type: String
Default: test
AllowedValues:
- test
- beta
- prod
Cloudformation
Parameters
System manager parameter
store에 저장한 값을 쉽게
연동하여 Cloudformation
parameter값으로 사용할 수
있습니다.
Parameters:
Environment:
Type: String
Default: test
AllowedValues:
- test
- beta
- prod
LazyCat:
Type: 'AWS::SSM::Parameter::Value<String>'
Default: theLaziestCat
Cloudformation
Mappings
!FindInMap [Config, !Ref Environment, LogLevel]
Key값 별로 미리 value값을
정의해놓고 사용할 수 있습니다.
Mappings:
Config:
test:
LogLevel: DEBUG
TableName: test-cat-table
beta:
LogLevel: INFO
TableName: beta-cat-table
prod:
LogLevel: ERROR
TableName: prod-cat-table
Cloudformation
Conditions
조건을 만족하는 경우에만
resource를 생성할 수
있도록 설정할 수 있습니다.
Conditions:
IsLocal: !Equals [!Ref Environment, test]
DoNotCreateOnLocal: !Not [Condition: IsLocal]
Auth:
Type: "AWS::Serverless::Function"
Condition: DoNotCreateOnLocal
Properties:
FunctionName: !Join [ "-", [example, !Ref
Environment, auth]]
CodeUri: authorizer/
Cloudformation
Nested Stacks으로 공통된 resource를 정의한
template을 재사용하여 만들 수도 있습니다.
RegisterCatLogGroup:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: ./nestedStack.yaml
Parameters:
LambdaName: !Join ["-", [example, !Ref
Environment, register, cat]]
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
LambdaName:
Type: String
Resources:
LambdaLog:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub "/aws/lambda/${LambdaName}"
RetentionInDays: 3
Main Stack nestedStack.yaml
Cloudformation에서 제일 아쉬웠던 점
😑 이미 존재하는 resource들을 Stack에 포함시키고
싶을 때
🔆 resource import 🔆
November 11, 2019
Cloudformation Import 기능
🤨 SAM Template은 Tranform되어야 하는 것 때문에
다음과 같은 에러가 발생
This template does not include any resources to import.
😢 아쉽게도 아직 Import를 지원하는 Resource들이
제한적임.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html
Stacksets
Stacksets으로 여러 region과 여러 account에 stack
생성하고 관리할 수 있습니다.
Administrator
Stack
Target
Stack
Trust
relationship
AWSCloudFormationStackSetExecutionRole
AWSCloudFormationStackSetAdministrationRole
Stacksets (Re:Invent 2019)
Automation of multi-account and multi-region permissions management and
deployment through AWS Organizations
이렇게 target accounts별로 Role들을 설정해줘야 하는데,
Organizations에서 Service-managed permission으로 관리될 수
있을 거라 합니다.
Organization unit별로 stack을 자동으로 배포할 수 있게 됩니다.
OU에 account가 추가되면 자동으로 stack이 배포되고 account가
OU에서 빠지면 자동으로 stack이 지워질 수 있다고 합니다.
Stacksets
🤨 SAM Template은 Tranform되어야 하는 것 때문에
다음과 같은 에러가 발생
Templates with transforms are not supported with StackSets
😅 sam validate --debug로 변환된 template를 볼 수
있습니다. Cloudformation stack console에서도 변환된
template를 볼 수가 있습니다. Stackset을 생성할 때는
Transform을 사용할 수 없기 때문에 변환된 template를
사용해야 합니다.
Pipeline
Pipeline
Users Template
version
control
Test
Deploy
(staging)
Deploy
(production)
cfn-lint
cfn-lint는 Cloudformation linter입니다. .cfnlintrc이름의
YAML파일에 다양한 옵션을 설정할 수 있습니다.
templates:
- template.yaml
append_rules:
- lint_custom_rules/
cfn-lint
cfn-lint
Rule
Numbers
Category
(E|W|I)0XXX Basic Template Errors. Examples: Not parseable, main sections (Outputs, Resources, etc.)
(E|W|I)1XXX Functions (Ref, GetAtt, etc.)
(E|W|I)2XXX Parameters
(E|W|I)3XXX Resources
(E|W|I)4XXX Metadata
(E|W|I)6xxx Outputs
(E|W|I)7xxx Mappings
(E|W|I)8xxx Conditions
(E|W|I)9xxx Reserved for users rules
W1001
W3011
cfn-lint
templates:
- template.yaml
append_rules:
- lint_custom_rules/
ignore_checks:
- W
Warning message는 무시하도록
설정
cfn-lint
templates:
- template.yaml
append_rules:
- lint_custom_rules/
ignore_checks:
- W
- E9001
Error E9001을 무시하도록 설정
cfn-lint
DynamoDB의
리소스가 정의되어
있으면
BillingMode를
체크
class LimitedDynamoDBBillingMode(CloudFormationLintRule):
"""Check if resources are allowed to create"""
id = 'E9001'
shortdesc = 'only PAY_PER_REQUEST'
description = 'Allows only PAY_PER_REQUEST billing mode'
def match(self, cfn):
matches = []
resources = cfn.get_resources()
for resource_name, resource_obj in resources.items():
resource_type = resource_obj.get('Type', "")
if resource_type == 'AWS::DynamoDB::Table':
resource_properties = resource_obj.get('Properties', {})
if not resource_properties.get('BillingMode')== 'PAY_PER_REQUEST':
matches.append(
RuleMatch(['Resources', resource_name, 'Properties', 'BillingMode'],
'Only PAY_PER_REQUEST is allowed'
)
)
return matches
Change sets
Cloudformation에서는 change sets으로 Stack에 어떤
부분이 업데이트될지 적용하기 전에 알 수 있습니다.
Change sets
--no-execute-changeset
옵션으로 바로 change set을
실행하지 않도록 설정 할 수
있습니다.
Stack을 업데이트 하기전에
change set을 확인하고
적용할 수 있습니다.
$ sam deploy
--no-execute-changeset
$ aws cloudformation
execute-change-set
Taskcat
Taskcat은 AWS QuickStart team에서 Cloudformation
template를 테스트하기 위해서 만들어진 Tool입니다.
실제 Stack을 만들고 결과리포트를 생성합니다.
$ taskcat test run
Taskcat
Events:
ResourceStatus ResourceType LogicalResourceId ResourceStatusReason
------------------ -------------------------- ------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------
CREATE_FAILED AWS::CloudFormation::Stack tCaT-my-cfn-project-default-b883fd8dc6b845ce8cb8472bab655da0 The following resource(s) failed to
create: [SendMessageRole, ApplicationLayerbcbc14c563, AuthRole, CatTable].
CREATE_FAILED AWS::IAM::Role AuthRole Resource creation cancelled
CREATE_FAILED AWS::Lambda::LayerVersion ApplicationLayerbcbc14c563 Resource creation cancelled
CREATE_FAILED AWS::IAM::Role SendMessageRole Resource creation cancelled
CREATE_IN_PROGRESS AWS::IAM::Role SendMessageRole Resource creation Initiated
CREATE_FAILED AWS::DynamoDB::Table CatTable Property ProvisionedThroughput cannot
be empty.
CREATE_IN_PROGRESS AWS::DynamoDB::Table CatTable
CREATE_IN_PROGRESS AWS::Lambda::LayerVersion ApplicationLayerbcbc14c563
CREATE_IN_PROGRESS AWS::IAM::Role AuthRole
CREATE_IN_PROGRESS AWS::IAM::Role SendMessageRole
CREATE_IN_PROGRESS AWS::CloudFormation::Stack tCaT-my-cfn-project-default-b883fd8dc6b845ce8cb8472bab655da0 Transformation succeeded
CREATE_IN_PROGRESS AWS::CloudFormation::Stack tCaT-my-cfn-project-default-b883fd8dc6b845ce8cb8472bab655da0 User Initiated
Taskcat
DynamoDB의 BillingMode를 PAY_PER_REQUEST로
바꿔서 다시 taskcat test run을 실행
요약 정리
🙂 간단한 Application으로 SAM Template를 어떻게
작성하는지 살펴보았습니다.
🙂 sam local command를 활용하여 로컬환경에서
Lambda를 테스트하는 방법을 소개하였습니다.
🙂 Cloudformation의 기능들도 설명하였습니다.
🙂 Pipeline을 구축할 때 활용될 수 있는 cfn-lint와
taskcat을 설명하였습니다.

Mais conteúdo relacionado

Mais procurados

Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018Amazon Web Services Korea
 
AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용
AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용
AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용Amazon Web Services Korea
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...Amazon Web Services Korea
 
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon Web Services
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsCloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsFelipe
 
AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...
AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...
AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...Amazon Web Services Korea
 
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저Amazon Web Services Korea
 
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
AWS DirectConnect 구성 가이드 (김용우) -  파트너 웨비나 시리즈AWS DirectConnect 구성 가이드 (김용우) -  파트너 웨비나 시리즈
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈Amazon Web Services Korea
 
AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나
AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나
AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나Amazon Web Services Korea
 
Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...
Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...
Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...Amazon Web Services Korea
 
Transparency and Control with AWS CloudTrail and AWS Config
Transparency and Control with AWS CloudTrail and AWS ConfigTransparency and Control with AWS CloudTrail and AWS Config
Transparency and Control with AWS CloudTrail and AWS ConfigAmazon Web Services
 
AWS Route53 Fundamentals
AWS Route53 FundamentalsAWS Route53 Fundamentals
AWS Route53 FundamentalsPiyush Agrawal
 
(SEC318) AWS CloudTrail Deep Dive
(SEC318) AWS CloudTrail Deep Dive(SEC318) AWS CloudTrail Deep Dive
(SEC318) AWS CloudTrail Deep DiveAmazon Web Services
 
AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저
AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저
AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저Amazon Web Services Korea
 
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...Amazon Web Services Korea
 
Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Web Services Korea
 
[AWS Migration Workshop] 데이터베이스를 AWS로 손쉽게 마이그레이션 하기
[AWS Migration Workshop]  데이터베이스를 AWS로 손쉽게 마이그레이션 하기[AWS Migration Workshop]  데이터베이스를 AWS로 손쉽게 마이그레이션 하기
[AWS Migration Workshop] 데이터베이스를 AWS로 손쉽게 마이그레이션 하기Amazon Web Services Korea
 
AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집Amazon Web Services Korea
 

Mais procurados (20)

Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 
AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용
AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용
AWS Summit Seoul 2023 | 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
 
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and AlarmsCloudwatch: Monitoring your Services with Metrics and Alarms
Cloudwatch: Monitoring your Services with Metrics and Alarms
 
AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...
AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...
AWS 비용 효율화를 고려한 Reserved Instance + Savings Plan 옵션 - 박윤 어카운트 매니저 :: AWS Game...
 
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
 
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
AWS DirectConnect 구성 가이드 (김용우) -  파트너 웨비나 시리즈AWS DirectConnect 구성 가이드 (김용우) -  파트너 웨비나 시리즈
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
 
AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나
AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나
AWS와 함께하는 클라우드 컴퓨팅 (강철 AWS 매니저) :: AWS 기초 교육 온라인 세미나
 
Aws VPC
Aws VPCAws VPC
Aws VPC
 
Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...
Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...
Amazon Personalize Event Tracker 실시간 고객 반응을 고려한 추천::김태수, 솔루션즈 아키텍트, AWS::AWS ...
 
Transparency and Control with AWS CloudTrail and AWS Config
Transparency and Control with AWS CloudTrail and AWS ConfigTransparency and Control with AWS CloudTrail and AWS Config
Transparency and Control with AWS CloudTrail and AWS Config
 
AWS Route53 Fundamentals
AWS Route53 FundamentalsAWS Route53 Fundamentals
AWS Route53 Fundamentals
 
(SEC318) AWS CloudTrail Deep Dive
(SEC318) AWS CloudTrail Deep Dive(SEC318) AWS CloudTrail Deep Dive
(SEC318) AWS CloudTrail Deep Dive
 
AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저
AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저
AWS Builders Online Series | AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저
 
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 - 안수일 시니어 솔루션즈 아키텍트, GS NEOTEK :: AWS Summit...
 
Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon Personalize 개인화 추천 모델 만들기::김태수, 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
 
[AWS Migration Workshop] 데이터베이스를 AWS로 손쉽게 마이그레이션 하기
[AWS Migration Workshop]  데이터베이스를 AWS로 손쉽게 마이그레이션 하기[AWS Migration Workshop]  데이터베이스를 AWS로 손쉽게 마이그레이션 하기
[AWS Migration Workshop] 데이터베이스를 AWS로 손쉽게 마이그레이션 하기
 
AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
AWS 네트워크 보안을 위한 계층별 보안 구성 모범 사례 – 조이정, AWS 솔루션즈 아키텍트:: AWS 온라인 이벤트 – 클라우드 보안 특집
 

Semelhante a AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020

AWS Innovate: Infrastructure Automation on AWS - Seungdo Yang
AWS Innovate: Infrastructure Automation on AWS - Seungdo YangAWS Innovate: Infrastructure Automation on AWS - Seungdo Yang
AWS Innovate: Infrastructure Automation on AWS - Seungdo YangAmazon Web Services Korea
 
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중Amazon Web Services Korea
 
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Web Services Korea
 
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...Amazon Web Services Korea
 
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018Amazon Web Services Korea
 
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019AWSKRUG - AWS한국사용자모임
 
Gaming on AWS - 4. 인프라 자동화와 유용한 7가지 Tip
Gaming on AWS - 4. 인프라 자동화와 유용한 7가지 TipGaming on AWS - 4. 인프라 자동화와 유용한 7가지 Tip
Gaming on AWS - 4. 인프라 자동화와 유용한 7가지 TipAmazon Web Services Korea
 
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발Hyunmin Kim
 
Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축JoongSeob Kim
 
Kubernetes & helm 활용
Kubernetes & helm 활용Kubernetes & helm 활용
Kubernetes & helm 활용SK Telecom
 
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...Amazon Web Services Korea
 
서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020Amazon Web Services Korea
 
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)Amazon Web Services Korea
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Junyoung Sung
 
Ansible를 통한 컨테이너 환경 자동화
Ansible를 통한 컨테이너 환경 자동화Ansible를 통한 컨테이너 환경 자동화
Ansible를 통한 컨테이너 환경 자동화Opennaru, inc.
 
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...Amazon Web Services Korea
 

Semelhante a AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020 (20)

AWS Innovate: Infrastructure Automation on AWS - Seungdo Yang
AWS Innovate: Infrastructure Automation on AWS - Seungdo YangAWS Innovate: Infrastructure Automation on AWS - Seungdo Yang
AWS Innovate: Infrastructure Automation on AWS - Seungdo Yang
 
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
 
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
 
Amazed by aws 2nd session
Amazed by aws 2nd sessionAmazed by aws 2nd session
Amazed by aws 2nd session
 
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...
[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중...
 
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
 
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
 
Gaming on AWS - 4. 인프라 자동화와 유용한 7가지 Tip
Gaming on AWS - 4. 인프라 자동화와 유용한 7가지 TipGaming on AWS - 4. 인프라 자동화와 유용한 7가지 Tip
Gaming on AWS - 4. 인프라 자동화와 유용한 7가지 Tip
 
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
 
Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축Elastic beanstalk 배포 환경 구축
Elastic beanstalk 배포 환경 구축
 
Kubernetes & helm 활용
Kubernetes & helm 활용Kubernetes & helm 활용
Kubernetes & helm 활용
 
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
Serverless 101
Serverless 101Serverless 101
Serverless 101
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
 
서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
서버리스 아키텍처 패턴 및 모범 사례- 강승욱, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
 
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기
 
Ansible를 통한 컨테이너 환경 자동화
Ansible를 통한 컨테이너 환경 자동화Ansible를 통한 컨테이너 환경 자동화
Ansible를 통한 컨테이너 환경 자동화
 
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
 

Mais de AWSKRUG - AWS한국사용자모임

IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...AWSKRUG - AWS한국사용자모임
 
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...AWSKRUG - AWS한국사용자모임
 
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...AWSKRUG - AWS한국사용자모임
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...AWSKRUG - AWS한국사용자모임
 
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...AWSKRUG - AWS한국사용자모임
 
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
 
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 

Mais de AWSKRUG - AWS한국사용자모임 (20)

IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
 
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
 
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
 
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
 
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
 
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
 
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
 
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
 
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
 
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
 
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
 
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
 
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
 
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
 
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
 
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
 
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020
 

Último

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 

Último (8)

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 

AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020

  • 1. SEOUL AWS SAM으로 서버리스 아키텍처 운영하기 이재면 / DevOps Engineer, MyMusicTaste
  • 2. 발표자 소개 DevOps Engineer Geek이 되어 가는 중 Behavioral science 멋진 멘토가 되는 것이 꿈
  • 3. 목차 - AWS SAM을 사용한 이유 - Cloudformation 기능 설명 - Pipeline ⚠ API Gateway, Lambda, SQS, SNS, DynamoDB등으로 구성된 간단한 시스템에 AWS SAM이 적용되었습니다. ⚠ AWS SAM과 Cloudformation이 익숙하지 않은 분도 들을 수 있도록 발표자료를 준비하였습니다. ⚠ 발표 예제는 Github(jaemyunlee/2020-aws-community-day-seoul) 에서 확인 할 수 있습니다.
  • 5. 과제 ❗API gateway, DynamoDB, SNS, SQS, Lambda로 구성된 서비스 개발이 진행. ❗Infrastructure as code를 통해서 배포를 구성. ❗이미 ECS로 구성된 resources들이 Terraform으로 구성되어 있었음 🤔 Terraform으로 계속 작업???
  • 6. I ❤ Terraform provider "aws" { version = "~>2.44" region = "ap-northeast-2" } resource "aws_lambda_function" "example" { function_name = "ServerlessExample" s3_bucket = "aws-community-day-example" s3_key = "v1.0.0/example.zip" handler = "main.handler" runtime = "nodejs10.x" role = aws_iam_role.lambda_exec.arn } resource "aws_iam_role" "lambda_exec" { name = "serverless_example_lambda" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "lambda.amazonaws.com" }, "Effect": "Allow", "Sid": "" } ] } EOF }
  • 7. I ❤ Terraform resource "aws_api_gateway_deployment" "example" { depends_on = [ aws_api_gateway_integration.lambda_root, ] rest_api_id = aws_api_gateway_rest_api.example.id stage_name = "test" } resource "aws_lambda_permission" "apigw" { statement_id = "AllowAPIGatewayInvoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.example.function_name principal = "apigateway.amazonaws.com" source_arn = "${aws_api_gateway_rest_api.example.execution_arn}/*/*" } resource "aws_api_gateway_rest_api" "example" { name = "ServerlessExample" description = "Terraform Serverless Application Example" } resource "aws_api_gateway_method" "proxy_root" { rest_api_id = aws_api_gateway_rest_api.example.id resource_id = aws_api_gateway_rest_api.example.root_resource_id http_method = "GET" authorization = "NONE" } resource "aws_api_gateway_integration" "lambda_root" { rest_api_id = aws_api_gateway_rest_api.example.id resource_id = aws_api_gateway_method.proxy_root.resource_id http_method = aws_api_gateway_method.proxy_root.http_method integration_http_method = "POST" type = "AWS_PROXY" uri = aws_lambda_function.example.invoke_arn }
  • 8. I started to like SAM 🐿 Transform: "AWS::Serverless-2016-10-31" Description: "example template" Resources: Api: Type: "AWS::Serverless::Api" Properties: StageName: test TracingEnabled: false EndpointConfiguration: REGIONAL ServerlessExample: Type: "AWS::Serverless::Function" Properties: FunctionName: serverless_example_lambda Runtime: nodejs10.x Handler: main.handler CodeUri: Bucket: aws-community-day-example Key: v1.0.0/example.zip Events: PublicApi: Type: Api Properties: Path: / Method: GET RestApiId: !Ref Api
  • 9. I started to like SAM 🐿
  • 10. I still ❤ Terraform. However...😝 SAM(Serverless Application Model)은 Serverless를 위한 Tool로 편리하게 Abstraction되어 있습니다. SAM template에서 Globals로 공통적인 Configuration을 설정할 수도 있고,AutoPublishAlias 옵션으로 쉽게 alias와 versioning을 관리하고, Canary 배포도 간단하게 설정할 수 있었습니다. 😸 저는 서버리스에 있어서는 SAM이 더 직관적이었습니다.
  • 11. SAM template 구조 설명 Transform: "AWS::Serverless-2016-10-31" Description: "example template" Globals: Function: Runtime: nodejs10.x Timeout: 10 Resources: Api: Type: "AWS::Serverless::Api" Properties: StageName: test TracingEnabled: false EndpointConfiguration: REGIONAL ServerlessExample: Type: "AWS::Serverless::Function" Properties: FunctionName: serverless_example_lambda Handler: main.handler CodeUri: Bucket: aws-community-day-example Key: v1.0.0/example.zip Events: PublicApi: Type: Api Properties: Path: / Method: GET RestApiId: !Ref Api 공통적인 설정 SAM resource type SAM resource type Event source type
  • 12. SAM template 설명 SAM의 Resource type는 아래와 같이 있습니다. AWS::Serverless::Function AWS::Serverless::Api AWS::Serverless::HttpApi AWS::Serverless::Application AWS::Serverless::SimpleTable AWS::Serverless::LayerVersion 🤔 여기에 없는 Resource는 Cloudformation의 Syntax를 그대로 사용하시면 됩니다. (예, AWS::SQS::Queue)
  • 13. SAM template 설명 SAM의 Event source type는 아래와 같이 있습니다. S3 SNS Kinesis DynamoDB SQS Api Schedule CloudWatchEvent EventBridgeRule CloudWatchLogs IoTRule AlexaSkill Cognito
  • 14. SAM template 설명 아래의 링크를 가시면 SAM Specification을 더 자세히 볼 수 있습니다. https://github.com/awslabs/serverless-application-model/blob/mas ter/versions/2016-10-31.md
  • 16. SAM commands sam deploy SAM template으로 Stack을 만들고 정의된 AWS resource들이 만들어집니다. sam build Lambda code를 build하고 Deployment artifact 만듭니다. Python의 경우 requirements.txt에 있는 dependency들을 설치합니다. 기본적으로 .aws-sam/build 폴더에 artifact가 저장됩니다. sam package Dependency들이 다 포함된 코드를 zip으로 압축하여 S3에 upload합니다. SAM Template에서 local 주소를 가리키고 있던 것을 S3 location으로 변경하여 최종 SAM template를 만듭니다.
  • 18. sam build Lambda가 실행되는 Amazon Linux AMI에 맞는 package가 설치
  • 19. sam build --use-container f your Lambda function depends on packages that have natively compiled programs, you can use the --use-container flag.
  • 22. sam deploy sam deploy --template-file packaged.yaml --stack-name aws-community-day-example-stack --parameter-overrides Environment=beta --capabilities CAPABILITY_IAM --region=ap-northeast-2
  • 23. 로컬환경에서 테스트 🔆 sam local 🔆 sam local generate-event sam local invoke sam local start-api sam local start-lambda
  • 24. 로컬환경에서 테스트 Amazon API Gateway RegisterCat SearchCat POST /cat/ GET /cat/ test-cat-table test-cat-table Put Item Get Item Stream SendMessage
  • 25. 로컬환경에서 테스트 def lambda_handler(event, context): logger.debug(event) body = json.loads(event.get('body')) cat = Cat(**body) repository = DynamoDBCatRepository(session, os.environ['TABLE_NAME']) repository.add(cat) return { 'statusCode': 201 } Amazon API Gateway RegisterCat SearchCat POST /cat/ GET /cat/ def lambda_handler(event, context): logger.debug(event) query__param = event.get('queryStringParameters') repository = DynamoDBCatRepository(session, os.environ['TABLE_NAME']) cat = repository.get(**query__param) return { 'statusCode': 200, 'body': cat.json() }
  • 26. 로컬환경에서 테스트 class DynamoDBCatRepository(NewCat): def __init__(self, session, table_name): self.session = session self.table_name = table_name def add(self, cat): self.session.put_item( TableName=self.table_name, Item={ 'species': {'S': cat.species}, 'name': {'S': cat.name}, 'age': {'N': str(cat.age)} } ) def _get(self, name): response = self.session.get_item( TableName=self.table_name, Key={'name': {'S': name}} ) item = response.get('Item') if not item: return None data = dynamodb_json.loads(item) return Cat(**data) class NewCat(abc.ABC): @abc.abstractmethod def add(self, cat): pass @abc.abstractmethod def _get(self, name): pass def get(self, name): cat = self._get(name) if cat is None: raise CatNotRegisteredException() return cat
  • 27. 로컬환경에서 테스트 def lambda_handler(event, context): logger.debug(event) body = json.loads(event.get('body')) cat = Cat(**body) repository = FakeCatRepository() repository.add(cat) return { 'statusCode': 201 } class FakeCatRepository(NewCat): def __init__(self, cats=[]): self.cats = cats def add(self, cat): self.cats.append(cat) def _get(self, name): for cat in self.cats: if cat.name == name: return cat return None
  • 29. sam local start-api $ curl -X POST -H "Content-Type: application/json" -d '{"name":"durian", "species":"bengal","age":10}' localhost:3000/cat/
  • 31. sam local start-api --docker-network Amazon API Gateway RegisterCat SearchCat POST /cat/ GET /cat/ test-cat-table test-cat-table Put Item Get Item
  • 32. sam local start-api --docker-network version: '3' services: dynamodb: image: amazon/dynamodb-local ports: - "3306:3306" networks: - my_network volumes: - db-data:/home/dynamodblocal/data dbsetup: build: ./ networks: - my_network depends_on: - dynamodb environment: - AWS_ACCESS_KEY_ID=foo - AWS_SECRET_ACCESS_KEY=bar - AWS_DEFAULT_REGION=ap-northeast-2 volumes: db-data: networks: my_network: $ docker-compose up $ sam local start-api --docker-network=local_dynamodb_my_network
  • 33. sam local start-api --docker-network session = boto3.client('dynamodb') if os.getenv('ENV') == 'test': session = boto3.client('dynamodb', endpoint_url='http://dynamodb:8000') def lambda_handler(event, context): logger.debug(event) body = json.loads(event.get('body')) cat = Cat(**body) repository = DynamoDBCatRepository(session, os.environ['TABLE_NAME']) repository.add(cat) return { 'statusCode': 201 }
  • 34. 로컬환경에서 테스트 from application import Cat, NewCatMessage, FakeSender from lambda_logger import logger from utils import parse_dynamodb_stream_event def lambda_handler(event, context): logger.debug(event) for event in event.get('Records'): data = parse_dynamodb_stream_event(event) if data: cat = Cat(**data) message = NewCatMessage(cat.name, cat.get_age_level()) sender = FakeSender(message) sender.send() test-cat-table SendMessage sam local generate-event dynamodb update > event.json sam local invoke --event event.json SendMessage Stream event.json
  • 36. sam local lambda import boto3 import botocore lambda_client = boto3.client('lambda', aws_access_key_id="foo", aws_secret_access_key="bar", region_name="ap-northeast-2", endpoint_url="http://127.0.0.1:3001/", use_ssl=False, verify=False, config=botocore.client.Config( signature_version=botocore.UNSIGNED, read_timeout=10, retries={'max_attempts': 0}, ) ) response = lambda_client.invoke(FunctionName="LambdaName") $ sam local lambda LambdaName
  • 38. Options Core YAML/JSON Macro/Transform High-level Language Custom Resource AWS SAM AWS Cloudformation Macro AWS CDK Call remote APIs Resources not supported yet proxies to external resources AWS SAM은 AWS::Serverless의 resource들이 Cloudformation이랑 호환될 수 있도록 변환합니다. Cloudformation에서 지원하는 기능들을 대부분 사용할 수 있습니다.
  • 39. Cloudformation Parameters parameter로 input을 dynamic하게 설정하여 Stack을 생성 또는 업데이트 할 수 있습니다. Parameters: Environment: Type: String Default: test AllowedValues: - test - beta - prod
  • 40. Cloudformation Parameters System manager parameter store에 저장한 값을 쉽게 연동하여 Cloudformation parameter값으로 사용할 수 있습니다. Parameters: Environment: Type: String Default: test AllowedValues: - test - beta - prod LazyCat: Type: 'AWS::SSM::Parameter::Value<String>' Default: theLaziestCat
  • 41. Cloudformation Mappings !FindInMap [Config, !Ref Environment, LogLevel] Key값 별로 미리 value값을 정의해놓고 사용할 수 있습니다. Mappings: Config: test: LogLevel: DEBUG TableName: test-cat-table beta: LogLevel: INFO TableName: beta-cat-table prod: LogLevel: ERROR TableName: prod-cat-table
  • 42. Cloudformation Conditions 조건을 만족하는 경우에만 resource를 생성할 수 있도록 설정할 수 있습니다. Conditions: IsLocal: !Equals [!Ref Environment, test] DoNotCreateOnLocal: !Not [Condition: IsLocal] Auth: Type: "AWS::Serverless::Function" Condition: DoNotCreateOnLocal Properties: FunctionName: !Join [ "-", [example, !Ref Environment, auth]] CodeUri: authorizer/
  • 43. Cloudformation Nested Stacks으로 공통된 resource를 정의한 template을 재사용하여 만들 수도 있습니다. RegisterCatLogGroup: Type: AWS::CloudFormation::Stack Properties: TemplateURL: ./nestedStack.yaml Parameters: LambdaName: !Join ["-", [example, !Ref Environment, register, cat]] AWSTemplateFormatVersion: "2010-09-09" Parameters: LambdaName: Type: String Resources: LambdaLog: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${LambdaName}" RetentionInDays: 3 Main Stack nestedStack.yaml
  • 44. Cloudformation에서 제일 아쉬웠던 점 😑 이미 존재하는 resource들을 Stack에 포함시키고 싶을 때 🔆 resource import 🔆 November 11, 2019
  • 45. Cloudformation Import 기능 🤨 SAM Template은 Tranform되어야 하는 것 때문에 다음과 같은 에러가 발생 This template does not include any resources to import. 😢 아쉽게도 아직 Import를 지원하는 Resource들이 제한적임. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html
  • 46. Stacksets Stacksets으로 여러 region과 여러 account에 stack 생성하고 관리할 수 있습니다. Administrator Stack Target Stack Trust relationship AWSCloudFormationStackSetExecutionRole AWSCloudFormationStackSetAdministrationRole
  • 47. Stacksets (Re:Invent 2019) Automation of multi-account and multi-region permissions management and deployment through AWS Organizations 이렇게 target accounts별로 Role들을 설정해줘야 하는데, Organizations에서 Service-managed permission으로 관리될 수 있을 거라 합니다. Organization unit별로 stack을 자동으로 배포할 수 있게 됩니다. OU에 account가 추가되면 자동으로 stack이 배포되고 account가 OU에서 빠지면 자동으로 stack이 지워질 수 있다고 합니다.
  • 48. Stacksets 🤨 SAM Template은 Tranform되어야 하는 것 때문에 다음과 같은 에러가 발생 Templates with transforms are not supported with StackSets 😅 sam validate --debug로 변환된 template를 볼 수 있습니다. Cloudformation stack console에서도 변환된 template를 볼 수가 있습니다. Stackset을 생성할 때는 Transform을 사용할 수 없기 때문에 변환된 template를 사용해야 합니다.
  • 51. cfn-lint cfn-lint는 Cloudformation linter입니다. .cfnlintrc이름의 YAML파일에 다양한 옵션을 설정할 수 있습니다. templates: - template.yaml append_rules: - lint_custom_rules/
  • 53. cfn-lint Rule Numbers Category (E|W|I)0XXX Basic Template Errors. Examples: Not parseable, main sections (Outputs, Resources, etc.) (E|W|I)1XXX Functions (Ref, GetAtt, etc.) (E|W|I)2XXX Parameters (E|W|I)3XXX Resources (E|W|I)4XXX Metadata (E|W|I)6xxx Outputs (E|W|I)7xxx Mappings (E|W|I)8xxx Conditions (E|W|I)9xxx Reserved for users rules W1001 W3011
  • 56. cfn-lint DynamoDB의 리소스가 정의되어 있으면 BillingMode를 체크 class LimitedDynamoDBBillingMode(CloudFormationLintRule): """Check if resources are allowed to create""" id = 'E9001' shortdesc = 'only PAY_PER_REQUEST' description = 'Allows only PAY_PER_REQUEST billing mode' def match(self, cfn): matches = [] resources = cfn.get_resources() for resource_name, resource_obj in resources.items(): resource_type = resource_obj.get('Type', "") if resource_type == 'AWS::DynamoDB::Table': resource_properties = resource_obj.get('Properties', {}) if not resource_properties.get('BillingMode')== 'PAY_PER_REQUEST': matches.append( RuleMatch(['Resources', resource_name, 'Properties', 'BillingMode'], 'Only PAY_PER_REQUEST is allowed' ) ) return matches
  • 57. Change sets Cloudformation에서는 change sets으로 Stack에 어떤 부분이 업데이트될지 적용하기 전에 알 수 있습니다.
  • 58. Change sets --no-execute-changeset 옵션으로 바로 change set을 실행하지 않도록 설정 할 수 있습니다. Stack을 업데이트 하기전에 change set을 확인하고 적용할 수 있습니다. $ sam deploy --no-execute-changeset $ aws cloudformation execute-change-set
  • 59. Taskcat Taskcat은 AWS QuickStart team에서 Cloudformation template를 테스트하기 위해서 만들어진 Tool입니다. 실제 Stack을 만들고 결과리포트를 생성합니다. $ taskcat test run
  • 60. Taskcat Events: ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ------------------ -------------------------- ------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------- CREATE_FAILED AWS::CloudFormation::Stack tCaT-my-cfn-project-default-b883fd8dc6b845ce8cb8472bab655da0 The following resource(s) failed to create: [SendMessageRole, ApplicationLayerbcbc14c563, AuthRole, CatTable]. CREATE_FAILED AWS::IAM::Role AuthRole Resource creation cancelled CREATE_FAILED AWS::Lambda::LayerVersion ApplicationLayerbcbc14c563 Resource creation cancelled CREATE_FAILED AWS::IAM::Role SendMessageRole Resource creation cancelled CREATE_IN_PROGRESS AWS::IAM::Role SendMessageRole Resource creation Initiated CREATE_FAILED AWS::DynamoDB::Table CatTable Property ProvisionedThroughput cannot be empty. CREATE_IN_PROGRESS AWS::DynamoDB::Table CatTable CREATE_IN_PROGRESS AWS::Lambda::LayerVersion ApplicationLayerbcbc14c563 CREATE_IN_PROGRESS AWS::IAM::Role AuthRole CREATE_IN_PROGRESS AWS::IAM::Role SendMessageRole CREATE_IN_PROGRESS AWS::CloudFormation::Stack tCaT-my-cfn-project-default-b883fd8dc6b845ce8cb8472bab655da0 Transformation succeeded CREATE_IN_PROGRESS AWS::CloudFormation::Stack tCaT-my-cfn-project-default-b883fd8dc6b845ce8cb8472bab655da0 User Initiated
  • 62. 요약 정리 🙂 간단한 Application으로 SAM Template를 어떻게 작성하는지 살펴보았습니다. 🙂 sam local command를 활용하여 로컬환경에서 Lambda를 테스트하는 방법을 소개하였습니다. 🙂 Cloudformation의 기능들도 설명하였습니다. 🙂 Pipeline을 구축할 때 활용될 수 있는 cfn-lint와 taskcat을 설명하였습니다.