Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DMM 決済基盤で AWS CDK を使っている話
Search
HukurouKk
March 03, 2020
Programming
0
540
DMM 決済基盤で AWS CDK を使っている話
CDK meetup #2 @onlineで発表したスライドです。
HukurouKk
March 03, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
250
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
310
株式会社 Sun terras カンパニーデック
sunterras
0
290
CSC305 Lecture 03
javiergs
PRO
0
240
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
190
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
0
240
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
Devoxx BE - Local Development in the AI Era
kdubois
0
130
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
1k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.3k
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.6k
Software Architecture
hschwentner
6
2.3k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Typedesign – Prime Four
hannesfritz
42
2.8k
Facilitating Awesome Meetings
lara
56
6.6k
Building Applications with DynamoDB
mza
96
6.7k
Producing Creativity
orderedlist
PRO
347
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The World Runs on Bad Software
bkeepers
PRO
72
11k
Transcript
%..ܾࡁج൫Ͱ"84 $%,Λ͍ͬͯΔ ߹ಉձࣾ%..DPN1'ࣄۀຊ෦ϖΠϝϯταʔϏε෦ খੁߤฏ!$%,NFFUVQ
ࣗݾհ
খੁߤฏ JE!)VLVSPV,L w ߹ಉձࣾ%..DPNॴଐ w ϓϥοτϑΥʔϜࣄۀຊ෦ w ϖΠϝϯταʔϏε෦ w ΞϓϦέʔγϣϯΤϯδχΞ
w ৽ଔ
ΞδΣϯμ "84$%,ͱ ࠾༻ͨ͠എܠ "84$%,Λར༻͍ͯ͠ΔϓϩμΫτʹ͍ͭͯͷհ "84$%,Λͬͨ࣌ͷ։ൃ࣌ͷར ՝ͳͲ
ࠓޙʹ͍ͭͯ ·ͱΊ
"84$%,ͱʁ
"84$%, w ϓϩάϥϚϒϧ*B$πʔϧɻίʔυͰ"84ͷڥߏங͕Մ ೳɻ +BWB4DSJQUɾ5ZQF4DSJQUɾ1ZUIPOɾ+BWBɾ/&5 w ࠒʹ("ʂݱࡏWFS ݱࡏ
w αʔϏε͝ͱʹ࡞ΒΕ͍ͯΔ$POTUSVDU1BUUFSOTΛ ͑αΫοͱڥߏங͕Ͱ͖Δɻ
ͳͥ࠾༻͔ͨ͠ʁ
ݱঢ়ͷઆ໌͔Β
ΦϯϓϨ Ϋϥυ ϦϓϨΠεதʜ ΠϯϑϥνʔϜ ֤ϓϩμΫτνʔϜ FHܾࡁ5 ϨΨγʔ ϓϩμΫτ ৽ ϓϩμΫτ
ϦϓϨΠε࣌ͷ՝ w *B$πʔϧ $MPVE'PSNBUJPOUFSSBGPSN ͷར༻ͷͨΊ ͷֶशίετ૿Ճ w Ұ෦ɺ8FC6*Λϙνϙν͢Δ࠶ݱੑͷͳ͍ڥߏங w ΞʔΩςΫνϟ
αʔόʔϨεɺίϯςφͳͲ ʹΑͬͯ πʔϧͷ૬ੑ͕͋Δɻ
ղܾͷબࢶͷҰ͕ͭ"84$%,
"84$%,ར༻ͷૂ͍ w ಠࣗͷ%4-ͳͲΘͣʹɺϓϩάϥϚϒϧʹॻ͚Δ͜ͱʹ ΑͬͯΞϓϦέʔγϣϯدΓͷΤϯδχΞͰॻ͖͍͢ɺ ϨϏϡʔ͍͢͠ɻ w ܕʹΑͬͯิ͕ޮͨ͘ΊɺͦΕͧΕͷ$POTUSVDU-JCSBSZ ʹԿ͕͋Δ͔ѲͰ͖Δɻ FEJUPSʹΑΓ·͕͢
w ΞϓϦέʔγϣϯ͔ΒΠϯϑϥ·Ͱಉ͡ݴޠͰॻ͘͜ͱ͕Ͱ ͖Δɻ αʔϏεʹΑΓ·͕͢
ଞͷπʔϧൺֱ
4". w "84αʔόʔϨεΞϓϦέʔγϣϯϞσϧ "844". αʔόʔϨεʹಛԽͨ͠*B$πʔϧ w ZBNMͰߏΛఆٛ͠ɺσϓϩΠߦ͑Δɻ·ͨMPDBMBQJͷ Α͏ͳݕূػೳ༻ҙ͞Ε͍ͯΔɻ w
ݕূػೳ%ZOBNP%#-PDBM 4UFQ'VODUJPOT-PDBMͳͲ ͱ࿈ܞऔΕΔͨΊɺϩʔΧϧͷ"84ݕূڥ༻ҙՄ ೳɻ
5FSSBGPSN w )BTIJ$PSQ*B$πʔϧɻUGϑΝΠϧʹઐ༻ͷ%4- )$- ͰڥߏஙఆٛΛॻ͘ɻ֤ϕϯμʔʹରԠɻ w ͋͘·ͰɺΠϯϑϥΛͭ͘ΔπʔϧʹͨΊɺΞϓϦέʔ γϣϯͷ[JQԽͳͲ͕ඞཁɻ w Ͳ͏ͯ͠044ɺ͔ͭϚϧνϕϯμʔʹରԠ͍ͯ͠Δͷ
͋ͬͯɺ৽αʔϏεͷରԠΊɻ
"84$%,Λར༻͍ͯ͠ΔϓϩμΫτʹ͍ͭͯͷհ
4FSWFSMFTT
֓ཁ w ܾࡁߦձࣾͷϦΫΤετΛड͚औΓɺฐࣾͷϙΠϯτ ΛϢʔβʔʹ༩͢ΔγεςϜ w ༩ॲཧʹࣦഊͨ͠߹ɺޭ͢Δ·Ͱ࠶ॲཧΛߦ ͏ɻ w ࠓޙෳͷߦձࣾʹରԠͰ͖ΔΑ͏ɺͳΔ͘։ൃɾ ӡ༻Λָʹ͢Δ
None
ϦΫΤετΛ ड͚औΔ
-BNCEB͕ىಈ 424 4ʹ͛Δ
ΩϡʔΛΠϕϯτʹ-BNCEB ىಈ 4UBUFNBDIJOFΛཱͯΔ
4UFQGVODUJPOTͰϫʔΫϑϩʔཧ -BNCEBͰϦΫΤετΛ͛Δ ࣦഊͨ͠Β·ͨ܁Γฦ͢ɻ
None
αʔόʔϨεͷํ ͜ͷهࣄͰհ͍ͯ͠·͢ɻ https://inside.dmm.com/entry/2020/01/17/ payment-cdk-serverless
$POUBJOFS &$4'BSHBUF
֓ཁ w ΫϨδοτΧʔυػೳؔ࿈ͷϑϩϯτΤϯυΞϓϦέʔ γϣϯ w ΠϯϑϥͱΞϓϦέʔγϣϯͷͦΕͧΕͷߋ৽ͷࡍͷɺ σϓϩΠपΓΛ্ख͘࿈ܞͤ͞Δඞཁ͕͋Δɻ
None
։ൃϑϩʔ
None
None
%FQMPZɾ3FMFBTF
*OGSBTUSVDUVSFEFQMPZ ᶃ13NFSHF ᶄDELEFQMPZ
"QMJDBUJPOEFQMPZ &$4 ᶃ13NFSHF "QQMJDBUJPOSFQPTJUSZ *OGSBTUSVDUVSFSFQPTJUSZ ᶄ1VTI&$3 ᶅ৽͍͠JNBHFUBHʹमਖ਼ͯ͠QVTI ։ൃڥͰࣗಈमਖ਼ɺຊ൪Ͱखಈमਖ਼ ᶈ1VMMOFXJNBHF ᶇDELEFQMPZ
ᶆ13NFSHF
ϒϥϯνઓུ w ֤ڥ͝ͱʹϒϥϯνΛ༻ҙɻ QSETUHEFWTBOECPY w QSETUHEFWͰଞͷϓϩμΫτଞαʔϏεͷ1'ػೳ ͱͯ͠ݕূʹΘΕΔͨΊɺӨڹͷ͋ΔσϓϩΠͰ͖ͳ ͍ɻ w
TBOECPYଞͷϓϩμΫτͱͷͭͳ͗͜ΈΛ͠ͳ͍ಠཱͨ͠ ։ൃڥɻ։ൃதͷڍಈͷ֬ೝʹ༻͢Δɻ
"84αʔϏεڍಈ֬ೝ ։ൃ։࢝ EFWө TUHө QSEө
։ൃํ w ͋Δ۠ͰTUBDLΛ͚Δ.VMUJ4UBDLӡ༻ QSPEVDU MPHج൫ .PDL"QJ &$3 71$ͳͲ
w υϝΠϯͷূ໌ॻऔಘ "$. ͳͲೋʹΔ͜ͱͳ͍෦ 8FC6*Ͱߦͳ͍ͬͯΔɻ w ڥͷΓସ͑DELEFQMPZDFOWEFWͷΑ͏ͳDPOUFYUʹ͠ ͯΓସ͍͑ͯ͠Δɻ const envName = app.node.tryGetContext('env') || 'dev'; const config = app.node.tryGetContext('environments')[envName];
։ൃ࣌ͷϝϦοτ
ϓϩάϥϜݴޠͰߏΛఆٛͰ͖Δɹ w ݱࡏ"84$%,+BWB4DSJQUɾ5ZQF4DSJQUɾ1ZUIPOɾ +BWBɾ/&5ʹରԠ͍ͯ͠Δɻ w ಠࣗͷ%4-Ͱॻ͘ඞཁ͕ͳ͍ͨΊɺͦͷݴޠΛѻ͍ͬͯͨΤ ϯδχΞͳΒ։ൃʹࢀՃ͍͢͠ɻ w ·ͨΞϓϦέʔγϣϯ߹ΘͤΔͱޮ61
ศརͳ$POTUSVDU-JCSBSZ w "84$%,ʹ$POTUSVDUMJCSBSZͱ͍͏$MPVE'PSNBUJPOͰ هࡌ͢Δ༰ΛΧϓηϧԽ͞ΕͨϞδϡʔϧ͕͋Δɻ w $POTUSVDUʹछྨ͕͋Γɺ-PX-FWFM$POTUSVDU )JHI -FWFM$POTUSVDU 1BUUFSOTͷࡾछྨ͕͋ΓɺͦΕͧΕఆٛϨ ϕϧ͕ҧ͏ͷ͕༻ҙ͞Ε͍ͯΔɻ
w ݸਓతʹ)JHI-FWFM$POTUSVDUɺ1BUUFSOT͕͋Ε$%, ߏங͢ΔϝϦοτ͕ग़͖ͯͦ͏͔ͳͱࢥ͍ͬͯ·͢ɻ ࢀߟ AWS Cloud Development Kit (AWS CDK) Developer Guide https://docs.aws.amazon.com/cdk/latest/guide/constructs.html
-PX-FWFM$POTUSVDU w $GOͱQSFpY͕͍͍ͯΔϥΠϒϥϦɻ$MPVE'PSNBUJPOͷ֤ ϦιʔεʹͨΔɻ )JHI-FWFM$POTUSVDU w $MPVE'PSNBUJPOͷ֤ϦιʔεΛநԽ͍ͯ͠ΔϥΠϒϥϦɻ NFUIPEͳͲ͕༻ҙ͞Ε͓ͯΓఆ͕ٛ؆୯ɻ 1BUUFSOT w
ෳͷϦιʔεΛར༻͢ΔϢʔεέʔεΛநԽͨ͠ϥΠϒϥ ϦɻBXTFDTQBUUFSOTBXTSPVUFQBUUFSOT͕ͨΔɻ
None
const subnets = vpc.selectSubnets({ subnetGroupName: isolatedSubnetName }); const redisSubnetGroup =
new elasticache.CfnSubnetGroup(this, `${id} RedisClusterPrivateSubnetGroup`, { cacheSubnetGroupName: `${env}ElastiCacheSubnetGroup`, subnetIds: subnets.subnetIds, description: `${env} ElastiCache SubnetGroup` }); const redisReplication = new elasticache.CfnReplicationGroup(this, `${id} RedisReplicaGroup`, { engine: ‘redis’, cacheNodeType: config.cacheNodeType, replicasPerNodeGroup: 1, numNodeGroups: 1, automaticFailoverEnabled: true, autoMinorVersionUpgrade: true, replicationGroupDescription: ‘cluster redis’, cacheSubnetGroupName: redisSubnetGroup.cacheSubnetGroupName, securityGroupIds: [elasticacheSG.securityGroupId] }); redisReplication.addDependsOn(redisSubnetGroup); -PX-FWFM$POTUSVDU4BNQMF FMBTUJDBDIF
None
)JHI-FWFM$POTUSVDUTBNQMF "1*HBUFXBZ-BNCEB export class LambdaApigatewayStackStack extends cdk.Stack { constructor(scope: cdk.Construct,
id: string, props?: cdk.StackProps) { super(scope, id, props); const restApi = new RestApi(this, id, { restApiName: 'SampleApiGateway', }); const sampleResource = restApi.root.addResource('SampleResource'); const sanpelFun = new Function(this, 'MyFunction', { runtime: Runtime.NODEJS_12_X, handler: 'index.handler', code: new AssetCode('./src/lambda'), }); const confirmDeletionIntegration = new LambdaIntegration(sanpelFun); sampleResource.addMethod('POST', confirmDeletionIntegration); } }
export class EcsPatternSampleStack extends Stack { constructor(scope: Construct, id: string,
props?: StackProps) { super(scope, id, props); const cluster = new Cluster(this, 'EcsPatternSampleCluster', { clusterName: 'EcsPatternSampleCluster', }); const taskDefinition = new FargateTaskDefinition(this, 'TaskDefinition'); const container = taskDefinition.addContainer('EcsPatternSampleContainer', { image: ContainerImage.fromRegistry('amazon/amazon-ecs-sample') }); container.addPortMappings({ containerPort: 80 }); new ApplicationLoadBalancedFargateService(this, 'EcsPatternSampleService', { cluster: cluster, memoryLimitMiB: 1024, cpu: 512, desiredCount: 1, taskDefinition: taskDefinition }); } } 1BUUFSOTTBNQMF FDTQBUUFSOT
ࠓճ1BUUFSOT͓ͬͯΓ·ͤΜɻ w ӈਤͷΑ͏ͳ"-#ύεϧʔςΟϯ άͰྲྀ͢4FSWJDFΛ͚ΔߏʹͰ ͖ΔΑ͏ʹ͔ͨͬͨͨ͠ΊɺFDT QBUUFSOTͷར༻Λݟૹͬͨɻ w ݱࡏͷFDTQBUUFSOTෳͷ 4FSWJDFͷఆٛʹରԠ͍ͯ͠ͳ͍ͨ Ίɻ
طଘ4FSWJDF ৽ن4FSWJDF IPHF IVHB
4UFQ'VODUJPOTͷ࣮ w ϫʔΫϑϩʔཧΛͯ͘͠ΕΔ"84ͷϚωδϝϯταʔ ϏεɻMBNCEBͷ݁Ռ࣍ୈͰذॲཧͳͲ࣮Ͱ͖Δɻ w ௨ৗKTPOͰఆٛΛॻ͍͍͕ͯ͘ɺ"84$%,ͩͱ $POTUSVDU͕NFUIPEΛ͓ͬͯΓɺ؆୯ʹॻ͘͜ͱ͕Մ ೳ
ࢀߟ BXTDELSFGFSFODFBXTTUFQGVODUJPOUBTLT IUUQTEPDTBXTBNB[PODPNDELBQJMBUFTUEPDTBXTTUFQGVODUJPOTUBTLTSFBENFIUNM const firstTask = new sfn.Task(stack, `${stack.stackName}_CommitTask_${serviceName}`, {
task: new sfnTask.InvokeFunction(stepFunc) }).addRetry({ errors: failErrors, maxAttempts: 0, }).addRetry({ errors: retryErrors, interval: Duration.seconds(10), maxAttempts: 26, backoffRate: 1.3, }).addCatch(fail, { errors: failErrors }).addCatch(secondTask, { errors: retryErrors }); $POTUSVDUͷNFUIPEͰUBTLΛ৭ʑઃఆͰ͖Δ
w ॳճͷϦτϥΠ͘ɺͩΜͩΜ࣍ճϦτϥΠ࣌ؒΛ৳ͯ͠ ͍͘ϦτϥΠઃܭ w ࠷̎࣌ؒͷϦτϥΠִؒͰिؒଓ͚Δ༷ ϦτϥΠϑϩʔ
։ൃதʹग़ձͬͨนͨͪ 5JQTతͳ
DSPTTTUBDLࢀরͰΞοϓσʔτͰ͖ͳ͍ w "4UBDL͕#TUBDLʹґଘ͍ͯ͠Δ࣌ʹ$%,ͷΞοϓσʔτ ˠΤΫεϙʔτݩͰ͋ΔελοΫΤΫεϙʔτΛมߋ·ͨআͰ ͖ͳ͍͜ͱ͔Βൃੜ ˠൃੜ͠ͳ͍όʔδϣϯ·Ͱ$%,Λ͠ɺҰґଘؔͱղ͍͔ͯ ΒΞοϓσʔτ͢Δ͜ͱͰղܾ
$MPVE'PSNBUJPOͷ͕ࣝඞཁʹͳΔ߹ w "84$%,ͷDELTZOUI EFQMPZͰग़ྗ͞ΕΔΤϥʔ"84 $%,͕ग़͢Τϥʔ͋Εɺ$MPVE'PSNBUJPOͷΤϥʔ͕ͦ ͷ··ग़ྗ͞ΕΔ߹͋Δɻ w ͦͷ߹ɺϦϑΝϨϯε$MPVE'PSNBUJPOͷτϥϒϧ γϡʔςΟϯάʹͳΔͨΊɺܦݧ͕ͳ͍߹গۤ͠ઓ͢Δ ͔͠Εͳ͍ɻ
σΟϨΫτϦߏΛߟܾ͑ͯΊ͍ͯ͘ w جຊతʹ"84$%,ͰDELJOJU͢Δ߹ɺσΟϨΫτϦߏ ࠷ݶͷͷ͔͠Ͱ͖ͳ͍ͨΊɺαʔϏεͷߏͱݴޠͷಛ ੑΛՃຯͭͭ͠ɺܾΊ͍͔ͯͳ͚ΕͳΒͳ͍ɻ w ಛʹVOJUUFTUʹ֤ؔͯ͠-BNCEB͕ຊ൪ͱಉ͡ϥΠϒϥϦ ঢ়گͰಈ࡞͔ͤͨͬͨͨ͞ΊɺUTDPOpHͷQBUITͰMBZFS෦ ͷϥΠϒϥϦΛಡΈࠐΉͳͲ͕ඞཁɻ
├── README.md ├── bin │ └── credit-gateway.ts ├── cdk.json ├──
lib │ ├── credit-gateway-log-stack.ts │ ├── credit-gateway-stack.ts │ ├── schema │ │ └── credit-gateway-schema.ts │ └── util │ └── wafacl.ts ├── package-lock.json ├── package.json ├── src │ └── lambda │ ├── common │ ├── confirm-deletion │ ├── delete │ └── layer ├── test │ └── src │ └── lambda └── tsconfig.json
ࠓޙͷ՝
DELKTPO DPOUFYU ͷංେԽରࡦ w Γن͕େ͖͘ͳΕͳΔ΄ͲDPOUFYUʹ͍ͨͤͨ ใ૿͍͖͑ͯɺ͖࣋ͭใΛਫ਼͍ࠪͯ͘͠ඞཁ͕͋ Δɻ w $%,ଆͰෳͷDPOUFYUpMFΛಡΈࠐΉͷରԠ͍ͯ͠ ͳ͍ͨΊɺׂ͕͍͠ɻ
Ξοϓσʔτʹ͍͍͚ͭͯΔͩΖ͏͔ʜ w "84$%,։ൃ͕ΜͳͨΊɺ͍ͩͿଞͷπʔϧʹൺ ΔͱΞοϓσʔτ͕ૣ͍ɻ w ઌड़ͷ͕݅͋ͬͨͨΊɺΞοϓσʔτʹΑΔʹؾΛ ͚ͭͯ͜·Ίʹ֬ೝ͍ͯ͠Δ͕ɺWYYͰͲͷ͘Β͍ͷม ߋ͕͋Δ͔ʜ
ίʔυͷΈ͕ग़͖ͯͯɺਚ͖ͳ͍ɻ w Γɺ$MPVE'PSNBUJPOUFSSBGPSNͳͲΑΓॊೈʹ ίʔυ͕ॻ͚ΔɺΈ͕ਚ͖ͳ͍ɻ w ྫ͑"1*(BUFXBZʹඥ͍ͮͨ-BNCEBΛ࡞ͬͯ͘ΕΔ ؔͳͲ࡞ͬͯɺ͠ߏมߋ͕͋ͬͨ߹ʹɺ݁ہ ่͢ඞཁग़ͯ͘Δɻ
·ͱΊ
w *B$πʔϧ͕ෳग़͖ͯͨނɺνʔϜʹ߹ͬͨɺϓϩμΫ τʹ߹ͬͨπʔϧͷબ͕ඞཁʹͳ͖ͬͯͨɻ w "84$%,Λ͏ͱ$POTUSVDUΛͬͯɺΞʔΩςΫνϟ ʹؔΘΒͣɺޮతʹ4UBDLΛઃܭͰ͖ɺίϚϯυҰͭͰ ΠϯϑϥɺΞϓϦέʔγϣϯͷߏங͢Δ͜ͱ͕Ͱ͖Δɻ w "84ͰɺҰ͔ΒڥΛ࡞ΔͷͰ͋Εɺൈ܈ʹΦεε ϝɻ
Α͍$%,ϥΠϑΛʂ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ