[AWS] Construisons ECR avec CDK Version du cluster ECS Veuillez vous référer à Article précédent car je vais omettre les hypothèses: priez:
pipenv install aws_cdk.aws_ec2 aws_cdk.aws_ecs
props/ecs_cluster.py
Si vous souhaitez utiliser un VPC existant lors de la création d'un cluster ECS, vous devez effectuer une recherche en fonction de l'ID de VPC et rendre le VPC existant disponible dans la pile. Par conséquent, la gestion des paramètres est effectuée par une classe appelée VpcForEcsCluster.
Après cela, les paramètres qui peuvent être définis sont définis en se référant à la référence API. Container Insights est défini sur True par défaut, car il est utile pour surveiller s'il est activé.
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
Dans le cas du cluster ECS, les paramètres diffèrent en fonction de l'environnement, en particulier, l'ID de VPC diffère, créez donc une entité pour chaque environnement. Cette fois, je n'écris que la mise en scène, mais en production, vous devez définir la classe ProdEcsCluster dans le même fichier.
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
La pile est conçue pour être utilisée dans n'importe quel environnement.
Dans Cluster, si vous souhaitez utiliser un VPC existant, vous devez spécifier vpc
comme argument, vous utilisez donc une méthode de classe appelée Vpc.from_lookup pour l'obtenir en fonction de l'ID de VPC.
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
Ajoutons maintenant la pile de ressources que nous voulons créer à app.py. Si vous souhaitez créer un cluster ECS à l'aide d'un VPC existant, transmettez les paramètres d'environnement de région / compte à ʻEcsClusterStack`. Le CDK créera automatiquement un contexte et conservera les données incorrectes (cette fois le VPC existant) si elles sont modifiées pendant le déploiement. Il a également une signification semblable à celle du cache.
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()
#Balises à définir pour toutes les ressources
tags = {'CreatedBy': 'iscream'}
#Cadre environnemental(Obligatoire pour utiliser le VPC existant)
env_stg = {'region': 'ap-northeast-1', 'account': 'xxxxxxxx'}
#ECR créé la dernière fois
EcrStack(app, entity=SampleEcr, tags=tags)
# ECS Cluster
EcsClusterStack(app, StgEcsCluster, tags=tags, env=env_stg)
app.synth(skip_validation=False)
Maintenant, déployez !!!
pipenv run cdk deploy StgEcsCluster
Reference
Recommended Posts