AWS DevDay Japan 2022 で登壇した際の資料です
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS CDKͰECS on FargateͷCI/CDΛ࣮ݱ͢Δࡍͷཧͱݱ࣮ࠤ౻ ஐथC - 4εϖγϟϦετΫϥεϝιουגࣜձࣾ
View Slide
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ࣗݾհࠤ౻ஐथΫϥεϝιουגࣜձࣾCXࣄۀຊ෦ Delivery෦ ΞʔΩςΫτνʔϜݱࡏɿαʔόʔαΠυ݉ΠϯϑϥશൠͷΞʔΩςΫτJAWS-UG CDKࢧ෦ ӡӦ͖ͳAWSαʔϏεɿAWS LambdaAWS Cloud Development Kit (CDK)@tmk2154@tomoki10
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.• AWSαʔϏεͷ͓͞Β͍• AWS CDK͔Terraform͔• ίϯςφ• ίϯςφΠϝʔδͷબఆ• ϩάཧ༻αΠυΧʔ• ίϯςφΛσϓϩΠ͢Δ·Ͱͷઃܭ• ίϯςφΠϝʔδΛԿͰϏϧυ͢Δ͔• λάͷ͚ํ• ίϯςφϦϙδτϦͷཧ• ίϯςφͷσϓϩΠํ๏ΞδΣϯμ※Ұ෦CDKͱؔ࿈ബ͍͕ݕ౼ࣄ߲ʹͳΓ͍͢༰ΛೖΕ͍ͯ·͢
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS CDKͱ• ͍׳ΕͨϓϩάϥϛϯάݴޠͰAWSϦιʔεΛϓϩϏδϣχϯάͰ͖ΔπʔϧΩοτ݉AWSͷαʔϏε• TypeScript/JavaScript, Python, Java, C#, Go Ͱهड़Մೳɻπʔϧ෦ͷ։ൃTypeScriptϝΠϯπʔϧʹԠͨ͡DSLyaml/jsonͰͳ͘׳ΕͨݴޠͰΠϯϑϥΛίʔυهड़Ͱ͖Δ• ίʔυิߴσϓϩΠ(hotswap/watch)ͳͲͷ༏Εͨ։ൃମݧʹΑΔΠϯϑϥߏங͕ՄೳAWS Cloud Development Kit(AWS CDK)
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS FargateAWS Fargate ͱ※ https://dev.classmethod.jp/articles/cmdevio2019-container/#toc-10• AWS্ͰΠϯελϯεΫϥελʔཧͳ͠ʹίϯςφΛ࣮ߦՄೳͳαʔϏε• Amazon EC2Λ͏߹ͱൺֱͯ͠ϗετʹରͯ͠ҎԼͷख͕ؒແ͘ͳΔ ※• ఆظతͳηΩϡϦςΟϝϯςφϯε• ༨Ϧιʔεͷࣄલ֬อ• Πϯελϯεଆͷอकཧ• Φʔτεέʔϧઃఆ• ӡ༻্ͷίετΛݮΒ͠։ൃʹूத͍͢͠
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECS ͱ• AWSϚωʔδυͳίϯςφΦʔέετϨʔγϣϯαʔϏε ※• ؆୯ͳΦʔτεέʔϧઃఆ• ALB/NLBͱͷ౷߹• ίϯςφΛAWS IAMͷݖݶͰཧ• ίϯςφͷηΩϡϦςΟάϧʔϓཧ• Amazon CloudWatch Metricsͱͷ౷߹• Amazon CloudWatch Logsͱͷ౷߹• εέδϡʔϧ࣮ߦʢAmazon EventBridgeͱͷ౷߹ʣAmazon Elastic Container Service(Amazon ECS)※ࢀߟ https://dev.classmethod.jp/articles/cmdevio2019-container/#toc-8
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS͕ެ։͍ͯ͠ΔAWS CDKͰͷαϯϓϧAmazon ECS/AWS Fargateʹඞཁͳߏ͕AWS CDKͰίʔυԽ͞ΕಡΉ͜ͱͰ࡞Γํ͕͔Δ※CDK PipelinesΛ͍CI/CDΛߏͯ͠σϓϩΠ͢Δํ๏͕͔ΔɻҎԼߏͷࢀߟ֓ཁਤ※ https://github.com/aws-samples/baseline-environment-on-aws/tree/main/usecases/guest-webapp-sample
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECS/AWS FargateͷͳΒ·ͣ͜ͷຊhttps://www.amazon.co.jp/AWSίϯςφઃܭɾߏங-ຊ֨-ೖ-גࣜձࣾଜ૯߹ݚڀॴ/dp/4815607656• Amazon ECSAWS FargateΛબఆ͢Δࡍͷج४ηΩϡϦςΟɺߏஙɺӡ༻ઃܭɺߏஙͷϋϯζΦϯͳͲ͜Ε͔Β࢝ΊΔ࣌ඞཁͳใ͕هࡌ• ωοτ্ͷ֤ॴʹࡏ͍ͯͨ͠ϕετϓϥΫςΟεϊϋ͕΄΅͜ͷ1ʹڽॖ• ຊʹࠓݱͰඞཁͱ͞Ε͍ͯΔ͕ࣝू(ࣗҊ݅લʹಡΜͰཧղ͕ਂ·ͬͨ෦ଟ)• AWS্Ͱίϯςφ࢝ΊΔͱͳͬͨΒͱΓ͋͑ͣങͬͱ͚ͱݴ͑Δ1
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ຊൃදͰ͢͜ͱ/ඪAWS CDK + Amazon ECS/AWS FargateߏCI/CDߏஙͷͨΊͷྑ࣭ͳίϯςϯπطʹ͋Δ͕ͩݱ࣮Ͱ໎͏෦ଟ͍ͷͰ࣮ࡍʹ໎ͬͨ෦Λհ͠ߏஙͷ্ͰͷצॴΛ͑ʹ͍͘ࢹௌରऀ• AWS Cloud Development Kit (CDK) Λͬͨ͜ͱ͕͋Δ• Amazon ECSɺAWS FargateͳͲAWSͷίϯςφؔ࿈ٕज़ͷجຊѲ͍ͯ͠Δ• ίϯςφಛ༗ͷΠϝʔδλάͷཧɺCI/CDͳͲͲ͏Ίྑ͍͔Ήඪ• Amazon ECS on AWS Fargate ͱAWS CDKͰΞϓϦΛσϓϩΠ/ӡ༻͢Δࡍͷߟྀ͕େମ͔Δ• ݱঢ়ͷ՝ʹ͍ͭͯཧղٕͯ͠ज़બఆͰ͖Δ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS CDK ͔ Terraform ͔AWS CDKͷར• ίϯςφͷϏϧυपΓAWS CDKͷίʔυʹؚΊΔ͜ͱͰAWS CDKʹดͯ͡ཧ͍͢͠• ൚༻తͳϓϩάϥϛϯάݴޠͰهड़Ͱ͖ɺಠࣗDSLΛ֮͑Δඞཁ͕ͳ͍• ΑΓએݴతͳهड़͕ՄೳͰϩʔϧͷཧͳͲ͕͍͢͠AWS CDKͷܽ• AWS CDKʹؚΉϦιʔεΛΓͤͳ͍ͷͰɺΠϯϑϥͱΞϓϦͷσϓϩΠΛ͢Δ߹ΠϯϑϥଆͷϦιʔεσϓϩΠ࣌ʹλεΫఆٛΛಉظͤ͞ΔͳͲ͕ඞཁ• ͔ͳΓ͢ΕϦιʔεߋ৽ͱΓ͢͜ͱͰ͖ΔʢBlue/GreenσϓϩΠͰհʣ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS CDK ͔ Terraform ͔Terraformͷར• λεΫఆٛͳͲΛignore_changesͰTerraformͷσϓϩΠϥΠϑαΠΫϧ͔ΒΓͤΔͷͰΞϓϦͷσϓϩΠΛ͍͢͠• ࠷ॳͷߏཁૉ͕ൺֱతগͳ͍ͷͰϓϩάϥϜະܦݧऀ͕ଟ͍߹࢝Ί͍͢Terraformͷܽ• ignore_changesʹઃఆͨ͠λεΫఆٛઃఆͳͲͷॳظઃఆ͕ϑΝΠϧʹΓݱঢ়ͱҧ͏ઃఆ͕Γଓ͚ΔɻTerraform୯ମΛݟ͚ͨͩͰݱࡏͷλεΫఆٛͷઃఆ͕͔Βͳ͍• ecspressoͳͲผͷσϓϩΠπʔϧͱͷซ༻͕΄΅ඞਢʹͳΔ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ίϯςφΠϝʔδͷબఆҰൠతͳLinuxσΟετϦϏϡʔγϣϯͷίϯςφΠϝʔδΛ༻͢Δͱෆཁͳύοέʔδ͕੬ऑੑݕπʔϧʹҾ͔͔ͬΓɺΞοϓσʔτमਖ਼ͷස͕૿͍͑͢Amazon InspectorV2ͷεΩϟϯ݁Ռɿͱ͋ΔΠϝʔδͷlatest൛Λऔಘޙɺ3ϲ݄΄Ͳ์ஔͨ͠ͷ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ίϯςφΠϝʔδͷબఆύοέʔδʹΑΔ੬ऑੑ੬ऑੑରԠͷෛ୲Λ࠷খԽ͢ΔͨΊɺ࠷ݶͷύοέʔδͷΈؚ͕·ΕΔalpine slimɺdistroless ͳͲͷΠϝʔδΛબ͢Δ͜ͱ͕ྑ͍ͱ͞Ε͍ͯΔݱ࣮Ͱͷҙ• ։ൃதʹঢ়ଶΛௐΔπʔϧ͕ೖ͍ͬͯͳ͍ͷ͋ΓσόοάͳͲͷख͔ؒͳΓ૿͑Δ• ΠϝʔδαΠζݮΔ͕ґଘؔͷղܾμϯϩʔυʹΑͬͯϏϧυʹ͕͔͔࣌ؒΔ߹σόοάͷखؒͷରࡦʢӈهϒϩά͔ΒҰ෦ൈਮʣɿ• σόοά༻ͷπʔϧʢpsɺvimͳͲʣͷಋೖ• Ұ࣌తʹϕʔεΠϝʔδΛfatͳͷʹೖΕସ͑ͯͷΓ͚• Docker Execʢdistroless ͳΒshellͷ࣋ͪࠐΈ͔Β࣮ࢪʣhttps://iximiuz.com/en/posts/docker-debug-slim-containers/
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ϩάཧ༻αΠυΧʔϩάग़ྗΛ୯ମͰAmazon CloudWatch Logsʹྲྀ͢ͱεέʔϧͨ͠ࡍʹߴֹʹͳΔՄೳੑ͕͋ΔͷͰFluentbit/FluentdͳͲͷαΠυΧʔΛ͍ɺϩάग़ྗΛΓସ͑Δ։ൃσόοά࣌ԆճආͷͨΊɺຊ൪Τϥʔ௨ͷͨΊAmazon CloudWatchͷซ༻͋ΓFluentBit FluentdAmazon ECSContainerSidecarContainerAmazon CloudWatchAmazon KinesisData FirehoseAmazon Simple StorageService (Amazon S3)Amazon Athena։ൃ/ӡ༻ऀσόοάΤϥʔ֬ೝൃੜ࣌ͷΈௐࠪDevڥ orERRORINFOΤϥʔ௨
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ίϯςφΛσϓϩΠ͢Δ·ͰͷઃܭίϯςφΛCI/CDڥ͔ΒσϓϩΠ͢Δ߹ɺେ·͔ʹҎԼͷաఔʹͳΔʢԼਤ֓ཁྫʣ1. ίϯςφΠϝʔδͷϏϧυ2. Πϝʔδͷλά͚3. ΠϝʔδΛϨδετϦʹϓογϡ4. ϨδετϦ͔ΒΠϝʔδΛϓϧ/࣮ߦCode RepoAmazon ECRAmazon ECS4.PullImage3.Image PushAWS CodePipeline AWS CodeBuild1.Image BuildEventAWS CDKUpdate2.Add Tag
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ίϯςφΛσϓϩΠ͢Δ·ͰͷઃܭίϯςφΛϏϧυͯ͠σϓϩΠ͢Δ·ͰͷաఔΛҎԼͷ߲Ͱݕ౼͢Δ1. ίϯςφΠϝʔδΛԿͰϏϧυ͢Δ͔2. Πϝʔδͷλά͚ͷํ๏3. ίϯςφϨδετϦͷϦϙδτϦཧ• ཧతͳίϯςφϨδετϦͷϦϙδτϦཧ• ݱ࣮Ͱ໘͢Δ՝4. ίϯςφͷσϓϩΠํ๏• σϓϩΠํ๏ͷछྨʢϩʔϦϯάΞοϓσʔτɺBlue/Green σϓϩΠ)• ཧͷσϓϩΠํ๏• ݱ࣮Ͱબͨ͠σϓϩΠํ๏
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ίϯςφΠϝʔδΛԿͰϏϧυ͢Δ͔Amazon ECSͰίϯςφΛσϓϩΠ͢ΔͨΊʹΠϝʔδͷϏϧυ͕ඞཁཧɿAWS LambdaͷNodeJsFunctionʹࣅͨόϯυϧ/σϓϩΠػೳ͕ඪ४ύοέʔδʹೖ͍ͬͯΔݱ࣮ɿඪ४ύοέʔδ͕ඍົʹ͍ͮΒ͍AWS CDKܦ༝ͰσϓϩΠ͢Δ߹ͷύλʔϯͷྫ• aws-ecr-assets/DockerImageAssetΛ͏ํ๏• Stack.synthesizer.addDockerImageAssetΛ͏ํ๏• ֎෦ύοέʔδͷcdk-ecr-deploymentΛ͏ํ๏• ΧελϜϦιʔε͔ΒAWS CodeBuildΛ͏ํ๏ΞϓϦίʔυͱΠϯϑϥίʔυΛΓ͢߹ͳͲผ్CI/CDαʔϏε্ͰDockerίϚϯυΛ࣮ߦͯ͠Ϗϧυ͢Δํ๏ͳͲ͋Δ͕লུ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.aws-ecr-assets/DockerImageAsset Λ͏ํ๏AWS CDKͷඪ४ύοέʔδʹؚ·Ε͍ͯΔDockerImageAssetΛར༻͢Δར• AWS CDKͷඪ४ύοέʔδͰΠϝʔδͷϏϧυ/ϓογϡ͕݁͢Δܽ• ϓογϡઌͷAmazon ECRͷϦϙδτϦΛࢦఆͰ͖ͳ͍ͨΊɺࣗಈੜ͞Ε໊ͨલʹͳΔ• Πϝʔδλά໊ΛࢦఆͰ͖ͳ͍ͨΊɺιʔεΛτϨʔεͮ͠Β͍const ecrAssets = new ecr_assets.DockerImageAsset(this, `${id}-DockerImageAsset`, {// Dockerfileιʔε͕͋ΔσΟϨΫτϦΛࢦఆdirectory: path.join(__dirname, `../assets/${props.envName}/sample-app`),});
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Stack.synthesizer.addDockerImageAssetΛ͏ํ๏AWS CDKͷඪ४ύοέʔδʹؚ·Ε͍ͯΔStack.synthesizer.addDockerImageAssetΛར༻͢Δར• AWS CDKͷඪ४ύοέʔδͰΠϝʔδͷϏϧυ/ϓογϡ͕݁͢Δܽ• ࠓϓογϡઌͷAmazon ECRͷϦϙδτϦΛࢦఆͰ͖ͳ͍ʢิࢀরʣ• Πϝʔδλά໊ΛࢦఆͰ͖ͳ͍ิɿ ੲϓογϡઌͷϦϙδτϦΛࢦఆͰ͖͕ͨɺDockerAssetsͷѻ͍Λ؆ૉԽ͢Δ࣮Ͱɹɹɹ ϦϙδτϦ໊ͷࢦఆDeprecatedͱͳΓAWS CDK v2Ͱ༻ෆՄͱͳͬͨ ※※ https://github.com/aws/aws-cdk/commit/b52b43ddfea0398b3f6e05002bf5b97bc831d1a7this.synthesizer.addDockerImageAsset({// Dockerfileιʔε͕͋ΔσΟϨΫτϦΛࢦఆdirectoryName: path.join(__dirname, `../assets/${props.envName}/sample-app`),});
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.֎෦ύοέʔδͷcdk-ecr-deploymentΛ͏ํ๏ར• ΠϝʔδΛϓογϡ͢ΔઌͷϦϙδτϦΠϝʔδλά໊ΛࢦఆͰ͖Δ• AWS CDK։ൃνʔϜ͕อक͍ͯ͠ΔύοέʔδͰAWS CDKຊମʹऔΓࠐ·ΕΔՄೳੑ͋Δܽ• ࠷ॳͷผͷϦϙδτϦʹΠϝʔδΛϓογϡͨ͠ޙɺίϐʔ͞ΕΔͷͰAWS CDKཧͷϦϙδτϦͱࢦఆͷϦϙδτϦͷ2ՕॴʹΠϝʔδ͕Ͱ͖2ഒͷྉ͕͔͔ۚΔEcrDeployment: https://github.com/cdklabs/cdk-ecr-deploymentconst ecrAssets = new ecr_assets.DockerImageAsset(this, `${id}-DockerImageAsset`, {directory: path.join(__dirname, `../assets/${props.envName}/sample-app`),});new ECRDeployment(this, `${id}-DeployDockerImage`, {src: new DockerImageName(ecrAssets.imageUri),dest: new DockerImageName(`${props.env?.account}.dkr.ecr.${props.env?.region}.amazonaws.com/${ecrRepository.repositoryName}:${tagName}`),})
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ΧελϜϦιʔε͔ΒAWS CodeBuildΛ͏ํ๏ΧελϜϦιʔεͷAWS LambdaΛܦ༝͠AWS CodeBuildΛ࣮ߦͯ͠Ϗϧυ/ϓογϡར• AWS CodeBuildͰϏϧυڥΛৄࡉʹઃఆՄೳ• ΠϝʔδͷෳϦϙδτϦอଘ͕ෆཁ• AWS͕ఏڙ͢Δࢀߟ࣮͕͋Δ※ܽ• 2ճҎ߱ͷσϓϩΠΛ࣮ߦ͢ΔͨΊελοΫͷมߋࠩΛڧ੍తʹ࡞ΔͳͲ͕ඞཁ// CI/CDαʔϏε্͔ΒCDKͷCLI࣮ߦ࣌ʹࠓճ͚Δλά໊ΛελοΫʹ͢const imageTag = props.imageTag;// ڧ੍σϓϩΠύλʔϯ1// AwsCustomResourceͰid໊ʹλά໊(imageTag)ΛՃ͠ຖճLambdaΛߋ৽͢Δconst project = new codebuild.Project(this, `${id}-project`, {source: codebuild.Source.s3({…});new cr.AwsCustomResource(this, `${id}-startBuilds-${imageTag}`, {…onCreate: sdkcallForStartBuild,onUpdate: sdkcallForStartBuild,});// ڧ੍σϓϩΠύλʔϯ2// Lambdaผ్࡞ΓɺΧελϜϦιʔεͷpropertiesʹtagNameΛ͚Δconst provider = new cr.Provider(this, "Provider", {onEventHandler: containerStartBuildLambda, // ࡞ࡁLambdaΛࢦఆ});new cdk.CustomResource(this, "Custom::EcsDeploy", {serviceToken: provider.serviceToken,properties: { imageTag },});※ https://github.com/aws-samples/baseline-environment-on-aws/blob/main/usecases/guest-webapp-sample/lib/blea-build-container-stack.ts
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Πϝʔδͷλά͚ͷํ๏ΠϝʔδλάΠϛϡʔλϒϧ(มߋෆՄ)ͳλάΛ͚Δ͜ͱ͕ਪ͞Ε͍ͯΔ• Amazon ECS ͷϕετϓϥΫςΟεΨΠυ-λεΫͱίϯςφͷηΩϡϦςΟͷ༰Λཁ• Amazon ECR ͰෆมλάΛ༻͢Δ※1• λάͷ্ॻ͖Λࢭ͢Δ͜ͱͰ߈ܸऀ͕ಉ͡λάͰΠϝʔδͷ৵͞ΕͨόʔδϣϯΛpush͢Δ͜ͱΛ͙• NIST SP800-190 ΞϓϦέʔγϣϯίϯςφηΩϡϦςΟΨΠυ͔ΒҾ༻※2• ݹ͘ͳͬͨΠϝʔδΛ༻͢ΔϦεΫɺ2 ͭͷجຊతͳํ๏Ͱܰݮ͢Δ͜ͱ͕Ͱ͖Δ(தུ)Ұͭͷํ๏ɺ৫͕ɺ ͏༻͢Δ͜ͱ͕ͳ͍ɺ੬ऑੑ͕͋ͬͯ҆શͰͳ͍ΠϝʔδͷొΛআ(தུ)2 ͭͷํ๏ɺӡ༻ ϓϥΫςΟεʹ͓͍ͯɺ༻͢ΔΠϝʔδͷݸผͷόʔδϣϯΛಛఆ͢ΔΠϛϡʔλϒϧͳ໊લΛ༻ͯ͠ΠϝʔδʹΞΫηε͢Δ͜ͱ※1 https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/bestpracticesguide/security-tasks-containers.html※2 https://www.ipa.go.jp/files/000085279.pdf
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Πϛϡʔλϒϧͳλά͚Λߦ͏ํ๏Πϛϡʔλϒϧͳλά໊ͷΑ͋͘Δ͚ํ• ΠϝʔδλάʹGitHubͳͲͷίϛοτϋογϡΛ༻͠ιʔεͱΠϝʔδΛ࿈ಈ• ηϚϯςΟοΫόʔδϣχϯάΛ༻֎෦ͷ߹ɺߋ৽Λ͔Γ͘͢͢ΔͨΊύοέʔδͷΑ͏ʹόʔδϣϯ൪߸Λ͚ΔGitHubͷRelease TagΛͬͯΔ߹ɺҰகͤ͞ΔͱτϨʔε͍͢͠CI/CDͷதͰGitHubͷίϛοτϋογϡΛλάʹ༩͢Δํ๏ͷྫ• AWS CodeBuild ͷ߹ɿCODEBUILD_RESOLVED_SOURCE_VERSIONఆΛऔಘ• GitHub Actionsͷ߹ɿgithub.shaͰίϛοτϋογϡΛऔಘ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.AWS CDKجຊAWS CloudFormationґଘͳͷͰϦιʔεͷΓ͕͠Ͱ͖ͳ͍ΞϓϦͱΠϯϑϥͷCI/CDΛผͰ࡞Δ߹ɺιʔελεΫఆٛͷಉظ͕ඞཁɻҎԼࣦഊྫΠϛϡʔλϒϧλάͰى͖ΔAWS CodePipelineAWS CodePipelineApp༻Infra༻tag: 123456σϓϩΠ1ճAWS CodePipelineAWS CodePipelineApp༻Infra༻tag: asdfghσϓϩΠ2ճҎ߱AWS CodePipelineAWS CodePipelineApp༻Infra༻tag: 789012InfraଆͰλεΫఆٛߋ৽࣌ݹ͍assets͕σϓϩΠʁTask DefinitionTask Definitionread/updateTask Definitionupdatecreate
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ҎԼͷΑ͏ʹλάΛAWS Systems ManagerͷύϥϝʔλετΞʹొͯ͠λάΛಉظͤ͞Δ͜ͱͰઌฦΓΛ͙ɻҎԼInfraଆͰλεΫఆٛߋ৽࣌Ͱ࠷৽ͷλάΛࢀরͯ͠ಉظ͢ΔྫΠϛϡʔλϒϧλάͷରࡦྫAWS CodePipelineAWS CodePipelineσϓϩΠ1ճAWS CodePipelineAWS CodePipelineσϓϩΠ2ճҎ߱AWS CodePipelineAWS CodePipelineApp༻Infra༻App༻Infra༻App༻Infra༻InfraଆͰλεΫఆٛߋ৽࣌tag: 123456Task DefinitionAWS Systems Managerwrite tagcreatetag: asdfghTask Definitionread/updateAWS Systems Managerwrite tagAWS Systems Managertag: asdfghTask Definitionread tagupdate↑ Image Push࣮ߦ͠ͳ͍Α͏ʹઃܭ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ཧతͳίϯςφϨδετϦͷϦϙδτϦཧ։ൃ։ൃͰಠཱ͠ɺݕূ/ຊ൪ڥ༻ͷΠϝʔδڞ༗͞ΕΔϏϧυޙʹݕূͨ͠ΠϝʔδͰຊ൪ڥʹσϓϩΠͰ͖ɺϏϧυ࣌ͷࣄނΛݮΒͤΔAmazon ECR։ൃڥAmazon ECSAmazon ECSAmazon ECRݕূڥຊ൪ڥAmazon ECSAmazon ECRReplicationCode RepoPullImage PushImagePullImageImagePullEventImage PushAWS CodePipeline AWS CodeBuildCI/CDڥ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ݱ࣮Ͱߟ͑ΔϦϙδτϦ౷Ұ࣌ͷ՝ݕূ/ຊ൪Ͱڥ͝ͱͷࠩΛٵऩ͢ΔͨΊɺ֎෦ʹઃఆΛΓग़͢ඞཁ͕͋ΔɻAmazon ECRݕূڥCode RepoҎԼͷڥࠩҟΛͲ͏͚Δͷ͔• ڥݻ༗ใ(SaaSଓઌͳͲʣ• ೝূใ(DBͳͲ)• ػೳ(Feature Flag)ڥࠩΛਤͷΑ͏ʹڥଆͷαʔϏεʹԡ͠ࠐΊՄೳ※ϑϨʔϜϫʔΫ͕Ϗϧυ࣌ʹఆΛຒΊࠐΉͷͰ͍͠߹…AWS Secrets ManagerAWS Systems ManagerParameter StoreAWS AppConfigImageڥݻ༗ใࢀরೝূใࢀরػೳࠩҟࢀরPush
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ݱ࣮ͰબΜͩϦϙδτϦཧΫϥυ׳Ε͍ͯ͠Δϝϯόʔ͕গͳ͔ͬͨͨΊɺ࠷ݶ Secrets ManagerͳͲͰηΩϡΞͳใ͠ΠϝʔδࣗମͷϏϧυݸผʹ࣮ࢪɻpackage-lock.jsonͳͲͰؔ࿈͢ΔύοέʔδݻఆԽAmazon ECR։ൃڥAmazon ECSAmazon ECSAmazon ECRݕূڥຊ൪ڥAmazon ECSAmazon ECRCode RepoPullImage PushImagePullImageImagePullEventCodePipeline CodeBuildImage PushCodePipeline CodeBuildEventImage PushCodePipeline CodeBuildEventSecrets ManagerࢀরSecrets ManagerࢀরSecrets Managerࢀর
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ίϯςφͷσϓϩΠํ๏Amazon ECS͕ఏڙ͢ΔσϓϩΠํ๏ʹେ·͔ʹ2छྨ͋Δ• ϩʔϦϯάΞοϓσʔτ• ݹ͍ίϯςφΛՔಇͤͭͭ͞৽͍͠ίϯςφΛσϓϩΠ͢Δɻঃʑʹ৽͍͠ίϯςφʹτϥϑΟοΫΛྲྀ͠ɺݹ͍ίϯςφΛLB͔ΒΓͯ͠ఀࢭ͠ೖΕସ͑Δ• Blue/GreenσϓϩΠ• Blueڥʢݹ͍ʣͱGreenڥʢ৽͍͠ʣΛҰఆ࣌ؒฒߦͰՔಇͯ͠ೖΕସ͑ΔΤϥʔൃੜ࣌ʹࣗಈ/खಈͰଈ࠲ʹΓͤΔɻAWS CDK(AWS CloudFormation)ΛͬͨAmazon ECSͷBlue/Green σϓϩΠʹҎԼͷ2छྨ͕͋Δ• CloudFormationHookΛ͏ํ๏ ɿAWS CloudFormationͷಈ࡞ʹ࿈ಈ• CodeDeploy୯ମΛ͏ํ๏ɿAWS CloudFormationͱͷ࿈ಈΛҰ෦Δ※ https://github.com/aws-samples/baseline-environment-on-aws/blob/main/usecases/guest-webapp-sample/lib/blea-build-container-stack.ts
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ϩʔϦϯάΞοϓσʔτఀࢭ࣌ؒͳ͠Ͱݹ͍ίϯςφΛঃʑʹ৽͍͠ίϯςφʹೖΕସ͍͑ͯ͘ҎԼ minHealthyPercent:50% maxHealthyPercent:200% DesiredCount:2 ͷ߹※ҙɿCPU/ϝϞϦ༻ͷߴ͍λεΫͷ߹ɺminHealthyPercent:100%ͰσϓϩΠ͢Δ͜ͱOrd TaskNew TaskApplication LoadBalancerσϓϩΠલApplication LoadBalancerσϓϩΠதApplication LoadBalancerσϓϩΠதStoppedTask࣌ؒܦա࣌ؒܦա
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECSͷBlue/GreenσϓϩΠBlueڥʢݹ͍ʣͱGreenڥʢ৽͍͠ʣΛҰఆ࣌ؒฒߦͰՔಇ͠LBͰτϥϑΟοΫΛΓସ͑ΔΤϥʔൃੜ࣌ʹࣗಈखಈͰଈ࠲ʹΓ͢͜ͱ͕Ͱ͖ΔOrd TaskNew TaskApplication LoadBalancerσϓϩΠલApplication LoadBalancerσϓϩΠத(ଈΓ͠Մೳ)Application LoadBalancerσϓϩΠྃ࣌ؒܦա࣌ؒܦաTraffic Traffic TrafficStoppedTask
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.૾ͨ͠ཧͷσϓϩΠํ๏ίϯςφΛBlue/GreenσϓϩΠͰোൃੜ࣌ʹଈ࠲ʹΓͤΔɻσϓϩΠAWS CDKͰ݁͠AWS CDKͷίʔυՔಇதͷλεΫ/ίϯςφͷঢ়ଶͱҰக͠ɺίʔυ͚ͩݟΕઃఆ͕͔ΔApplication LoadBalancerApplication LoadBalancerApplication LoadBalancer࣌ؒܦա࣌ؒܦաTraffic Traffic TrafficAWS CDKOrd TaskNew TaskStoppedTask
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Blue/GreenσϓϩΠ CloudFormationHookΛ͏ํ๏AWS CDKͰAmazon ECSͷBlue/GreenσϓϩΠΛߦ͏ࡍɺҎલ(2022/09ࠒ·Ͱ)ਪ͞Ε͍ͯͨํ๏• AWS CloudFormationͷσϓϩΠεςʔλεʹ࿈ಈͯ͠ɺBlue/GreenσϓϩΠΛ࣮ߦ• AWS CloudFormationσϓϩΠதͷεςʔλεͰԿΒ͔ͷΤϥʔ͕ൃੜͨ͠߹AWSCloudFormationͷελοΫ͝ͱϩʔϧόοΫͯ͠ॲཧΛ͢͜ͱ͕Ͱ͖ΔAWS CDKͷαϯϓϧ࣮ެ։͞Ε͍ͯΔ※※ https://github.com/aws-samples/aws-reinvent-trivia-game/blob/master/trivia-backend/infra/cdk/ecs-service-blue-green.ts
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Blue/GreenσϓϩΠ CloudFormationHookΛ͏ํ๏CloudFormationHookΛ͏߹ͷߟྀࣄ߲ʢެࣜυΩϡϝϯτΑΓҾ༻˞ʣ• ʮECS ϒϧʔ/άϦʔϯσϓϩΠΛτϦΨʔ͢ΔϦιʔεͷߋ৽ʯͰઆ໌͞Ε͍ͯΔΑ͏ʹɺಛఆͷϦιʔεʹର͢Δߋ৽ͷΈ͕άϦʔϯσϓϩΠΛ։࢝͠·͢ɻ• ʮECS ϒϧʔ/άϦʔϯσϓϩΠΛτϦΨʔ͢ΔϦιʔεͷߋ৽ʯͰઆ໌͞Ε͍ͯΔΑ͏ʹɺάϦʔϯσϓϩΠΛ։࢝͢ΔϦιʔεͷߋ৽ͱଞͷϦιʔεͷߋ৽Λಉ͡ελοΫߋ৽ʹؚΊΔ͜ͱͰ͖·ͤΜɻ• σϓϩΠλʔήοτͱͯ͠ࢦఆͰ͖Δ ECS αʔϏεɺ1 ͚ͭͩͰ͢ɻ• CloudFormation ʹΑͬͯಡԽ͞ΕͨΛ࣋ͭύϥϝʔλɺάϦʔϯσϓϩΠ࣌ʹ CodeDeploy αʔϏεʹΑͬͯߋ৽Ͱ͖ͣΤϥʔελοΫͷߋ৽ʹࣦഊ͠·͢ɻ۩ମతʹ࣍ͷͱ͓ΓͰ͢ɻ• NoEcho ଐੑͰఆٛ͞Εͨύϥϝʔλɻ• ಈతͳࢀরΛ༻ͯ͠֎෦αʔϏε͔ΒΛऔಘ͢Δύϥϝʔλɻৄࡉʹ͍ͭͯɺʮಈతͳࢀরΛ༻ͯ͠ςϯϓϨʔτΛࢦఆ͢ΔʯΛࢀর͍ͯͩ͘͠͞ɻ• ·ͩਐߦதͷάϦʔϯσϓϩΠΛΩϟϯηϧ͢ΔʹɺCodeDeploy ·ͨ ECS Ͱͳ͘ɺCloudFormation ͰελοΫͷߋ৽ΛΩϟϯηϧ͠·͢ɻৄࡉʹ͍ͭͯɺʮελοΫߋ৽ͷΩϟϯηϧʯΛࢀর͍ͯͩ͘͠͞ɻ(ߋ৽͕ྃͨ͠ޙʹΩϟϯηϧ͢Δ͜ͱͰ͖·ͤΜɻͨͩ͠ɺҎલͷઃఆΛ༻ͯ͠ελοΫΛ࠶ߋ৽͢Δ͜ͱͰ͖·͢ɻ• ϒϧʔ/άϦʔϯ ECS σϓϩΠΛఆٛ͢ΔςϯϓϨʔτͰɺग़ྗͷએݴଞͷελοΫ͔ΒͷͷΠϯϙʔτݱࡏαϙʔτ͞Ε͍ͯ·ͤΜɻ• ϒϧʔ/άϦʔϯ ECS σϓϩΠΛఆٛ͢ΔςϯϓϨʔτͰɺطଘͷϦιʔεͷΠϯϙʔτݱࡏαϙʔτ͞Ε͍ͯ·ͤΜɻ• ωετ͞ΕͨελοΫϦιʔεΛؚΉςϯϓϨʔτͰɺAWS::CodeDeploy::BlueGreen ϑοΫΛ༻Ͱ͖·ͤΜɻ• ωετ͞ΕͨελοΫͰ AWS::CodeDeploy::BlueGreen ϑοΫΛ༻Ͱ͖·ͤΜɻ※ https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/blue-green.html
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Blue/GreenσϓϩΠ CloudFormationHookΛ͏ํ๏࣮ࡍʹಈ࡞֬ೝͨ࣌͠ͷಈ͖ɹ˞ݸਓͷݕূͷͨΊؾʹͳΔ߹࣮ࡍʹಈ࡞ݕূ͍ͯͩ͘͠͞• ผελοΫఆٛͷVPCͳͲϦιʔεΛpropsArnͰݺͼग़ͯ͠༻ˠσϓϩΠࣦഊʢಈతύϥϝʔλ༻Ͱ͖ͳ͍ʣ• CfnParameter ΛͬͯVPCͳͲΛݺͿʢAWS CDKతʹඇਪʣˠσϓϩΠޭ• αʔϏεϩʔϧͷϩʔϧΛArnࢦఆͰݺͼग़ͯ͠HooksͰ༻ˠσϓϩΠࣦഊʢಈతύϥϝʔλ༻Ͱ͖ͳ͍ʣ• αʔϏεϩʔϧΛϩʔϧ໊ࢦఆͰݺͼग़ͯ͠HooksͰ༻ˠσϓϩΠޭ• disiredCount୯ମΛมߋˠσϓϩΠࣦഊ• CfnCodeDeployBlueGreenHookͷҰ෦ͷύϥϝʔλΛมߋˠσϓϩΠޭ͕ͩno changeɻมߋʹHookͷ࠶࡞͕ඞཁ• TransformͱHooksΛίϝϯτΞτͯ͠σϓϩΠ͠ɺ࠶ύϥϝʔλมߋޙσϓϩΠˠσϓϩΠޭ• TransformͱHooksΛίϝϯτΞτͯ͠σϓϩΠޙɺdisiredCountΛมߋˠσϓϩΠࣦഊαʔϏε/λεΫʹର͢Δૢ࡞ʹɺHookTransformͷίϝϯτΞτ͕ඞཁʹͳΔͷͰखಈσϓϩΠ͕΄΅ඞਢαʔϏε/λεΫपΓ࠶ઃఆʹελοΫͷ࠶࡞͕ඞཁʹͳΔՄೳੑ͕͋ΔͨΊɺेೋͳݕূΛߦͬͨޙ༻͢Δ͜ͱ͕͓͢͢Ί※ https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/blue-green.html
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Blue/GreenσϓϩΠ CodeDeploy୯ମΛ͏ํ๏AWS CDKͷެࣜυΩϡϝϯτͰΘΕͳ͍ͱهࡌ͞Ε͍ͯΔ※1ͷͰ৮ͬͯͳ͔ͬͨ࠷ۙAWS CloudFormation(Cfn)पΓͰΞοϓσʔτ͕͋Γࣄ͕มΘ্͖ͬͯͨهͷهࡌʹରͯ͠ఆ͞ΕΔཧ༝ʢएׯԱଌ͋Γʣ• ੲ(গͳ͘ͱ2021/3࣌·Ͱ)CfnͰAWS::CodeDeploy::DeploymentGroupͷBlue/GreenσϓϩΠʹؔ͢Δύϥϝʔλ͕ઃఆͰ͖ͳ͔ͬͨ※2ͷͰ্هͷهࡌʹͳͬͨʁ• ݱࡏCfnͰ্هͷύϥϝʔλ͕༻Մೳʹͳͬͨ※3ͷͰࠓهࡌ͕͋ͬͯͳ͍ʁAWS CDKଆͷPRͰ࠷ۙL2 ConstructΛ࣮ऀ͕͍ΔͷͰࠓޙʹظ※4ͱॻ͍ͨΒϚʔδ͞Εͨ※1 https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codedeploy.CfnDeploymentGroup.htmlAmazon ECS blue/green deployments through CodeDeploy do not usethe AWS::CodeDeploy::DeploymentGroup resource. To perform Amazon ECS blue/green deployments, usethe AWS::CodeDeploy::BlueGreen hook. See Perform Amazon ECS blue/green deployments throughCodeDeploy using AWS CloudFormation for more information.※2 https://dev.classmethod.jp/articles/cloudformation-with-custom-resource-for-fargate-blue-green-deployment/※3 https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues/483※4 https://github.com/aws/aws-cdk/pull/22295
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Blue/GreenσϓϩΠ CodeDeploy୯ମΛ͏ํ๏طʹL2ͷ࣮ऀʹΑΔαϯϓϧ࣮͕ެ։͞Ε͍ͯΔ※ҎԼαϯϓϧ࣮ͷߏͷ֓ཁਤAWS CDKͷཧ͔ΒAWS CodeDeployͱAmazon ECSͷαʔϏε/λεΫఆٛΛΓ͢Α͏ʹ࡞ΔॳճσϓϩΠҎ߱AWS CodeDeployͷAPIAPIΛϥοϓ͍ͯ͠ΔecspressoͳͲ͔ΒσϓϩΠ͢Δ※ https://github.com/aws-samples/aws-reinvent-trivia-game/blob/master/trivia-backend/infra/codedeploy-blue-green/deployment-setup.tsAWS CloudFormation(Cfn)Stack StackALBAmazon VPC Amazon ECSࢀরFn.importValueͳͲΛ͍CDK্ͷࢀরΛ͞ͳ͍AWS CDK։ൃ/ӡ༻͕ଓ͘͝ͱʹAWS CDK্ͷߏͱ࣮ڥͷߏʹ͕ࠩग़ΔͷͰҙσϓϩΠσϓϩΠAWS CodeDeploy
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECSͷΈσϓϩΠ͢Δํ๏ecspresso※1ͳͲAmazon ECSͷσϓϩΠʹؔ࿈͢Δ࠷খݶͷϦιʔεͷΈΛཧͰ͖ΔπʔϧΛ͏ALB/NLBIAM RoleͳͲͷίʔυཧผ్ߦ͍ɺAmazon ECSͷσϓϩΠͷΈߦ͏ࡉ͔͘σϓϩΠํ๏Λࢦఆ͍ͨ͠߹ΠϯϑϥͱΞϓϦͷσϓϩΠΛ͍ͨ͠߹ʹ༗ޮҎԼఆ͞ΕΔӡ༻ͷܗʢӡ༻࣌ʹࢀরͰ͕ൃੜ͠ͳ͍͔ཁݕূʣ※1 https://github.com/kayac/ecspressoecspressoͰσϓϩΠΛ࣮ࢪσϓϩΠࡁͷαʔϏε͕ࢀরͷΈߦ͏AWS CloudFormation(Cfn)Stack StackAWS CodeDeployALBAmazon VPC Amazon ECSAWS CDKσϓϩΠσϓϩΠ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECSͱAWS CDKͷBlue/GreenσϓϩΠʹ͍ͭͯAmazon ECSͱAWS CDKͰBlue/GreenσϓϩΠΛ͏߹ͷྺ࢙ΛΓ͍ͨํҎԼͷissueͷίϝϯτཝΛνΣοΫɻCloudFormationHookͷ߹Λ͏߹Կ͕ͩͬͨͷ͔CodeDeploy୯ମ͍ͭ͑ΔΑ͏ʹͳͬͨͷ͔ͳͲͷܦҢ͕͔Γ·͢※ https://github.com/aws/aws-cdk/issues/15593ڧͷ݄Λܦͯ࠷ۙ(2022/10/28)ͬͱΫϩʔζຊAWS CDKͰܧଓཧͰ͖Δߏ͕ཉ͍͠…
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.࣌બͨ͠σϓϩΠํ๏AWS CDKܦ༝ͰͷϩʔϦϯάΞοϓσʔτΛબɻҎԼબఆཧ༝• Blue/GreenσϓϩΠ͕࣌ෆ҆ఆ or ΧελϚΠζ͕ଟ͘ͳΔ• CloudFormationHookͷಈ࡞͕ෆ໌֬ͰAWS CDK/AWS CloudFormation/Hookͷཧղ͕૬ඞཁɻμϯλΠϜ͕ͳ͚ΕมߋෆՄͳ༰͋ΓҾ͖ܧ͗ޙͷϦεΫ͕େ͖͍• ΧελϜϦιʔεͰ࣮͢Δํ๏͋Δ͕ಠ࣮͕ࣗ૿͑Δͱཧղ͕ࠔʹͳΔ• ϩʔϦϯάΞοϓσʔτͷརΛվΊͯ֬ೝ• σϓϩΠ࣌ʹμϯλΠϜൃੜͤͣɺαʔΩοτϒϨʔΧʔͰ࠷ݶͷΓ͠Մೳ• AWS CDKͷίʔυΛݟΔ͚ͩͰAmazon ECSͷαʔϏε/λεΫઃఆΛ֬ೝͰ͖Δ• Blue/GreenσϓϩΠͱͷେ͖ͳҧ͍ɺ৽چλεΫͷࠞࡏΓ࣌͠ͷλΠϜϥά͕ͩڐ༰Մೳͱஅͯ͠બ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.ϩʔϦϯάΞοϓσʔτECSͷαʔϏε෦ͷ࣮ͰઃఆՄೳʢϩʔϦϯάΞοϓσʔτ͕σϑΥϧτͳͷͰ໌ࣔෆཁʣconst fargateService = new ecs.FargateService(this, `${id}-FargateService`, {cluster,vpcSubnets: props.myVpc.selectSubnets({ subnetGroupName: "Protected" }),securityGroups: [securityGroupForFargate],taskDefinition: serviceTaskDefinition,desiredCount: 1,// ϩʔϦϯάΞοϓσʔτ࣌ͷڍಈʹӨڹmaxHealthyPercent: 200,minHealthyPercent: 50,// ECS Exec͕ඞཁͳ࣌ͷΈ༗ޮԽenableExecuteCommand: true,// ECS ServiceͰࢦఆՄೳ(σϑΥϧτ͕ϩʔϦϯάΞοϓσʔτͳͷͰࢦఆͳ͠ͰՄೳ)deploymentController: { type: ecs.DeploymentControllerType.ECS },// αʔΩοτϒϨʔΧʔΛ༗ޮԽ͢Δͱɺίϯςφىಈࣦഊ࣌ʹϩʔϧόοΫͰ͖ΔcircuitBreaker: { rollback: true },});
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECSͷσϓϩΠΛߴԽ͍ͨ͠߹ͷࢀߟhttps://toris.io/2021/04/speeding-up-amazon-ecs-container-deployments/LBͷϔϧενΣοΫɺίωΫγϣϯυϨΠϯɺ SIGTERMͷͪ࣌ؒௐͳͲݕ౼ࣄ߲͕هࡌϩʔϦϯάΞοϓσʔτͷಈ͖σϓϩΠΛվળ͢ΔࡍͷߟྀͳͲ͕ࢀߟʹͳΔ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Amazon ECSͷσϓϩΠΛߴԽ͍ͨ͠߹(։ൃ࣌ͷΈ)https://zenn.dev/intercept6/articles/ed2dfded5aae03AWS CDKͰHotswap deployments͕͋ΔͷͰɺAPIܦ༝ͰߴʹλεΫͷߋ৽͕Մೳ※ ҙɿhotswap deploymentsλεΫ͕Ұ࣌తʹ0ʹͳΔͷͰར༻։ൃ͚࣌ͩʹཹΊΔจதͷtimeίϚϯυʹΑΔܭଌྫ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.·ͱΊ• AWS CDK + Amazon ECS on AWS Fargateͷߏͷྑ࣭ͳίϯςϯπ͋Δ͕ݱঢ়Ͱߟྀ݁ߏ͋Δ• ίϯςφΛσϓϩΠ͢Δ·Ͱͷઃܭ• ίϯςφΠϝʔδΛԿͰϏϧυ͢Δ͔• AWS CDKܦ༝ͳΒࠓcdk-ecr-deployment͔ΧελϜϦιʔε+CodeBuild͕༗ྗ• Πϝʔδͷλά͚ͷํ๏• Πϛϡʔλϒϧͳλά͚ͷਪͱλάͷಉظʹ͍ͭͯղઆ• ίϯςφϦϙδτϦͷཧ• γϯάϧϦϙδτϦͰཧ͍͕ͨ͠ݱ࣮͍͠߹…• ͍͠߹ผϏϧυͰ࠷ݶύοέʔδݻఆηΩϡΞͳใ֎෦͔Βऔಘ• ίϯςφͷσϓϩΠํ๏• ҆ఆϩʔϦϯάΞοϓσʔτɺBlue/GreenσϓϩΠཁݕূ
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Thank you!© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.Tomoki Sato[email protected]@tmk2154