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.33.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08935f8aa25860a7c79a0f707bf36d78dd2b0c4351c9e788eb0302cf7ffaa80b |
|
MD5 | 65541e017283c0a7b2a11594ce5f3a54 |
|
BLAKE2b-256 | d34577fde37dad2f38888e8e50c867e04f416efa626d3c76f733642d38573973 |
Close
Hashes for cloudcomponents.cdk_blue_green_container_deployment-1.33.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40b9ada2fcd6d7065485316e710965106190a36c51d3dfab3370f41d5020c603 |
|
MD5 | 56b58154b01fe78a35ddc4c20ea71b9f |
|
BLAKE2b-256 | 240fde5c761157b35c02a62aee496a2e6a1f0603d0af7739bd532601ff4bac41 |