まちん

主にAndroidアプリを作ってます。

ネクストスキル週次ゼミ(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
    • 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
    • セキュリティ
    • DevOps
  • どう勉強していくのか
    • まず 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)
      • どこまで管理してくれるかがサービスによって変わる
    • 階層に分けて比較
  • プラットフォームの選定の考え方
    • 静的サイト
      • 静的サイトホスティング
    • 自分でアプリ開発
      • 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 の選定と、ボリューミーな月でしたが、要素要素をしっかり学習すれば、難しくないなと感じました!

← ホームへ