[PYTHON] [AWS] Erstellen wir einen ECS-Cluster mit CDK

[AWS] Erstellen wir ECR mit CDK ECS-Cluster-Version Bitte beziehen Sie sich auf Vorheriger Artikel, da ich die Annahmen weglassen werde: beten Sie:

Umgebung

languagepython3.8pipenv

Installation

pipenv install aws_cdk.aws_ec2 aws_cdk.aws_ecs

Implementierung

props/ecs_cluster.py

Wenn Sie beim Erstellen eines ECS-Clusters eine vorhandene VPC verwenden möchten, müssen Sie anhand der VPC-ID nachschlagen und die vorhandene VPC im Stapel verfügbar machen. Daher wird die Parameterverwaltung von einer Klasse namens VpcForEcsCluster durchgeführt.

Danach werden die Parameter, die eingestellt werden können, unter Bezugnahme auf die API-Referenz definiert. Container Insights ist standardmäßig auf True gesetzt, da es für die Überwachung nützlich ist, wenn es aktiviert ist.

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

Im Fall von ECS Cluster unterscheiden sich die Parameter je nach Umgebung, insbesondere unterscheidet sich die VPC-ID. Erstellen Sie daher für jede Umgebung eine Entität. Dieses Mal schreibe ich nur Staging, aber in der Produktion sollten Sie die ProdEcsCluster-Klasse in derselben Datei definieren.

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

Der Stack kann in jeder Umgebung verwendet werden.

Wenn Sie in Cluster eine vorhandene VPC verwenden möchten, müssen Sie "vpc" als Argument angeben. Daher verwenden Sie eine Klassenmethode namens Vpc.from_lookup, um sie basierend auf der VPC-ID abzurufen.

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

Fügen wir nun den Ressourcenstapel, den wir erstellen möchten, zu app.py hinzu. Wenn Sie einen ECS-Cluster mit einer vorhandenen VPC erstellen möchten, übergeben Sie die Einstellungen für die Regions- / Kontoumgebung ebenfalls an "EcsClusterStack". Das CDK erstellt automatisch einen Kontext und behält die fehlerhaften Daten (diesmal die vorhandene VPC) bei, wenn sie während der Bereitstellung geändert werden. Es hat auch eine Cache-ähnliche Bedeutung.

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, die für alle Ressourcen festgelegt werden sollen
tags = {'CreatedBy': 'iscream'}

#Umgebungseinstellung(Erforderlich, um vorhandene VPC zu verwenden)
env_stg = {'region': 'ap-northeast-1', 'account': 'xxxxxxxx'}

#ECR zuletzt erstellt
EcrStack(app, entity=SampleEcr, tags=tags)

# ECS Cluster
EcsClusterStack(app, StgEcsCluster, tags=tags, env=env_stg)

app.synth(skip_validation=False)

Bereitstellen

Jetzt bereitstellen !!!

pipenv run cdk deploy StgEcsCluster

Reference

Recommended Posts

[AWS] Erstellen wir einen ECS-Cluster mit CDK
[AWS] ECR mit AWS CDK erstellen
Erstellen eines AWS Fargate-Dienstes mit AWS CDK
Erstellen Sie HPC einfach auf AWS mit echtem AWS Cfn Cluster
Lassen Sie uns Git-Cat mit Python bauen
Erstellen Sie mit AWS CDK Python ganz einfach Netzwerkinfrastruktur und EC2
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
Erstellen Sie ein billiges Zusammenfassungssystem mit AWS-Komponenten
[Linux] WSL2 Erstellen Sie mit Ubuntu 20.04 eine Umgebung für laravel7
Erstellen Sie AWS EC2 und RDS mit Terraform Terraform 3 Minuten Garzeit