ヤマムギ

growing hard days.

*

Introduction to Amazon EKS Workshopの記録

   

AWS Workshop StudioのIntroduction to Amazon EKSの手順を実行しました。
Workshopのコンテンツが消えた後でも見返せるようにやったことを記録しておきます。

リージョンはバージニア北部(us-east-1)で実行しました

作業環境作成

Cloud9の準備

  • Cloud9をt2.microでデフォルト値で作成しました。
  • Cloud9のAWS managed temporary credentialsは無効化。
  • Cloud9で使用するEC2向けのIAMロールはAWS管理ポリシーAdministratorAccessをアタッチしました。

アイデンティティの確認

ロールを引き受けていることを確認

デフォルトリージョンの設定

us-east-1を確認

ページャーの無効化

手順に従って

eksctlコマンドのインストール

バージョン 0.165.0を確認

kubectlコマンドのインストール

インストール結果を確認

Client Version: v1.28.1-eks-43840fb
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

クラスターの作成

EKS cluster “ekshandson” in “us-east-1” region is readyとなるまでだいたい15分でした。

マネジメントコンソールを見ると、ekshandsonクラスターができていて、ノードグループは3つのEC2インスタンスが指定したアベイラビリティゾーンで起動させるオートスケーリンググループで起動していました。

Control Planeはマネージドで見えなくて、Data PlaneはEC2を使用しているので、3つのノードとしてのインスタンスが見えています。
Control Planeが実行されたkubectlコマンドを受けて、ノード上でpodとしてコンテナを実行します。

デフォルトの名前空間とpod

デフォルトで4つの名前空間ができています。
* default
* kube-node-lease
* kube-public
* kube-system

kube-systemには3つのノードを使ってpodがいくつかできています。

ツール導入とコマンド補完設定

  • jq(jsonデータ処理)、bas-completion(コマンド補完)のインストール

  • docker composeの導入

  • kubectlのコマンド補完

  • eksctlのコマンド補完

  • dockerコマンド補完

  • k=kubectlのエイリアス設定

  • kube-ps1の導入

  • kubectxとkubensの導入

  • sternの導入

  • 設定の読み込み直し

サンプルアプリのデプロイ

3層のアプリケーションがサンプルで用意されていたのでデプロイしてみました。

DynamoDBテーブルの作成

マネジメントコンソールで作成しました。

テーブル名: messages
パーティションキー: uuid 文字列
オンデマンドモード

Dockerイメージの作成

sample-app.zipにはbackendとfrontendディレクトリがあり、それぞれにDpckerfile、app.py、requirements.txt、frontendのみtemplats/home.htmlがありました。

それぞれのDockerfileです。

frontend

backend

docker imagesコマンドで2つのイメージが作成されていることを確認しました。

ECRリポジトリの作成とイメージの登録

frontend用backend用それぞれのECRリポジトリを作成して、URIを変数にセットしました。

docker tagコマンドでリポジトリURIの別名を設定して、ECRにログインして、イメージをプッシュしました。

frontendアプリのデプロイ

作業用ディレクトリの準備

frontendアプリ用の名前空間を作成して切り替え

Deploymentマニフェストの作成

環境変数BACKEND_URLは、frontendのapp.pyから使用しています。

Deploymentの作成

Deploymentリソースを作成したことで、ReplicaSetが作成されて、ReplicaSetリソースによってPodが作成されました。

Serviceマニフェストの作成

type: LoadBalancerとすることで、デフォルトでClassic Load Balancerがデプロイされます。

Serviceの作成

Classic Load BalancerのDNSにブラウザからアクセスすると、frontendアプリにアクセスできます。
まだbackendアプリがないので、アプリが画面にエラーを出力してくれています。

backendアプリのデプロイ

frontend同様に、名前空間を作成、Deploymentマニフェストを作成、Deploymentを作成、Serviceマニフェストを作成、Serviceを作成しました。

backend名前空間を作成して切り替え

Deploymentマニフェストを作成

Deploymentを作成

Serviceマニフェストを作成

Serviceを作成

backendアプリができたので、ブラウザから確認するとメッセージが変わりました。

backendアプリのログを確認します。

botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the Scan operation: User: arn:aws:sts::123456789012:assumed-role/eksctl-ekshandson-nodegroup-ng-a21-NodeInstanceRole-Fkpspxkl2U2G/i-0aa365d55cd4db129 is not authorized to perform: dynamodb:Scan on resource: arn:aws:dynamodb:us-east-1:123456789012:table/messages because no identity-based policy allows the dynamodb:Scan action

DynamoDBテーブルに対してscanの権限がないというエラーです。

IAM Roles for Service Accountsを使用してアプリケーションにIAMロールを付与する。

OIDCプロバイダーの作成

IAMにOpenID Connectプロバイダが作成されました。

IAMポリシーの作成

IAMロールとServiceAccountの作成

CloudFromationスタックによってIAMロールとServiceAccountが作成されました。

名前空間backendに作成されたbackend-dynamodb-accessというServiceAccountに関連づいているIAMロールはOpenID ConnectプロバイダをからAssumeRoleが実行されています。

IAMロールの信頼ポリシー

Deploymentの修正

specにserviceAccountName: backend-dynamodb-accessの行を追加しました。

修正を適用しました。

ポッドが起動し直されます。

できました!!!

クリーンアップ

IAMロール、ServiceAccount、frontend、bakend名前空間、IAMポリシーを個別に削除して、クラスターをまとめて削除。
ECRリポジトリは私はまた使うのでとりあえず置いておきました。

アプリなどを削除するときに名前空間でまとめて削除できるのは便利ですね。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , ,

ad

ad

  関連記事

CloudFormation StackSetsでOrganizations組織のアカウントに一気にIAMロールを作成した

Organizationsで管理している各アカウントにIAMロールを作成したい場 …

AWS SSOのパスワードリマインダーでADのパスワードを変更

AWS Managed Microsoft ADを構築してユーザー追加までで構築 …

AWS Transfer Family EFS向けのSFTP対応サーバー

EFSファイルシステムは作成済です。 AWS Transfer Family S …

AWS Trusted Advisorの2023/11/17発表のAPI

2023/11/17に発表されたAWS Trusted Advisor の新しい …

前からできましたっけ??CloudWatch Logsの保持設定を複数まとめて設定

AWSの個人アカウントで要らなさそうなリソースの断捨離をしてます。 CloudW …

AWS Summit 2017 Tokyo Day2 開場~基調講演

昨年に引き続き今年もAWS Summit Tokyoへ行ってきました。 朝一の新 …

Amazon VPCでIPv6を使用する

VPCのIPv6を設定してみました。 設定 [Amazon 提供の IPv6 C …

VyOSでssm-userからvyosユーザーに切り替える

EC2 VyOSで/etc/resolv.confを設定しました VyOSにSS …

ALBのヘルスチェックでPHPとMySQL接続をチェック

当ブログで504エラーが発生して、オートスケーリングにより自動でインスタンスが置 …

EC2ハードウェア専有インスタンス(Dedicated Instances)を起動して請求書を確認してみました

EC2ハードウェア専有インスタンスのサイトには、次の料金と表記されています。 * …