ニュース
実運用システムでコンテナを動かすために――、AWSがコンテナ関連サービスを紹介
メルカリの名村CTOによる事例紹介も
2019年9月30日 06:00
アマゾンウェブサービスジャパン株式会社(AWSジャパン)は27日、AWSのコンテナ関連サービスに関する記者説明会を開催した。コンテナそのものだけでなく、実運用システムでコンテナを動かすために必要となるさまざまなAWSサービスを解説するものだ。さらに株式会社メルカリ CTOの名村卓氏をゲストに招いて、同社のAWSのコンテナ関連サービス利用についても紹介した。
実運用システムでコンテナを動かすための多様なAWSサービス
AWSのコンテナ関連サービスについては、AWSジャパンの塚田朗弘氏(スタートアップソリューション部シニアソリューションアーキテクト)が解説した。
実運用システムでDockerなどのコンテナを動かすためには、Dockerの“外”の仕組みとして、複数あるサーバーのどこでコンテナを動かすかなどを管理する「オーケストレーション」、Dockerイメージを保存する「イメージレジストリ」、Dockerを動かすためのサーバー群を管理する「ホスティング」、そして「その他のサービス」の4つが必要になると塚田氏は指摘。そのうえで、それぞれに対応するAWSのサービスを紹介した。
1つめのオーケストレーションのサービスとしては、まずAmazon Elastic Container Service(ECS)がある。「タスク」と「サービス」というシンプルなリソースを操作するのが特徴で、数億コンテナ/週、数百万インスタンスを管理するスケーラビリティーを持つという。各種AWSサービスとの高度な連携が用意され、LinuxコンテナとWindowsコンテナをサポートする。すでに、スタートアップから大手企業まで多数のECSユーザーがいると塚田氏は紹介した。
ECSのほか、世の中にはオープンソースソフトウェア(OSS)のコンテナオーケストレーションのソフトウェアとしてKubernetesもある。Kubernetesなどの開発コミュニティをホストするCNCF(Cloud Native Computing Foundation)の調査によると、51%のKubernetesユーザーがAWS上でワークロードを動かしているという。
そこで、もう1つのオーケストレーションのサービスとしてAWSが提供するのが、Kubernetesをマネージドで提供するAmazon Elastic Kubernetes Service(EKS)だ。これはOSSのKubernetesを改変せずにマネージドで提供しているため、KubernetesエコシステムのOSSやツールを利用できる。また、Kubernetesのとおり、PodやService、Jobなどに分けられたリソースを細かく扱える。
2つめのイメージレジストリとしては、Amazon Elastic Container Registry(ECR)を塚田氏は紹介した。Docker Hubと異なりプライベートレジストリとして利用でき、AWS IAM連携などのセキュリティ機能を持つ。また、クラスタで同じコンテナを多数動かすときにも耐えられる、スケーラブルで高い可用性を持つという。
3つめのホスティングとしては、例えばAmazon EC2上でKubernetesを動かす場合には、EC2インスタンスの管理や増減などをユーザーが自分で運用する必要がある。こうしたコンテナを動かすホストをユーザーが直接管理運用する必要がなくし、コンテナの起動時間や使用リソースに応じて利用できるようにするのが、AWS Fargateだ。
塚田氏は、AWS Fargateの利用企業を紹介し、後で紹介するメルカリでも利用していると語った。
その他のサービスとしては、サービスディスカバリのマネージドサービスであるAWS Cloud Mapや、サービスメッシュのマネージドサービスであるAWS App Mesh、複数台のマシンにわたるコンテナのメトリクスを詳細に可視化するAmazon CloudWatch Container Insights(9月に一般公開されたところ)を塚田氏は紹介した。
塚田氏は最後に、2点を強調した。
1つめは、「コンテナは単体で完結するものではない。全体を俯瞰(ふかん)してプラットフォームを選んでいただきたい」として、AWSのサービス群の充実をアピールした。
2つめは、「『コンテナありき』のような考え方は避ける」ということ。例えばAmazon Lambdaのようなサーバーレスファンクションやコンテナ、仮想マシンは、運用コストとコントロール範囲がトレードオフとなる。こうした多様な選択肢において、ビジネス要件に対して適切なサービスを選択することが必要だと塚田氏は語った。
メルカリの機械学習での事例:AWSとの相性とCRDの活用からAmazon EKSを採用
メルカリでのAWSのコンテナサービス利用については、株式会社メルカリ CTOの名村卓氏が解説した。
メルカリがコンテナサービスを活発に利用している分野に、AI/機械学習がある。メルカリは個人間取引のため、売買される品の状態や写真などは、ECサイトに比べてゆらぎが大きいという。また、個人間取引の安全・安心が大事な一方で、大量の取引なので人手だけでは追いつかず、AIを使った違反検知が必要になっているという。
その1つめの例としてImage Search(画像検索)を名村氏は紹介した。自分で写真をとることで類似した商品を検索できるサービスだ。例えばハンドメイドの品を検索するのにも使えるという。
この画像検索の機械学習はAmazon EKS上で動いているという。機械学習を動かすにはコンテナの複雑な構成が必要になるが、それを毎回すべて定義していると大変になる。そこで、Kubernetesでカスタムリソースを定義するCRD(Custom Resource Definition)機能を使うために、ECSでなくEKSを選んだと名村氏は説明した。このCRDにより、例えば「画像のトレーニング」といった共通のリソースを定義しておき、個別のケースでは最小限のパラメータ指定だけをすればよいという。
名村氏はそのほか、EKSとS3との相性の良さや、S3の充実したイベントフック、S3の長い歴史によるツールとエコシステムなども挙げた。
もう1つの例としては、安心・安全への取り組みにおける、AWSのコンテナサービス利用が紹介された。
具体的には、決済サービスのメルペイにおけるAML/CFT(マネー・ローンダリングおよびテロ資金供与対策)への取り組みだ。これには、AWS上で動くSplunk(総合ログ管理プラットフォーム)と、ストリーミングデータ処理のAmazon Kinesisや、Amazon ECS、Amazon Lambda、AWS Fargateなどさままなサービスを組み合わせて独自の構築しているという。
このシステムとAWSとの相性について名村氏は、Amazon KinesisのSplunk対応や、時期によってログの流量が変動するのにAWS Fargateで自動的にスケールすることなどを挙げた。
最後に名村氏は、メルカリがコンテナを使う理由と、メルカリがAWSを使う理由をまとめた。
メルカリがコンテナを使う理由としては、役割ごとに環境を最小化して最適化できること、開発から本番まで統一したイメージを利用できること、マニフェストベースの運用自動化と再現性、AWSなどのマネージドサービスによるコストと属人化の削減が挙げられた。
また、メルカリがAWSを使う理由としては、長年の実績、無数の新機能が常にリリースされ続けること、Amazonの「Customer Obsession」プリンシプルが挙げられた。