目から鱗!Amazon EKS Workshopが示す学習環境の仕組み

無事に狭義の意味でAWS認定資格を全て取得しましたが、新しいAI/ML系の資格を心待ちにしております。

この度、Amazon EKS Workshopのハンズオン会をコミュニティイベントで開催する準備を着々と進めておりました。準備を進める中で、EKS Workshopの仕組みがとても素晴らしいことに気づき、その仕組みを紹介いたします。

EKS Workshopとは

EKS Workshopは、一連の実践的なラボ演習を通じて、EKSが提供するさまざまな機能と、それがAWSの幅広いサービスとどのように統合されるかを学習および探索できるようになっています。ラボはいくつかの領域にグループ分けされています。

www.eksworkshop.com

EKS Workshop の仕組みのご紹介

EKS Workshopの仕組みについてご紹介いたします。

1. Cloud9起動(Workshop環境のブートストラップ)の仕組み

最初のWorkshop環境のブートストラップでは、主に以下の処理が行われています。


  1. AWS CloudFormation スタックによるAWSリソースのプロビジョニング。これにはCloud9、EC2、SSM Document、IAM Roleなどが含まれます。
  2. カスタムリソースによるAWS Lambdaの起動。Lambdaは、EC2にIAM Roleをアタッチし、EBSのサイズを変更します。EC2の再起動後、Workshopが動作するようにセットアップ用スクリプトをSSM Run Commandを経由してEC2で実行します。
  3. セットアップ用スクリプトは、GitHubのEKS Workshopリポジトリをクローンし、クローンしたコードに含まれているインストーラーを実行します。(インストーラーの実行内容は次に解説します。)

処理の流れをシーケンス図で表すと、以下のようになります。(画像をクリックすると拡大表示されます。)

2. インストーラーの仕組み

EC2で実行されるEKS Workshopのセットアップ用インストーラースクリプトは、主に以下の処理を行っています。


  1. OSパッケージ管理によるパッケージソフトのインストール
  2. kubectlやhelmなど、必要なソフトウェアのインストール
  3. EKS Workshop専用の独自コマンドのインストール(実体はbashスクリプト)
  4. bashrcの初期設定

処理の流れをシーケンス図で表すと、以下のようになります。(画像をクリックすると拡大表示されます。)

独自コマンドが配置された後、以下の画像のように /usr/local/bin ディレクトリにコマンドが配置されています。これらのコマンドの実体はシェルスクリプトです。

3. use-cluster コマンドの仕組み

use-cluster コマンドは、Cloud9で動作するWorkshopの環境でEKSクラスターを操作できるようにするための設定を行います。主に以下の処理を実行します。


  1. EKSノードグループ情報を取得し、ノードグループがワークショップを開始できる状態かをチェックします。
  2. EKSクラスター情報を取得し、EKSクラスターへの接続情報をkubectlの設定情報に追記します。また、各種環境変数を設定します。
  3. Cloud9を利用しているIAMユーザーと、Cloud9用のIAM RoleがEKSクラスター関連の情報を取得できるよう権限を設定します(eksctlを利用)。

処理の流れをシーケンス図で表すと、以下のようになります。(画像をクリックすると拡大表示されます。)

4. prepare-environment コマンドの仕組み

prepare-environment コマンドは、ラボ形式となっているWorkshopを開始するために最初に実行され、ラボを始めるための各種設定を行います。実体は reset-environment コマンドです。主に以下の処理を行います。


  1. ラボごとに指定された引数を用いて、reset-environment コマンドを実行します。
  2. reset-environment コマンドは、まず以下のリセット処理を行います
    1. kubectlに設定したEKSクラスターへの接続情報を削除し、接続情報を再取得後に再設定します。
    2. ディレクトリ構造をリセットします。
    3. EKS WorkshopのGitHubリポジトリをクローンします。
    4. load-generator(負荷をかける機能)や other の namespace を削除するEKSのリセット処理を行います。
    5. EKSクラスターに対して --prune --all オプションを利用した全リセットを行います。terraformでプロビジョニングされたAWSリソースがあれば、このタイミングで destroy を行います。
  3. reset-environment コマンドは次に、ラボごとのセットアップを行います。ここにはterraformによる他のAWSリソースのセットアップも含まれます。
  4. 環境変数の設定、ノードグループの状態やスケーリングの状態のチェックが完了後、prepare-environment 関数に戻り、環境変数を再設定して処理を終了します。

処理の流れをシーケンス図で表すと、以下のようになります。(画像をクリックすると拡大表示されます。)

本ブログで紹介しているEKS Workshopの仕組みの中で、最も濃密な内容を扱っているのが、この prepare-environment コマンドです。非常に興味深い内容となっています。

5. delete-environment コマンドの仕組み

delete-environment コマンドは、EKSクラスターを削除する前に後片付けを行うコマンドです。主に以下の処理を行います。


  1. 引数を指定せずに reset-environment コマンドを実行することで、EKSクラスターやAWSリソースのプロビジョニング状態のリセットのみを行います。
  2. ショッピングサイトの例として使用されているベースアプリケーションを、EKSクラスターから削除します。

処理の流れをシーケンス図で表すと、以下のようになります。(画像をクリックすると拡大表示されます。)

まとめ

本ブログ投稿では、EKS Workshopが行っているきめ細かい処理の内容をご紹介しました。ここで紹介しきれていない仕組みもまだいくつか存在します。このハンズオン環境の構築方法は非常に勉強になりました。今後のハンズオン環境の実施の際に、この知識を活かしていきたいと考えています。本記事が皆様の参考になれば幸いです。