AWS CDK 이럴 때 어떻게 하는 메모.
최근에 AWS CDK를 사용하기 시작한 사람입니다.
AWSLambda의 Deploy 같은 건 Serverless Framework를 사용했지만 조금 배우고 싶어요. 사건에서 AWS CDK를 사용해 봤는데Workshop 이제야 코드로 환경을 구축하는 게 편하다고 생각했어요.
여기서부터는 자신의 메모를 만들면서 이럴 때 어떻게 하는지를 쓴다.
또 문서에 적힌 내용도 포함됐다.
Lambda 휘감기
S3 트리거
const lambda = new NodejsFunction(this, `index`, {
runtime: lambda.Runtime.NODEJS_14_X,
entry: 'lambda/index.ts',
handler: 'indexHandler',
});
const bucket = new s3.Bucket(this, `bucket`);
lambda.addEventSource(new S3EventSource(bucket, {
events: [
s3.EventType.OBJECT_CREATED
],
filters: [
{
prefix: 'ses/'
}
]
}));
SQS 트리거 배치 창
const lambda = new NodejsFunction(this, `index`, {
runtime: lambda.Runtime.NODEJS_14_X,
entry: 'lambda/index.ts',
handler: 'indexHandler',
});
const queue = new sqs.Queue(this, `queue`, {
queueName: `queue`,
});
lambda.addEventSource(new SqsEventSource(queue, {
batchSize: 10,
maxBatchingWindow: Duration.minutes(5)
}));
EventBridge 시작
const lambda = new NodejsFunction(this, `index`, {
runtime: lambda.Runtime.NODEJS_14_X,
entry: 'lambda/index.ts',
handler: 'incexHandler',
});
const lambdaTarget = new LambdaFunction(
lambda,
{
retryAttempts: 0
}
);
new Rule(this, 'EventRole', {
schedule: Schedule.rate(Duration.hours(1)),
targets: [lambdaTarget]
});
const lambda = new NodejsFunction(this, `index`, {
runtime: lambda.Runtime.NODEJS_14_X,
entry: 'lambda/index.ts',
handler: 'incexHandler',
});
const lambdaTarget = new LambdaFunction(
lambda,
{
retryAttempts: 0
}
);
new Rule(this, 'SendRetryMailEventRole', {
schedule: Schedule.cron({
minute: '0',
hour: '0/1'
}),
targets: [lambdaTarget]
});
사용자 지정 정책 추가(예: SES에서 메시지 보내기)
const lambda = new NodejsFunction(this, `index`, {
runtime: lambda.Runtime.NODEJS_14_X,
entry: 'lambda/index.ts',
handler: 'incexHandler',
});
const sendMailPolicyStatement = new iam.PolicyStatement(
{
effect: iam.Effect.ALLOW,
resources: [
'*'
],
actions: [
'ses:SendRawEmail',
'ses:SendEmail',
]
}
);
lambda.addToRolePolicy(sendMailPolicyStatement);
기타
SNS Topic 및 Subscription(예: Email)
const topic = new sns.Topic(this, 'topic', {
displayName: 'Mail Topic'
})
topic.addSubscription(new subs.EmailSubscription('[email protected]'));
Route 53의 레코드세트 제작 및 추가 레코드(예: MX 레코드 추가)
const hostZone = new route53.PublicHostedZone(this, 'HostedZone', {
zoneName: 'example.com',
});
new route53.MxRecord(this, 'mxRecord', {
zone: hostZone,
recordName: 'example.com',
values: [
{
hostName: 'inbound-smtp.us-east-1.amazonaws.com',
priority: 10
}
],
});
DynamoDB 테이블 추가 및 GSI 추가
const table = new dynamodb.Table(this, 'table', {
partitionKey: { name: 'key', type: dynamodb.AttributeType.STRING }
});
table.addGlobalSecondaryIndex({
indexName: 'index',
partitionKey: { name: 'gsikey', type: dynamodb.AttributeType.STRING }
});
적당히 첨가.아니, 코드로 많이 쓸 수 있지, 에이, 이런 일도 할 수 있어?대단하군, 이젠 더 놀라네.
다만, 버전 업그레이드가 너무 빨라요.버전이 맞지 않으면 동작이 이상해진다.
그렇긴 한데, 그거 빼고도 대단하네.
지금까지 Serverless Framework에서 만든 것을 모두 CDK로 만들지는 않으려고 했지만, 둘 다 적극적으로 사용해야 한다고 생각한다.
Reference
이 문제에 관하여(AWS CDK 이럴 때 어떻게 하는 메모.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/keni_w/articles/fc50cc85250fca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)