2020年で学んだ技術
2020年を何を学んだかで振り返ります。
仕事としてはインフラエンジニア的なポジションで、AWSを前提としてインフラづくりや運用に関わりました。
内容的には、前年から引き続きで、Kubernetesをベースにしたアプリケーションインフラの保守・運用をしました。
また、2020年からの新しいこととして、データ基盤の構築を行いました。
データ基盤
データ基盤については、以下の記事にまとめています。
hi1280.hatenablog.com
AWSには、GlueやAthena、Redshiftといったデータ活用に関わる多くのサービスがあります。
このデータ基盤構築の経験を通してそれらのサービスの使いどころ、メリット、デメリットを実装を通して整理できたのが良い経験になりました。
データ蓄積では、一部のデータソースからの取り込みにFirehoseを利用しました。
Firehoseには、Lambdaによるデータの前処理実行やデータ分析に適したParquetなどのデータ形式の変換ができます。
このような機能を実際に検証できて、Firehoseの理解が深まりました。
今まではなんとなくで使っていたS3について、データ基盤としてS3を活用することになり、改めて理解が深まりました。 hi1280.hatenablog.com
Redash
ECSでRedashの構築を行いました。この経験からRedashの構成、使い方について理解が深まりました。
ECSの理解も足りていなかったので、ECSの勉強にもなりました。
Kubernetes
KubernetesのAPIを使ったKubernetesを拡張する方法を学びました。
- client-goを使ってKubernetesのAPIに触れた - なになれ
- kubectl pluginを作るのに役立つcli-runtimeの使い方を調べた - なになれ
- Kubernetes Nativeなプログラムを作る際に知っておくべきこと - なになれ
この学びの集大成として、KubernetesネイティブなOSSであるArgo RolloutsにPRをマージしてもらうことができました。 hi1280.hatenablog.com
Kubernetesのコードリーディングを行ったり、自分でKubernetes環境を作ってみたりすることで、Kubernetesをより深く理解することに取り組みました。
- Kubernetesのコアコンセプト「Reconciliation Loop」をソースコードリーディングでより深く理解する - なになれ
- Raspberry Piを使ってKubernetesクラスタを構築した - なになれ
Kubernetesにおいては、CPU Limitの指定によっては意図しないスロットリングが発生することを学びました。
Kubernetesマニフェストの生成ツールであるKustomizeについて学びました。
EKS
EKSに関しては、学んだことを書籍化しました。 techbookfest.org
この1年の間では、Terraformで作られるリソースとEKSで作られるリソースをどう管理するかについて悩みました。
個人的な結論としてTerraformでなるべく管理するのが良いと思ったので、その考えを実際に実現するためにはという観点が書籍に込められていたりします。
また、本番環境におけるEKSクラスタのアップデートについても、この1年で経験しました。
AWS
Athenaを活用して、アプリケーションのパフォーマンスを可視化するアプリケーションログ分析の仕組みを作りました。
AWSのコスト削減方法を学びました。
- EC2の起動・停止をスケジュール実行できるAWS Instance Schedulerが便利 - なになれ
- Savings PlansやReserved Instanceをできる限り適用した
EC2インスタンスへのSSH接続をSession Manager化できることを知り、対応しました。
システム監視運用
Opsgenieを使ってオンコール対応を仕組み化しました。
OpsgenieはCloudWatch メトリクスやSentryに対応していてオンコール担当を決めて通知してくれるインシデント管理のサービスです。
Terraform
以下のことを経験して、Terraformを使うのが苦にならないくらいにTerraformが手に馴染むようになりました。
- 定期的にTerraformを実行して、tfnotifyでplan結果を確認する仕組みを作った
- stateを分割して、Terraformのリファクタリング&パフォーマンス向上を行った
- Terraformリソースの重複部分をモジュール化して使いまわせるように対応した
まとめ
来年も引き続きAWS、コンテナ技術、Kubernetes、データエンジニアリング周りを学習できればと思います。