Blue green container deployment with CodeDeploy
Project description
@cloudcomponents/cdk-blue-green-container-deployment
Blue green container deployment with CodeDeploy
Install
TypeScript/JavaScript:
npm i @cloudcomponents/cdk-blue-green-container-deployment
Python:
pip install cloudcomponents.cdk-blue-green-container-deployment
How to use
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
from aws_cdk.core import Construct, Stack, StackProps
from aws_cdk.aws_codecommit import Repository
from aws_cdk.aws_codepipeline import Pipeline, Artifact
from aws_cdk.aws_ec2 import Vpc, Port
from aws_cdk.aws_ecs import Cluster
from aws_cdk.aws_elasticloadbalancingv2 import ApplicationLoadBalancer, ApplicationTargetGroup, TargetType
from aws_cdk.aws_codepipeline_actions import CodeBuildAction, CodeCommitSourceAction, CodeDeployEcsDeployAction
from cloudcomponents.cdk_container_registry import ImageRepository
from cloudcomponents.cdk_blue_green_container_deployment import EcsService, DummyTaskDefinition, EcsDeploymentConfig, EcsDeploymentGroup, PushImageProject
class BlueGreenContainerDeploymentStack(Stack):
def __init__(self, scope, id, *, description=None, env=None, stackName=None, tags=None, synthesizer=None, terminationProtection=None, analyticsReporting=None):
super().__init__(scope, id, description=description, env=env, stackName=stackName, tags=tags, synthesizer=synthesizer, terminationProtection=terminationProtection, analyticsReporting=analyticsReporting)
vpc = Vpc(self, "Vpc",
max_azs=2
)
cluster = Cluster(self, "Cluster",
vpc=vpc,
cluster_name="blue-green-cluster"
)
load_balancer = ApplicationLoadBalancer(self, "LoadBalancer",
vpc=vpc,
internet_facing=True
)
prod_listener = load_balancer.add_listener("ProfListener",
port=80
)
test_listener = load_balancer.add_listener("TestListener",
port=8080
)
prod_target_group = ApplicationTargetGroup(self, "ProdTargetGroup",
port=80,
target_type=TargetType.IP,
vpc=vpc
)
prod_listener.add_target_groups("AddProdTg",
target_groups=[prod_target_group]
)
test_target_group = ApplicationTargetGroup(self, "TestTargetGroup",
port=8080,
target_type=TargetType.IP,
vpc=vpc
)
test_listener.add_target_groups("AddTestTg",
target_groups=[test_target_group]
)
# Will be replaced by CodeDeploy in CodePipeline
task_definition = DummyTaskDefinition(self, "DummyTaskDefinition",
image="nginx",
family="blue-green"
)
ecs_service = EcsService(self, "EcsService",
cluster=cluster,
service_name="blue-green-service",
desired_count=2,
task_definition=task_definition,
prod_target_group=prod_target_group
)
ecs_service.connections.allow_from(load_balancer, Port.tcp(80))
ecs_service.connections.allow_from(load_balancer, Port.tcp(8080))
deployment_config = EcsDeploymentConfig(self, "DeploymentConfig",
deployment_config_name="Canary20Percent5Minute",
traffic_routing_config={
"type": "TimeBasedCanary",
"time_based_canary": {
"canary_interval": 5,
"canary_percentage": 20
}
}
)
deployment_group = EcsDeploymentGroup(self, "DeploymentGroup",
application_name="blue-green-application",
deployment_group_name="blue-green-deployment-group",
ecs_services=[ecs_service],
target_group_names=[prod_target_group.target_group_name, test_target_group.target_group_name
],
prod_traffic_listener=prod_listener,
test_traffic_listener=test_listener,
termination_wait_time_in_minutes=100,
deployment_config=deployment_config
)
# @see https://github.com/cloudcomponents/cdk-constructs/tree/master/examples/blue-green-container-deployment-example/blue-green-repository
repository = Repository(self, "CodeRepository",
repository_name="blue-green-repository"
)
image_repository = ImageRepository(self, "ImageRepository",
force_delete=True
)
source_artifact = Artifact()
source_action = CodeCommitSourceAction(
action_name="CodeCommit",
repository=repository,
output=source_artifact
)
image_artifact = Artifact("ImageArtifact")
manifest_artifact = Artifact("ManifestArtifact")
push_image_project = PushImageProject(self, "PushImageProject",
image_repository=image_repository,
task_definition=task_definition
)
build_action = CodeBuildAction(
action_name="PushImage",
project=push_image_project,
input=source_artifact,
outputs=[image_artifact, manifest_artifact]
)
deploy_action = CodeDeployEcsDeployAction(
action_name="CodeDeploy",
task_definition_template_input=manifest_artifact,
app_spec_template_input=manifest_artifact,
container_image_inputs=[CodeDeployEcsContainerImageInput(
input=image_artifact,
task_definition_placeholder="IMAGE1_NAME"
)
],
deployment_group=deployment_group
)
Pipeline(self, "Pipeline",
pipeline_name="blue-green-pipeline",
stages=[StageProps(
stage_name="Source",
actions=[source_action]
), StageProps(
stage_name="Build",
actions=[build_action]
), StageProps(
stage_name="Deploy",
actions=[deploy_action]
)
]
)
API Reference
See API.md.
Example
See more complete examples.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cloudcomponents.cdk-blue-green-container-deployment-1.46.0.tar.gz.
File metadata
- Download URL: cloudcomponents.cdk-blue-green-container-deployment-1.46.0.tar.gz
- Upload date:
- Size: 710.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
937abda98d74c895af04dfd6f044ae45c8674f7169f6bfcca39d99cb047dea1c
|
|
| MD5 |
2fa4b9a495f9313256b0b4e4766c49a7
|
|
| BLAKE2b-256 |
0fa93da60de7b5ca1f550c11c1b57580d7147300277267bdbe33e20ade12d22d
|
File details
Details for the file cloudcomponents.cdk_blue_green_container_deployment-1.46.0-py3-none-any.whl.
File metadata
- Download URL: cloudcomponents.cdk_blue_green_container_deployment-1.46.0-py3-none-any.whl
- Upload date:
- Size: 708.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5fc62cf832b742e8ce7bebd6978908492dd5e42082f22faeec4883d13c74745c
|
|
| MD5 |
aed88d5f63ce23397f166e4ba99de449
|
|
| BLAKE2b-256 |
8b5476682560f4587d3c9ee002dccf3a6dd22f072ba2c57b9a31089bb00d9634
|