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.28.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 175aa4b88eb8427e913b29b8d1a483f44756ef9e5aeee7e6e664b7e967a0076f |
|
MD5 | 0fa0b4a6b42d5408c3348f14996cde6d |
|
BLAKE2b-256 | dc049377516dbb792d6d6cc09ffef0703f8c62db98396346d0ef44dc180e5226 |
Close
Hashes for cloudcomponents.cdk_blue_green_container_deployment-1.28.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5da052e35ba535c1b6f699a2fbf3e9bc13a8c4b179084c10adc3388249085c72 |
|
MD5 | 1bf9694b04ace92b74777560242a8b60 |
|
BLAKE2b-256 | 8d0220bde0a49be7a6edfdaf1508d89b7fb814caaba02eab6bdbdcaf69ff2d3c |