Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DMM 決済基盤で AWS CDK を使っている話
Search
HukurouKk
March 03, 2020
Programming
560
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DMM 決済基盤で AWS CDK を使っている話
CDK meetup #2 @onlineで発表したスライドです。
HukurouKk
March 03, 2020
Other Decks in Programming
See All in Programming
AIと壁打ちしながら進めるコスト管理
fufuhu
2
2k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
480
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
270
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
高専キャリア LT 発表内容
crysta1221
6
5.6k
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
1k
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
200
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
420
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Into the Great Unknown - MozCon
thekraken
41
2.7k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How STYLIGHT went responsive
nonsquared
100
6.3k
How to Talk to Developers About Accessibility
jct
2
540
Utilizing Notion as your number one productivity tool
mfonobong
4
580
Faster Mobile Websites
deanohume
310
32k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
エンジニアに許された特別な時間の終わり
watany
108
250k
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ͰɺҰ͔ΒڥΛ࡞ΔͷͰ͋Εɺൈ܈ʹΦεε ϝɻ
Α͍$%,ϥΠϑΛʂ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ