오늘의 과제:
5분 간격으로 기동되는 Lambda handler를 CDK stack 안에서 구현하기
(handler를 5분 간격으로 기동되게 하는 것이 아니라 5분 동안 축적된 쿼리를 handler가 처리하게 하려면 aws-lambda-event-source
사용해야 함)
Amazon Cloud Watch
- AWS 리소스와 AWS에서 기동하는 프로그램을 실시간으로 모니터링 할 수 있음
지표
- 모니터링할 변수
- 데이터 요소: 시간에 따른 변수 값
- 순서 상관 없이 추가 가능
- 정렬된 시계열 집합으로 검색 가능
- 타임스탬프, 측정 단위
CloudWatch
에 게시된 시간순 데이터 요소 세트- e.g. EC2 인스턴스의 CPU 사용량
- AWS 서비스는
CloudWatch
에 지표를 전송- 사용자 지정 지표 전송 가능
- 15개월이 지나면 순서대로 만료
- 0개 이상의 차원으로 고유하게 정의
- 모든 지표에 대해
CloudWatch
에서 통계 검색 가능
네임스페이스
CloudWatch
지표용 컨테이너- 기본 없이 각 데이터 요소마다 네임스페이스 지정해야
- 지표 생성할 때 이름 지정 가능
- 유효한 XML 문자 포함
- 길이가 256자 미만
- 영숫자
- 기본 없이 각 데이터 요소마다 네임스페이스 지정해야
- 네임스페이스마다 지표는 격리
- 다른 어플리케이션의 지표가 동일하게 집계되는 실수는 일어나지 않음
@aws-cdk/aws-events
AWS서비스를 실행할 때 일정 시간을 두고 반복 실행하고 싶다거나 정해진 시간마다 실행되게 하고 싶은 경우에 @aws-cdk/aws-events
를 사용한다.
npm install @aws-cdk/aws-events
CDK 스택 안에 스케쥴을 지정하기 위한 코드를 적어주자.
export class ExampleDirStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const func = new lambda.Function(this, 'Example-lambda', {
code: lambda.Code.fromAsset('src'),
handler: 'lambda_handler.lambda_handler',
runtime: lambda.Runtime.PYTHON_3_7,
timeout: Duration.seconds(300)
});
new event.Rule(this, "Example-rule", {
schedule: event.Schedule.rate(Duration.minutes(5)),
targets: [new targets.LambdaFunction(func)]
});
}
}
이벤트를 발생시키는 규칙은 어디서 다시 호출하고 그럴 일 없기 때문에 변수로(const event_rule =
) 만들지 않고 new
로 바로 시작해주면 된다.schedule:
에는 이벤트 실행 주기를 지정해주면 된다.
event.Schedule
event.Schedule
에는 cron
, rate
, expression
모듈이 있는데 자주 쓸 것 같은 cron
과 rate
만 적어보겠다.
cron
- day, hour, minute, month, weekDay, year를 지정
- 지정한 일시에 반드시 이벤트를 실행
아래 코드는 매 정시마다 실행시키는 코드이다.
매일 12시에 실행시키고 싶다면 hour: "12"
로 바꿔주면 된다.
new event.Rule(stack, "Example-rule", {
schedule: event.Schedule.cron({
minute: "0",
hour: "*",
day: "*",
month: "*",
year: "*"
}),
targets: [new targets.LambdaFunction(RedshiftDailyMonitor)]
});
rate
- 시간 간격을 정해주는 모듈
아래 코드는 5분에 한번씩 실행시키도록 하는 코드이다.
new event.Rule(this, "Example-rule", {
schedule: event.Schedule.rate(Duration.minutes(5)),
targets: [new targets.LambdaFunction(func)]
});
rate
안에는 인수로 Duration
값을 주어야 한다.Duration
으로 아래 것들을 이용해 시간 간격을 지정할 수 있다.
- days: 며칠에 한번씩 실행하는지 지정 가능
- hours: 몇 시간에 한번씩 실행하는지 지정 가능
- minutes: 몇 분에 한번씩 실행하는지 지정 가능
- seconds: 몇 초에 한번씩 실행하는지 지정 가능
이 외에도 여러 가지 있는데 AWS CDK API - class Duration을 참고하면 된다.
'AWS 노트' 카테고리의 다른 글
aws-cdk가 Argument of type 'this' is not assignable to parameter of type 'Construct'. 에러를 뿜을 때 (0) | 2020.04.10 |
---|---|
AWS 특정 IAM 역할로 S3 버킷에 대한 접근을 제한하기 (적당히 해석) (0) | 2020.04.10 |
로컬에서 AWS CDK Stack 빌드해서 Lambda 함수 실행시키기 (0) | 2020.04.08 |
AWS Lambda Python 실행기 (3) 특정 Lambda 함수로만 특정 S3 Bucket에 접근 가능하도록 IAM역할 부여하기 (0) | 2020.04.07 |
AWS Lambda Python 실행기 (2) (0) | 2020.04.06 |