Share
Embed
AWS CDKはどう使いこなすのか、初期開発から運用までのノウハウ/know-how-from-initial-development-to-operation-on-how-to-use-aws-cdk
AWS DevDay Online Japan 2021の登壇資料です。
tomoki10
September 28, 2021
Transcript
53 slides
-
© 2021, Amazon Web Services, Inc. or its affiliates. All
rights reserved. AWS CDK Ͳ͏͍͜ͳ͢ͷ͔ɺॳظ։ൃ͔Βӡ༻·Ͱͷϊϋ Ϋϥεϝιου גࣜձࣾ ࠤ౻ஐथ C - 2 -
O N L I N E J A P A
N | S E P T E M B E R 2 8 , 2 0 2 1 -
• ࠤ౻ஐथ • Ϋϥεϝιουגࣜձࣾ • CX ࣄۀຊ෦ IoT ࣄۀ෦ •
લ৬ɿSIer ͷ SE Λ4ऑ • ݱࡏɿΠϯϑϥ݉αʔόʔαΠυ݉ etc • ͖ͳAWSαʔϏεɿ AWS LambdaɺAWS Cloud Development Kit (CDK) ࣗݾհ @tmk2154 @tomoki10 -
• AWS CDK ͷशख़ʹ߹Θͤͨίϯςϯπ ରͱͳΔௌߨऀ େମΘ͔ͬͨਓ AWS CDKͰΫϥυΞϓϦέ ʔγϣϯΛ։ൃ͢ΔͨΊͷϕ ετϓϥΫςΟε
etc.. গͬͨ͠ਓ • CDK Patterns ͳͲͷαϯϓ ϧ͋͘·Ͱ࣮ͷύλʔϯ • ࣮ͷ؍গͳ͍ ະܦݧͷਓ AWS CDK Workshop https://summit-online-japan-cdk.workshop.aws/ https://aws.amazon.com/jp/blogs/news/best-practices- for-developing-cloud-applications-with-aws-cdk/ ʁ -
• शख़͝ͱͷඪ ରͱͳΔௌߨऀ͝ͱͷඪ େମΘ͔ͬͨਓ ͜͜ʹߦ͘ΛૣΊΔ গͬͨ͠ਓ ͱΓ͋͑ͣ CDK ৮ͬͨਓ͕ ະܦݧͷਓ
AWS CDK Workshop https://summit-online-japan-cdk.workshop.aws/ -
• शख़͝ͱͷඪ ରͱͳΔௌߨऀ͝ͱͷඪ େମΘ͔ͬͨਓ • 2൪ͷର • ຊࢿྉΛνʔϜͷೝ ࣝ߹ΘͤͷνΣοΫ Ϧετͱͯ͠׆༻
• ҉ͷ࠶֬ೝ গͬͨ͠ਓ • ϝΠϯͷର • PJ ։࢝࣌ʹΉ෦ ͷղফʹ׆༻ ະܦݧͷਓ • CDK Workshop Λࢼ ͯ͠ɺ࣮ӡ༻ͰΜ ͩ࣌ࢿྉΛࢥ͍ग़͢ -
© 2021, Amazon Web Services, Inc. or its affiliates. All
rights reserved. • ॳظ։ൃ࣌ͷݕ౼ࣄ߲ (11߲) • CI/CD ڥͷ࡞ (5߲) • ӡ༻ (7߲) ΞδΣϯμ (શମʣ -
© 2021, Amazon Web Services, Inc. or its affiliates. All
rights reserved. • ݴޠબఆ • ύοέʔδཧ • ΞϓϦ (bin) ͷ͚ํ • ελοΫ (lib) ͷ͚ํ • ελοΫؒͷϦιʔεࢀর • ίϯετϥΫτͷ͍͚ • ෳΞΧϯτͷσϓϩΠ • ίʔσΟϯάن • ෳਓ։ൃ࣌ͷσϓϩΠํ๏ • ϦϙδτϦͷཻ • Ͳ͜·Ͱ AWS CDK Խ͢Δ͔ ΞδΣϯμ(ॳظ։ൃ࣌ͷݕ౼ࣄ߲ʣ -
• AWS CDK Ͱ࣮͢Δࡍʹ͑Δݴޠ TypeScript/JavaScriptɺPythonɺJavaɺC#ɺGo(։ൃऀϓϨϏϡʔ) ※ ։ൃʹ༻͍ͯ͠Δݴޠͱಉ͡ݴޠͰॻ͖͍͢ • ͓͢͢Ίͷݴޠɺཧ༝ TypeScript
• TypeScript Ͱॻ͔Ε͍ͯΔຊޠͷهࣄαϯϓϧίʔυ͕ඇৗʹଟ͍ • AWS CDK ࣗମ͕ TypeScript Ͱॻ͔Ε͍ͯΔͷͰ໋໊نଇઃܭɺ࣮ AWS CDK ͷํΛਅࣅ࣮͍ͯ͢͠͠ • Γͳ͍ػೳ͕͋Δ߹ʹಉ͡ݴޠͩͱ֦ு͍͢͠ ݴޠબఆ ※ࢀߟɿʮWorking with the AWS CDKʯhttps://docs.aws.amazon.com/cdk/latest/guide/work-with.html -
ܕΤϥʔͷࢀߟɿ • AWS CDK ͷύοέʔδશͯಉ͡όʔδϣϯʹ͢Δ • όʔδϣϯؒͰܕʹޓੑ͕ͳ͘ΤϥʔʹͳΔ ߹͕͋Δ • Α͋͘Δύλʔϯɿ
ՃͰ AWS CDKͷ ύοέʔδΛೖΕͨࡍɺݩ͋ ͬͨύοέʔδ܈ͱόʔδϣϯ͕ҟͳΓܕΤϥʔ ͕ൃੜ →όʔδϣϯݻఆͰΠϯετʔϧ͠Α͏ʂ • ։ൃ࣌ࠔͬͨΒTIPS • node_modules Λআͯ͠࠶Πϯετʔϧ • ύοέʔδπʔϧͷΤϥʔϩάΛ֬ೝ ύοέʔδཧ (TypeScript ݶఆ) ࢀߟURLɿ https://dev.classmethod.jp/articles/align-the-versions-of-aws-cdk- modules-in-the-same-cdk-project/ -
• bin/lib͕ରͱͳΔൣғ σϑΥϧτͩͱҎԼͷσΟϨΫτϦ( cdk.json ͷ appͰมߋՄೳ ) • bin: ӈਤͷAppʹ૬͢Δ෦(ҎޙΞϓϦͱهड़͠·͢)
• lib: ӈਤͷStackʹ૬͢Δ෦ (ҎޙελοΫͱهड़͠·͢) ΞϓϦ (bin) ͷ͚ํ ը૾Ҿ༻ݩɿ https://aws.amazon.com/jp/blogs/aws/boost-your-infrastructure-with-cdk/ ↑codebuild-testͱ͍͏ϓϩδΣΫτΛ࡞ͬͨ߹ -
• Γ͚ํ • ΞϓϦ/ελοΫͲͪΒͷ୯ҐͰσϓϩΠՄೳ • جຊΞϓϦ1ͭͰͳ͠ • ҎԼͷΑ͏ʹΞϓϦΛ͚ΔͱՄಡੑ্͕Δ • AWS
ϩάΠϯ༻ͷ AWS Identity and Access Management (IAM) User σϓϩΠ༻ͷIAM Role • όοΫΤϯυ/ϑϩϯτΤϯυ • Πϯϑϥ/ΞϓϦ • ϦϙδτϦͷཻͱؔ͢Δ෦ͳͷͰ߹Θͤͯݕ ౼͕ඞཁ • ෳΞϓϦ͕͋Δ߹ • cdk deploy ࣌ʹ `—app` ҾͰΞϓϦΛΓସ͑Δ ΞϓϦ (bin) ͷ͚ํ ը૾Ҿ༻ݩɿ https://aws.amazon.com/jp/blogs/aws/boost-your-infrastructure-with-cdk/ -
Monitor Stack • ελοΫׂͷ؍ • σϓϩΠͷϥΠϑαΠΫϧ • ΞϓϦϦιʔεͱετϨʔδϦιʔεͳͲͰׂ • Өڹൣғ
• σϓϩΠࣦഊ࣌ʹ͋ΔఔϩʔϧόοΫ͢Δ͕Ө ڹൣғΛߜΔ͜ͱඞཁ • ؔऀͰ • ϑϩϯτΤϯυ/όοΫΤϯυ༻ϦιʔεΞϓϦ/ Πϯϑϥ༻ϦιʔεΛผʑʹ୲Ͱ͖ΔΑ͏ (ϦϙδτϦ, σΟϨΫτϦ, ΞϓϦͰͷݕ౼) • AWS CloudFormation ͷ੍ ੜ͞ΕΔύϥϝʔλϦιʔεͳͲʹ্ݶ͕͋Δɻ ্ݶղআͷਃͰ͋Δఔ؇Մೳ ελοΫ (lib) ͷ͚ํ App Stack Storage Stack App A Stack App B Stack App C Stack Backend Stack Frontend Stack API Gateway Stack Lambda A Stack Lambda B Stack σϓϩΠͷϥΠϑαΠΫϧ Өڹൣғ ؔऀͰ CloudFormationͷ੍ App Stack Infra Stack -
• ελοΫؒͷϦιʔεࢀরͷछྨ • ࣗಈΫϩεελοΫࢀর • AWS CDK ͷࣗಈղܾʹͤΔ • རɿ؆୯ʹελοΫؒͷґଘΛهड़Ͱ͖Δ
• ܽɿӡ༻தͷελοΫؒͷϦιʔεҠಈ͕ෳࡶԽ͍͢͠ • ωετελοΫࢀর • ελοΫ෦ͰผͷελοΫΛݺͼग़͢ • རɿ؆୯ʹґଘΛهड़Ͱ͖Δ • ܽɿελοΫͷϨΠϠʔ͕ζϨΔͷͰՄಡੑ͕Լ͕Δ ɹɹɹελοΫ୯ମͷσϓϩΠ͕Ͱ͖ͳ͍ • Amazon Resource Name (ARN) ϕʔεͷࢀর • ຒΊࠐΉ͔ AWS Systems Manager Parameter Store AWS Secret Manager͔Βऔग़ • རɿελοΫؒࢀরͷґଘؔղܾʹ·͞Εͳ͍ • ܽɿґଘؔΛߟྀͨ͠σϓϩΠ͕ඞཁ ৄͪ͘͜͠Βࢀর ͜͜ʹߦ͘ΛૣΊΔ ελοΫؒͷϦιʔεࢀর https://dev.classmethod.jp/articles/apig-and-lambda-best-stack- configuration-with-aws-cdk/ -
• CDK ͷ Construct ʹओʹ3छྨ͋Δ • L1 (Low Level) Construct
( CfnXXX ) CloudFormationͷϦιʔεͱ1ର1ͰରԠ • L2 (High Level) Construct σϑΥϧτՃͷؔΛ࣮ͯ͠L1 ConstructΛநԽ • L3 Construct L1,2 ConstructΛ͞ΒʹநԽͯ͠ར༻͢Δ (ࣗલ࣮, Patterns, Solutions Constructs※, Construct Hub※) ίϯετϥΫτͷ͍͚ ECS CDK Construct ECS Cfn Construct Construct ͷ Layer ͷΠϝʔδ L1 L2 ECS Cfn Construct ECS Cloud Formation L3 ECS Patterns ECS CDK Construct ECR CDK Construct VPC CDK Construct ALB CDK Construct ECS Cloud Formation 1:1 ରԠ நԽ … … நԽ ※ʮAWS Solutions Constructsʯhttps://docs.aws.amazon.com/solutions/latest/constructs/welcome.html ※ʮConstruct Hubʯhttps://constructs.dev/ -
• ECS CfnTaskDefinition ͷύϥϝʔλ ίϯετϥΫτͷ͍͚ ( L1 Construct ͷհ )
ECS CDK Construct ECS Cfn Construct Construct ͷ Layer ͷΠϝʔδ L1 L2 ECS Cfn Construct ECS Cloud Formation L3 ECS Patterns ECS CDK Construct ECR CDK Construct VPC CDK Construct ALB CDK Construct ECS Cloud Formation 1:1 ରԠ நԽ … … நԽ ※ʮCfnTaskDefinitionʯhttps://awscdk.io/packages/@aws-cdk/[email protected]/#/./@aws-cdk_aws-ecs.CfnTaskDefinition -
• ECS CDK Construct FargateTaskDefinition ͷύϥϝʔλ ίϯετϥΫτͷ͍͚ ( L2 Construct
ͷհ ) ECS CDK Construct ECS Cfn Construct Construct ͷ Layer ͷΠϝʔδ L1 L2 ECS Cfn Construct ECS Cloud Formation L3 ECS Patterns ECS CDK Construct ECR CDK Construct VPC CDK Construct ALB CDK Construct ECS Cloud Formation 1:1 ରԠ நԽ … … நԽ ※ʮclass FargateTaskDefinition (construct) Construct Propsʯhttps://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ecs.FargateTaskDefinition.html#construct-props -
• L3 Construct ecs_patterns ʹΑΔ࣮ ίϯετϥΫτͷ͍͚ ( L3 Construct ͷհ
) ECS CDK Construct ECS Cfn Construct Construct ͷ Layer ͷΠϝʔδ L1 L2 ECS Cfn Construct ECS Cloud Formation L3 ECS Patterns ECS CDK Construct ECR CDK Construct VPC CDK Construct ALB CDK Construct ECS Cloud Formation 1:1 ରԠ நԽ … … நԽ ※ίʔυҾ༻ݩʮ30ߦ͘Β͍Ͱ࡞Δ͡ΊͯͷΠϯϑϥߏஙʯhttps://dev.classmethod.jp/articles/aws-cdk-create-your-first-infrastfacture/ … // Create VPC const vpc = new Vpc(this, "sample-vpc", {}); // Create ECS Cluster const cluster = new Cluster(this, "ecs-cluster", { vpc, }); // Create ALB const loadBalancedFargateService = new ApplicationLoadBalancedFargateService(this, "fargate-alb-service", { cluster, taskImageOptions: { image: ContainerImage.fromRegistry( “amazon/amazon-ecs-sample" ), }, platformVersion: FargatePlatformVersion.VERSION1_3, } ); -
• ͓͢͢Ίͷ͍ํ • طଘͷ L3 Construct ͰαʔϏεΛࢼ͢ ( ecs_patterns ͳͲ
) • ࣮ͷجຊநԽ͞Εͨ L2 Construct Λத৺ʹ׆༻ • L2 ະରԠαʔϏε L1 Construct Λ׆༻ • ෳ PJ Ͱಉ͡Α͏ͳߏΛ࡞Δ͜ͱ͕ଟ ͍λΠϛϯάͰ L3 Construct ԽΛݕ౼ ίϯετϥΫτͷ͍͚ ECS CDK Construct ECS Cfn Construct Construct ͷ Layer ͷΠϝʔδ L1 L2 ECS Cfn Construct ECS Cloud Formation L3 ECS Patterns ECS CDK Construct ECR CDK Construct VPC CDK Construct ALB CDK Construct ECS Cloud Formation 1:1 ରԠ நԽ … … நԽ -
• ԿΞΧϯτ༻ҙ͢Δͷ͔ • ։ൃɺݕূɺຊ൪ͷAWSΞΧϯτཉ͍͠ɻ࠷Ͱ։ൃɺຊ൪ΞΧϯτඞਢ • ΞϓϦଆͷ߹ʹΑΔ෦͋ΔͷͰɺΞϓϦͱΠϯϑϥͰνʔϜ͕ผΕΔ߹ͳͲཁ૬ஊ • εέʔϧ͕ఆͰ͖ΔͳΒෛՙςετΞΧϯτͳͲ༻్ʹԠͯ͡૿ͯ͠ྑ͍ • ݕূ༻ͷΞΧϯτ͕͋Δͱɺݕূ->ຊ൪ΞΧϯτͷ
IaC ͷߋ৽͕҆શʹߦ͑Δ ෳΞΧϯτͷσϓϩΠ ը૾Ҿ༻ݩɿʮʲਤղʳgit-flowɺGitHub FlowΛ։ൃݱͰ͍࢝ΊΔͨΊʹ͜Ε͚͓֮ͩ͑ͯ͜͏ɿͬͦ͜Γ࢝ΊΔGitʗGitHubೖʢऴʣ - ˏITʯ ɹɹɹɹɹɹɹhttps://atmarkit.itmedia.co.jp/ait/articles/1708/01/news015.html Gitflow ͷྫ → ຊ൪ΞΧϯτ → ݕূΞΧϯτ → ։ൃΞΧϯτ → ։ൃΞΧϯτ(ݸਓ༻ελοΫ) -
• ԿΞΧϯτ༻ҙ͢Δͷ͔ • ։ൃɺݕূɺຊ൪ͷAWSΞΧϯτཉ͍͠ɻ࠷Ͱ։ൃɺຊ൪ΞΧϯτඞਢ • ΞϓϦଆͷ߹ʹΑΔ෦͋ΔͷͰɺΞϓϦͱΠϯϑϥͰνʔϜ͕ผΕΔ߹ͳͲཁ૬ஊ • εέʔϧ͕ఆͰ͖ΔͳΒෛՙςετΞΧϯτͳͲ༻్ʹԠͯ͡૿ͯ͠ྑ͍ • ݕূ༻ͷΞΧϯτ͕͋Δͱɺݕূ->ຊ൪ΞΧϯτͷ
IaC ͷߋ৽͕҆શʹߦ͑Δ ෳΞΧϯτͷσϓϩΠ ը૾Ҿ༻ݩɿʮϓϩμΫτͷϦϦʔεͱGitϒϥϯνӡ༻Λߟ͑ͯΈͨʯ ɹɹɹɹɹɹɹhttps://dev.classmethod.jp/articles/product-git-branch-rule/ GitHub Flow ͕ϕʔεͷྫ -
• ํ๏ • cdk.json ʹ֤ڥͷݸผͷఆΛهࡌ • σϓϩΠ࣌ͷ Context Ͱڥ͝ͱͷใΛ͢ •
ελοΫଆҾͷ Props ܕΛ֦ுͯ͠ఆΛ͢ ෳΞΧϯτͷσϓϩΠ cdk.json: { "app": "npx ts-node --prefer-ts-exts bin/hoge-app.ts”, "context": { "projectName": "hoge-fuga", "dev": { "description": "Develop environment variables", "envName": "dev", "env": { "account": "123456789012", "region": "ap-northeast-1" } }, "stg": { "description": "Staging environment variables", "envName": “stg", ... } ... } } σϓϩΠ࣌ͷίϚϯυɿ cdk deploy -c environment=dev ~~ hoge-app.ts: const app = new cdk.App(); const projectName = app.node.tryGetContext(‘projectName'); const envKey = app.node.tryGetContext(‘environment’); const envValues = app.node.tryGetContext(envKey); new HogeHogeStack(app, `${envValues.env}-${projectName}-hogehoge-stack’, { env: envValues.env, envName: envValues.envName, projectName: projectName, }); -
• AWS CDK ίʔυͰ͔͚ΔͨΊࣗ༝͕ߴ͍ • هड़͕όϥ͚͘͢σϓϩΠखॱ CI/CD ͷ ઃఆʹӨڹ͕ग़ͯ͘Δ •
ܾΊͨํ͕ྑ͍ن • ίʔυΛͲ͜·Ͱ DRY ʹ͢Δ͔ աͳ DRY ޙͷอकͰͷಡΈղ͖ελο Ϋׂ͕ࠔʹͳΔ • ৫ͱͯ͠ CCoE※ Λ্ཱͪ͛ͯޮԽ͠ ͍ͨ߹ɺL3 Construct ͷ࡞Λݕ౼ ίʔσΟϯάن ECS CDK Construct ECS CFN Construct ConstructͷLayerͷΠϝʔδ L1 L2 ECS CFN Construct ECS Cloud Formation L3 ECS Patterns ECS CDK Construct ECR CDK Construct VPC CDK Construct ALB CDK Construct ECS Cloud Formation 1:1 ରԠ நԽ … … நԽ ※ CCoE (Cloud Center of Excellence) ΫϥυͷϕετϓϥΫςΟε ϑϨʔϜϫʔΫɺΨόφϯεΛ࡞/ಓ͢ΔͨΊͷઐνʔϜ ֓ཁࢀߟϦϯΫɿ ʮCCoE(Cloud Center of Excellence)ʹ͍ͭͯ·ͱΊͯΈͨʯhttps://dev.classmethod.jp/articles/about_ccoe/ -
• ܾΊͨํ͕ྑ͍ن • IDͷ໋໊ن • ͓͢͢Ίɿ ${ڥ໊}-${ϓϩδΣΫτ໊}-໊͚͍ͨલ • ελοΫɺϦιʔεͷIDΛ্هͰ͚ͭΔ •
໌ࣔతʹϦιʔε໊Λ͚Δ͔ • ϕετϓϥΫςΟεࣗಈੜʹͤΔ • ࣗಈੜͷ߹ͷҙ • Deletion Policy ͷ֬ೝ(ෆཁϦιʔεͷআ) • ෳਓͰಉ͡ίʔυΛ͍ID͕ಉͩ͡ͱϦιʔε໊͕ॏ ෳ͢ΔαʔϏε͕͋ΔͷͰɺ্هͷ໋໊نͰ͚Δ • ελοΫIDΛϦιʔε໊ʹө͠ͳ͍αʔϏε͋Δ (ex. Amazon Aurora ͷΫϥελʔ໊) ίʔσΟϯάن hoge-stack.ts: … new lambdaNodejs.NodejsFunction( this, `${props.envName}-${props.projectName}-hoge-lambda`, {…} ); … cdk.json: { … "context": { "projectName": "hoge-fuga", "dev": { "envName": “dev" …}, "stg": { "envName": “stg” …}, … } ։ൃڥͷσϓϩΠɿ % cdk deploy -c environment=dev ~~ ݕূڥͷσϓϩΠɿ % cdk deploy -c environment=stg ~~ -
ίʔσΟϯάن ΞϓϦ/ελοΫ྆ํ͕ cdk.json ࢀর͢Δྫɿ cdk.json: { … "context": { "projectName":
"hoge-fuga", "dev": { "envName": “dev" …}, … } hoge-app.ts(ΞϓϦ): … const projectName = app.node.tryGetContext(‘projectName'); … hoge-stack.ts(ελοΫ): … const envKey = this.node.tryGetContext(‘environment’); … σϓϩΠɿ % cdk deploy -c environment=dev ~~ cdk.json ελοΫ ӈͷϑΝΠϧߏͷΠϝʔδ ΞϓϦ • ܾΊͨํ͕ྑ͍ن • tryGetContext Ͳ͜Ͱॻ͔͘ (cdk.json ͷ context ߲͔Βͷσʔλಡࠐ) • ΞϓϦͰελοΫͰॻ͚Δ͕ͲͪΒͰ ͏͔౷Ұͨ͠ํ͕Մಡੑ্͕Δ -
ίʔσΟϯάن ΞϓϦͷΈ͕ cdk.json ࢀর͢Δྫɿ cdk.json: { … "context": { "projectName":
"hoge-fuga", "dev": { "envName": “dev" …}, … } hoge-app.ts(ΞϓϦ): const projectName=app.node.tryGetContext(‘projectName'); const envKey = app.node.tryGetContext(‘environment’); const envValues = app.node.tryGetContext(envKey); // ελοΫͷݺͼग़͠ new HogeStack(app, `${envValues.env}-${projectName}-hoge-stack’, { env: envValues.env, envName: envValues.envName, projectName: projectName, }); σϓϩΠɿ % cdk deploy -c environment=dev ~~ cdk.json ΞϓϦ ελοΫ • ܾΊͨํ͕ྑ͍ن • tryGetContext Ͳ͜Ͱॻ͔͘ (cdk.json ͷ context ߲͔Βͷσʔλಡࠐ) • ΞϓϦͰελοΫͰॻ͚Δ͕ͲͪΒͰ ͏͔౷Ұͨ͠ํ͕Մಡੑ্͕Δ • ͓͢͢Ίɿ ΞϓϦͰ͚ͩ tryGetContext Λॻ͍ͨํ͕ cdk.json ͱͷґଘΛ1Օॴʹ·ͱΊΒΕΔ ӈͷϑΝΠϧߏͷΠϝʔδ -
• IaaS, PaaS, CaaS ͱͯ͠։ൃ͢Δ߹ɺ΄΅ݕ౼ෆཁ • FaaS ͳΒैྔ՝ۚͳͷͰ։ൃऀϦιʔεͷσϓϩΠ͕Մೳ • ෳਓͰ୯ҰΞΧϯτʹσϓϩΠ͢ΔͨΊͷ४උ
• ผΞΧϯτల։ͱಉ༷ʹ cdk.json ։ൃڥͷ༰ ͱ΄΅ಉ༷ͷݸਓ༻ͷઃఆΛهࡌ • ID໊ʹڥ໊ΛؚΊΔΑ͏࣮ • ҙ • Ұ෦ैྔ՝ۚͰͳ͍ઃఆ(DynamoDBͷϓϩϏδϣχϯ άϞʔυLambdaͷProvisioned ConcurrencyͳͲ)ʹ ҙ • ݸਓڥ໊͕͍ͱID໊͕Ϧιʔε໊ʹө͞Ε Amazon Simple Storage Service(S3) ͳͲͰϦιʔε໊ ͷ্ݶ(3~63จࣈ)ʹҾ͔͔ͬΔՄೳੑ͋Δ ෳਓ։ൃ࣌ͷσϓϩΠํ๏ hoge-stack.ts: … new lambdaNodejs.NodejsFunction( this, `${props.envName}-${props.projectName}-hoge-lambda`, {…} ); … cdk.json: { … "context": { "projectName": "hoge-fuga", "dev": { "envName": “dev" …}, "sat": { "envName": “sat” …}, "tmk": { "envName": “tmk” …}, … } ݸਓڥ(sat)ͷσϓϩΠɿ % cdk deploy -c environment=sat ~~ ݸਓڥ(tmk)ͷσϓϩΠɿ % cdk deploy -c environment=tmk ~~ -
• ϞϊϦγοΫϦϙδτϦ(ϞϊϨϙ) • 1ͭͷϦϙδτϦԼʹΞϓϦʹؔ͢ΔશͯͷίʔυΛؚΊΔ ex. ϩάΠϯ༻ͷIAMϩʔϧϑϩϯτ/όοΫɺΞϓϦ/Πϯϑϥͷ࣮·Ͱ·ͱΊΔ • ϞϊϨϙͷར • 1ͭͷ
GitHub Organization ʹෳͷ PJ ͕͋Δ߹ PJ ͷؔϦιʔε͕͔Γ͍͢ (GitHub EnterPriseͰ͋Ε PJ ͝ͱʹ Organization ΛׂՄೳ˞) • ύοέʔδΛڞ༗͢Δ߹ɺAWS CDK ؔ࿈ͷύοέʔδͳͲͷઃఆΛ1Χॴʹ·ͱΊͯߋ৽͍͢͠ • ϞϊϨϙͷܽ • σϓϩΠཻ͕ҟͳΔϦιʔεΛͯ͠ CI/CD ͢ΔΈ͕ඞཁ ʢGitHub Actions ՄೳɺCodePipeline ௐ͕ඞཁ?ʣ • ύοέʔδΛڞ༗͢Δ߹ɺύοέʔδߋ৽ʹΑΔӨڹൣғ͕͘ͳΔͷͰ IaC ͷܧଓతͳςετ͕ඞཁ (ޙड़) • ϞϊϨϙಛ༗ͷઃܭʹ࣌ؒΛࢿ͢Δඞཁ͕͋Δ ϦϙδτϦͷཻ ※ʮEnterprise ΞΧϯτʹ Organization Λཧ͢Δʯ ɹhttps://docs.github.com/ja/github/setting-up-and-managing-your-enterprise/managing-organizations-in-your-enterprise-account/adding-organizations-to-your-enterprise-account -
• ϚϧνϦϙδτϦ(ϚϧνϨϙ) • ༻్ʹԠͯ͡ෳͷϦϙδτϦʹ͚Δɻผͷ IaC πʔϧ Terraform ͷެࣜυΩϡϝϯ τͷҰ෦ͩͱͪ͜Β͕ਪ˞ ex.
ϩάΠϯ༻IAMपΓɺϑϩϯτΤϯυ/όοΫΤϯυɺΠϯϑϥ/ΞϓϦͰ • ϚϧνϨϙͷར • ผϦϙδτϦͳͷͰ࡞ۀ୲͍͢͠ • ύοέʔδߋ৽ʹΑΔӨڹൣғ͕ϦϙδτϦ෦ʹཹ·Δ • ؔ࿈ϦιʔεΛߟྀͤͣʹύοέʔδͷߋ৽͕Մೳ • ϚϧνϨϙͷܽ • ϦϙδτϦύοέʔδͷߋ৽ཧ͕ඞཁ ϦϙδτϦͷཻ ※ʮTerraform Configurations in Terraform Cloud Workspacesʯhttps://www.terraform.io/docs/cloud/workspaces/configurations.html -
• IaC Խ͢Δࡍͷར • υΩϡϝϯτΛॻ͔ͳͯ͘ઃܭ͕ίʔυͱͯͤ͠Δ • ผΞΧϯτಉ͡ߏͷϦιʔεల։͕ඇৗʹૣ͍ • ݻఆͨ͠ૢ࡞ͰਓతϛεΛݮΒ͍͢͠ •
ཪΛฦ͢ͱҎԼͷΑ͏ͳϦιʔεͳΒ IaC Խͷརগͳ͍ • ͙͢ʹऴΘΔΑ͏ͳ࡞ۀϝϞͷํ͕ IaC ΑΓઃఆ࣌/ϝϯςφϯε࣌ͷίετ͍ • ܧଓతͳมߋ͕গͳ͍ʢҰઃఆͨ͠Β΄΅Ԙ௮͚ʣ • ༏ઌͦ͏ͳ༰ • Route53 ͷϨίʔυઃఆ • ϩάΠϯ༻ IAMϢʔβ/ϩʔϧ ͷ࡞ • AWS Security HubɺAmazon GuardDuty ͳͲͷ AWS Organizations Ͱ·ͱΊͯཧͰ͖ΔϦιʔεͷઃఆ˞ ΞΧϯτͷ੍্ AWS Organizations ͕͑ͣɺෳΞΧϯτ·ͱΊͯઃఆ͍ͨ͠߹͋Γ Ͳ͜·Ͱ AWS CDK Խ͢Δ͔ ※ࢀߟʮʲOrganizationsʳ৫ͯ͢ͷΞΧϯτɾͯ͢ͷϦʔδϣϯͷ GuardDutyઃఆΛ؆୯ʹߦ͏ʯhttps://dev.classmethod.jp/articles/organizations-guardduty-all-account-all-region/ ɹɹɹʮ[Ξοϓσʔτ]Security Hub͕ AWS Organizations ͱ౷߹ʂ৫ηΩϡϦςΟνΣοΫڥΛ؆୯ʹηοτΞοϓ/ཧͰ͖ΔΑ͏ʹͳΓ·ͨ͠ʯhttps://dev.classmethod.jp/articles/security-hub-integrates-organizations/ -
© 2021, Amazon Web Services, Inc. or its affiliates. All
rights reserved. • αʔϏεબఆ (Code γϦʔζ or ֎෦ CI) • Code γϦʔζͷར༻ύλʔϯ • Code γϦʔζͷ߹ͷ • ֎෦ CI ͷར༻ύλʔϯ • ֎෦ CI ͷ߹ͷ ΞδΣϯμ (CI/CDʣ -
• AWS CDK ͷ CI/CD ύΠϓϥΠϯΛ࡞Δʹ େ·͔ʹ2ύλʔϯ͋Δ • CodeγϦʔζ(AWS CodeBuild,
AWS CodePipeline)Λ͏ύλʔϯ • ֎෦ͷ CI αʔϏεΛ͏ύλʔϯ • ͦΕͧΕͷར • Code γϦʔζɿҰ࣌ΫϨσϯγϟϧΛ AWS ͷ֎ͣ͞ʹࡁΉ • ֎෦ CIɿαϯϓϧίʔυ͕๛ɻyaml ͩ ͚Ͱखܰʹ͑Δ αʔϏεબఆ ( Code γϦʔζ or ֎෦ CI ) GitHub Actions AWS CodeBuild AWS CodePipeline etc… -
• Code γϦʔζΛͦͷ··͏ (ҎԼ GitHub ͷ߹) • CI: CodeBuild •
CodeBuild ଆ͔Β GitHub ͷଓΛઃఆ • CodeBuild GitHubͷݸਓΞΫηετʔΫϯΛ͔͢ OAuth App Ͱͷೝূ͕ඞཁ • GitHub Ͱҙͷϒϥϯν͔ΒͷPR࡞ΠϕϯτͳͲΛwebhookͰड͚ͯ CI Λ࣮ߦ͕Մೳʹ • CD: CodePipeline + CodeBuild • ଓઃఆ CodeBuild ͱҟͳΔ • GitHub App ͰͷೝূΛߦͬͯ AWS CodeStar Connections Λ࡞͢Δ (ιʔεϓϩόΠμʔ͕GitHub ver.2 ͷ߹) • ݻఆͷϒϥϯν Push ͳͲʹԠͯ͠ύΠϓϥΠϯΛ࣮ߦ • ঝೝύΠϓϥΠϯΛΉ͜ͱՄೳ Code γϦʔζͷར༻ύλʔϯ -
• CD CDK Pipelines Ͱߏங͢Δํ๏ • CodePipeline ͷ Construct Λ͏ࡍͱൺͨϝϦοτ
• ύΠϓϥΠϯࣗମͷࣗಈߋ৽ɺฒྻ࣮ߦɺผΞΧϯτͷσ ϓϩΠɺ࡞ϦιʔεͷݕূͳͲ͕؆୯ʹՄೳ • CDK Pipelines ࣗମ͕ύΠϓϥΠϯΛߋ৽͢Δ • CDK Pipelines ͷσϑΥϧτͷڍಈ 1. ݻఆͷϒϥϯνͷϚʔδͳͲΛܖػʹ ύΠϓϥΠϯ͕ىಈ 2. ύΠϓϥΠϯͷ్தͰύΠϓϥΠϯઃఆͷߋ৽͕͋Ε ύΠϓϥΠϯࣗମΛσϓϩΠ 3. ύΠϓϥΠϯมߋޙͷঢ়ଶͰ࠷ॳ͔Β࣮ߦ • selfMutating ΦϓγϣϯͰແޮԽՄೳ • ৄࡉࢀߟURLࢀর˞ • ݁ • CI CodeBuildɺCD CDK Pipelines ͕༗ྗ? (ݕূத) Code γϦʔζͷར༻ύλʔϯ (CDK Pipelines) CDK Pipelines ߋ৽ͷྲྀΕ(Deploy StageΛՃͨ͠߹) 1. AWS CodePipeline Source Stage Build Stage Pipeline Update Stage 2. AWS CodePipeline Source Stage Build Stage Pipeline Update Stage AWS CDK 3. AWS CodePipeline Source Stage Build Stage Deploy Stage Pipeline Update Stage ※ࢀߟʮCDK Pipelinesͷmodern APIΛͬͯCDKΞϓϦέʔγϣϯΛσϓϩΠ͢Δʯhttps://aws.amazon.com/jp/blogs/news/deploying-a-cdk-application-using-the-cdk-pipelines-modern-api/ -
• CI/CD ΛΉํ๏͕͙͢ʹ͔Βͳ͍ (ݸਓͷײͰ͢) • ex. CodePipeline ͕ branch ࢦఆͰ͔͠ύΠϓϥΠϯ͕Ίͳ͍ɻҙ
ͷ branch Λ࡞ͯ͠ Pull Request Ͱ CI ͍ͨ͠߹Ͳ͏Δͷ͔ʁ → CodeBuild ͷΈ͏ • ex. CodeBuild ͱ CodePipeline Ͱ GitHub ͷଓํ๏͕ҟͳΔ • CodeBuildɿGitHub ͷݸਓ༻ΞΫηετʔΫϯ or OAuth App • CodePipelineɿCodeStar Connections + GitHub App ɹɹɹɹɹɹɹ(ιʔεϓϩόΠμʔ͕ GitHub ver.2 ͷ߹) Code γϦʔζͷར༻࣌ͷ -
• ଞͷ CI ʹൺΔͱτϦΨʔΛॊೈʹઃܭͰ͖ͳ͍ or ઃఆ͕͍͠෦͕ଟʑ͋Δ • ಛఆͷϑΝΠϧͷมߋͷ͚࣌ͩԠͯ͠ύΠϓϥΠϯ࣮ߦ͕Ͱ͖ͳ͍ • Push
Ҏ֎ͷΠϕϯτͰύΠϓϥΠϯΛಈ͔͢߹ɺೝূํࣜΛݹ͍ͷʹΓସ͑ͯ webhook ϑΟϧλͷमਖ਼͕ඞཁ • CodeBuild ͱ GitHub ͷඥ͚͕1ͭͷ GitHub ΞΧϯτܦ༝ʹͳΔͷͰҙ • CodeBuild ͱ GitHub ͷଓΛݸਓͷΞΧϯτͰઃఆ͢Δͱ CodeBuild ͷΞΫηεݖݶΛ࣋ ͭଞͷϢʔβʹϓϥΠϕʔτͳϦϙδτϦଞͷ GitHub Organization ͷϦϙδτϦ͕ݟ͑ͯ ͠·͏˞ → ༗ྉͷ GitHub ΞΧϯτΛߪೖ͢Δ͔ɺಈతʹ CodePipeline Λ࡞ΔΈ͕ඞཁ Code γϦʔζͷར༻࣌ͷ ※ࢀߟURLɿʮCodeBuild ͱ GitHub ࿈ܞͰࠔͬͨ͜ͱ - omuronͷඋʯhttps://omuron.hateblo.jp/entry/2020/04/30/200000 ɹɹɹɹɹ ಈతʹCodePipelineΛ࡞Δ࣮ͷࢀߟʮawesome-codepipelineʯhttps://github.com/nicolai86/awesome-codepipeline-ci -
• GitHub Actions ͷར • ެࣜͷΞΫγϣϯ (aws-actions ͳͲ) Ͱ AWS
ڥͷ σϓϩΠ࣌ʹඞཁͳૢ࡞͕͋Δఔิ͞Ε͍ͯΔ • ϫʔΫϑϩʔͷߏ͕γϯϓϧͰಡΈ͍͢ • ࢦఆͨ͠ϑΝΠϧσΟϨΫτϦͷมߋʹ͚ͩԠͯ͠ ϫʔΫϑϩʔΛ࣮ߦͰ͖Δ • GitHub Actions ͰͷσϓϩΠͷྲྀΕ • CIɿ • GitHub ͷ PR࡞Ͱ࣮ߦ͢ΔϫʔΫϑϩʔΛఆٛ͢Δ • CDɿ • GitHub ಛఆͷϒϥϯνͷϚʔδλά࡞ʹԠͯ͡ AWSڥσϓϩΠ͢ΔϫʔΫϑϩʔΛఆٛ͢Δ • ϫʔΫϑϩʔͷதͰAWSΞΫηε͢ΔͨΊͷΫϨσϯ γϟϧΛऔಘ͢Δ ֎෦ CI ͷར༻ύλʔϯ ( GitHub Actions ͷྫ ) CI ϫʔΫϑϩʔͷྫɿ name: project-ci.yml on: pull_request: paths: - ‘*.json’ - '.github/workflows/project-ci.yml' jobs: integ: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 … CD ϫʔΫϑϩʔͷྫɿ name: project-cd.yml on: push: branches: - develop - staging … -
• AWS ֎෦ͷ SaaS ͕ඞཁͳͷͰ৫ʹΑͬͯผ్ߪೖਃ͔Βঝೝ·Ͱʹ͕͔͔࣌ؒΔ • ٻ͢ΔͷͰ౷తͳاۀ΄Ͳॲཧ͕େมʹͳΔ • ೝূΩʔใͷྲྀग़ͷߟྀ •
ೝূΩʔใ͕ྲྀग़͠AWSͷϦιʔεΛෆਖ਼ʹ༻͞ΕΔϦεΫ͕͋Δ • ࠷ݶඞཁͳରॲ • CI αʔϏεʹ༩͑ΔݖݶΛ࠷খʹ͢Δʢ FaaS ͩͱॊೈʹݖݶΛมߋ͍ͯ͘͠ͷେม…ʣ • ωοτ্ͳͲͰఏҊ͞Ε͍ͯΔ͍͔ͭ͘ͷରॲํ๏ • ݖݶͷͳ͍IAMϢʔβ͔ΒCloudFormationσϓϩΠ༻ͷϩʔϧʹεΠονͯ͠σϓϩΠ͢Δํ๏ • Ωʔใ͕ྲྀग़ͯ͠σϓϩΠγʔέϯεͱݖݶ͕͔Βͳ͚Ε༻Ͱ͖ͳ͍ ग़యɿ ʮ[AssumeRole] ΞΫηεΩʔ͕࿙Ӯͯ͠ඃ͕࠷খݶʹͳΔIAMϢʔβͰCloudFormationʹσϓϩΠ͢Δํ๏ʯ ɹɹɹhttps://dev.classmethod.jp/articles/assume-role-deploy-iam-user-and-role/ • σϓϩΠ࣌MFAೝূΛߦ͏ํ๏ • σϓϩΠ༻ϢʔβͷϫϯλΠϜύεϫʔυΛ 1password ͰνʔϜʹڞ༗ͯ͠MFAೝূΛ͔͚Δ ֎෦ CI ͷར༻࣌ͷ -
• ωοτ্ͰఏҊ͞Ε͍ͯΔ͍͔ͭ͘ͷରॲํ๏ (ଓ͖) • CloudShellܦ༝ͰೝূΩʔΛऔಘ͢Δํ๏ • CloudShell্ͷΩʔใΛϥϯμϜͳURLͱผͷΩʔใͰެ։͠CIʹ࣮ͯ͠ߦ͢Δ ग़యɿʮGitHub Actionsʹʮڧ͍ʯAWSͷݖݶΛ͍ͨ͠ʯ ɹɹɹ
https://speakerdeck.com/fujiwara3/aws-credentials-on-actions • MFAͷΘΓʹ Google ID Token ͳͲΛ͏ํ๏ • Google ID Token ͳͲͰҰ࣌తʹऔಘͰ͖ΔJWTτʔΫϯΛσϓϩΠ༻ϩʔϧͷ৴པؔʹՃͯ͠ೝূ͢Δ ग़యɿʮGitHub Actionsʹʮڧ͍ʯAWSͷݖݶΛ͍ͨ͠ ~࡞ઓ3 - AssumeRole with Google ID Token ~ʯ ɹɹɹ https://techblog.kayac.com/assume-role-with-google-id-token ֎෦ CI ͷར༻࣌ͷ -
• New update!! (2021/9/15) • GitHub Actions ͕ Open ID
Connect Λར༻ ͨ͠ΫϥυڥͷσϓϩΠʹରԠ ( β ) • GitHub ্ʹೝূΩʔΛஔ͔ͣʹɺҰ࣌ΫϨ σϯγϟϧͷΈͰ AWS ͷૢ࡞͕Մೳʹͳ Γ·ͨ͠ 🎉 • Ұ࣌ΫϨσϯγϟϧ AWS ֎෦ʹஔ͔Ε ΔͷͰ͚ͦͩ͜ҙ ֎෦ CI ͷར༻࣌ͷ ը૾Ҿ༻ɿhttps://github.com/github/roadmap/issues/249 Actions: Secure cloud deployments with Open ID Connect -
© 2021, Amazon Web Services, Inc. or its affiliates. All
rights reserved. • CloudWatch Dashboard ͷ࡞ • Ξϥʔτͷ࡞ • γϯηςΟΫεࢹͷ࡞ • AWS CDK ͷόʔδϣϯΞοϓ • ΠϯϑϥͷϢχοτςετ • ݕূڥͰσϓϩΠ/ಈ࡞ςετ • ۓٸ࣌ͷରॲʗखಈมߋͷऔࠐ ΞδΣϯμ (ӡ༻ʣ -
• ੜͨ͠Ϧιʔεʹରͯ͠؆୯ʹμογϡϘʔυ͕࡞Ͱ͖Δ CloudWatch Dashboard ͷ࡞ ը૾Ҿ༻ݩɿhttps://github.com/cdk-patterns/serverless/tree/main/the-cloudwatch-dashboard/typescript new cloudwatch.Dashboard( this, `${props.envName}-${props.projectName}-cloudwatch-dashboard`,
{ dashboardName: `${props.envName}-${props.projectName}-dashboard` }, ).addWidgets( new cloudwatch.GraphWidget({ title: ‘Requests', // apiGatewayRequestsCount: cloudwatch.MathExpression left: [apiGatewayRequestsCounts], stacked: true, width: 8, … }); -
• ੜͨ͠Ϧιʔεʹରͯ͠؆୯ʹΞϥʔτ͕࡞Ͱ͖Δ Ξϥʔτͷ࡞ ը૾Ҿ༻ݩɿhttps://github.com/cdk-patterns/serverless/tree/main/the-cloudwatch-dashboard/typescript new cloudwatch.Alarm( this, `${props.envName}-${props.projectName}-apig-4xx-error-count`, { metric:
apiGateway4xxErrorRequests, threshold: props.restApi4xxAlertThreshold, evaluationPeriods: 1, datapointsToAlarm: 1, treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING, }, ).addAlarmAction( new cloudwatchActions.SnsAction(errorNotificationTopic) ); -
• ΞϓϦAPIΤϯυϙΠϯτʹରͯ͠γϯηςΟΫεࢹ͕Ͱ͖Δ γϯηςΟΫεࢹͷ࡞ ίʔυҾ༻ݩɿhttps://dev.classmethod.jp/articles/aws-cdk-cloudwatch-synthetics-canary/ ... const screenCanary = new Canary(this,
'screen-canary', { canaryName: 'screen-canary', schedule: Schedule.rate(cdk.Duration.minutes(10)), test: Test.custom({ code: Code.fromAsset( path.join(__dirname,‘../lambda/canary') ), handler: 'screen-canary.handler' }) }) ... ※ AWS Lambda ͳͲ͕ཪͰಈ͍͍ͯΔͷͰͲ͜ͷϦʔδϣϯͰઃఆ͢Δ͔ཁݕ౼ -
• جຊසൟͳΞοϓσʔτඞཁͳ͍ • CloudFormation ςϯϓϨʔτͷੜπʔϧͳͷͰ͕ى͖ʹ͍͘ • ҎԼͷ؍Ͱఆظతͳߋ৽͕ඞཁ • ੬ऑੑରԠͰͷϏοΫόϯΞοϓσʔτࢭ •
Semantic Versioning فΓɺޙํޓੑͷͳ͍ϚΠφʔ/ύονΞοϓσʔτ͋Γ͏Δ • ৽ػೳͷରԠ • Lambda ͷ Hotswap deploy ͳͲɺศརͳػೳΛૣΊʹ͏ͨΊ • Ξοϓσʔτपظ (PJͰͷࢀߟྫ) • ϚΠφʔ/ύονΞοϓσʔτ • CI/CD ʹεφοϓγϣοτςετΛΈࠐΜͰɺAWS CDK ͕ੜ͢Δ CloudFormation ʹม Խ͕ͳ͚ΕఆظతʹόʔδϣϯΛߋ৽͢ΔΑ͏࣮ AWS CDK ͷόʔδϣϯΞοϓ -
• AWS CDK ͷόʔδϣϯΞοϓ͢Δͱ͖͚ͩ͏(ݸਓͷײͰ͢) • ʮAWS CDKͷόʔδϣϯΞοϓʯͷ෦Ͱॻ͍ͨΑ͏ʹ stable Ͱഁյతม ߋ͕ى͖Δ߹͋Δ
→҆શʹόʔδϣϯΞοϓ͢ΔͨΊʹςετ͕ඞཁ • બ͢Δςετ • Snapshot Test : લճੜͨ͠ςϯϓϨʔτͱࠓճͷࠩΛ֬ೝ͢Δςετ • ͦͷଞͷςετ(CDK ͷ Construct Λಠ֦ࣗு͢ΔͳΒ͏?) • Fine-grained Test : ఆ͞ΕΔύϥϝʔλ͕࡞͞ΕΔ͔ͷςετ • Validation Test : ελοΫͷύϥϝʔλΛόϦσʔγϣϯͰ͖Δ͔ͷςετ ΠϯϑϥͷϢχοτςετ -
• σϓϩΠςετͳͥඞཁͳͷ͔ • ݱঢ়ͷϦιʔεʹରͯ͠ CloudFormation Λ࣮ߦͨ͠߹ʹ͕Ͱͳ͍͔Λ֬ೝ͢ΔͨΊɻຊ൪ϦϦʔε࣌ʹ खॱ͕͍Βͳ͍͔ͷ֬ೝ • (Gitflowͷ߹) ։ൃ->ݕূϒϥϯνͷϚʔδ͔Βݕূ->ຊ൪ϒϥϯνͷϚʔδͷظ͕ؒ։͘ͱɺݕূͱຊ൪ͷιʔεͷဃ
͕େ͖͘ͳΓσϓϩΠ͕ࣦഊ͢Δύλʔϯ͋Δ (ex. DynamoDB ͷ GSI ͕ෳಉ࣌ߋ৽ʹͳͬͯΤϥʔ) • CI/CD ύΠϓϥΠϯʹରͯ͠దͳݖݶ͕͋Δ͔֬ೝ • ಈ࡞ςετ • ϦϦʔεޙʹ֤छϦιʔεͷΞΫηεͳͲ͕ਖ਼ৗʹಈ͔͘ • ϙϦγʔ/ϩʔϧͰมߋ͕ͳ͍͔ɺมߋ͕͋Δ߹࠷ݶ AWS ͷݖݶ؍Ͱͳ͍͔֬ೝ͢Δςετඞཁ ݕূڥͰσϓϩΠ/ಈ࡞ςετ -
• ΞϓϦ/Πϯϑϥোͷ߹ɺۓٸ࣌جຊҎԼͷରԠ • ຊ൪ϒϥϯνλά͔Β hotfix ϒϥϯνΛͬͯमਖ਼ͯ͠Ϛʔδ • ҰࠁΛ૪͏߹࠷ѱखಈมߋ • खಈۓٸมߋޙͷରॲ(Gitflowͷ߹)
• ݕূڥͷϦιʔεΛຊ൪ڥͱಉ͡ঢ়ଶʹ͢Δ • AWS CDK ʹۓٸରԠͨ͠༰ΛऔΓࠐΉ • ݕূڥͷ CloudFormation σϓϩΠ͕ਖ਼ৗʹऴΘΔ͔ςετ͢Δ • ͕ى͖Δ߹ݕূڥͷঢ়ଶΛຊ൪ڥ૬ʹͯ͠࠶ςετ ۓٸ࣌ͷରॲʗखಈมߋͷऔΓࠐΈ -
• ॳظ։ൃ࣌ͷݕ౼ࣄ߲ • ΞϓϦ/ελοΫ/ίϯετϥΫτΛͲ͏͏͔ܾΊΔ͜ͱ͕ॏཁ • ίʔσΟϯάنෳΞΧϯτӡ༻ͷํૣΊʹೝࣝΛ߹ΘͤΑ͏ • CI/CD ڥͷ࡞ •
Code γϦʔζΫϨσϯγϟϧΛAWS֎෦ʹग़͞ͳͯ͘ྑ͍ɻॊೈͳઃܭ͍͠ • ֎෦ CI ॊೈʹϫʔΫϑϩʔΛΈ͍͢ɻҰ࣌ΫϨσϯγϟϧͷѻ͍ʹҙ • ӡ༻ • ӡ༻ͰඞཁͳࢹΞϥʔτઃܭμογϡϘʔυ࡞ AWS CDK Ͱ࡞Մೳ • ܧଓతͳΞοϓσʔτͷͨΊʹΠϯϑϥςετ͋ͬͨํ͕ྑ͍ ·ͱΊ -
ࣾ֎ • ͞ΘΒ͞Μ https://hiroga.hatenablog.com/ ࣾ • shuntaka ͞Μ https://dev.classmethod.jp/author/takahashi-shunichi/ •
౻Ҫݩو ͞Μ https://dev.classmethod.jp/author/fujii-genki/ • lee.byonghun ͞Μ https://dev.classmethod.jp/author/lee-byonghun/ Special Thanks 🎉 ҎԼͷօ͞ΜʹࢿྉϨϏϡʔ͍͖ͨͩ·ͨ͠ʂ͋Γ͕ͱ͏͍͟͝·͢ʂ -
Thank you! © 2021, Amazon Web Services, Inc. or its
affiliates. All rights reserved. Tomoki Sato AWS CDK Ͳ͏͍͜ͳ͢ͷ͔ɺॳظ։ൃ͔Βӡ༻·Ͱͷϊϋ