[PYTHON] [AWS] Construisons un cluster ECS avec CDK

[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:

environnement

languagepython3.8pipenv

Installation

pipenv install aws_cdk.aws_ec2 aws_cdk.aws_ecs

la mise en oeuvre

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)

Déployer

Maintenant, déployez !!!

pipenv run cdk deploy StgEcsCluster

Reference

Recommended Posts

[AWS] Construisons un cluster ECS avec CDK
[AWS] Construire ECR avec AWS CDK
Création d'AWS Fargate Service avec AWS CDK
Créez facilement du HPC sur AWS avec un cluster AWS Cfn authentique
Construisons git-cat avec Python
Créez facilement une infrastructure réseau et EC2 avec AWS CDK Python
Développons un algorithme d'investissement avec Python 1
Créez un environnement WardPress sur AWS avec Pulumi
Créez un système de synthèse bon marché avec des composants AWS
[Linux] WSL2 Créer un environnement pour laravel7 avec Ubuntu 20.04
Construisez AWS EC2 et RDS avec Terraform Terraform 3 minutes de cuisson