コンテナ。それは便利そうではあるが、面倒くさそうであり、積極的に取り入れるべきか微妙な存在。
個人的な感想としては、慣れるまでそれなりに大変・慣れれば楽しく便利。そう、つまり触ってみないと何もわからない、いつものヤツだ!細かいことはスッとばして、最低限の感触を掴むための構築手順を AWS + Terraform を用いて懇切丁寧に分解していくぞ!
目的
AWSはチョットデキルし、コンテナに触れてみたいんだけど、何から手を付けたらいいかよくわからない。くらいのコンテナ初心者向けの内容にしていきます。コンテナ感覚を得るための具体的な構築メインなので、細かい話は飛ばし気味にいくため、ド素人向けではないです。今回、構築するのはよくあるWEBサイトのような形をした超簡易的なコード管理とコンテナ運用で、それをAWSで表現していきます。これがスタンダードな構成だ、というわけではなく、これを1つのベース例と捉え、そこから先はそれぞれの目的に向かって肉付けしていくための、キッカケになれれば嬉しいです。
あとは、私自身の理解促進のためと、周囲への伝授用です。コンテナ業界は流行りだしてから歴史が浅いせいか、ハッキリいって、新参者に優しくないと感じました。良く言えば自由度が高く革新的で、悪く言えば不明確かつ成長途上なシステム。その存在意義や具体的事例をみても、これは良いものだ!と初見で思う人は少ないでしょう。
確かに、無理やり従来のサーバー構成からコンテナ構成へ切り替えるほどの強い理由は少ないでしょうし、新規サービスでの適用も、習得コストを考えると微妙かもしれません。しかし、将来的な開発と運用を踏まえると、そろそろ最低限の知識を身に着けておくには良い時期にみえます。
新しいアーキテクチャの理解には苦痛が伴うものですが、シンプルかつライトに解説していくので、ゆっくりしていってね!
注意
本シリーズはコンテナを扱うための入門編ということで、慣れて感触を掴むことを重要視しており、コンテナそのものの仕組みや技術について書かれていません。そのため、仮に今回の構築が役に立って、自分なりに工夫して運用までもっていったとしても、それだけではコンテナ・マスターになったとは言い難いでしょう。コンテナ業界のコンテナーにコンテナを投げつけられないよう、慣れたら地道に知識も仕入れつつ、真摯に取り組んでいきましょう!
目次
なんと、今回は悪い癖である超単体作にならないよう、最初からページ分割だ。賢い!(0) はじめに ← イマココ!
(1) Docker
(2) イメージ自動生成
(3) サービス起動
(4) デプロイ
(5) Auto Scaling
(6) 費用と性能
全体図
まずは、目的地を明確にするために全体図を確認……するのは止めておきましょう。初見にこの複雑そうな図はモチベが底辺を突き抜けてしまいます。
今はサッと2秒だけ眺めて、なんとなく必要な知識量とリソースを覚悟して次へ行きます。
リンク集
重要度とか参考度とかガン無視した、ただ私が参考にしてメモっておいたリンク集です。あとで、なんか知識を広げたいときにでも見てください。
Docker
- 全般
- Dockerfile のベストプラクティス
- Dockerfileを書くときに気をつけていること10選 – Qiita
- Dockerfileを書く時の注意とかコツとかハックとか | kim hirokuni
- Dockerコマンドをsudoなしで実行する方法 – Qiita
- 概念
- 軽量化
- Nginx – Alpine Linux
- Alpine Linux で Docker イメージを劇的に小さくする – Qiita
- Rails on Dockerプロダクションイメージの容量削減をしてみた – Qiita
- 運用
ECS
- 大事
- 全般
- 20180220 AWS Black Belt Online Seminar – Amazon Container Services
- Amazon EC2 Container Service(ECS)の概念整理 – Qiita
- EC2 Container Serviceを使ってみる – Qiita
- Amazon ECSを安定運用するためにやっていること コンテナインスタンス、ログ、モニタリングにおける工夫 – ログミーTech
- 会社の本番環境をDocker(ECS)に置き換えるために準備したこと気づいたこと・カウル Tech Blog
- 「それコンテナにする意味あんの?」迷える子羊に捧げるコンテナ環境徹底比較 #cmdevio2019 | DevelopersIO
- ドキュメント抜粋
- Amazon Elastic Container Service とは – Amazon Elastic Container Service
- Amazon ECS における Docker の基本 – Amazon Elastic Container Service
- タスク定義パラメータ
- 新しいARN&リソースIDの設定
- 201903までは手動有効化、それ以降の作成リソースは自動的に新ver
- Amazon ECS リソースのタグ付け – Amazon Elastic Container Service
- Amazon リソースネーム (ARN) と ID – Amazon Elastic Container Service
- ARN と ID の新しいフォーマットへの移行
- 運用
Fargate
- 全般
- 20180724 AWS Black Belt Online Seminar Amazon Elastic Container Service for Kubernetes (Amazon EKS) / AWS Fargate
- ECS(Fargate)でコンテナアプリケーションを動かすための設定情報の扱い方 – BASE開発チームブログ
- AmazonECS / Fargate 本番運用のための構築とデプロイ方法まとめ – Qiita
- AWS Fargateを本番運用した所感 – コネヒト開発者ブログ
- AWS Fargate – Qiita
- AWS Fargateの素晴らしさをチュートリアルで体験する
- Docker運用基盤をECSからFargateにリプレイスした未来について考察してみた – コネヒト開発者ブログ
- Fargate を試した感想と ecs-deploy で Fargate にデプロイできるようにする話 – kakakakakku blog
- AWS FargateでElixirのコンテンツ配信システムを本番運用してみた – エムスリーテックブログ
- AWS Fargateでtaskを動作させるのに必要な設定の記録
- AWS FargateでAutoScaleを試してみる
- 【祝!】FargateでもECSにごっつ簡単に環境変数に機密情報を渡せるようになりました! | DevelopersIO
- ドキュメント抜粋
- AWS Fargate Advent Calendar 2017
- AWS FargateでRuby on Railsを動かしてみる
- terraformで理解する、”Fargate”と従来型ECSとの違い
- Fargateって秒速何センチメートルでスケールアウトするの?
- Fargate の監視についての考察
- AWS Fargateでコンテナ間通信させたいとき
- ECSで運用していた社内ツールをFargate化したときに、ハマりやすかった3つのポイント
- 費用試算
- 2019年1月にAWS Fargateが大幅値下げしたのでEC2との価格比を確認してみた | DevelopersIO
- 新しいマネージドコンテナサービスAWS Fargateの価格は高いか安いか?ECS/Fargateのコスト最適化を考えてみよう
- 性能
CodeCommit , CodeBuild , CodeDeploy , CodePipeline , CodeStar
- 全般
- チュートリアル: CodePipeline を使用した継続的なデプロイ
- CodeCommitからCodeBuild、イメージをECRにPushするまで入門してみた
- AWS CodeBuildを使ってDockerイメージをビルドし、Amazon EC2 Container Registry(ECR)へpushする | DevelopersIO
- CodePipelineのECRソースのユースケースについて考えてみた
- Amazon ECR をソースとしてコンテナイメージの継続的デリバリパイプラインを構築する | Amazon Web Services ブログ
- Continuous Deployment to Kubernetes using AWS CodePipeline, AWS CodeCommit, AWS CodeBuild, Amazon ECR and AWS Lambda | AWS DevOps Blog
- Continuous Delivery With AWS Beanstalk, CodePipeline and Terraform · Stephen Mann
- CodeDeploy
- AWS CodeDeploy による AWS Fargate と Amazon ECS でのBlue/Greenデプロイメントの実装 | Amazon Web Services ブログ
- Amazon ECS+Fargate入門 (terraformを使ったクラスタ構築とオートスケール、ブルーグリーンデプロイ) – Qiita
- CodePipelineからECSにBlue/Greenデプロイする | DevelopersIO
- CodePipeline
- CodeStar
- メモ
- Blue Green Deployments with ECS #6802 (task_definition を ignore_changes しないと、タスクが更新されてもエラーになる)
Firecracker
おまけ程度。- 全般
いっぱい情報がありますが、あまり気にせず次へ行きましょう!
Next : (1) Docker