AWS CDK를 사용하여 AWS Fargate Service 구축

11709 단어 Fargate파이썬CDK

소개



AWS CDK(Python)를 사용하여 AWS Fargate Service를 구축하고 싶습니다.

이번에 작성한 코드는 여기

↑이 코드로 다음 구성을 작성합니다.

구성도





준비


  • AWS 계정
  • CDK용 IAM User

  • 흐름


  • 환경 변수
  • cdk install
  • cdk init
  • 구현
  • cdk deploy
  • 동작 확인
  • cdk destroy

  • cdk install


    $ npm install -g aws-cdk
    
    cdk 를 실행할 수 없으면 PATH가 통과했는지 확인하십시오.
    $ which node
    /path/to/bin/node
    $ export
    ...
    PATH=/path/to/hoge:/path/to/fuga
    ...
    $ export PATH=$PATH:/path/to/current/bin
    $ export
    ...
    PATH=/path/to/hoge:/path/to/fuga:/path/to/current/bin
    ...
    

    환경 변수 설정


    export AWS_ACCESS_KEY_ID=hoge
    export AWS_SECRET_ACCESS_KEY=fuga
    export ROLE_ARN=arn:aws:iam::xxxxxxxxxxxx:role/ecsTaskExecutionRole
    export ECR_REGISOTRY=xxxxxxxxxxxx:role.dkr.ecr.ap-northeast-1.amazonaws.com/django-app:latest
    

    cdk init


    $ mkdir /path/to/cdk_fargate
    $ cd /path/to/cdk_fargate
    $ cdk init --language python
    

    구현


    $ pwd
    /path/to/cdk_fargate
    $ cd cdk_fargate/
    vi cdk_fargate_stack.py  
    
    cdk_fargate_stack.py여기

    VPC 생성


  • Availability Zone을 2개 지정해 VPC 작성.

  • ECS Cluster 생성


  • 만든 VPC를 지정하여 ECS Cluster를 만듭니다.

  • Fargate Service 만들기



  • ecs_pattern.ApplicationLoadBalancedFargateService 을 사용하여 Fargate Service를 구축.
  • 이번은, Nginx의 이미지를 참조.

  • Output


  • ALB의 DNS 출력
  • import os
    from dotenv import load_dotenv
    
    from aws_cdk import (
        aws_ec2 as ec2,
        aws_ecs as ecs,
        aws_iam as iam,
        aws_ecs_patterns as ecs_patterns,
        core,
    )
    
    load_dotenv()
    
    ROLE_ARN = os.environ["ROLE_ARN"]
    ECR_REGISOTRY = os.environ["ECR_REGISOTRY"]
    
    
    class CdkFargateStack(core.Stack):
        def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
            super().__init__(scope, id, **kwargs)
    
            vpc = ec2.Vpc(self, "CdkFargateVpc", max_azs=2)
    
            cluster = ecs.Cluster(self, "Ec2Cluster", vpc=vpc)
    
            role = iam.Role.from_role_arn(self, "Role", ROLE_ARN)
            image = ecs.ContainerImage.from_registry(ECR_REGISOTRY)
            task_definition = ecs.FargateTaskDefinition(
                scope=self, id="TaskDefinition", execution_role=role, task_role=role
            )
            port_mapping = ecs.PortMapping(container_port=80, host_port=80)
            container = task_definition.add_container(
                id="Container", image=image
            ).add_port_mappings(port_mapping)
    
            fargate_service = ecs_patterns.ApplicationLoadBalancedFargateService(
                self, "FargateService", cluster=cluster, task_definition=task_definition
            )
    
            core.CfnOutput(
                self,
                "LoadBalancerDNS",
                value=fargate_service.load_balancer.load_balancer_dns_name,
            )
    
    
    

    cdk deploy


    $ export AWS_ACCESS_KEY_ID=hoge
    $ export AWS_SECRET_ACCESS_KEY=fuga
    $ cdk deploy
    

    동작 확인


    $ curl cdk-f-farga-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com
    

    cdk destroy


    $ cdk destory
    

    모든 리소스가 삭제되었습니다!

    다음에 하고 싶은 일


  • ECR을 사용한 이미지 관리
  • ACM, Route53을 사용한 맞춤 도메인 지원

  • 요약



    팀은 Python을 사용하여 개발했지만 공용 언어를 사용하여 구성 관리를 수행하는 것이 훌륭하다고 느꼈습니다.
    CDK를 사용한 구성 관리를 점점 추진해 나가고 싶습니다.
    맞춤 도메인 설정까지 구현할 수 없었기 때문에

    참고문헌


  • htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / cdk / 아 st / 구이데 / 에 cs_ 에아 mp ぇ. HTML
  • htps : // / cs. 아 ws. 아마존. 이 m / cdk / 아피 / 아 st / 두 cs / 아 ws-에 cs-레아 d 메. HTML
  • htps : // / cs. 아 ws. 아마존. 이 m / cdk / 아피 / 아 st / py 텐 / 아 ws_cdk. 아 ws_에cs_파와 rs. HTML
  • htps : // 기주 b. 이 m / a ws-sa mp ぇ s / a ws-cdk
  • 좋은 웹페이지 즐겨찾기