%global _empty_manifest_terminate_build 0 Name: python-cloudcomponents.cdk-blue-green-container-deployment Version: 2.1.0 Release: 1 Summary: Blue green container deployment with CodeDeploy License: MIT URL: https://github.com/cloudcomponents/cdk-constructs Source0: https://mirrors.nju.edu.cn/pypi/web/packages/84/9e/03a1188f2d07a5e4c073efe812b75054b0eecd6e983a3f538fc7b6adbce1/cloudcomponents.cdk-blue-green-container-deployment-2.1.0.tar.gz BuildArch: noarch Requires: python3-aws-cdk-lib Requires: python3-constructs Requires: python3-jsii Requires: python3-publication %description [![cloudcomponents Logo](https://raw.githubusercontent.com/cloudcomponents/cdk-constructs/master/logo.png)](https://github.com/cloudcomponents/cdk-constructs) # @cloudcomponents/cdk-blue-green-container-deployment [![Build Status](https://github.com/cloudcomponents/cdk-constructs/workflows/Build/badge.svg)](https://github.com/cloudcomponents/cdk-constructs/actions?query=workflow=Build) [![cdkdx](https://img.shields.io/badge/buildtool-cdkdx-blue.svg)](https://github.com/hupe1980/cdkdx) [![typescript](https://img.shields.io/badge/jsii-typescript-blueviolet.svg)](https://www.npmjs.com/package/@cloudcomponents/cdk-blue-green-container-deployment) [![python](https://img.shields.io/badge/jsii-python-blueviolet.svg)](https://pypi.org/project/cloudcomponents.cdk-blue-green-container-deployment/) [![Mentioned in Awesome CDK](https://awesome.re/mentioned-badge.svg)](https://github.com/kolomied/awesome-cdk) > Blue green container deployment with CodeDeploy ## Install TypeScript/JavaScript: ```bash npm i @cloudcomponents/cdk-blue-green-container-deployment ``` Python: ```bash pip install cloudcomponents.cdk-blue-green-container-deployment ``` ## How to use ```python import { EcsService, DummyTaskDefinition, EcsDeploymentGroup, PushImageProject } from '@cloudcomponents/cdk-blue-green-container-deployment'; import { ImageRepository } from '@cloudcomponents/cdk-container-registry'; import { Duration, Stack, StackProps } from 'aws-cdk-lib'; import { Repository } from 'aws-cdk-lib/aws-codecommit'; import { Pipeline, Artifact } from 'aws-cdk-lib/aws-codepipeline'; import { CodeBuildAction, CodeCommitSourceAction, CodeDeployEcsDeployAction } from 'aws-cdk-lib/aws-codepipeline-actions'; import { Vpc, Port } from 'aws-cdk-lib/aws-ec2'; import { Cluster } from 'aws-cdk-lib/aws-ecs'; import { ApplicationLoadBalancer, ApplicationTargetGroup, TargetType } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; import { Construct } from 'constructs'; export class BlueGreenContainerDeploymentStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const vpc = new Vpc(this, 'Vpc', { maxAzs: 2, }); const cluster = new Cluster(this, 'Cluster', { vpc, clusterName: 'blue-green-cluster', }); const loadBalancer = new ApplicationLoadBalancer(this, 'LoadBalancer', { vpc, internetFacing: true, }); const prodListener = loadBalancer.addListener('ProfListener', { port: 80, }); const testListener = loadBalancer.addListener('TestListener', { port: 8080, }); const prodTargetGroup = new ApplicationTargetGroup(this, 'ProdTargetGroup', { port: 80, targetType: TargetType.IP, vpc, }); prodListener.addTargetGroups('AddProdTg', { targetGroups: [prodTargetGroup], }); const testTargetGroup = new ApplicationTargetGroup(this, 'TestTargetGroup', { port: 8080, targetType: TargetType.IP, vpc, }); testListener.addTargetGroups('AddTestTg', { targetGroups: [testTargetGroup], }); // Will be replaced by CodeDeploy in CodePipeline const taskDefinition = new DummyTaskDefinition(this, 'DummyTaskDefinition', { image: 'nginx', family: 'blue-green', }); const ecsService = new EcsService(this, 'EcsService', { cluster, serviceName: 'blue-green-service', desiredCount: 2, taskDefinition, prodTargetGroup, testTargetGroup, }); ecsService.connections.allowFrom(loadBalancer, Port.tcp(80)); ecsService.connections.allowFrom(loadBalancer, Port.tcp(8080)); const deploymentGroup = new EcsDeploymentGroup(this, 'DeploymentGroup', { applicationName: 'blue-green-application', deploymentGroupName: 'blue-green-deployment-group', ecsServices: [ecsService], targetGroups: [prodTargetGroup, testTargetGroup], prodTrafficListener: prodListener, testTrafficListener: testListener, terminationWaitTime: Duration.minutes(100), }); // @see files: ./blue-green-repository for example content const repository = new Repository(this, 'CodeRepository', { repositoryName: 'blue-green-repository', }); const imageRepository = new ImageRepository(this, 'ImageRepository', { forceDelete: true, //Only for tests }); const sourceArtifact = new Artifact(); const sourceAction = new CodeCommitSourceAction({ actionName: 'CodeCommit', repository, output: sourceArtifact, }); const imageArtifact = new Artifact('ImageArtifact'); const manifestArtifact = new Artifact('ManifestArtifact'); const pushImageProject = new PushImageProject(this, 'PushImageProject', { imageRepository, taskDefinition, }); const buildAction = new CodeBuildAction({ actionName: 'PushImage', project: pushImageProject, input: sourceArtifact, outputs: [imageArtifact, manifestArtifact], }); const deployAction = new CodeDeployEcsDeployAction({ actionName: 'CodeDeploy', taskDefinitionTemplateInput: manifestArtifact, appSpecTemplateInput: manifestArtifact, containerImageInputs: [ { input: imageArtifact, taskDefinitionPlaceholder: 'IMAGE1_NAME', }, ], deploymentGroup, }); new Pipeline(this, 'Pipeline', { pipelineName: 'blue-green-pipeline', stages: [ { stageName: 'Source', actions: [sourceAction], }, { stageName: 'Build', actions: [buildAction], }, { stageName: 'Deploy', actions: [deployAction], }, ], }); } } ``` ## API Reference See [API.md](https://github.com/cloudcomponents/cdk-constructs/tree/master/packages/cdk-blue-green-container-deployment/API.md). ## Example See more complete [examples](https://github.com/cloudcomponents/cdk-constructs/tree/master/examples). ## License [MIT](https://github.com/cloudcomponents/cdk-constructs/tree/master/packages/cdk-blue-green-container-deployment//LICENSE) %package -n python3-cloudcomponents.cdk-blue-green-container-deployment Summary: Blue green container deployment with CodeDeploy Provides: python-cloudcomponents.cdk-blue-green-container-deployment BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-cloudcomponents.cdk-blue-green-container-deployment [![cloudcomponents Logo](https://raw.githubusercontent.com/cloudcomponents/cdk-constructs/master/logo.png)](https://github.com/cloudcomponents/cdk-constructs) # @cloudcomponents/cdk-blue-green-container-deployment [![Build Status](https://github.com/cloudcomponents/cdk-constructs/workflows/Build/badge.svg)](https://github.com/cloudcomponents/cdk-constructs/actions?query=workflow=Build) [![cdkdx](https://img.shields.io/badge/buildtool-cdkdx-blue.svg)](https://github.com/hupe1980/cdkdx) [![typescript](https://img.shields.io/badge/jsii-typescript-blueviolet.svg)](https://www.npmjs.com/package/@cloudcomponents/cdk-blue-green-container-deployment) [![python](https://img.shields.io/badge/jsii-python-blueviolet.svg)](https://pypi.org/project/cloudcomponents.cdk-blue-green-container-deployment/) [![Mentioned in Awesome CDK](https://awesome.re/mentioned-badge.svg)](https://github.com/kolomied/awesome-cdk) > Blue green container deployment with CodeDeploy ## Install TypeScript/JavaScript: ```bash npm i @cloudcomponents/cdk-blue-green-container-deployment ``` Python: ```bash pip install cloudcomponents.cdk-blue-green-container-deployment ``` ## How to use ```python import { EcsService, DummyTaskDefinition, EcsDeploymentGroup, PushImageProject } from '@cloudcomponents/cdk-blue-green-container-deployment'; import { ImageRepository } from '@cloudcomponents/cdk-container-registry'; import { Duration, Stack, StackProps } from 'aws-cdk-lib'; import { Repository } from 'aws-cdk-lib/aws-codecommit'; import { Pipeline, Artifact } from 'aws-cdk-lib/aws-codepipeline'; import { CodeBuildAction, CodeCommitSourceAction, CodeDeployEcsDeployAction } from 'aws-cdk-lib/aws-codepipeline-actions'; import { Vpc, Port } from 'aws-cdk-lib/aws-ec2'; import { Cluster } from 'aws-cdk-lib/aws-ecs'; import { ApplicationLoadBalancer, ApplicationTargetGroup, TargetType } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; import { Construct } from 'constructs'; export class BlueGreenContainerDeploymentStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const vpc = new Vpc(this, 'Vpc', { maxAzs: 2, }); const cluster = new Cluster(this, 'Cluster', { vpc, clusterName: 'blue-green-cluster', }); const loadBalancer = new ApplicationLoadBalancer(this, 'LoadBalancer', { vpc, internetFacing: true, }); const prodListener = loadBalancer.addListener('ProfListener', { port: 80, }); const testListener = loadBalancer.addListener('TestListener', { port: 8080, }); const prodTargetGroup = new ApplicationTargetGroup(this, 'ProdTargetGroup', { port: 80, targetType: TargetType.IP, vpc, }); prodListener.addTargetGroups('AddProdTg', { targetGroups: [prodTargetGroup], }); const testTargetGroup = new ApplicationTargetGroup(this, 'TestTargetGroup', { port: 8080, targetType: TargetType.IP, vpc, }); testListener.addTargetGroups('AddTestTg', { targetGroups: [testTargetGroup], }); // Will be replaced by CodeDeploy in CodePipeline const taskDefinition = new DummyTaskDefinition(this, 'DummyTaskDefinition', { image: 'nginx', family: 'blue-green', }); const ecsService = new EcsService(this, 'EcsService', { cluster, serviceName: 'blue-green-service', desiredCount: 2, taskDefinition, prodTargetGroup, testTargetGroup, }); ecsService.connections.allowFrom(loadBalancer, Port.tcp(80)); ecsService.connections.allowFrom(loadBalancer, Port.tcp(8080)); const deploymentGroup = new EcsDeploymentGroup(this, 'DeploymentGroup', { applicationName: 'blue-green-application', deploymentGroupName: 'blue-green-deployment-group', ecsServices: [ecsService], targetGroups: [prodTargetGroup, testTargetGroup], prodTrafficListener: prodListener, testTrafficListener: testListener, terminationWaitTime: Duration.minutes(100), }); // @see files: ./blue-green-repository for example content const repository = new Repository(this, 'CodeRepository', { repositoryName: 'blue-green-repository', }); const imageRepository = new ImageRepository(this, 'ImageRepository', { forceDelete: true, //Only for tests }); const sourceArtifact = new Artifact(); const sourceAction = new CodeCommitSourceAction({ actionName: 'CodeCommit', repository, output: sourceArtifact, }); const imageArtifact = new Artifact('ImageArtifact'); const manifestArtifact = new Artifact('ManifestArtifact'); const pushImageProject = new PushImageProject(this, 'PushImageProject', { imageRepository, taskDefinition, }); const buildAction = new CodeBuildAction({ actionName: 'PushImage', project: pushImageProject, input: sourceArtifact, outputs: [imageArtifact, manifestArtifact], }); const deployAction = new CodeDeployEcsDeployAction({ actionName: 'CodeDeploy', taskDefinitionTemplateInput: manifestArtifact, appSpecTemplateInput: manifestArtifact, containerImageInputs: [ { input: imageArtifact, taskDefinitionPlaceholder: 'IMAGE1_NAME', }, ], deploymentGroup, }); new Pipeline(this, 'Pipeline', { pipelineName: 'blue-green-pipeline', stages: [ { stageName: 'Source', actions: [sourceAction], }, { stageName: 'Build', actions: [buildAction], }, { stageName: 'Deploy', actions: [deployAction], }, ], }); } } ``` ## API Reference See [API.md](https://github.com/cloudcomponents/cdk-constructs/tree/master/packages/cdk-blue-green-container-deployment/API.md). ## Example See more complete [examples](https://github.com/cloudcomponents/cdk-constructs/tree/master/examples). ## License [MIT](https://github.com/cloudcomponents/cdk-constructs/tree/master/packages/cdk-blue-green-container-deployment//LICENSE) %package help Summary: Development documents and examples for cloudcomponents.cdk-blue-green-container-deployment Provides: python3-cloudcomponents.cdk-blue-green-container-deployment-doc %description help [![cloudcomponents Logo](https://raw.githubusercontent.com/cloudcomponents/cdk-constructs/master/logo.png)](https://github.com/cloudcomponents/cdk-constructs) # @cloudcomponents/cdk-blue-green-container-deployment [![Build Status](https://github.com/cloudcomponents/cdk-constructs/workflows/Build/badge.svg)](https://github.com/cloudcomponents/cdk-constructs/actions?query=workflow=Build) [![cdkdx](https://img.shields.io/badge/buildtool-cdkdx-blue.svg)](https://github.com/hupe1980/cdkdx) [![typescript](https://img.shields.io/badge/jsii-typescript-blueviolet.svg)](https://www.npmjs.com/package/@cloudcomponents/cdk-blue-green-container-deployment) [![python](https://img.shields.io/badge/jsii-python-blueviolet.svg)](https://pypi.org/project/cloudcomponents.cdk-blue-green-container-deployment/) [![Mentioned in Awesome CDK](https://awesome.re/mentioned-badge.svg)](https://github.com/kolomied/awesome-cdk) > Blue green container deployment with CodeDeploy ## Install TypeScript/JavaScript: ```bash npm i @cloudcomponents/cdk-blue-green-container-deployment ``` Python: ```bash pip install cloudcomponents.cdk-blue-green-container-deployment ``` ## How to use ```python import { EcsService, DummyTaskDefinition, EcsDeploymentGroup, PushImageProject } from '@cloudcomponents/cdk-blue-green-container-deployment'; import { ImageRepository } from '@cloudcomponents/cdk-container-registry'; import { Duration, Stack, StackProps } from 'aws-cdk-lib'; import { Repository } from 'aws-cdk-lib/aws-codecommit'; import { Pipeline, Artifact } from 'aws-cdk-lib/aws-codepipeline'; import { CodeBuildAction, CodeCommitSourceAction, CodeDeployEcsDeployAction } from 'aws-cdk-lib/aws-codepipeline-actions'; import { Vpc, Port } from 'aws-cdk-lib/aws-ec2'; import { Cluster } from 'aws-cdk-lib/aws-ecs'; import { ApplicationLoadBalancer, ApplicationTargetGroup, TargetType } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; import { Construct } from 'constructs'; export class BlueGreenContainerDeploymentStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const vpc = new Vpc(this, 'Vpc', { maxAzs: 2, }); const cluster = new Cluster(this, 'Cluster', { vpc, clusterName: 'blue-green-cluster', }); const loadBalancer = new ApplicationLoadBalancer(this, 'LoadBalancer', { vpc, internetFacing: true, }); const prodListener = loadBalancer.addListener('ProfListener', { port: 80, }); const testListener = loadBalancer.addListener('TestListener', { port: 8080, }); const prodTargetGroup = new ApplicationTargetGroup(this, 'ProdTargetGroup', { port: 80, targetType: TargetType.IP, vpc, }); prodListener.addTargetGroups('AddProdTg', { targetGroups: [prodTargetGroup], }); const testTargetGroup = new ApplicationTargetGroup(this, 'TestTargetGroup', { port: 8080, targetType: TargetType.IP, vpc, }); testListener.addTargetGroups('AddTestTg', { targetGroups: [testTargetGroup], }); // Will be replaced by CodeDeploy in CodePipeline const taskDefinition = new DummyTaskDefinition(this, 'DummyTaskDefinition', { image: 'nginx', family: 'blue-green', }); const ecsService = new EcsService(this, 'EcsService', { cluster, serviceName: 'blue-green-service', desiredCount: 2, taskDefinition, prodTargetGroup, testTargetGroup, }); ecsService.connections.allowFrom(loadBalancer, Port.tcp(80)); ecsService.connections.allowFrom(loadBalancer, Port.tcp(8080)); const deploymentGroup = new EcsDeploymentGroup(this, 'DeploymentGroup', { applicationName: 'blue-green-application', deploymentGroupName: 'blue-green-deployment-group', ecsServices: [ecsService], targetGroups: [prodTargetGroup, testTargetGroup], prodTrafficListener: prodListener, testTrafficListener: testListener, terminationWaitTime: Duration.minutes(100), }); // @see files: ./blue-green-repository for example content const repository = new Repository(this, 'CodeRepository', { repositoryName: 'blue-green-repository', }); const imageRepository = new ImageRepository(this, 'ImageRepository', { forceDelete: true, //Only for tests }); const sourceArtifact = new Artifact(); const sourceAction = new CodeCommitSourceAction({ actionName: 'CodeCommit', repository, output: sourceArtifact, }); const imageArtifact = new Artifact('ImageArtifact'); const manifestArtifact = new Artifact('ManifestArtifact'); const pushImageProject = new PushImageProject(this, 'PushImageProject', { imageRepository, taskDefinition, }); const buildAction = new CodeBuildAction({ actionName: 'PushImage', project: pushImageProject, input: sourceArtifact, outputs: [imageArtifact, manifestArtifact], }); const deployAction = new CodeDeployEcsDeployAction({ actionName: 'CodeDeploy', taskDefinitionTemplateInput: manifestArtifact, appSpecTemplateInput: manifestArtifact, containerImageInputs: [ { input: imageArtifact, taskDefinitionPlaceholder: 'IMAGE1_NAME', }, ], deploymentGroup, }); new Pipeline(this, 'Pipeline', { pipelineName: 'blue-green-pipeline', stages: [ { stageName: 'Source', actions: [sourceAction], }, { stageName: 'Build', actions: [buildAction], }, { stageName: 'Deploy', actions: [deployAction], }, ], }); } } ``` ## API Reference See [API.md](https://github.com/cloudcomponents/cdk-constructs/tree/master/packages/cdk-blue-green-container-deployment/API.md). ## Example See more complete [examples](https://github.com/cloudcomponents/cdk-constructs/tree/master/examples). ## License [MIT](https://github.com/cloudcomponents/cdk-constructs/tree/master/packages/cdk-blue-green-container-deployment//LICENSE) %prep %autosetup -n cloudcomponents.cdk-blue-green-container-deployment-2.1.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-cloudcomponents.cdk-blue-green-container-deployment -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri May 05 2023 Python_Bot - 2.1.0-1 - Package Spec generated