見出し画像

【AWSコンテナ入門】コンテナ初心者向けガイド


はじめに


  1. 【クラウドエンジニア(コンテナ初心者)】:AWSには慣れているが、コンテナ技術についてはまだ学び始めたばかりの人。

  2. 【ITマネージャー】:自身のチームや組織がAWSのコンテナ技術を利用することを考えているが、その基礎知識や可能性をもっと理解したいと考えている人。

上記のような方の悩みに答えます。

本記事を読むことで以下の4つについて理解できる内容になっています。

  • コンテナとは(コンテナのメリット)

  • AWSのコンテナサービス概要

  • AWSでコンテナを利用した時のシステム構成

  • コンテナの活用事例

コンテナ利用量はすごい速度で増加しています。

出典:AWS公式サイト

特にマイクロサービスの文脈ではコンテナやサーバーレスが推奨されていることからも、コンテナはAWSエンジニアの必須知識になっていきます。

AWSコンテナ入門:初心者向けガイド


Amazon Web Services (AWS)のコンテナを利用することで、アプリケーション開発とデプロイのプロセスが一変します。

しかし、その取り組みは初めての方にとっては、技術的な障壁や新たな概念の学習といった、大きな挑戦になり得ます。

そこでAWSのコンテナに初めて触れる方々に向け、基本的な概念から具体的な操作手順、さらにはベストプラクティス、導入事例までを解説します。

コンテナ初心者でも安心してスタートできるよう、一歩ずつガイドします。

本記事で利用する書籍です。 コンテナの概要からハンズオンまで良質な内容なので、 買って損はしないと思います。

AWSコンテナ設計・構築[本格]入門

コンテナの基礎知識


AWSコンテナの基本的な概念、その利点、技術的な背景(コンテナ化とマイクロサービス)、主要なAWSコンテナサービス(ECS、Fargate)について解説します。

コンテナの概要:基本的な概念と利点

コンテナは、アプリケーションをパッケージ化するための技術で、アプリケーションが実行される環境をパッケージ化します。これにより、開発者はそのアプリケーションが動作するすべての環境(ライブラリ、環境変数、依存関係等)を含むパッケージを作成できます。

この特性がコンテナを非常に便利なツールにしており、開発者は自分のローカルマシン上で動作するアプリケーションが、他のどんなマシン上でもまったく同じように動作することを保証できます。

文章で表現すると上記のようなイメージですが、下記のYoutubeを聞くことでより理解が深まります。時間があるときに流し聞きしましょう。

  • コンテナ基礎(30分)

「コンテナとは」はこれを見ればOK。

はじめてのコンテナ入門セミナー★第一弾 コンテナ・Docker編★2021/7/28ウェブセミナー

  • Docker基礎(40分)

サプーさんはコンテナのメリットとDockerの使い方、特にdockerfile記載方法を分かりやすく解説してくれている。

【Docker入門】初心者向け!Dockerの基本を学んでコンテナ型の仮想環境を作ろう!

  • コンテナ発展(15分)

キャリア改善大学はコンテナの深いところ(裏側)まで紹介

1回で分かる:仮想化とは違うコンテナ技術「Docker」って何? |米シリコンバレーCloud DevOpsアーキテクト(CKA)が解説

コンテナが支える技術:コンテナ化とマイクロサービス

マイクロサービスは、大きな単一のアプリケーションを小さな独立したサービスに分割するアーキテクチャスタイルです。各サービスは特定のビジネス機能を提供し、それぞれが独立して開発、デプロイ、スケールすることを可能にします。

マイクロサービスアーキテクチャを実装する際、各サービスを個別のコンテナとしてデプロイすることが一般的です。これにより、各サービスの開発とデプロイが独立して行え、サービス間での依存関係の問題を回避できます。

AWSコンテナの主要サービス:ECS, EKS, Fargateの違いと使い方

Amazon Elastic Container Service (ECS)

ECSは、AWSがネイティブで提供しているコンテナオーケストレーションサービスです。Dockerコンテナを運用するための環境を提供し、それらのコンテナをクラスタとして管理します。

ECSはAWSのサービスとシームレスに連携し、例えばロードバランサーの設定、IAMロールの設定、CloudWatchとの統合などが容易です。

出典:https://aws.amazon.com/jp/ecs/

Amazon Elastic Kubernetes Service (EKS)

EKSは、Kubernetes(オープンソースのコンテナオーケストレーションツール)をAWS上で使えるようにするマネージドサービスです。

多くのクラウドプロバイダやオンプレミス環境で標準的に使用されているKubernetesを用いることで、マルチクラウド環境やハイブリッドクラウド環境での運用が可能となります。

(ECSもECS Anywareを使えばオンプレ環境でも管理可能)

AWS Fargate

Fargateはサーバレスコンピューティングサービスであり、ECSやEKSと組み合わせて使うものです。

Fargateを使用すると、コンテナを動かすためのサーバー(EC2)の管理をせずに、アプリケーションの運用に集中することができます。

サーバーやクラスタのスケーリング、パッチ適用、セキュリティ設定などをAWSが自動的に行ってくれます。

ECS VS EKS(コントロールプレーンの選択)

ECSとEKSの選定基準は下記でよさそうです。

  • ECS:学習コストを払いたくない(EKSより使いやすい)

  • EKS:マルチクラウド前提、またはKubernetesを運用している

AWS自身が考えるECSとEKSの役割

EC2 VS Fargate(データプレーンの選択)

Fagate利用を標準化している現場もありましたし、メリデメはありますが、EC2 or Fargateで悩んだら、Fargate1択で良いと思っています。

FargateはECS Execの登場により、OS上に入ったような形でコンテナをデバッグできるようになりましたので、デバッグしにくいというデメリットもなくなりました。

最初に紹介した以下の書籍を参考にするとより詳細に選定基準を知ることができます。

  • AWS コンテナ設計[本格入門]2章

    • コントロールプレーン(ECS、EKS)

    • データプレーン(EC2、Fargate)

AWSでコンテナを利用した時のシステム構成:AWSコンテナの運用と管理


AWSコンテナの監視とログ管理、運用自動化(CI/CD)について深く掘り下げます。

コンテナの監視とログ管理

コンテナ監視の全体像

AWSのコンテナ監視について3分でざっくり全体像をつかむための良スライドです。

コンテナ監視って何見るの?~初心者編~

コンテナ運用の知識(監視・ログ)

AWS Fargateを使用する場合でも、コンテナの監視とログ管理は重要です。以下に、Fargate環境での主要な監視とログ管理ツールについて説明します。

Amazon CloudWatch

Fargateが自動的に収集するメトリクス(例えばCPU使用率、メモリ使用率など)を監視するためにCloudWatchを使用できます。また、アプリケーション固有のカスタムメトリクスもCloudWatchに送信して監視することが可能です。CloudWatchアラームを設定すれば、特定のメトリクスが閾値を超えた時に通知を受け取れます。

AWS X-Ray

Fargateで動作するアプリケーションのパフォーマンスを監視し、問題のトラブルシューティングを行うために、AWS X-Rayを使用できます。X-Rayは、リクエストがアプリケーションを通過する際の遅延を視覚化し、パフォーマンスボトルネックを見つけ出すのに役立ちます。

Amazon CloudWatch LogsとFireLens

Fargateタスクのログは、デフォルトでCloudWatch Logsに送信されます。さらに、FireLensを使用すれば、ログを任意のログ収集システムやデータストレージに送ることができます。また、ログのフィルタリングや変換も行えます。 これらのツールを適切に組み合わせることで、Fargate環境でのコンテナ監視とログ管理が容易になります。

以下を見るとにFireLensついて深く知ることができます。

詳解 FireLens – Amazon ECS タスクで高度なログルーティングを実現する機能を深く知る

AWSコンテナ運用の自動化:CI/CDパイプラインの構築

コンテナとCI/CDは相性が良いため、コンテナ導入と同時にCI/CDも検討するべきだと考えています。

参考:AWS コンテナ設計[本格入門]3.4、5.2章

AWSには、コンテナのCI/CDパイプラインを構築するための一連のツールがあります。以下にそれぞれのツールとその役割について説明します。

  1. AWS CodeCommit: プライベートなGitリポジトリを提供するマネージドサービスです。

  2. AWS CodeBuild: ソースコードのコンパイル、テストの実行、成果物の生成を行うフルマネージドビルドサービスです。Dockerコンテナのビルドやテストもこのサービスで行うことができます。

  3. Amazon ECR : Dockerコンテナイメージの保存、管理、デプロイを行うためのフルマネージド型コンテナレジストリサービスです。CodeBuildでビルドされたコンテナイメージをECRにプッシュして保存することが可能です。

  4. AWS CodePipeline: ソースコードの更新を検知し、ビルド、テスト、デプロイまでのプロセスを自動化するための継続的デリバリーサービスです。

  5. AWS CodeDeploy: CodeDeployは、ソフトウェアリリースを自動化するサービスです。作成したコンテナイメージを、ECSやEKSのサービスにデプロイすることが可能です。(CodeDeployのリリース先はコンテナ以外(EC2など)の用途でも利用可)

これらのツールを使用することで、開発者はソースコードの変更からテスト、ビルド、デプロイまでの一連のプロセスを自動化し、迅速に新機能をリリースできる環境を構築することが可能になります。

AWSコンテナのトラブルシューティング:よくある問題とその解決策

前述したECS execを利用してコンテナに直接アクセスしてのデバッグが可能です。

デバッグ用にAmazon ECS Exec を使用

AWSコンテナを使ったプロジェクト:実例とその結果


具体的なビジネスケーススタディ、成功事例、およびトラブルシューティングの例を通じて、AWSコンテナの実際の使用方法とその影響を示します。

AWSコンテナを活用したビジネスケーススタディ

AWSのコンテナサービスを活用したビジネスケースは多種多様です。以下に具体的な事例をいくつか紹介します。

Mastodon、Netflix

  1. Mastodon:知識不足によりコンテナの活用に失敗した事例として紹介されています。

  2. Netflix: Netflixは、エンターテイメント業界をリードする企業であり、そのサービスは全世界で利用されています。彼らはAWS上でマイクロサービスアーキテクチャを採用しており、ECSを用いて数千ものコンテナを運用しています。このコンテナ化により、Netflixは開発サイクルを劇的に短縮し、新機能の迅速なリリースを可能にしています。

Mastodon・Netflixに見る、コンテナの未来 コンテナはサービス開発の主流になり得るか?

GoPro

3.GoPro: アクションカメラメーカーであるGoProは、データ処理と分析のためにAWSのコンテナサービスを利用しています。彼らはFargateを使用して、管理負荷を減らしつつ、数十億件のデータポイントを処理しています。

GoPro と AWS : ケーススタディ

Vangard

4.Vangard: 規制が厳しい金融サービス業界のVangardがセキュリティ観点に満足しつつ、メンテナンス性が得られた事例があります。

Vanguard、Amazon ECS と AWS Fargate を使って投資家への価値を増加

AWSコンテナの成功事例:効果と学び

それぞれの事例がコンテナ化の取り組みから得られた効果や学びを持っていることがわかりました。 成功事例から見たコンテナ導入の効果をまとめます。

  • スケーラビリティの向上: コンテナ化はアプリケーションのスケーラビリティを大幅に向上させます。Netflixの事例には「スケールアウトできないサービスは、残念ながら生き残れない」という記載があります。

  • 開発の効率化: NetflixやGoProの成功事例から読み取れますが、コンテナ化は開発の効率化に大きく貢献します。開発、テスト、本番環境で一貫した環境を提供するため、開発者は新しい機能のリリースに集中することができます。

  • 運用コストの削減:こちらもNetflixやGoProの成功事例から読み取れますが、 コンテナ化はITインフラストラクチャの運用コストを削減する効果があります。サーバーの利用効率が向上し、必要なリソースだけを利用することが可能になります。

  • コンテナのセキュリティ: 規制が厳しい金融サービス業界のVangardでもセキュリティ観点に満足しつつ、メンテナンス性が得られた事例は大きな安心感につながると思います。

AWSコンテナの次のステップ:初心者から一歩進んだレベルへ


最後により深い学習リソース、上級者向けのAWSコンテナサービスとツールを紹介します。

より深い知識を得るためのリソース

  • AWS コンテナ設計[本格入門]4章 のハンズオン実施

    • 最初に紹介した本です。ネットワーク構築からログ管理まですべてが詰まったハンズオンになっています。これはやっておきましょう。

AWS便利サービスの理解(AppRunnerやCopilot、Protonについて)

こちらは概要理解のみで一旦良いかなと感じます。現時点では運用が限定されてしまうことから採用の可能性は低いと思っています。(「これもあるがどうなの?」と聞かれたときに「あー、ありますよね、検討します」と言える程度で良い)

  • AppRunner:コンテナのCI/CDを隠ぺいして自動でやってくれる(とりあえず始める場合には良いかもという理解)

  • Copilot:AppRunnerと同様な機能な気がする。コマンドライン一発でコンテナデプロイまで完了できるらしい。

  • Proton:コンテナおよびサーバーレスアプリケーションのための初のフルマネージドデリバリーサービス

App Runnerの特徴9つまとめてみた

AWS Copilot 入門

AWS Protonを使用した本番運用を考える


執筆者プロフィール:當眞 尚平
AWSエンジニアです。インフラ案件上流(要件定義)から下流(運用)までこなします。
・得意分野:IaC(Terraform、CDK)
・AWS認定:SAP、SAA、DVA、SOA、DOP、MLS、DAS、SCS、ANS
・直近の目標:MLOpsエンジニアになる
・SHIFTでやっていること:IaC、CI/CD、AWSセキュリティ実装

お問合せはお気軽に

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら

PHOTO:UnsplashAdi Goldstein