ネクストスキル週次ゼミ(11月のゼミまとめ)
11 月のネクストスキルの週次ゼミのまとめです。
11 月は主にコンテナ型仮想化技術の入門、XaaS の選定 について学びました。
11 月に学んだこと
第 1 週
Docker 入門について学びました。
- Docker の概要
- なぜ Docker を開発環境などで使うのか
- 再現性
- 構成管理ツール(Ansible, Chef)
- 構築済みイメージ(AMI, Packer)
- 起動速度
- サイズ
- IaC(Dockerfile)
- Docker の仕組み
/var/lib/docker配下について- chroot
- image のレイヤー化
- ベースイメージ, Java, App サーバ, プログラム, ...
- Docker の使用例
- 再現性、高速がメリット。
- コンテナと VM の違い(GuestOS)
- Docker の要素
- レジストリ
- イメージ
- コンテナ
- Docker デーモン
- docker コマンド
- HTTP で Docker デーモンに指示
- 開発環境構築で Docker の基本を学ぶ(demo)
- docker commit は禁じ手
- デモで実行した内容(コマンド)を、コンテナライフサイクルの観点で整理
- コンテナに関する Tips
- Dockerfile はいつも必要なわけではない
- DokcerHub でも誰かわからない人が作ったコンテナは気をつける
- コンテナのメリットをしっかり考えること。
Docker の仕組みの話は聞けてよかったと思いました。 単に思考停止でコンテナを選ぶのではなく、VM とコンテナそれぞれの特性を理解した上で、選択していくのが大事だと思いました。
第 2 週
AmazonECS 入門について学びました。
- コンテナデプロイの流れの基本
- なぜコンテナ?
- 従来の手順書のツラミ
- IaC or イメージ化(VM) -> 前回
- コンテナなら軽量!(ビルド、転送、起動)
- Build, Ship, Run
- デモ実施
- Dockerfile を書く
- イメージをビルドする
- ECR にあげる
- docker pull して起動
- なぜコンテナ?
- Amazon ECS の概要
- コンテナオーケストレーションとは
- 複数コンテナを複数環境で動かす
- どのコンテナをどの VM で動かすのか...
- Kubernetes(or EKS)、Amazon ECS
- 事前に決めたルールに従って、自動でコンテナ配置
- AWS のコンテナ関連サービス
- ECS, EKS
- onEC2 or onFargate
- ECR
- その他
- Elastic Beanstalk
- AWS Batch
- AppRunner
- Lambda
- ECS, EKS
- AWS ECS
- EKS より運用コスト低
- on EC2
- コンテナを置く、EC2 のクラスタを作成
- タスク定義(これをもとにコンテナ起動)
- タスク定義 1 つに対して、1 コンテナの記述(基本)
- LB を使いたい時はサービスを使う
- on Fargate
- EC2 の管理不要
- ECS on Fargate がまずおすすめ。
- Fargate が向かない時
- GPU や大きなメモリ割り当て
- OS レベルのチューニング
- コンテナオーケストレーションとは
- コンテナ本番運用のポイント
- 12 Factor
- 設定は環境変数
- 永続化は RDS などにする
- ロギング
- モニタリング
- CI/CD
- tag には git のコミットハッシュなどを使う
- 環境ごとにビルドしない(stg, prod)
- IaC
- CloudFormation
- Terraform
- CDK
- セキュリティ
- ホストマシン
- コンテナ
- イメージのスキャン(ECR, Trivy, Dockle)
- アプリケーション
- コンテナ設定
--privileged- マウントポイント
- アプリケーションコンテナセキュリティガイド
- DevOps
- 12 Factor
- どう勉強していくのか
- まず Linux やネットワークの知識
- Linux + App サーバ + Web サーバ + DB
- Docker を開発環境で使えるようになる
- ECS or Fargate を使う
- k8s, Istro
- AWS コンテナ設計・構築[本格]入門はおすすめ
- FAQ
- 別タスクのコンテナ間通信のやり方
- 通信ができるかどうかはセキュリティグループ。接続先はホスト名にする
- 2 通り方法あり
- internal alb
- Cloud Map(最近はこっちがよくやる方法)
- サービスディスカバリ
- 別タスクのコンテナ間通信のやり方
かなりボリューミーな内容でしたが、ECS でコンテナを動かせるようになるために、一通り体系的に学べました。
(ハンズオン部分はまだ手を動かせていないですが)、自分もAWS コンテナ設計・構築[本格]入門を読んでみました。 AWS のベストプラクティスの観点から ECS やその周辺サービス、アーキテクチャの例などが書かれており、とても理解しやすかったです。
第 3 週
XaaS のプラットフォーム選定について学びました。
- IaaS、CaaS、PaaS、FaaS、BaaS、SaaS などのプラットフォームの違い
- 責任共有モデル(AWS)
- どこまで管理してくれるかがサービスによって変わる
- 階層に分けて比較
- 責任共有モデル(AWS)
- プラットフォームの選定の考え方
- 静的サイト
- 静的サイトホスティング
- 自分でアプリ開発
- ECS on Fargate
- PaaS
- BaaS
- FaaS
- メンバーによって選ぶ(学習コストなど考慮が必要)
- 静的サイト
- OSS や SaaS の活用
- OSS、ベンダー製品、自作
- OSS の選び方の基準
- 運営(企業、組織、個人)
- ユーザ(誰が使ってるか、コミュニティ、スター数 etc)
- メンテナンス(リリース頻度、最近のリリース日)
- ライセンス
- 比較表
- 開発費は高い
どのプラットフォームを選ぶにしろ、様々のことを考慮しないといけないため、全体を俯瞰できるように、幅広い知識がが必要だなと思いました。
第 4 週
Google Cloud Platform 入門について学びました。
- AWS 以外のクラウドプロバイダについて
- GCP, Azure, IBM, OCI, Alibaba
- Firebase, Heroku, Netlify, Vercel
- OpenStack, AWS Outposts
- ハイブリッドクラウド、マルチクラウド
- GCP の基本サービスの紹介
- GCP と AWS で比べながら見ていった
- demo
- GCE
- Cloud Run
- GCP のビッグデータ・機械学習関連サービスの紹介
- BigQuery(DWH)
- GCS(データレイク)
- Dataflow(ETL)
- Composer(ワークフロー管理)
- BigQuery のデモ
- Google のサンプルプロジェクトがある
- 3 億件とかでも簡単にとってこれる
- Dataproc(Spark)のデモ
AWS だけでなく、GCP も利用できるようになりたいなと思いました。
GCP の認定資格もあるみたいなので、来年は GCP の資格取得を検討してみたいと思います。
第 5 週
受講生のアンケートへの回答の講義でした。
- ネットワークや HTTP の学習手順
- GraphQL サーバの実装と、AWS AppSync と Lambda の連携
- GraphQL とは
- API の形式
- REST
- gRPC
- GraphQL
- 特徴
- クライアントが必要なデータを選択できる(通信が効率的などのメリット)
- demo
- GraphQL のライブラリを使い、サーバを立てる
- apollo
- resolover
- AWS AppSync
- GraphQL サーバのマネージドサービス
- resolver の設定を書く
- resolver の取得先は DynamoDB, Aurora, Lambda, HTTP など設定可能
- demo をやった(Lambda との連携)
- Amplify(BaaS)
- AppSync + DynamoDB
- ファイルシステムやマウントとは何か
- ファイルシステムとは
- デモをした
- EC2 に EBS をもう一つつなげる
- Linux におけるファイルとは
- ストレージの読み書きは、カーネルの仕事
- 最終的には OS のシステムコール
- ファイルディスクリプター
- ファイルとは、バイトの列として構造化された情報の入れ物
- 0,1 で読み書きできればファイル
- 通信もファイル
GraphQL は特にわかりやすくて、applo や、AppSync のデモもあり、自分の中で整理ができてクリアになりました。
まとめ
11 月は、コンテナの基本から ECS まで学び、さらに今まで学習してきたことを積み上げたような XaaS の選定と、ボリューミーな月でしたが、要素要素をしっかり学習すれば、難しくないなと感じました!
