見出し画像

AWS EKS on Fargateを最速で検証する方法


はじめに


こんにちは。インフラエンジニアの末盛です。

AWS EKSは、AWSのコンテナ環境ではよく使われるKubernetesのコントロールプレーンの機能を提供してくれるサービスです。

そのデータプレーンとして選択可能なAWS Fargateは、AWSマネージドなサービスである分、EC2をデータプレーンとして使用する場合と比べて制約やFargateならではの仕様があります。

Fargateの導入を検討する際にはそのような制約やFargateの特性を調査、検証する必要があるのですが、そんなときにFargate環境をさっと構築、削除できると便利ですよね。

今回はAWS EKS on Fargateのお試し環境を最速で作成するための具体的な手順を解説したいと思います。

ポイント


手順のポイントは以下の通りです。

  • EKSクラスタとFargateだけでなく、前提となるVPCやサブネット、SG等も作成されます。

  • 環境の構築にあたっては、EKSクラスタを操作するコマンドラインツールであるeksctlを使用します。

AWSマネジメントコンソールでの操作やCloudFormationではなくeksctlを採用した理由は以下の通りです。

  • AWSマネジメントコンソールでは1つ1つAWSリソースを作っていくことになり、時間がかかる。

  • CloudFormationでは、検証後の実環境への適用が比較的スムーズにできるというメリットがあるが、EKSクラスタに必要なほかのAWSリソースの分まで作成しようとすると準備すべき資材が多量になってしまう。

  • eksctlはコマンド一つで必要なリソースをすべて作成してくれるのに加え、裏ではCloudFormationスタックが作成されるため、そのスタックを参考にカスタマイズしたCloudFormationテンプレートを作成することができる。

タスクリスト


実施する手順の項目は以下のとおりです。

  • AWS CLIのインストール

  • kubectlインストール

  • eksctlインストール

  • EKSクラスタ作成

  • 環境確認

  • 目的に応じて検証を実施

  • 環境を削除

手順


それでは具体的な手順の説明に入ります。 クライアント端末としてWindowsを使用する手順になっています。

AWS CLIのインストール


AWS CLIについては既にインストールされている方も多いかと思いますので、具体的な説明は割愛します。 公式ドキュメントのリンクを貼っておきます。

kubectlインストール


Kubernetesを操作するために使用するコマンドラインツールkubectlをインストールします。

PowerShellのプロンプトを立ち上げ、以下のコマンドを実行しkubectlの実行ファイルをダウンロードします。

PS > curl.exe -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.31.2/2024-11-15/bin/windows/amd64/kubectl.exe
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 55.2M  100 55.2M    0     0  3184k      0  0:00:17  0:00:17 --:--:-- 2283k

URLはバージョンによって異なりますので、以下のリンクから最新のバージョンをダウンロードしてください。

ダウンロードしたファイルをパスが通っているフォルダに格納します。 今回は新しいフォルダC:\binを作成して格納します。

PS > mkdir c:\bin
PS > mv .\kubectl.exe c:\bin

パスに追加します。
以下ではコマンドでユーザの環境変数Pathに追加しています。もちろんGUIで追加したり、システムの環境変数に追加してもよいです。

PS > [Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User")+";C:\bin", [EnvironmentVariableTarget]::User)

PowerShellのターミナルを立ち上げなおして以下のコマンドを実行し、kubectlがインストールされていることを確認します。

PS > kubectl version --client
Client Version: v1.31.2-eks-94953ac
Kustomize Version: v5.4.2

eksctlインストール


EKSクラスタの操作に使用するeksctlをインストールします。

PowerShellで以下のコマンドを実行し、eksctlのzipファイルをダウンロードします。

PS > curl.exe -LO https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_windows_amd64.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 35.7M  100 35.7M    0     0  17.2M      0  0:00:02  0:00:02 --:--:-- 23.5M

展開して先ほどパスを通したフォルダに移動します。

PS > Expand-Archive .\eksctl_windows_amd64.zip
PS > mv .\eksctl_windows_amd64\eksctl.exe C:\bin\

PowerShellのターミナルを立ち上げなおして以下のコマンドを実行し、eksctlがインストールされていることを確認します。

PS > eksctl version
0.199.0

EKSクラスタ作成


以下のeksctlコマンドを実行します。

PS > eksctl create cluster --name test --region ap-northeast-1 --fargate
2024-12-22 15:25:29 [ℹ]  eksctl version 0.199.0
2024-12-22 15:25:29 [ℹ]  using region ap-northeast-1
2024-12-22 15:25:29 [ℹ]  setting availability zones to [ap-northeast-1a ap-northeast-1d ap-northeast-1c]
(略)

【オプションの説明】

  • --name:EKSクラスタの名前

  • --region:作成するAWSリージョン

  • --fargate:データプレーンとしてFargateを使用

以下のログが出ればコマンドは終了です。

[]  EKS cluster "test" in "ap-northeast-1" region is ready

環境確認


kubectlコマンドでFargateのデータプレーンが起動していることを確認します。

PS > kubectl get nodes
NAME                                                       STATUS   ROLES    AGE   VERSION
fargate-ip-192-168-104-8.ap-northeast-1.compute.internal   Ready    <none>   50m   v1.30.6-eks-7f9249a
fargate-ip-192-168-184-3.ap-northeast-1.compute.internal   Ready    <none>   50m   v1.30.6-eks-7f9249a

Podが起動していることを確認します。

PS > kubectl get pods -o wide -A
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE                                                       NOMINATED NODE   READINESS GATES
kube-system   coredns-6b959cfc4b-645s6   1/1     Running   0          51m   192.168.104.8   fargate-ip-192-168-104-8.ap-northeast-1.compute.internal   <none>           <none>
kube-system   coredns-6b959cfc4b-mxzmc   1/1     Running   0          51m   192.168.184.3   fargate-ip-192-168-184-3.ap-northeast-1.compute.internal   <none>           <none>

目的に応じて検証を実施


EKSクラスタが作成され、kubectlで操作が可能な状態になりました。

目的に応じてFargate関連のやりたい検証を実施します。

Fargateプロファイルはdefault、kube-systemのNamespaceに対してのみ作成されているため、それ以外のNamespaceにPodを作成した場合は起動しません。

上記の2つのNamespaceで検証するか、検証したいNamespaceのFargateプロファイルを追加で作成する必要があります。

環境を削除


検証が終わったら以下のコマンドで環境を削除します。

PS > eksctl delete cluster --name test --region ap-northeast-1
2024-12-22 16:31:34 [ℹ]  deleting EKS cluster "test"
(略)

以下のログが表示されたら削除は完了です。

2024-12-22 16:33:45 [✔]  all cluster resources were deleted

念のためeksctlよって作成されているCloudFormationスタックが削除されていることを確認します。

コスト


本手順によって作成されたAWSリソースにかかる費用は以下のとおりです。

0.22 USD/h

参考までに70分稼働した場合のコストは以下となりました。

まとめ


今回はAWS EKS on Fargateで最速で検証する手順を紹介しました。

実際にEKSのデータプレーンをEC2からFargateに移行するとなると、Fargateならではの仕様や考慮ポイントが多くあり、実機での検証が不可欠です。

最終的な環境構築はCloudFormation等で実施するとは思いますが、手軽さでいうと今回実施したeksctlでの構築が圧倒的に簡単です。

皆様も上記の手順を活用し、AWS EKS on Fargateの検証をしていただければと思います!

参考リンク



執筆者プロフィール:末盛 孝輔
SIerでSAPベーシスコンサルタントとしてキャリアをスタート。 その後インフラエンジニアへの転向、東京から広島へのUターンを経てSHIFTへ入社。 現在はクラウドインフラ、コンテナ基盤の構築、運用保守に携わっている。

お問合せはお気軽に

SHIFTについて(コーポレートサイト)

SHIFTのサービスについて(サービスサイト)

SHIFTの導入事例

お役立ち資料はこちら

SHIFTの採用情報はこちら

PHOTO:UnsplashSolen Feyissa