ホームページ > バックエンド開発 > Python チュートリアル > CI/CD を使用して Flask ベースの侵入検知システムを AWS ECS にデプロイする

CI/CD を使用して Flask ベースの侵入検知システムを AWS ECS にデプロイする

Barbara Streisand
リリース: 2024-11-25 12:05:12
オリジナル
781 人が閲覧しました

導入

この投稿では、AWS に侵入検知システムを導入するプロセスについて説明します

注: このプロジェクトは、アクティブな AWS アカウントがすでにあり、アカウントの認証情報 (アクセス キー) がコード エディターに設定されていることを前提としています。このプロジェクトでは、コンソールでいくらかのコストが発生します

プロジェクト概要

目的

このプロジェクトの目的は次のとおりです:

  • Docker を使用してアプリケーションをコンテナ化します
  • コンテナイメージを ECR にプッシュします
  • VPC、2 つのプライベート サブネットと 2 つのパブリック サブネットを作成します
  • ECR にアクセスするためのプライベート サブネットの VPC エンドポイントを作成します
  • ECS サービスのパブリック サブネットに Application Load Balancer とターゲット グループをデプロイします
  • ECS サービスのタスク定義を作成する
  • プライベート サブネットに ECS クラスターと Fargate 起動タイプの ECS サービスを作成します。
  • ルート 53 にホストゾーンを作成し、ALB の DNS 名を指すようにします

プロジェクトのアーキテクチャ

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

Docker を使用してアプリケーションをコンテナ化する

このセクションでは、このプロジェクトを最初から作成する手順を示します

ステップ 1: Flask アプリケーションを Docker 化する

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 build -t image-name .
docker run -p 5000:5000 image-name
ログイン後にコピー

Docker イメージを ECR にプッシュする

ステップ 1. Elastic Container Repository (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: サブネットの作成

  • 1 つのアベイラビリティーゾーンに 2 つのサブネットを作成します (例: us-east-1)
  • 異なるアベイラビリティーゾーン (AZ) に 2 つのサブネットの別のセットを作成します (例: 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 クラスターが Elastic Container Registry (ECR) にアクセスできるようになります。
注: S3、ECR、DOCKER、CloudWatch 用に 4 つのエンドポイントが作成されます。

  • 「エンドポイント」を選択し、「エンドポイントの作成」をクリックします。

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

  • エンドポイントに名前を付け、services 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 のセキュリティ グループを作成する必要があります。

  • 左側のセキュリティ グループに移動し、セキュリティ グループの作成を選択します。セキュリティに名前と説明を付けます。
  • HTTP トラフィックと HTTPS トラフィックのポート範囲 80 とソース 0.0.0.0/0 に受信ルールを追加し、ポート範囲 443 とソース 0.0.0.0/24 に 2 番目のルールをそれぞれ追加します

ステップ 1: ターゲット グループを作成する

  • EC2 コンソールに移動し、左側の [負荷分散] でターゲット グループを選択します。
  • 基本設定で IP アドレスを選択し、ターゲット グループに名前を付けます
  • プロトコルとポートは HTTP:80 のままにします。
  • ロードバランサーをデプロイする VPC を選択し、スクロールして「次へ」をクリックします。
  • ここで、そこにある IP アドレスを削除します。すべての IP が自動的に追加されます。次に、公開したポート、Port:5000を指定し、ターゲットグループを作成します。

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

アプリケーションロードバランサーの作成

  • EC2 コンソールの左側でロードバランサーを選択し、ロードバランサーの作成を選択します。
  • [アプリケーション ロード バランサーの作成] を選択します。これはインターネットに接続されたロード バランサーになります。 ALB に名前を付けます。
  • ネットワーク マッピング セクションで、作成された VPC と 2 つのアベイラビリティ ゾーン内のパブリック サブネットを選択します。
  • 「リスナーとルーティング」セクションで、作成したターゲット グループを選択します。 ALB はポート 80 でリッスンし、ターゲット グループに転送します。
  • ALB を作成します。

タスク定義の作成

ECS コンソールに移動し、タスク定義を選択します。

ステップ 1:

  • タスク定義ファミリーに名前を付けます
  • デフォルトのインフラストラクチャ要件はそのままにしておきますが、必要に応じて vCPU とメモリを変更できます。 Deploying a Flask-based Intrusion Detection System to AWS ECS with CI/CD

ステップ 2: コンテナ 1 の場合

  • 名前を付けてください
  • ECR に移動し、このプロジェクトの前のセクションでプッシュした Docker イメージの URI をコピーし、作成中のタスク定義のコンテナ 1 セクションに戻って、それをコンテナのイメージ URI に貼り付けます。
  • ポート マッピングでは、これを Docker コンテナで公開したポートである 5000 に設定し、名前を付けます。 注: ポート マッピングが公開された Docker ポートと同じであることが非常に重要です
  • 環境変数を追加します
    これは、このプロジェクトの CI/CD セクションで重要になります。ただし、今のところスキップされます。

  • 残りのセクションをスキップしてタスク定義を作成してください

Fargate クラスターとサービスを作成する

ECS サービスのセキュリティ グループの作成

  • 左側のセキュリティ グループに移動し、セキュリティ グループの作成を選択します。セキュリティに名前と説明を付けます。
  • ポート範囲 5000 に受信ルールを追加すると、ソースは Application Load Balancer セキュリティ グループになります。

ステップ 1: クラスターの作成

  • 「クラスター」タブに移動し、「クラスターの作成」を選択すると、クラスター構成ページが表示されます。クラスターに名前を付け、[インフラストラクチャ] タブで AWS Fargate(サーバーレス) のみが選択されていることを確認して、クラスターを作成します。

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

  • 起動するタスクの希望の数を選択します。このプロジェクトでは 1 つで大丈夫です。

  • [ネットワーク] タブまでスクロールし、作成した VPC を選択し、プライベート サブネットを選択します

  • [ロード バランサー] セクションで、ロード バランサー タイプとして [Application Load Balancer] を選択し、[既存のロード バランサーを使用する] を選択します。これにより、前のセクションで作成した ALB が表示されます。それを選択してください。

  • スクロールするとわかります、リスナー。 [既存のリスナーを使用する] を選択し、そこにあるポート 80 リスナーを選択します。ターゲット グループの下でも同じことを行い、作成した既存のターゲット グループを選択します。

  • 次はサービスの Auto Scaling です。これはオプションですが、定義されたメトリクスに基づいてアプリにスケールアウトする必要がある場合に適した追加です。これを有効にして、実行するタスクの最小数と最大数を指定します。次にスケーリングポリシーを追加します。このプロジェクトでは、ターゲット追跡ポリシーが ALBrequestCountPerTarget ECS サービス メトリクスとともに使用され、ターゲット値は 50、スケールアウトのクールダウン期間とスケールインのクールダウン期間は 60 秒です

  • サービスを作成します。

  • サービスが作成されると、必要な数のタスクが作成されます。

ルート 53 にホストゾーンを作成する

上記の手順に従った場合は、完全に機能する Web アプリが作成されているはずです。それにアクセスするには、ロード バランサーに移動し、DNS 名をコピーしてブラウザーに貼り付けます。しかし、それは面倒ですし、ベストプラクティスを活用することはできません。理想的には、ALB または CloudFront の前に Web アプリケーション ファイアウォールが存在する必要がありますが、簡単にするために 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 へのエイリアスを選択します
  • 次に、ロード バランサーを起動したリージョンを選択します。この場合は us-east-1 です。オン リージョンであることを確認してください。
  • ドロップダウン メニューからロード バランサーを選択します。
  • レコードを作成します。

これは、AWS にドメイン名があることを前提としています

おめでとう!!

T までの手順に従った場合は、ドメイン名を介してアクセスできる、完全に機能する Web アプリが作成されているはずです。

VPC、プライベートおよびパブリックのサブネット、VPC エンドポイント、ECS サービス、ECR、ターゲット グループ、セキュリティ グループ、およびアプリケーション ロード バランサーをすべて連携してこの Web を作成したため、これは非常にエキサイティングなプロジェクトでした。アプリ

以上がCI/CD を使用して Flask ベースの侵入検知システムを AWS ECS にデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート