AWS CDKを開発する時、開発者は様々な意思決定に直面するでしょう。例えばどの言語を使うか、スタックの分け方、テスト方法、複数環境の定義方法などはその一例です。この発表ではそれらについて取りうる選択肢をメリット・デメリットとともに紹介し、各プロジェクトで最適な意思決定をするための考え方を整理することを目指します。
AWS CDK Conference Japan 2023で発表しました。https://jawsug-cdk.connpass.com/event/278205/
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdk© 2023, Amazon Web Services, Inc. or its affiliates.AWS CDKͷ͋Δ͋Δ͓Έʹ͍͑ͨ։ൃ࣌ͷҙࢥܾఆΛߴԽ͢ΔͨΊʹ༑Ԭ խࢤPrototyping EngineerAmazon Web Services Japan G.K.
View Slide
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkࠓͷ͓AWS CDK (ҎԼCDK) ։ൃʹؔ͢ΔFAQʹରͯ͠ ͑ ߟ͑ํͷےಓΛࣔ͢Ͱ͖Δ͚ͩCDK։ൃ࣌ʹΉ࣌ؒΛݮΒͤΕ͍Ͱ͢ʂରࢹௌऀ: CDK։ൃऀͲͳͨͰ(CDKશॳ৺ऀͷํɺগ͠׳Ε͖ͯͨࠒʹݟฦ͢ͷ͕Φεεϝ)ୠ͠ॻ͖• ίʔσΟϯά্ͷ׳श͠͠ਓʹΑΓҙݟ͕͔ΕΔ෦Ͱ͢• ίϯςΩετͷҧ͍ / ఆྔԽͮ͠Β͍• ࠓͷ༰౿·͑ͭͭɺݸผͷঢ়گʹԠͨ͡దͳஅΛ͍ͯͩ͘͠͞2ຊͷࢿྉ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkࣗݾհ༑Ԭ խࢤ Prototyping Engineer @AWS Japanલ৬mBaaS։ൃŋӡ༻ (Rails, Sinatra, Ruby, MySQL)ϞόΠϧήʔϜΫϥΠΞϯτ։ൃ (Unity, C#)CDKܦݧ্هmBaaSΛAWSҠߦ͢Δࡍʹ࠾༻ (2019/12 - 2020/10)ϓϩτλΠϓ։ൃʹར༻ (2020/11 -)AWSࣾαʔϏεͷӡ༻։ൃ (2021/7 - 2022/3)࠷ۙ࡞ͬͨͷ: aws-samples/jenkins-unity-build-on-aws Twitter: @tmokmss3
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdk͓ॻ͖• ͲͷϓϩάϥϛϯάݴޠΛ͏͖ʁ• ελοΫͲͷΑ͏ʹ͚Δʁ• ελοΫͷίʔυ͕ࢄΒ͔͖ͬͯͨΜ͚ͩͲ…• L1 / L2 / L3ίϯετϥΫτɺͲΕΛ͏͖ʁ• ڥΛ૿͢ํ๏ʁ• ࣗಈςετͲ͏͢Δʁ4؍ (FAQͷதͰ): OR݅• அ͕͍͠ͷ• 1 way doorͳܾஅʹͳΔͷ• Βͳ͍ͱଛ͢Δࣝ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkTypeScript(JSؚΉ)PythonJava.NETGo2022 CDK community surveyCDKϢʔβʔͷར༻ݴޠൺ n=1225Q. ͲͷݴޠΛ͏͖͔• ಛผͳཧ༝͕ͳ͍ݶΓ TypeScript ͕͓͢͢Ίɻཧ༝:1. Ϣʔβʔ͕࠷ଟ (ӈਤ) → ใ͕ଟ͍ɺಓ͕උ͞Ε͍ͯΔ2. ίϯετϥΫτϥΠϒϥϦͷpublish͕࠷ଟ (constructs.dev)• TypeScriptΛ100%ͱͯ͠ Python: 80% .NET: 56% Java: 53% Go: 12% (2022/10࣌)• ཧ্શݴޠͰ͑Δ(jsii)ͷ͕ͩɺ୯ʹϥΠϒϥϦ࡞ऀ͕publish͍ͯ͠ͳ͍3. ֶशίετ͕ൺֱత͍ (Ϋηͷͳ͍จ๏ɻCDKΛॻ͘ఔͳΒ…)• ͨͩ͠: CDKͷػೳࣗମͲͷݴޠͰࠩͳ͠ (jsii͕ͦΕΛอূ)• ։ൃऀʹڧ͍Έ͕͋Δ߹ɺͦͷݴޠΛ͏ͷશવΞϦ (׳ΕͨݴޠΛ͑Δͷ͕CDKͷັྗ)• ࢀߟ: TypeScriptͷCDKίʔυػցతʹଞݴޠॻ͖͑Մೳ Translating from TypeScript• ࣗಈ༁: AWS CDK Translator
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkQ. ελοΫͲ͏͚Δͷ͕ྑ͍ʁ• جຊϧʔϧ: ඞཁ͕ͳ͍ͳΒ͚ͳ͍• ελοΫΛ͚Δͱେͷ߹ελοΫؒͷґଘ͕ؔੜ͡Δ (ελοΫؒࢀরͳͲ)• ελοΫؒࢀর։ൃŋӡ༻্͍͔ͭ͘ͷ໘ΛҾ͖ى͕ͪ͜͠ (ޙड़)• ελοΫΛ͚Δඞཁ͕͋Δ߹ͷදྫ1. CloudFormationͷϋʔυϦϛοτʹͨΔͱ͖ (Ϧιʔε500ͳͲ)2. ΞΧϯτϦʔδϣϯΛލ͍ͩσϓϩΠ͕ඞཁͳͱ͖3. ϦιʔεΛσϓϩΠ͢ΔؒʹCloudFormation֎ͷૢ࡞͕ඞཁͳͱ͖• ྫ: όοΫΤϯυͷσϓϩΠ → ϑϩϯτΤϯυͷڥม (Cognito Pool IDͳͲ) ΛຒΊࠐΜͰϏϧυ → ϑϩϯτΤϯυͷσϓϩΠ• ඞཁ͕͋Δ͔Ͳ͏͔Θ͔Βͳ͍ͱ͖ → ͚Δ͜ͱͰ۩ମతͳϝϦοτ͕͋Δ͔ߟ͑Δ• Ϧιʔεͷॴ༗ऀ͕ҟͳΔ߹ͳͲɺ্هͷඞཁੑ͕ͳׂ͕ͯ͘߹ཧతͳ߹͋Γ6νʔϜؒͷಠཱੑΛอͭखஈͱͯ͠ɺApp͝ͱ͚Δબࢶ͋Δ※
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkελοΫΛ͚Δ͜ͱͷσϝϦοτ1. ελοΫؒࢀরʹΑΓɺ॥ґଘσϓϩΠ࣌ͷͳͲՃͷߟྀ͕ඞཁʹ (ҎԼҰྫ)• ӈਤͷঢ়ଶͰҎԼͷૢ࡞Λ͢ΔͱσϓϩΠsynthʹࣦഊ͢Δ1. Parent͔ΒChildͷϦιʔεΛࢀর(॥ґଘ)2. ChildStackͷLambda FunctionΛআ(มߋͷڝ߹ɺཧ༝࣍ͷεϥΠυ)• ճආՄೳ (ޙड़)ɻ։ൃମݧͷѱԽ͕՝2. σϓϩΠ͕ಷԽ• ґଘؔͷ͋ΔελοΫಉ࣌ʹσϓϩΠͰ͖ͳ͍ → σϓϩΠͷฒྻ੍͕ݶ͞ΕΔ3. దͳ͚ํΛઃܭ͢Δͷ͕େม7ParentStackDynamoDB TableStack export: TableNameChildStackLambda Function(ςʔϒϧ໊Λࢀর)Fn:ImportValue
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkิ: ελοΫͷσϓϩΠʹࣦഊ͢ΔΈ8ParentStackDynamoDB TableStack export: TableNameChildStackLambda Function(ςʔϒϧ໊Λࢀর)Fn:ImportValueParentStackDynamoDB TableStack export: TableNameChildStackLambda Function(ςʔϒϧ໊Λࢀর)Fn:ImportValueલఏελοΫؒࢀরͷಛ:• ΤΫεϙʔτ͞ΕͨελοΫग़ྗ͕ਖ਼ମ• CDK͕มͷؔੑΛݟͯࣗಈͰ࡞• ࢀর͞Ε͍ͯΔग़ྗআͰ͖ͳ͍ (ڧ͍ࢀর)cdk deploy ͷॱং: Parent → Child৽͍͠ParentStackStack exportΛআ͠Α͏ͱ͢Δ͕ɺChildStack·ͩݹ͍ͷ͕σϓϩΠ͞Εͨ··ͭ·ΓTableName·ͩࢀর͞Ε͍ͯΔͷͰɺStack exportͷআʹࣦഊ͢ΔLambdaؔΛআͯ͠σϓϩΠΛࢼΈΔσϓϩΠʹࣦഊʂ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkαʔϏεछผʹΑΔ͚ํ ػೳʹΑΔ͚ํ• Ұͭͷࢦඪ: ελοΫؒࢀরΛͰ͖Δ͚ͩগͳ͘͢Δ• ϦιʔεؒͷґଘΛελοΫͰ݁ͤ͞Δ• ֤ελοΫΛͰ͖Δ͚ͩಠཱͤ͞ΔΠϝʔδServiceB stackServiceA stackPersistance stackNetwork stackStateless stackͦΕͰελοΫΛ͚͍ͨͱ͖ServiceA ServiceBNetworkPersistentStateless131 (ελοΫؒࢀর)※ ڽूͷʹؔ࿈˙ ཧతڽूɺ˙ ػೳతڽूʹ͍͔ۙελοΫؒࢀরͳ͠9
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkϚϧνελοΫ։ൃ࣌ͷTips – มߋͷڝ߹Λղফ͢Δ• -e, --exclusivelyϑϥάͰґଘؔΛແࢹͯ͠σϓϩΠ͢Δ ࢀর• Stack.exportValueϝιουͰ໌ࣔతʹStack exportΛ࡞͢Δ• ελοΫؒࢀরΛΘͣʹΛελοΫؒͰड͚͢• SSMύϥϝʔλΛܦ༝͢Δɺ໋໊نଇʹԊͬͨΛϋʔυίʔυ͢ΔͳͲ ↓• 2ஈ֊ʹ͚ͯσϓϩΠ͢Δ (࣍ͷϖʔδ)10ChildStackͷΈΛઌʹσϓϩΠ͢ΕɺStack exportෆཁʹͳΓɺมߋڝ߹͠ͳ͍ChildStack͕ݩʑඞཁͱͨ͠Λ໌ࣔతʹexportStack export͕อ࣋͞Εɺมߋڝ߹͠ͳ͍exclusive deployCDKͰελοΫؒͷύϥϝʔλʔΛड͚͢5ͭͷํ๏ͱέʔεผͷ࠷దղʹ͍ͭͯߟ͑ͯΈͨ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdk2ஈ֊σϓϩΠͷྫParentStack ChildStackDynamoDBTable v1LambdaؔTableNameΛࢀরParentStack ChildStackDynamoDBTable v2LambdaؔTableNameΛࢀরDynamoDBTable v111ParentStack ChildStackDynamoDBTable v2Lambdaؔ͜ͷExport·ͩআͰ͖ͳ͍exportValueͰ໌ࣔతʹ͢TableNameΛࢀরDeploy#1Deploy#2ॳظঢ়ଶதؒঢ়ଶ࠷ऴঢ়ଶDeploy#2Ͱআ※ ࠓճ৽چςʔϒϧؒͷσʔλҠߦΛߟྀ͍ͯ͠ͳ͍
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkϚϧνελοΫ։ൃ࣌ͷTips – ॥ґଘΛղফ͢ΔελοΫͷ॥ґଘ: 2ͭͷελοΫ͕ޓ͍ͷStack exportΛࢀর͋͠͏ঢ়ଶParentStack ChildStackSecuritygroupSecuritygroupVPC LambdaSubnet IDΛࢀরIngress ruleSecurity group IDΛࢀরIngress ruleError: 'Stack2' depends on 'Stack1' ({Stack2/Handler/ServiceRole/Resource}.addDependency({Stack1/Vpc/IsolatedSubnet1/RouteTableAssociation}),…). Adding this dependency (Stack1 -> Stack2/Handler/SecurityGroup/Resource.GroupId) would create a cyclic reference.12ґଘؔͷํΛҙ࣮ࣝͨ͠Ͱճආྫ: ͜ͷґଘNGґଘยํͷΈڐ͞ΕΔ※ ্هͰճආͰ͖ͳ͍͜ͱɻGitHubͰIssueΛ୳͢ɾཱͯΔͷखɻ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkϚϧνελοΫ։ൃ࣌ͷTips – ॥ґଘΛղফ͢ΔελοΫͷ॥ґଘ: 2ͭͷελοΫ͕ޓ͍ͷStack exportΛࢀর͋͠͏ঢ়ଶParentStack ChildStackSecuritygroupSecuritygroupVPC LambdaSubnet IDΛࢀরIngress ruleSecurity group IDΛࢀরIngress ruleError: 'Stack2' depends on 'Stack1' ({Stack2/Handler/ServiceRole/Resource}.addDependency({Stack1/Vpc/IsolatedSubnet1/RouteTableAssociation}),…). Adding this dependency (Stack1 -> Stack2/Handler/SecurityGroup/Resource.GroupId) would create a cyclic reference.13ґଘؔͷํΛҙ࣮ࣝͨ͠Ͱճආྫ: ͜ͷґଘNGґଘยํͷΈڐ͞ΕΔΠςϨʔςΟϒͳ։ൃͰ͋·Γߟ͑ͨ͘ͳ͍Θͤ͠͞Ίͯ։ൃڥͰγϯάϧελοΫʹอ͍͔͕ͬͯʁ※ ্هͰճආͰ͖ͳ͍͜ͱɻGitHubͰIssueΛ୳͢ɾཱͯΔͷखɻ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkQ. Stackͷίʔυ͕ࢄΒ͔͖ͬͯͨ• ϦιʔεΛϑϥοτʹϕλॻ͖͢Δͱɺೝෛՙ͕ߴ·Δ• Ϧιʔεͷґଘ͕ؔΘ͔ΓͮΒ͔ͬͨΓɺεΫϩʔϧྔ͕૿͑ͨΓ• OOPʹ͓͚ΔΫϥεઃܭͷॏཁੑʹྨࣅ• ந → ۩ମ ͷॱΛ͔Γ͍͢ͱײ͡Δਓଟ͍ (Օॻ͖ͱಉ͡)• ίϯετϥΫτΛͬͯߏԽ͢Δͷ͕͓͢͢Ίü Ϧιʔεͷू߹Λҙຯͷ͋Δ୯ҐͰ·ͱΊΔü ϞδϡʔϧԽͷརΛڗड (࠶ར༻ੑɺநԽͳͲ)ü ID (ୈ2Ҿ) ͷָ໋໊͕ʹ (ҰҙੑΛอͭείʔϓ͕ڱ·ΔͨΊ)14ೝূStorageLambdaAPIID
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkೝূStorageLambdaAPIίϯετϥΫτͰίʔυΛߏԽ͢Δ15↑ίϨ͘Β͍ͷཻͰ·ͱ·͍ͬͯΔͱύοτݟͰߏ͕Θ͔Γ͍͋͢ΔҙຯͰෳࡶ͞૿͢ͷͰɺํνʔϜͰٞ͢Δͱ 🙆vsίʔυྫ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkCloudFormationίϯιʔϧͷTree Viewݟ͘͢16ࢿྉ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkখωλ: ແ໊ίϯετϥΫτ (ͱɺݺΜͰΈΔ)• ίϯετϥΫτπϦʔͷ֓೦Λཧղ͢ΔͱḿΔ• ϑΝΠϧγεςϜͷσΟϨΫτϦπϦʔͰྨਪ͢Δͱָ• είʔϓ(ୈ1Ҿ)=σΟϨΫτϦ, ID(ୈ2Ҿ)=σΟϨΫτϦ໊• ͋ΔσΟϨΫτϦ(είʔϓ)ͷதʹಉ໊͡લ(ID)ଘࡏͰ͖ͳ͍• είʔϓඞͣ͠ this Ͱ͋Δඞཁͳ͍• ۭͷίϯετϥΫτΛͦͷͰ࡞͠ɺଞͷίϯετϥΫτͦΕΛʹͰ͖Δ• ແ໊Ϋϥεແ໊ؔʹྨࣅͯ͠·ͤΜʁ• Ϋϥεఆٛ͢Δ΄ͲͰͳ͍Μ͚ͩͲɺɺͱ͍͏ঢ়گʹศརʹ͑Δ͔17Pro tip: ϒϥέοτ{} Ͱมͷείʔϓ੍ޚՄೳείʔϓ͕ҧ͏ͷͰಉ͡IDΛ͑ΔۭͷίϯετϥΫτείʔϓͷࢦఆ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkίϯετϥΫτΛ࡞Δͱ͖ͷTipsࢀর: AWS CDK Tips: ίϯετϥΫτͰߏԽ͠Α͏1. ίϯετϥΫτͷ͚ํ• ελοΫͷ͚ํ΄ͲηϯγςΟϒͳͰͳ͍ (Լखʹ͚ͯσϝϦοτ͕࿐ఄͮ͠Β͍)• ͨͩ͠εςʔτϑϧͳϦιʔεޙ͔ΒϦϑΝΫλͮ͠Β͍ͷͰɺ৻ॏʹ• ਓ͕͔Γ͍͢୯ҐͰ·ͱΊΕҰ୴े (จষΞʔΩਤॻ͘ͱ͖ͳͲࣗવͱҙࣝͯ͠Δͣ)2. ID=‘Default’ ʹΑΓ Logical IDΛॖ͢Δ Shorter AWS CDK Logical IDs• CFnʹΑΔࣗಈ໋໊ΛΘ͔Γ͘͢อͭͨΊ• ϦϑΝΫλͷͱ͖LogicalIDͷมߋΛ͙ͨΊʹཱͬͨΓ3. IDͷ໋໊PascalCase͕͓͢͢Ί Construct IDύεΧϧέʔεͰ໋໊͢Δͷ͕ྑ͍• CFnʹΑΔࣗಈ໋໊ΛΘ͔Γ͘͢อͭͨΊ18ID
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkQ. L1 / L2 / L3 ίϯετϥΫτ ͲΕΛ͏ʁ• நʹΑΓίϯετϥΫτL1~L3ʹେผ͞ΕΔ (ӈਤ)• جຊతʹL2+Λੵۃతʹ͏΄͏͕CDKͷརΛڗड͍͢͠• grantXxx, allowFromͳͲʹΑΔநԽڧྗ• நԽʹΑͬͯॊೈੑΛࣦΘͳ͍ͨΊʹ1. ࣗ৫ͰίϯετϥΫτΛ࡞ɾཧ͢Δ• ࣗ༝ʹमਖ਼Մೳͳͷ͕ڧΈɻεχϖοτͱ͍ͯ͠ճ͋͢Γ2. ެࣜɾαʔυύʔςΟͷίϯετϥΫτ…• ϑΥʔΫ͢Δ or ίϯτϦϏϡʔτ (Pull RequestΛૹΔ)• ޙऀΤίγεςϜͷڧԽͱ͍͏ҙຯͰཧత (࣌ʹେม)3. Escape hatch ʹΑΔΦʔόʔϥΠυ (࠷ޙʹͯ͠࠷ڧͷํ๏)• ࣍ͷεϥΠυͰৄ͘͠հ 19நॊೈੑநߴੜ࢈ੑL1 L2 L3
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkL2 / L3ίϯετϥΫτͰॊೈੑΛऔΓ͢ - Escape hatchฤ• ·ΕʹΑ͘ඞཁͳΠϯλʔϑΣʔεΛL2+Ͱར༻Ͱ͖ͳ͍߹͕͋Δ• ͜ͷΛཧ༝ʹCFnͷ΄͏͕CDKΑΓྑ͍ͱݴΘΕΔ͜ͱ͋Δ͕ɺඞͣͦ͠͏Ͱͳ͍• Escape hatchΛ͑ɺL1ͱಉϨϕϧʹॊೈͳૢ࡞͕Մೳ20ྫ: Lambda RoleͷPolicy໊Λมߋ͢ΔEscape hatchͰL1 constructΛ৮ΔCDKίʔυMetadataΛݟΕϦιʔεͷύε͕͔Δ߹ޙͷCloudFormationςϯϓϨʔτύεʹԊͬͯίϯετϥΫτπϦʔΛ۷Δৄࡉ: Abstractions and escape hatchesҙͷϓϩύςΟΛΦʔόʔϥΠυͰ͖ΔΠϯλʔϑΣʔε
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkQ. ෳڥ͚ʹςϯϓϨʔτͷఆٛΛ͢ΔʹʁDev/Staging/ProdͳͲෳͷڥΛͲ͏͏·͘ఆٛ͢Δ͔ʁ࠷ݶɺҎԼΛͲ͏͢Δ͔ߟ͍͑ͨ:1. ڥ͝ͱʹύϥϝʔλΛઃఆ͢Δํ๏• ྫ: Auroraʹ͍ͭͯɺDevڥ t3ΠϯελϯεɾProdڥm6gΠϯελϯεΛ͏2. ڥ͝ͱʹελοΫఆٛΛग़͚͠Δํ๏• ҰͭͷCDKίʔυ͔Βෳͷڥ༻ελοΫΛsynth͍ͨ͠• ྫ: Devڥ༻ɺProdڥ༻ͷελοΫΛͲ͏ఆٛ͢Δ͔21
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkڥ͝ͱʹύϥϝʔλΛઃఆ͢Δํ๏• ύϥϝʔλΛཧ͢ΔॴΛܾΊΔ• ӈදྫ5ͭ (ଞʹແݶʹߟ͑ΒΕΔ)• ࣍ϖʔδʹৄ͍͠ൺֱදΛهࡌ• ಡΈࠐΜͩύϥϝʔλΛελοΫίϯετϥΫτͷPropsʹ͢ఆ22
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkڥ͝ͱʹύϥϝʔλΛઃఆ͢Δํ๏ - ൺֱද23(ॱෆಉ) ֓ཁ Pros Cons1.Context variablecdk.json –c ΦϓγϣϯͰࢦఆcdk deploy –c env=devCDKඪ४ؔ (tryGetContext) ͰΛऔಘͰ͖Δ͜ͱͷެࣜײJSONʹΑΔinteroperabilityͷߴ͞(ଞπʔϧͰJSONΛੜͨ͠ΓͳͲ)ͷValidationʹҰඞཁ (JSONSchemaͳͲ)JSONͷදݱྗʹറΒΕΔ (CDKͷܕDurationͳͲ͑ͳ͍)2. ڥม CDKίϚϯυ࣮ߦ࣌ʹڥมΛࢦఆENV=dev cdk deployCDKҎ֎ͷք۾Ͱඪ४తͳํ๏CIπʔϧͷઃఆͰ্ॻ͖Ͱ͖ΔͳͲԠ༻ํ๏ଟ͍͔ڥมจࣈྻܕͷΈڥมΛཧ͢ΔॴΛߟ͑Δඞཁ͋Γ3. ֤ݴޠͷΦϒδΣΫτCDKͷݴޠͰύϥϝʔλΛϋʔυίʔυ͢Δ(e.g. TypeScriptͷobject)จࣈྻŋࣈҎ֎ͷܕ͕͑Δ(Durationec2.InstanceTypeͳͲ)खܰʹܕ҆શݴޠ͕ݻఆ͞ΕΔɺಈతͳੜʹෆ͖ͳͲinteroperability͕ඞཁͳঢ়گͰ͍͕͠ɺك4. Secrets ManagerParameterStoreCDK֎ͰύϥϝʔλΛ࡞deploy࣌ʹCFn͕Λಡࠐൿಗใ(API keyͳͲ)ΛCDKίʔυCFnςϯϓϨʔτ͔ΒӅṭͰ͖ΔύϥϝʔλͷॳظԽʹՃखॱඞཁύϥϝʔλͷARNͷཧඞཁ5. CfnParameter CloudFormationͷParameterػೳΛ͏synthޙʹσϓϩΠ༰ΛมߋՄೳ߹ͨ͠CFnςϯϓϨʔτΛ͍ͨ͠߹ʹ༗ޮCFnΛҙࣝ͢Δඞཁ͕͋ΓɺૉͷCDKΑΓॻ͖ʹ͍͘ಛघͳঢ়گΛআ͍ͯϝϦοτബ͍ݸਓతͳ͍͚: σϑΥϧτ3ɺඞཁʹԠͯ͡2/4/5
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkQ. ෳڥ͚ʹςϯϓϨʔτͷఆٛΛ͢ΔʹʁDev/Staging/ProdͳͲෳͷڥΛͲ͏͏·͘ఆٛ͢Δ͔ʁ࠷ݶɺҎԼΛͲ͏͢Δ͔ߟ͍͑ͨ:1. ڥ͝ͱʹύϥϝʔλΛઃఆ͢Δํ๏• ྫ: Auroraʹ͍ͭͯɺDevڥ t3ΠϯελϯεɾProdڥm6gΠϯελϯεΛ͏2. ڥ͝ͱʹελοΫఆٛΛग़͚͠Δํ๏• ҰͭͷCDKίʔυ͔Βෳͷڥ༻ελοΫΛsynth͍ͨ͠• ྫ: Devڥ༻ɺProdڥ༻ͷελοΫΛͲ͏ఆٛ͢Δ͔24
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkڥ͝ͱʹελοΫఆٛΛग़͚͠Δํ๏ελοΫఆٛํ๏ͷදྫ (௨ৗ bin/xxx.ts ʹॻ͘ΞϨ)• Dynamicύλʔϯ• 1ͭͷελοΫఆٛΛ͍ճ͢ StackͷID֎෦͔Βೖ• Staticύλʔϯ1• ڥͷ͚ͩελοΫΛϋʔυίʔυ͢Δ• DynamicΑΓAppͷελοΫߏ͕͔Γ͍͢• Staticύλʔϯ2• ελοΫͷΫϥεఆٛࣗମΛڥ͝ͱʹ͍͚Δ• ڥ͝ͱʹϦιʔεͷߏŋελοΫׂΛม͍͑ͨ࣌ͳͲʹ༗ޮ• ڥͷҰக͕Լ͢ΔϦεΫ͋Γ25※ Staticύλʔϯsynthͷ͕࣌ؒ͘ͳΓ͕ͪɻڥมͰ݅ذ͠ɺෆཁͳnew Stack()Λඈ͢ͳͲͰճආՄೳɻ※ CDK PipelinesΛ͏߹ɺεςʔδͱ͍͏֓೦Ͱ͞Βʹϥοϓ͞ΕΔ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkQ. ࣗಈςετͲ͏͢Δʁ࠷ݶ…• ඞਢ: εφοϓγϣοτςετ (synthޙͷCFnςϯϓϨʔτΛൺֱ͢Δςετ)• CDKͷόʔδϣϯΞοϓ࣌ͳͲʹɺҙਤ͠ͳ͍มߋ͕ੜ͍ͯ͡ͳ͍͜ͱΛݕূ͢ΔͨΊ• ࣮ۃΊͯ؆୯ (※ ݴޠ͝ͱͷςετϥΠϒϥϦΛ׆༻) ࣮ྫ: Testing constructs – Snapshot test• ҙ: ΠϯςάϨʔγϣϯςετ (࣮ࡍʹAWSڥʹσϓϩΠ͢Δςετ)• ΧελϜϦιʔεͷ࣮CloudFormationଆͷόϦσʔγϣϯΛݕূ͢ΔͨΊ• ςετ༻AWSڥΛ༻ҙͯ͠σϓϩΠ͢Δͷ͕खܰͳखஈ (devڥΛ͏ͳͲ)• Integ-runner integ-tests ͱ͍ͬͨϥΠϒϥϦఏڙ͞Ε͍ͯΔ (·ͩalpha)• ҙ: Fine-grained assertions (ςϯϓϨʔτʹର͢Δࡉ͔ͳݕূ)• ࣗࣾϙϦγʔͷίϯϓϥΠΞϯεΛݕূ͢ΔͳͲ cdk-nagͳͲͰҰൠతͳ੬ऑੑݕࠪՄೳ26※ pdk-nag: ϓϩτλΠϐϯά͚ͷɺΑΓ؇͍ϧʔϧηοτ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkCDK։ൃαΠΫϧͷҰྫݸਓతʹΑ͋͘ΔCDK։ൃͷྲྀΕΛࢀߟ·Ͱʹ (non-TDD):• ࣮ → σϓϩΠ → ಈ࡞֬ೝ͕جຊαΠΫϧ• σϓϩΠͯ͠खಈͷݕূΛ͢ΔεςοϓͲ͏ͯ͠ඞཁ• ͯ֬͢ೝͰ͖ͨΒɺεφοϓγϣοτΛ࡞Δ• ҎޙεφοϓγϣοτͱͷࠩΛϨϏϡʔ͢ΕมԽΛ͑Δ• ςετࣗಈԽͷॏཁੑIaCͷมߋසʹԠͯ͡มΘΔ• ҆ఆޙεφοϓγϣοτͷࠩϨϏϡʔ͕ͭΒ͍ϨϕϧͩͱɺͦͷଞͷςετΛࣗಈԽ͢ΔΞϓϩʔν߹ཧతʹͳΔ͔27CDK࣮σϓϩΠಈ࡞֬ೝεφοϓγϣοτ࡞ϝϯςφϯε͋Δػೳ։ൃͷϥΠϑαΠΫϧ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdk·ͱΊ• AWS CDK։ൃʹ͏ҙࢥܾఆͷϙΠϯτɺFAQͷߟ͑ํΛ·ͱΊ·ͨ͠• ͦΕͧΕͷPros/ConsΛߟ্͑ͨͰదٓ࠷దͳํ๏Λߟ͑Δ͜ͱ͕͓͢͢Ί• ͨͩ͠ɺΈଓ͚ͯ։ൃ͕ࢭ·Δ͘Β͍ͳΒɺͱΓ͋͑ͣࢼ͠ͳ͕Βߟ͑Δํ͕ྑ͍Ͱ͢Ͷʂ• IaCΘ(͑)ͳ͍ <<< (ӽ͑ΒΕͳ͍น) <<< CDK͑Δ < CDK͏·͑͘Δ• جຊͷߟ͑ํ: ඞཁͷͳ͍ݶΓෳࡶԽ͠ͳ͍• ίϨΛҙࣝ͢Δͱଟ͘ͷ߹ແବͷͳ͍ίʔυʹͳΔͣʂωλ• CDKίʔυΛϦϑΝΫλ͍ͨ͠• طଘͷϦιʔεΛCDKཧԼʹऔΓࠐΉ• σΟϨΫτϦߏɺetc…28ࠓޙ AWS Black BeltγϦʔζ ͰΧόʔ͞ΕΔ༧ఆͰ͢ʂ
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkܦݧஊฉ͖͍ͨAWS Dev Day 2023ͰBLEAνʔϜ͔Βൃද༧ఆօ༷ͷAWS CDKܦݧஊɾۤ࿑ͥͻ͝ڞ༗͍ͩ͘͞ʂ29
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkࢀߟࢿྉ• Best practices for developing and deploying cloud infrastructure with the AWS CDK• CDKʹؔ͢ΔϕετϓϥΫςΟεͷݪయɻ• JAWS CDKࢧ෦ͷΠϕϯτը• ࠃ։ൃऀͷݟڞ༗ͷɻຊͷCDKίϛϡχςΟੈքతʹݟͯ׆ൃʂ• cdk.dev• άϩʔόϧͳCDKίϛϡχςΟSlackɻͪ͜Β׆ൃͰɺ࣭͕ٞඈͼަ͍ͬͯ·͢• Twitter CDK JP Community• ίϛϡχςΟࢀՃऀΛϑΥϩʔ͢Δͱ͍Ζ͍Ζͳҙݟ͕͑·͢ɻ։ൃऀͷϒϩάಛʹࢀߟʹͳΔʂ• The CDK Book• CDKʹؔ͢Δ͕ࣝཏతʹ·ͱ·ͬͨॻ੶ɻCDKϚχΞͳΒങͬͯଛͳ͍ͣ30
2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓Έʹ͍͑ͨ© 2023, Amazon Web Services, Inc. or its affiliates.Twitter: #jawsug_cdkThank you!© 2022, Amazon Web Services, Inc. or its affiliates.Masashi Tomooka[email protected]tmokmss