[AWS] Erstellen wir ECR mit CDK ECS-Cluster-Version Bitte beziehen Sie sich auf Vorheriger Artikel, da ich die Annahmen weglassen werde: beten Sie:
pipenv install aws_cdk.aws_ec2 aws_cdk.aws_ecs
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)
Jetzt bereitstellen !!!
pipenv run cdk deploy StgEcsCluster
Reference
Recommended Posts