TOKYOが開催されました。本イベントは、スタートアップ企業または数年以内の起業を検討している企業を対象に、AWSの最新情報はもちろん、ビジネスとテクノロジーの最新の実践知を共有するイベントです。FargateからKubernetesまで〜」をテーマに、AWSを活用した開発のトレンドと具体的な活用事例が紹介されました。FargateからKubernetesまで〜西谷圭介氏(以下、西谷):みなさま、こんにちは。Amazonの西谷と申します。今日は前半で私からAWSのコンテナサービスをご紹介させていただきます。後半はfreeeの九岡さんからKubernetes等のお話をさせていただきます。いうわけで、さっそく進めていきたいと思います。改めまして、Amazonの西谷と申します。Architect)という、どちらかと言うとテクノロジーやソリューションにフォーカスしているソリューションアーキテクトをしています。レスなど、デベロッパー的な動きを担当しています。最初に告知で申し訳ないのですが、いくつか本を書いています。新しいサーバーレスアプリケーション開発の本がちょうど今週末(2018年3月16日)に出ますので、よろしければお手に取っていただけたらなと思います。AWSのコミュニティに「JAWS」というものがあるんですけれども、少し切り口の違う、デベロッパー向けの新しいコミュニティ「Meguro.dev」というものを始めていまして、今月末の3月30日に第1回が開催予定となっています。「connpass」で「Meguro.dev」と検索してもらえれば出てくると思います。今日は、AWSのコンテナサービスについてお話しさせていただくのですが、その前にそもそも「なぜ昨今、コンテナがこれほどもてはやされているのか?」というところの理由を少しまとめてみたので、まず最初にその話をしたいと思います。理由は大きく分けて、パッケージング、配布、イミュータブルインフラストラクチャという3つの部分があると思います。パッケージの部分に関していうと、アプリケーションをコンポーネントレベルで考えたり、モデル化することが容易になるのかなと思います。factorなアプリケーションが作りやすくなっていくのではないかと思います。コンテナ、とくにDockerかなと思うのですが、コンテナイメージというものがアプリケーションに必要な依存関係などもすべて含めて、それが小さく軽量なのでほとんどどのようなマシン上でも動くという、繰り返し実行可能ということが大きな特徴かなと思います。最後は、イミュータブルインフラストラクチャです。パッケージングと配布の2つによって、必要に応じてスケールさせられるイミュータブルな基盤が簡単に実現できると言えます。この3つがコンテナが愛される理由かなと思うのですが、そうは言ってもいまいちよくわからないかなというところで、もう少しわかりやすく説明したいと思います。スタートアップこそコンテナを活用すべき先ほどコンテナが人気の理由を3つあげましたが、「結局のところコンテナのメリットって何なんだ?」というところを簡単にご紹介したいと思います。これも大きく分けて3つあると思っています。Rapid、Efficientと書いていますが、これだけだとわかりづらいと思うので、1つずつ見ていきます。Portabilityは言葉どおり、可搬性が高いということだと思います。特定のイメージをいつどこで実行しても、まったく同じ環境が動くということが一番のポイントです。Flexibilityは、Dockerを触ったことがある方はご存知かと思うのですが、再現可能な環境の策定が柔軟性を持って可能、各イメージ自体のバージョン管理もできるというところがポイントです。その結果、容易な構成管理と自動化が実現できるということが最初の利点だと思います。これを例えば、chefとかansibleで一生懸命いろいろと書いていたものがDockerfileという、定型ファイルだけで落ち着くということが1つのポイントです。日本語では同じ「速い」という言葉になってしまうのですけれども、1つはそもそも「起動が速い」というのは、Dockerの利点としてよく言われていることかなと思います。先ほどお話したように、アプリとそのアプリに必要な依存関係だけがパッケージングされていることから、コンテナというのは所詮はただのプロセスなので、非常に起動が速いと言えます。1つが「開発-テスト-本番まで一貫したイメージを利用したCI/CDのパイプライン構築が可能」と書いてますが、このようなCI/CDのパイプラインをきちんと整理することで、フィードバックループを速く回すことができるようになると言えます。その結果この2つは、「繰り返し」に強いということが言えます。「繰り返し」に強いということは、例えば、先行き不透明なスタートアップだからこそ必要なトライ&エラーがやりやすかいのかなと思います。そもそもサーバの起動が遅かったり、パイプラインそのものが重厚長大だったりすると、トライ&エラーがそうそうできなくなったりするので、非常に大事なポイントかなと思います。最後のEfficientは効率性なのですが、2種類の意味があるかなと思います。そもそも1サーバ上で複数のサービスを動かすことになるので、そのサーバが持っているリソースを余すことなく使うことができる。高集積にすることで、リソース効率が向上するということです。あとは先ほどの、起動が速いとか、パッケージが小さいという点によって、よりダイナミックなスケーラビリティが実現できるので、バッファとして確保しておく、余らせておくリソースが減らせるというところで無駄を削減できると思います。結果的にはこの2つによって、コスト効率が非常に高くなるということです。いうわけで、少し整理をします。少人数で、低コストに、トライ&エラーを繰り返し、速くフィードバックループを回す必要があるスタートアップこそコンテナを活用すべきではないか、ということが私からの1つのメッセージになります。ここでは、コンテナのユースケースを大きく3つあげています。マイクロサービスアーキテクチャ、非同期ジョブ実行、あとは先ほどお話ししたCI/CDのパイプライン(継続的インテグレーション、継続的デプロイ)です。このようなユースケースはいろいろとあるのですが、今日の本題として、私からそのようなコンテナを管理運用していくための、AWSのコンテナサービス関連をご紹介したいと思います。Servicesの全体像まず、Amazonのコンテナサービス全体像はこのようなかたちになっています。Fargateが存在しています。それぞれご説明していきます。これはいわゆるフルマネージドな高可用性・スケーラブルなレジストリで、信頼性と性能の高いDockerのイメージレジストリを構築するようなサービスになっています。当然ながらAWSのサービスなので、IAMによる認証管理機構などもサポートされています。PullのAPIを使ってコンテナイメージが保管できるようになっています。