【AWS】CDK로 ECS Cluster를 구축하자

4282 단어 CDK파이썬ECSAWS
【AWS】CDK로 ECR을 구축하자의 ECS Cluster 버전
전제 등은 생략하므로 마지막 기사

환경



설치 pipenv install aws_cdk.aws_ec2 aws_cdk.aws_ecs 구현 props/ecs_cluster.py ECS Cluster를 만들 때 기존 VPC를 사용하려면 VPC ID를 기반으로 조회하여 기존 VPC를 Stack에서 사용할 수 있도록 해야 합니다. 따라서 VpcForEcsCluster라는 클래스에서 매개 변수를 관리합니다. 나머지는 API Reference를 참조하면서 설정 가능한 파라미터를 정의하고 있습니다. Container Insights 는 활성화해 두는 것이 감시에 도움이 되므로, 디폴트로 True 로 하고 있습니다. props/ecs_cluster.py from dataclasses import dataclass from typing import Optional from aws_cdk.aws_ecs import CloudMapNamespaceOptions from src.props.base import Base @dataclass(frozen=True) class VpcForEcsCluster(Base): id: str vpc_id: str @dataclass(frozen=True) class EcsCluster(Base): id: str cluster_name: str container_insights: bool = True default_cloud_map_namespace: Optional[CloudMapNamespaceOptions] = None entity/ecs_cluster.py ECS Cluster의 경우는 환경에 따라 파라미터가 다르고, 구체적으로는 VPC ID가 다르므로 환경별 entity를 작성합니다. 이번에는 스테이징만 쓰고 있습니다만, 프로덕션의 경우는 같은 파일에 ProdEcsCluster 클래스를 정의하면 됩니다. entity/ecs_cluster.py from src.entity.base import Base from src.props.ecs_cluster import EcsCluster, VpcForEcsCluster class EcsClusterBase(Base): vpc: VpcForEcsCluster cluster: EcsCluster class StgEcsCluster(EcsClusterBase): id='StgEcsCluster' vpc = VpcForEcsCluster ( id='StgVpc', vpc_id='vpc-xxxxxxxx' ) cluster = EcsCluster( id='StgEcsCluster', cluster_name='sample' ) stack/ecs_cluster.py stack은 어떤 환경에서도 사용하게 되어 있습니다. Cluster에서는 기존 VPC를 이용하고 싶은 경우는 인수에 vpc 의 지정이 필요하므로 Vpc.from_lookup이라는 클래스 메소드를 이용하여 VPC ID를 바탕으로 취득하고 있습니다. stack/ecs_cluster.py from typing import Any, Type from aws_cdk.aws_ec2 import Vpc from aws_cdk.aws_ecs import Cluster from aws_cdk.core import Construct, Stack from src.entity.ecs_cluster import EcsClusterBase class EcsClusterStack(Stack): def __init__ ( self, scope: Construct, entity: Type[EcsClusterBase], **kwargs: Any) -> None: super().__init__(scope, entity.id, **kwargs) vpc = Vpc.from_lookup(self, **entity.vpc.to_dict()) Cluster(self, **entity.cluster.to_dict(), vpc=vpc) app.py 이제 app.py에 빌드하려는 리소스의 스택을 추가합시다. 기존 VPC를 이용하여 ECS Cluster를 구축하고 싶다면 region/account 환경 설정도 EcsClusterStack에 전달합니다. CDK가 자동으로 Context를 작성해, 배치시에 변경되면(자) 최상의 데이터(이번은 기존 VPC)를 보관 유지해 줍니다. 캐시적인 의미도 있습니다. app.py #!/usr/bin/env python3 from aws_cdk import core from src.entity.ecr import SampleEcr from src.entity.ecs_cluster import StgEcsCluster from src.stack.ecr import EcrStack from src.stack.ecs_cluster import EcsClusterStack app = core.App() # 모든 리소스에 설정할 태그 tags = {'CreatedBy': 'iscream'} # 환경 설정 (기존 VPC를 사용하는 데 필수) env_stg = {'region': 'ap-northeast-1', 'account': 'xxxxxxxx'} # 마지막으로 만든 ECR EcrStack(app, entity=SampleEcr, tags=tags) #ECS Cluster EcsClusterStack(app, StgEcsCluster, tags=tags, env=env_stg) app.synth(skip_validation=False) 배포 막상, 배포!!! pipenv run cdk deploy StgEcsCluster Reference
  • htps : // / cs. 아 ws. 아마존. 이 m / cdk / 아피 / 아 st / py 텐 / 아 ws_cdk. 아 ws_에cs/C㎅s r. HTML
  • htps : // / cs. 아 ws. 아마존. 이 m / cdk / 아피 / 아 st / py 텐 / 아 ws_cdk. 아 ws_에 c2/Vpc. HTML
  • 좋은 웹페이지 즐겨찾기