【AWS】CDK로 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
Reference
이 문제에 관하여(【AWS】CDK로 ECS Cluster를 구축하자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/homines22/items/79c257dfa35a97185441텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)