📈

JAWS-UG千葉支部オンライン#12 Amazon EKS Observability ハンズオン

2021/11/25に公開

作成背景

もくもく会のアウトプットです。

https://jaws-ug-kyushu.doorkeeper.jp/events/130043

当日のTwitter

右上のTwitterマークで当日イベント内で触れられていたキーワードをもとに検索したページをぶら下げています

https://twitter.com/midnight480/status/1463808173421510656

その他 #jawsugchiba で他の方のTweetも閲覧できるので、覗いてみてください

教材

https://jawsug-chiba.connpass.com/event/230717/

本日は、アマゾン ウェブ サービス ジャパンのエンジニアも特別枠で参加頂いています🙌

🚨アマゾン ウェブ サービス ジャパンが正しい表記らしいです🚨

☝App Runnerと同じと覚えましょう

検証する構成

Workshop - documents

https://dcj71ciaiav4i.cloudfront.net/3AD39960-4385-11EC-9B45-B775B6BEFB9F/

構成

Image from Gyazo

EKSを取り扱う上での注意事項

Workshopには次の解説が書いてあります

Cloud9 では、AWS が管理する一時的なクレデンシャル (認証情報) を利用する機能がありますが、この機能は現在、EKS の IAM 認証と互換性がありません。そのため、本ワークショップではこの機能を無効にして手順を進めていきます。

Image from Gyazo

*Cloud9上で一時的なクレデンシャルを削除します

$ rm -vf ${HOME}/.aws/credentials
$ 
$ aws sts get-caller-identity --query Arn | grep eksworkshop-admin -q && echo "IAM role valid" || echo "IAM role NOT valid"
IAM role valid
$ 

aws-auth ConfigMapを利用

私は個人で、AWS SSO + AWS Organizationsを利用しているのですが、
AdministratorAccessの権限を持っているロールで設定まで完了したものの、
EKSコンソールだと権限がないというエラーが表示されるので、こちらは後日確認してみます。

Image from Gyazo

==========================-
$ kubectl describe configmap -n kube-system aws-auth
Name:         aws-auth
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
mapRoles:
----
- groups:
  - system:bootstrappers
  - system:nodes
  rolearn: arn:aws:iam::****:role/eksctl-eksworkshop-eksctl-nodegro-NodeInstanceRole-1I86XJGQ2L6K1
  username: system:node:{{EC2PrivateDNSName}}
- groups:
  - system:masters
  rolearn: arn:aws:iam::::****::role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_AdministratorAccess_66f5415ccdd212c3
  username: admin

mapUsers:
----
[]

Events:  <none>
==================

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/troubleshooting_iam.html#security-iam-troubleshoot-cannot-view-nodes-or-workloads

実際に確認してみる

出来上がるサンプルアプリケーション

Image from Gyazo

AWS X-Ray - Service Map

Image from Gyazo

Amazon CloudWatch Container Insight

Image from Gyazo

Amazon CloudWatch Log Insight

Image from Gyazo

実際に追ってみた

調査の足がかり(トレース)

Image from Gyazo

Frontend

多少の遅延はあれど遅くはない

Product-Catalog

このブロックが一番時間が掛かっているのでこの処理から優先度を高く確認する

Product-Detail

全く遅くはない

問題箇所のあたり(メトリクス)

Amazon CloudWatch Container Insightを使って、
CPUやメモリを確認したところ、不自然に跳ね上がる様子もなし

Image from Gyazo

コンテナ内部(ログ)

ログを確認していったところ、よく開発でありがちな「とりあえずデバッグ用に入れておいたTODO残しておく」感じで分かりやすく記録されています

Image from Gyazo

一通り終わってから

  • Observabilityとして、どうアプローチを行うのかの練習をワークショップで訓練するといい
  • AWS re:Invent後に英語中心ではあるがワークショップが増える傾向あり
  • kubernetes(k8s)に慣れていない場合は、Pod/Nodeや各種YAMLの構成を今回の サンプルアプリケーションをもとにどのように作っているのかを見るといい

(個人的な)まとめ

今回実施したワークショップは、最近AWS公式に実施されていたイベントで公開されていたんですが、
業務都合で参加できず今回実施できてよかったです。

また、マイクロサービスのログを調査する経験も足りておらず、イベント中に気づけなかったものの、
実際にどのように追うのか学ぶことができてよかったです。

Discussion