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

Amazon ECR へのデプロイ

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

アーキテクチャーの概要

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

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

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

インテグレーションとデプロイパイプラインのすべての段階でまったく同じコンテナを構築、テスト、送信、実行できるため、高品質で信頼性の高いアプリケーションを簡単に配信できます。

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

柔軟性
Docker コンテナの柔軟性は、その移植性、デプロイの簡単さ、小さいサイズによって生まれています。VM に必要なインストールと設定とは対照的に、コンテナ内でサービスをパッケージ化することで、コンテナをホスト間で簡単に移動したり、隣接する他のサービスの障害から分離したりできます。また、ホストシステムでの間違ったパッチやソフトウェアアップグレードから保護することもできます。 

所要時間: 20 分

使用するサービス:


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

break-the-monolith
  • ステップ 1:セットアップする

    以降のステップでは、DockerGithubAmazon Elastic Container Service (Amazon ECS)Amazon ECR を使用してコードをコンテナにデプロイします。ここでのステップを完了するためには、次のようなツールが必要です。

    1. AWS アカウントを取得する: AWS アカウントをお持ちでない場合は、こちらからサインアップできます。このチュートリアルのすべての演習は、AWS 無料利用枠の範囲内で実行できるように設計されています。
      ⚐ 注意: 使用するサービスの中には、アカウントが 12 時間以上アクティブであることを求めるサービスもあります。いずれかのサービスで問題が発生し、新しく作成したアカウントをお持ちの場合は、数時間待ってからやり直してください。
    2. Docker をインストールする: コンテナで実行するイメージファイルを構築するために、Docker を使用します。Docker はオープンソースのプロジェクトです。Mac 用もしくは Windows 用のものがダウンロードできます。
      Docker をインストールしたら、ターミナルから Docker --version を実行し、Docker が動作していることを確認します。次の例のようにバージョン番号が表示されます: Docker バージョン 19.03.5、ビルド 633a0ea
    3. AWS CLI をインストールする:
      • Amazon ECR へのイメージのプッシュには AWS コマンドラインインターフェイス (AWS CLI) を使用します。AWS CLI の詳細確認とダウンロードには、こちらをクリックしてください。
      • AWS CLI をインストールしたら、ターミナルで aws --version を実行し、動作中であることを確認します。バージョン番号は、次の例のように表示されます: aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207
      • すでに AWS CLI をインストールしている場合は、ターミナルで次のようなコマンドを実行して、必ず最新バージョンに更新します: pip install awscli --upgrade --user
      • まだ AWS CLI を使用したことがない場合は、認証情報の設定が必要になります。
    4. テキストエディタを用意する: コーディングに使用するテキストエディタがない場合は、ローカル環境にインストールします。Atom は、GitHub が提供しているオープンソースの簡単なテキストエディタで、開発者の間で人気があります。
  • ステップ 2:プロジェクトをダウンロードし、開く

    次のように、GitHub からコードをダウンロードします: https://github.com/awslabs/amazon-ecs-nodejs-microservices にアクセスし、[クローン作成またはダウンロード] をクリックして GitHub リポジトリをローカル環境にダウンロードします。GitHub Desktop または Git を使用してリポジトリをクローンすることもできます。

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

    プロジェクトフォルダでは、[インフラストラクチャ] と [サービス] のフォルダを確認できます。インフラストラクチャのフォルダには、次のステップで使用する AWS CloudFormation インフラストラクチャの設定が格納されています。[サービス] フォルダには、node.js アプリケーションを構成するコードが格納されています。

    ここで少し時間を取って、データベース db.json、サーバー server.jspackage.json、アプリケーション Dockerfile などのファイルを確認し、アプリケーションのさまざまな要素を把握してみてください。

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

    リポジトリを作成する:

    • Amazon ECR コンソールを開きます。
    • [リポジトリ] ページで [リポジトリを作成] をクリックします。
    • [リポジトリを作成] ページで、レポジトリに次のような名前を入力します: api
      ⚐ 注: [タグの不変性] はデフォルト設定のままにしておきます。
    • [リポジトリを作成] を選択します。

    リポジトリの作成が完了すると、リポジトリのアドレスを示す確認メッセージが表示されます。 リポジトリのアドレスは次のような形式になります: [account-ID].dkr.ecr.[region].amazonaws.com/[repo-name][account-ID][region][repo-name] は構成ごとに異なります。

    ⚐ 注: ここでのリポジトリアドレスは、本チュートリアル全体で必要になります。

    作成
  • ステップ 4:Docker イメージをビルドし、プッシュする

    ターミナルにアクセスし、次のディレクトリに移動します: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api

    Docker のログイン認証にターミナルを使用する:

    1. 次のコマンドを実行します。$(aws ecr get-login --no-include-email --region [your-region])[your-region] は、次の例のように置き換えます: $(aws ecr get-login --no-include-email --region us-west-2) 必要な場合は認証情報を設定します。
      認証に成功すると、[ログインに成功しました] といった確認メッセージが表示されます。
    2. 次のようなコマンドをターミナルから実行し、イメージの構築を行います: docker build -t api
      ⚐ 注: api に続くピリオド (.) は省略できません。
    3. ビルドが完了したら、リポジトリにプッシュできるようにイメージに次のようなタグを付けます: docker tag api:latest [account-ID].dkr.ecr.[region].amazonaws.com/api:v1 
      ⚐ 注: プレースホルダー [account-ID][region] は、個々の情報で置き換えます。
      ⚐ ヒント: :v1 はイメージのビルドバージョンを表しています。このバージョン番号は、イメージをビルドするたびに大きくする必要があります。スクリプトを使用している場合は、タイムスタンプなどの自動化された番号を使用して、イメージにタグを付けることができます。こうすることで、前のコンテナイメージのビルドに簡単に戻すことができるため、この方法を使用することをお勧めします。
    4. 次のコマンドを実行し、Amazon ECR にイメージをプッシュします: docker push [account-id].dkr.ecr.[region].amazonaws.com/api:v1
      ⚐ 注: プレースホルダー [account-ID] と [region] は、個々の情報で置き換えます。

    Amazon ECR リポジトリに移動すると、v1 とタグ付けされたイメージが確認できます。

    Amazon ECR イメージタグ