このモジュールでは、モノリシック node.js アプリケーション用のコンテナイメージを構築し、それを Amazon Elastic Container Registry にプッシュします。構築を開始する

amazon ecr へのデプロイメント

コンテナを使用すると、アプリケーションのコード、設定、依存関係を、使いやすい構成要素に簡単にパッケージ化できるため、環境の一貫性、運用効率性、開発者の生産性、バージョンコントロールが実現できます。コンテナを使用すると、デプロイ環境に関係なく、迅速かつ確実に、また一貫してアプリケーションをデプロイできます。

アーキテクチャの概要

スピード
コードの新規リリースが含まれたコンテナの起動は、大幅なデプロイメントオーバーヘッドなしで実行することができます。開発者のローカルマシンのコンテナで構築されたコードは、コンテナを移動するだけで簡単にテストサーバーに移動できるため、操作速度が向上します。このコンテナは構築時に、アプリケーションスタックの実行に必要な他のコンテナにリンクすることができます。

依存関係の制御とパイプラインの改善
Docker コンテナイメージは、アプリケーションのコードと依存関係のポイントインタイムキャプチャです。 これにより、エンジニアリング組織はアプリケーションライフサイクルのための標準パイプラインを作成することができます。以下に例を示します。

  1. 開発者がローカルでコンテナを構築し、実行する。
  2. 継続的インテグレーションサーバーが同じコンテナを実行し、それに対する統合テストを行って、それが期待を満たすものであることを確認する。
  3. 同じコンテナが、負荷テストまたは手動の QA を使用して実行時の動作をチェックできるステージング環境に送られる。
  4. 同じコンテナが本番環境に送られる。

インテグレーションとデプロイメントパイプラインのすべての段階で全く同じコンテナを構築、テスト、送信、実行することができるため、高品質で信頼性の高いアプリケーションの供給が極めて容易になります。

密度とリソース効率
コンテナは、複数の異種プロセスを単一のシステムで実行できるようにすることによって、リソース効率の向上を促進します。リソース効率は、コンテナが使用する分離と割り当て手法から自然に生じる結果です。コンテナは、ホストの CPU とメモリを特定の量だけ消費するように制限することができます。コンテナに必要なリソースと、基礎となるホストサーバーから利用できるリソースを理解することによって、小規模なホストで使用するコンピューティングリソースを適切なサイズに調整する、または単一の大規模ホストで実行されているプロセスの密度を高めて、可用性を向上させ、リソース消費を最適化することができます。

柔軟性
Docker コンテナの柔軟性は、移植性、デプロイメントの容易性、および小さなサイズに基づいています。VM に必要なインストールおよび設定とは対照的に、コンテナ内のパッケージングサービスは、それらのホスト間における容易な移動、他の隣接するサービスの障害からの分離、およびホストシステム上の誤ったパッチやソフトウェアアップグレードからの保護を可能にします。

修了時間: 20 分

使用するサービス:


このチュートリアルの最初の部分では、モノリシック node.js アプリケーション用の Docker コンテナイメージを構築し、それを Amazon Elastic Container Registry にプッシュします。各ステップの番号をクリックして、セクションを展開してください。

break-the-monolith
  • ステップ 1: 準備を整える

    次の数ステップでは、コンテナにコードをデプロイするために DockerGitHubAmazon ECSAmazon ECR を使用します。これらのステップを完了できることを確実にするには、適切なツールがあることを確認する必要があります。

    1. AWS アカウントを取得する: AWS アカウントをすでにお持ちでない場合は、ここから登録することができます。このチュートリアルでの実習は、AWS 無料利用枠の対象となるように設計されています。
      ⚐ 注意: 使用するサービスの中には、アカウントが 12 時間以上アクティブであることを必要とするものがあります。いずれかのサービスで問題が発生し、新しく作成されたアカウントをお持ちの場合は、数時間待ってから再試行してください。
    2. Docker をインストールする: コンテナで実行するイメージファイルの構築には Docker を使用します。Docker はオープンソースプロジェクトで、ここから Mac 用または Windows 用をダウンロードすることができます。
      Docker がインストールされたら、ターミナルで Docker --version を実行して Docker が動作していることをチェックできます。Docker version 17.03.0-ce, build 60ccb22 といった内容が表示されます。
    3. AWS CLI をインストールする
      • Amazon Elastic Container Registry へのイメージのプッシュには AWS Command Line Interface (CLI) を使用します。CLI については、こちらを参照してください。
      • AWS CLI がインストールされたら、ターミナルで aws --version を実行して AWS CLI が動作していることをチェックできます。aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26 といった内容が表示されます。
      • すでに AWS CLI がインストールされている場合は、ターミナルでコマンド pip install awscli --upgrade --user を実行して、AWS CLI が最新バージョンに更新されていることを確認してください。
    4. テキストエディタを取得する: コーディング用のテキストエディタがない場合は、ローカル環境にエディタをインストールする必要があります。Atom は、開発者に人気のある GitHub 社のシンプルなオープンソーステキストエディタです。
  • ステップ 2: ダウンロードしてプロジェクトを開く

    GitHub からコードをダウンロードする: https://github.com/awslabs/amazon-ecs-nodejs-microservices に移動し、[Clone or Download] を選択して GitHub リポジトリをローカル環境にダウンロードします。GitHub Desktop または Git を使用してリポジトリをクローンすることもできます。

    プロジェクトファイルを開く: Atom を起動し、[プロジェクトフォルダを追加] を選択して、レポジトリ「amazon-ecs-nodejs-microservices」を保存したフォルダを選択します。これによって Atom にプロジェクト全体が追加され、簡単にプロジェクトで作業することができるようになります。

    プロジェクトフォルダ内には、インフラストラクチャおよびサービス用のフォルダがあります。インフラストラクチャには、次のステップで使用する AWS CloudFormation インフラストラクチャ設定コードがあります。フォルダサービスには、node.js アプリケーションを形成するコードが含まれています。

    少し時間を取ってファイルをクリックし、database db.json、server server.js、package.json、および application dockerfile を含むアプリケーションの様々な側面を把握してください。

    マイクロサービスプロジェクト
  • ステップ 3: リポジトリをプロビジョニングする

    リポジトリを作成する:

    • Amazon Elastic Container Registry (Amazon ECR) に移動します。
    • [Create Repository (リポジトリの作成)] を選択します。
    • リポジトリに名前を付けます。このステップでは、このリポジトリをシンプルに api と呼びます。


    リポジトリ情報を記録する:

    • [Next (次へ)]を押すと、次のようなメッセージが表示されます。
    作成
    • リポジトリアドレスは、[account-id].dkr.ecr.[region].amazonaws.com/[repo-name] というシンプルな形式に従っています。

     

    ⚐ 注意: このアドレス (アカウント ID と使用しているリージョンを含む) は次のステップで必要になります。

  • ステップ 4: Docker イメージを構築してプッシュする

    ターミナルを開き、GitHub コードをクローンまたはダウンロードしたディレクトリ内の GitHub コードの 2-containerized/services/api セクションへのパスを ~/amazon-ecs-nodejs-microservices/2-containerized/services/api. に設定します。

    AWS で Docker ログインを認証する:

    1. aws ecr get-login --no-include-email --region [region] を実行します(例: aws ecr get-login --no-include-email --region us-west-2 )。これまで AWS CLI を使用したことがなかった場合は、認証情報を設定しなければならない場合があります。
    2. docker login -u AWS -p ... で始まる大量の出力を受け取ります。この出力全体をコピーし、貼り付けて、ターミナルで実行してください。
    3. [Login Succeeded] (ログイン成功) と表示されます。

    ⚐ 注意: このログインが成功しない場合は、-e none フラグを廃止した Docker の新しいバージョンを使用していることが原因である可能性があります。これを修正するには、出力をテキストエディタに貼り付け、出力の最終部から -e none を削除して、更新された出力をターミナルで実行します。

    • イメージを構築する: ターミナルで docker build -t api を実行します。ここでは . が重要であることに注意してください。
    • イメージにタグ付けする: 構築が完了したら、リポジトリにプッシュできるようにイメージに次のタグ、docker tag api:latest [account-id].dkr.ecr[region].amazonaws.com/api:v1 を付けます。

    ⚐ 裏技: :v1 はイメージのビルドバージョンを表します。このバージョン番号は、このイメージを構築するたびに増加させるようにしてください。スクリプトを使用している場合、タイムスタンプなどの自動化された数値を使用してイメージをタグ付けすることができます。これは将来、簡単に以前のコンテナイメージビルドに戻すことを可能にするベストプラクティスです。

    • ECR にイメージをプッシュする: docker push (docker push [account-id].dkr.ecr[region].amazonaws.com/api:latest) を実行して、イメージを ECR にプッシュします。

    ECR リポジトリに移動すると、最後にタグ付けされたイメージが表示されます。

    イメージ