は、CircleCiを使用してAWSのECR/ECSにDockerized Pythonフラスコアプリ


私は昨日、Pythonを取得するいくつかの時間を過ごしたFlask アマゾンWebサービス(AWS)への応用うまくいけば、このチュートリアルでは、あなた自身のPython(またはDocker)のWebアプリケーションのために同じようにいくつかの時間を節約することができます!

連続積分(CI)と連続配置(CD)は、チームが一貫した価値を生み出すために急速に協力するのを可能にする強力な技術です.指定されたブランチにプッシュする各コードプッシュは、ターゲット環境にコードを構築、テスト、および配備するためにパイプラインをキックオフします.CircleCiは、インフラストラクチャの管理について心配する必要がないパイプラインを開発者に可能にするサービスとしての統合パイプラインです.
Dockerは、アプリケーションの管理と配信を標準化する素晴らしい技術です.それはUSPSモットーのようです.主要なクラウド・プロバイダーのすべては、Dockerコンテナを配備して、管理する解決策を持っています.

必要条件

  • Python 3+
  • Python Virtual Environments
  • CircleCI Account
  • Docker
  • Terraform

  • GitHub / BitBucket
  • AWS Account
  • 参考文献

  • Deploying to AWS ECR/ECS
  • Dockerize your Flask Application
  • DEV3L: python-flask-aws
  • ウォークスルー


    1 . gitクローンdev 3 l:Pythonフラスコ


    これはBearboneリポジトリです.それは意図的にスリムなので、何かを取得し、遅かれ早かれ実行することに集中することができます.
    : git clone https://[email protected]/dev3l/python-flask-aws.git
    : cd python-flask-aws
    plython-flask-aws: 
    

    2 . Pythonフラスコこんにちは


    コマンドラインから実行される次のコマンドは、新しい仮想環境python-flask-aws , それをアクティブにするrequirements.txt ファイルは、最後にこんにちは世界フラスコアプリケーションを起動します.
    : python3 -m venv python-flask-aws
    : source python-flask-aws/bin/activate
    : pip install -r requirements.txt
    : python app.py
    ---
     * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: 262-674-088
    
    私たちは行くことによってウェブサイトをロードすることができるはずですhttp://localhost or http://0.0.0.0 . 一度確認すると、ターミナルとプレスに戻るctrl-c アプリケーションを停止します.

    Dockerイメージをビルドする


    アプリケーションがDockerの外で動くことができるということを知ったので、コンテナの中で動くようにすることを確認しましょう.
    : docker build -t python-flask:latest .
    : docker run -d -p 80:80 python-flask
    
    もう一度、この時点でアプリケーションがブラウザを介して利用可能になっていることを確認しますhttp://localhost

    フクロップ・サイクレシィ


    倉庫のローカルコピーを切断して、それをあなた自身のものに押し上げましょう.これはフォークまたは手動で行うことができます.forkを行っていない場合は、githubまたはbitbucketに新しい空のgitリポジトリを作成します.
    : rm -rf .git
    : git remote add origin <clone url>
    : git add .
    : git commit "Add flask-aws project scaffolding"
    : git push
    
    一旦、あなたが倉庫の別々のかフォークされたコピーを持っているならばCircleCI . 左側のメニューから「プロジェクトを追加」を選択します.既に行われていない場合は、CircleCiをリポジトリに接続できます.をクリックしますSet Up Project リストからのリポジトリに.
    CircleCi使用./circleci/config.yml アプリケーションを構築するためのテンプレートとして.このファイル内で参照されるビルド環境変数を設定する必要があります.
    そのためには4つの情報が必要です.
  • アクセスキー
  • 秘密鍵
  • アカウントID
  • エリア
  • この情報を取得する方法についての参照here アクセスと秘密鍵のために.あなたのアカウントIDはMy Account AWSコンソールからのメニュー.
    パイプラインのCircleCyでは、次の環境変数を設定して入力します.
    変数
    説明AWS_ACCESS_KEY_IDAWS CLIによって使われますAWS_SECRET_ACCESS_KEYAWS CLIによって使われますAWS_DEFAULT_REGIONAWS CLIによって使用されます.例の値:"US - EASH - 1 "( Fargate起動型で指定された領域がサポートされているか確認してください)AWS_ACCOUNT_IDこの情報は展開に必要です.AWS_RESOURCE_NAME_PREFIX必要なAWSリソースの一部が名前を持つと仮定するプレフィックス.値はaws_resource_prefix 変数の値terraform_setup/terraform.tfvars .

    ALESインフラストラクチャを作成するには、TerraFormを使用します


    アプリケーションをホストするために必要なAWSインフラストラクチャを作成する必要があります.これは手動で行うことができますfollowing AWS tutorials そうするには、Terraformは必要な断片を足場にするための雲の不可知論法です.このアプローチでは、簡単に環境を作成できます.たとえば、生産環境を反映したテスト環境のスタックを作成する場合.
    リポジトリの例から、terraform.tfvars ファイルはcloudformation-templates ディレクトリ.私はこのファイルを.Gitignoreは誤って公共のリポジトリにこれらの秘密をプッシュしないように、各プッシュに注意してください.次の値を特定の値に設定します.
    aws_access_key = ""
    aws_secret_key = ""
    aws_account_id = ""
    aws_region     = ""
    
    これが完了したら、端末のセッションをcloudformation-templates ディレクトリ.
    : terraform init
    : terraform plan
    : terraform apply
    
    数分かかるでしょう.その後、AWSにアプリケーションを配備するのに必要なインフラがあります.

    ビルド成功


    この準備の後、我々は最終的に魔法が起こるのを見る準備ができています!私たちのリポジトリのセットアップ、場所のパイプライン、およびインフラストラクチャTorraformを介して足場、我々が今しなければならないすべてのマスター支店に変更をプッシュします.

    一度ビルドは緑、最後のステップは、我々のアプリケーションの上にホストされているURLを見つけることです!

    AWS上のビューアプリケーション


    私は確実にこれをする方法があると確信しています、しかし、私はAWSによって作成されたDNS Aレコードエントリを見つけるために私がたどり着いたステップを歩きます.
  • AWSコンソールへのログイン
  • EC 2サービスに移動
  • 左側のメニューから、
  • ロードバランサのDNS名フィールド
  • 結論


    ここではまだたくさんのことがある.たとえば、SSLを有効にするには?私は、これがAWSにCI/CDパイプラインを作る出発点であることを望みました.我々は、'こんにちは、世界を展開アプリケーションは、利用されるツールチェーンは複雑です.例を挙げると複雑になる.