>백엔드 개발 >파이썬 튜토리얼 >CI/CD를 사용하여 Flask 기반 침입 탐지 시스템을 AWS ECS에 배포

CI/CD를 사용하여 Flask 기반 침입 탐지 시스템을 AWS ECS에 배포

Barbara Streisand
Barbara Streisand원래의
2024-11-25 12:05:12784검색

소개

이번 게시물에서는 AWS에 침입 탐지 시스템을 배포하는 과정을 안내하겠습니다

참고: 이 프로젝트에서는 이미 활성 AWS 계정이 있고 코드 편집기에 계정 자격 증명(액세스 키)을 구성했다고 가정하며 이 프로젝트로 인해 콘솔에서 일부 비용이 발생하게 됩니다.

프로젝트 개요

목표

본 프로젝트의 목적은 다음과 같습니다.

  • Docker로 애플리케이션 컨테이너화
  • 컨테이너 이미지를 ECR로 푸시
  • VPC 생성, 프라이빗 서브넷 2개, 퍼블릭 서브넷 2개
  • ECR에 액세스하기 위한 프라이빗 서브넷용 VPC 엔드포인트 생성
  • ECS 서비스의 퍼블릭 서브넷에 Application Load Balancer 및 대상 그룹 배포
  • ECS 서비스에 대한 작업 정의 생성
  • 프라이빗 서브넷에서 Fargate 시작 유형을 사용하여 ECS 클러스터와 ECS 서비스를 생성합니다.
  • Route 53에 호스팅 영역을 생성하고 이를 ALB의 DNS 이름으로 지정

프로젝트 아키텍처

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Docker를 사용하여 애플리케이션 컨테이너화

이 섹션에서는 이 프로젝트를 처음부터 만드는 단계를 보여줍니다

1단계: Flask 애플리케이션 Dockerize

Flask 앱을 ​​패키징하려면 프로젝트 디렉터리에 Dockerfile을 생성하세요.

FROM python:3.12

#set the working dir
WORKDIR /usr/src/app

#copy the requirements and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy all the files to the container
COPY . .

#Expose the port
EXPOSE 5000

#run the app
CMD ["gunicorn","-b","0.0.0.0:5000", "app:app"]

2단계: Docker 이미지 빌드 및 테스트

Docker 이미지가 의도한 대로 작동하는지 확인하려면 로컬에서 Docker 이미지를 빌드하고 테스트하는 것이 중요합니다

docker build -t image-name .
docker run -p 5000:5000 image-name

Docker 이미지를 ECR에 푸시

1단계. ECR(탄력적 컨테이너 저장소) 생성

  • AWS ECR 콘솔로 이동하여 리포지토리를 생성하고 URI(예: 123456789012.dkr.ecr.region.amazonaws.com/repo-name)를 기록해 둡니다.
  • 참고: 이미지를 ECR 저장소에 푸시하는 명령을 보려면 ECR 저장소를 입력하고 푸시 명령 보기를 선택하세요. 여기에 사용될 명령이 있습니다.

2단계. ECR에 Docker 인증

ECR로 Docker를 인증하려면 다음 명령을 실행하세요(your-region 및 your-account-id 교체).

aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com

3단계. 이미지 태그 및 푸시

ECR 저장소와 일치하도록 로컬 Docker 이미지에 태그를 지정한 후 푸시하세요.

참고: 계정의 해당 지역 및 계정 ID인지 확인하세요

docker tag image-name:latest your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest
docker push your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest

ECR 저장소는 이미지가 성공적으로 푸시된 것과 같아야 합니다

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

VPC 및 해당 서브넷 생성

모든 리소스가 배치되는 지역이므로 지역을 기록해 두세요

1단계: 새 VPC 생성

  • VPC 콘솔로 이동하여 새 VPC를 생성하세요
  • CIDR 블록 지정(예: 10.0.0.0/16)

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 참고: VPC를 생성할 때 DNS 호스트 이름 활성화 설정이 선택되어 있는지 확인하세요

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

2단계: VPC용 인터넷 게이트웨이(IGW) 생성

VPC 콘솔에서 Intergate Gateway 탭을 선택하고 인터넷 게이트웨이를 생성합니다. IGW가 생성되면 이를 VPC에 연결합니다

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

3단계: 서브넷 생성

  • 하나의 가용성 영역(예: us-east-1)에 두 개의 서브넷을 생성합니다
  • 다른 가용성 영역(AZ)(예: us-east-2)에 두 개의 서브넷으로 구성된 또 다른 세트를 생성합니다
  • 참고: 각 AZ에서 서브넷은 각각 프라이빗 및 퍼블릭 서브넷 역할을 합니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

참고: ECS 클러스터는 프라이빗 서브넷에 배포되고 Application Load Balancer는 퍼블릭 서브넷에 있으며 프라이빗 서브넷의 ECS 클러스터에 액세스합니다.

4단계: 경로 테이블 업데이트

  • 퍼블릭 및 프라이빗 서브넷에 대한 라우팅 테이블을 생성하고 라우팅 테이블을 퍼블릭 및 프라이빗 서브넷에 각각 연결합니다. (둘 다 사용 중인 VPC가 선택되어 있는지 확인하세요.)
  • 퍼블릭 서브넷 라우팅 테이블의 경우 인터넷 게이트웨이를 통해 모든 아웃바운드 트래픽 0.0.0.0/0을 전달하려면 경로에 추가하세요.
  • 프라이빗 서브넷은 현재 아웃바운드 트래픽을 라우팅하지 않습니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

ECR용 VPC 엔드포인트 생성

이렇게 하면 ECS 클러스터가 ECR(Elastic Container Registry)에 액세스할 수 있습니다.
참고: S3, ECR, DOCKER 및 CloudWatch용으로 4개의 엔드포인트가 만들어집니다.

  • 엔드포인트를 선택하고 엔드포인트 생성을 클릭하세요.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 엔드포인트 이름을 지정하고 서비스 com.amazonaws.us-east-1.ecr.api에서 ECR API 엔드포인트를 검색하세요.
  • 지금까지 사용했던 VPC를 선택하면 프라이빗 서브넷이 있는 가용성 영역을 선택할 수 있는 서브넷 옵션이 표시되고 마지막으로 프라이빗 서브넷과 기본 보안 그룹이 선택됩니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 기본값을 선택하고 정책을 그대로 둔 후 VPC를 생성하세요.

*이제 docker com.amazonaws.us-east-1.ecr.dkr, CloudWatch 로그 com.amazonaws.us-east-1.logs 및 S3 com.amazonaws에 대한 서비스를 변경하여 나머지 엔드포인트를 생성합니다. us-east-1.s3을 각각 선택하고 해당 변경 사항을 정확히 예상하는 다른 모든 항목을 따르세요.

  • 참고: S3 엔드포인트의 경우 게이트웨이를 선택하세요. 이를 S3 게이트웨이 엔드포인트라고 하며 프라이빗 서브넷 라우팅 테이블에 연결하라는 메시지가 표시되며, 그러면 라우팅 테이블에 경로가 생성됩니다.

Application Load Balancer 및 대상 그룹 생성

이것은 ALB로서 매우 중요한 단계입니다
트래픽을 개인 ECS 서비스로 라우팅합니다.

먼저 ALB에 대한 보안 그룹을 생성해야 합니다.

  • 왼쪽 보안 그룹으로 이동하여 보안 그룹 생성을 선택하세요. 보안에 이름과 설명을 제공합니다.
  • 포트 범위 80과 소스 0.0.0.0/0에 인바운드 규칙을 추가하고 HTTP 및 HTTPS 트래픽 각각에 대해 포트 범위 443과 소스 0.0.0.0/24에 두 번째 규칙을 추가합니다

1단계: 대상 그룹 생성

  • EC2 콘솔로 이동하여 왼쪽의 로드 밸런싱에서 대상 그룹을 선택하세요.
  • 기본 구성에서 IP 주소를 선택하고 대상 그룹의 이름을 지정하세요
  • 프로토콜과 포트를 HTTP:80으로 둡니다.
  • 로드 밸런서를 배포할 VPC를 선택하고 스크롤하여 다음을 클릭하세요.
  • 여기서 기존 IP 주소를 제거하면 모든 IP가 자동으로 추가됩니다. 다음으로 노출된 포트를 Port:5000으로 지정하고 대상 그룹을 생성합니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

애플리케이션 로드 밸런서 생성

  • EC2 콘솔 왼쪽에서 로드 밸런서를 선택하고 로드 밸런서 생성을 선택하세요.
  • Create Application Load Balancer를 선택하면 인터넷 연결 로드 밸런서가 됩니다. ALB에 이름을 지정하세요.
  • 네트워크 매핑 섹션에서 생성된 VPC와 두 가용 영역의 퍼블릭 서브넷을 선택합니다.
  • 리스너 및 라우팅 섹션에서 생성된 대상 그룹을 선택합니다. ALB는 포트:80에서 수신 대기하고 대상 그룹으로 전달합니다.
  • ALB를 생성합니다.

작업 정의 만들기

ECS 콘솔로 이동하여 작업 정의를 선택합니다.

1단계:

  • 작업 정의 계열 이름 지정
  • 기본 인프라 요구 사항은 그대로 두고 vCPU와 메모리는 원하는 대로 변경할 수 있습니다. Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

2단계: 컨테이너 1

  • 이름을 지어주세요
  • ECR로 이동하여 이 프로젝트의 이전 섹션에서 푸시한 도커 이미지의 URI를 복사하고 생성 중인 작업 정의의 컨테이너 1 섹션으로 돌아와서 컨테이너의 이미지 URI에 붙여넣습니다.
  • 포트 매핑의 경우 5000으로 설정합니다. 이는 도커 컨테이너에 노출된 포트이고 이름을 지정했기 때문입니다. 참고: 포트 매핑이 노출된 Docker 포트와 동일한 것이 매우 중요합니다
  • 환경 변수 추가
    이는 이 프로젝트의 CI/CD 섹션에서 중요합니다. 하지만 지금은 생략하겠습니다.

  • 나머지 섹션을 건너뛰고 작업 정의를 생성하세요

Fargate 클러스터 및 서비스 생성

ECS 서비스를 위한 보안 그룹 생성

  • 왼쪽 보안 그룹으로 이동하여 보안 그룹 생성을 선택하세요. 보안에 이름과 설명을 제공합니다.
  • 포트 범위 5000에 인바운드 규칙을 추가하면 소스는 Application Load Balancers 보안 그룹이 됩니다.

1단계: 클러스터 생성

  • 클러스터 탭으로 이동하여 클러스터 생성을 선택하면 클러스터 구성 페이지가 나타납니다. 클러스터 이름을 지정하고 인프라 탭에서 AWS Fargate(Serverless)만 선택되어 있는지 확인한 후 클러스터를 생성합니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

2단계: 서비스 생성

  • 생성된 클러스터를 선택하고 서비스 아래에서 생성을 클릭하세요.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

Fargate 서비스 구성을 지정하는 새 페이지로 연결됩니다.

  • 환경 섹션을 스크롤하여 배포 구성으로 이동합니다. 여기에서 개정도 자동으로 선택하는 작업 정의 제품군을 지정합니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 실행하려는 작업 수를 선택하세요. 이 프로젝트에는 하나면 충분합니다.

  • 네트워킹 탭으로 스크롤하여 생성된 VPC를 선택한 다음 프라이빗 서브넷을 선택합니다

  • 로드 밸런서 섹션에서 로드 밸런서 유형을 Application Load Balancer로 선택하고 기존 로드 밸런서 사용을 선택합니다. 그러면 이전 섹션에서 생성된 ALB가 나타납니다. 선택하세요.

  • 스크롤하시면 보실 수 있습니다, 청취자님. 기존 리스너 사용을 선택하고 거기에 있는 포트 80 리스너를 선택하고 대상 그룹 아래에서 동일한 작업을 수행하여 우리가 만든 기존 대상 그룹을 선택합니다.

  • 다음은 Service Auto Scaling입니다. 이는 선택 사항이지만 정의된 메트릭을 기반으로 앱을 확장해야 하는 경우 좋은 추가 기능입니다. 이 기능을 활성화하고 실행하려는 최소 및 최대 작업 수를 지정하세요. 다음으로 조정 정책을 추가합니다. 이 프로젝트에서는 대상 추적 정책이 ALBrequestCountPerTarget ECS 서비스 지표와 함께 사용되며 대상 값은 50, 확장 휴지 기간 및 축소 휴지 기간은 60초입니다

  • 서비스를 만듭니다.

  • 서비스가 생성되면 원하는 개수의 작업이 생성됩니다.

Route 53에서 호스팅 영역 생성

위 지침을 따랐다면 완전히 작동하는 웹 앱이 있어야 합니다. 액세스하려면 로드 밸런서로 이동하고 DNS 이름을 복사하여 브라우저에 붙여넣으세요. 그러나 이는 지루하고 모범 사례를 사용하지 않는 것입니다. 이상적으로는 ALB 또는 CloudFront 앞에 웹 애플리케이션 방화벽이 있어야 하지만 단순화를 위해 Route 53만 사용하겠습니다.

참고: 이 섹션에서는 AWS 또는 다른 공급자에 등록된 도메인 이름이 필요합니다

1단계: 호스팅된 호스트 만들기

  • Route 53 콘솔로 이동합니다.
  • 왼쪽 탭에서 호스팅 영역을 선택합니다. 이거 꼭 갖고 있어야 해.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 호스팅 영역 생성 선택
  • 도메인 이름을 입력하고 설명을 입력하세요. 유형을 공개 호스팅 영역으로 두고 호스트 영역 생성을 선택합니다.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

2단계: 호스팅 영역 레코드에 ALB DNS 이름 추가

  • ALB 콘솔로 이동하여 DNS 이름을 복사하세요.
  • 호스팅 영역으로 돌아와서 기록 생성을 선택하세요.

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 기본 레코드 유형은 A 레코드로 사용됩니다.
  • 별칭 스위치 전환

Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

  • 엔드포인트 선택에서 애플리케이션 별칭 및 Classical Load Balancer를 선택합니다.
  • 다음으로 Load Balancer를 시작한 지역을 선택합니다. 이 경우 us-east-1이며 해당 지역이 맞는지 확인하세요.
  • 드롭다운 메뉴에서 로드 밸런서를 선택하세요.
  • 기록을 작성하세요.

AWS에 도메인 이름이 있다고 가정합니다

축하해요!!

T 단계를 따랐다면 도메인 이름을 통해 액세스할 수 있고 완벽하게 작동하는 웹 앱을 갖게 될 것입니다.

VPC, 프라이빗 및 퍼블릭 서브넷, VPC 엔드포인트, ECS 서비스, ECR, 대상 그룹, 보안 그룹 및 Application Load Balancer가 모두 함께 모여 이 웹을 생성하면서 작업한 매우 흥미로운 프로젝트였습니다. 앱.

위 내용은 CI/CD를 사용하여 Flask 기반 침입 탐지 시스템을 AWS ECS에 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.