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, 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_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
)
# @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
Close
Hashes for cloudcomponents.cdk-blue-green-container-deployment-1.26.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c7e50491869394af02cb1f6a79929f0088fd8716df97500591bdebc191b0e7a |
|
MD5 | ba7e5bba376d8f3adef948ebc7e865d9 |
|
BLAKE2b-256 | 4be25805a56fdb8a8b31d43f4f2bc09fe96ef58bfafbd94d43145bf05c7c92fd |
Close
Hashes for cloudcomponents.cdk_blue_green_container_deployment-1.26.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0dda2744c1b4802d4720302f6ec270b6a1889cd8dc04353ac7eec0396eb10c94 |
|
MD5 | b3db4887a4915114cb9c07f6b5b82270 |
|
BLAKE2b-256 | 57647470e42a7f44802d2965bb5e20f75abc49422142c4c7a3712e2fe0c1897f |