AWSのサービスなどを簡潔に説明しました
デプロイする際に最低限のものだけを選びました
リージョン
地理的に分けられたAWSのデータセンターのクラスタのこと
各リージョンには複数のAZが存在します。
AZ(アベイラビリティーゾーン)
リージョン内の独立したデータセンターのこと
リージョン内をもっと細かく分けて冗長性と耐障害性を提供するイメージ
AZのおかげで片方が災害で通信が途絶えてももう片方のAZが繋がっていれば
Webアプリやサービスは止まる事はない
IAM
ユーザーやリソースへのアクセス制御を管理するサービス。
一人一人が全部のサービスのアクセスできたらセキュリティ面的に良くないよねって
ことで一人一人のアクセスをポリシーで制御することができる
Route 53
スケーラブルで高可用性、高信頼性を持つクラウドドメインネームシステム(DNS)ウェブサービスです。
ユーザーがAWSリソースへのルーティングを簡単に制御できるようにするだけでなく、ドメイン名の登録も行うことができます。
また、ヘルスチェックという機能を提供しており、アプリケーションの稼働状態を監視し、
DNSルーティングを自動的に調整することが可能です。
VPC(Virtual Private Cloud)
ユーザー独自の仮想ネットワーク空間を提供するサービス。
これがないと始まらない
Internet Gateway
VPCとインターネットとの間の通信を可能にするゲートウェイ。
この扉がVPCとアタッチすることでwww
との通信を可能にすることができる
パブリックサブネット
簡単に言えば、インターネットと直接通信が可能なVPC内のサブネット。
基本的にここにEC2やECSを入れて自分が作ったアプリを外部(インターネット)
から提供するイメージ
プライベートサブネット
インターネットと直接通信が不可能なVPC内のサブネット。
これはパブリックと逆で秘密にしたいデータや公開したくないものを入れる
DBなどの情報がいっぱい入っているものは基本的にプライベートサブネットへ
Route Table
VPC内のネットワークルート(通信の経路)を制御するテーブル。
RouteTable君はこっちのサブネットとRouteTableさんはこっちのサブネットと紐づいて
といったこんなイメージ
RDS(Relational Database Service)
関係型データベースを提供するマネージドサービス。
AWSがみんな大好きMySQLやPostgresSQLなどのリレーショナルデータベースを管理する
EC2(Elastic Compute Cloud)
スケーラブルな仮想サーバーを提供するサービス。
僕らは操作システム、インスタンスタイプ(CPU、メモリ、ストレージの種類と量を定義)
を選択し、自分のアプリケーションを入れることができる
セキュリティグループ
AWSのバーチャルファイアウォールで、
単一または複数のEC2インスタンスへのトラフィックフローを制御する
セキュリティグループは特定のIPアドレスやIPアドレス範囲、
プロトコルタイプ(HTTP、SSHなど)からのトラフィックを許可または拒否するルールを定義できる
ELB (Elastic Load Balancer)
トラフィックを複数のEC2インスタンス、コンテナ、IPアドレスに自動的に分散する
負荷分散は、アプリケーションの可用性を高め、同時に利用可能なトラフィック量を増やします。
ALB (Application Load Balancer)
ELBの一種で、HTTPとHTTPSトラフィックのロードバランシングを行います。
コンテンツベースのルーティングを提供する
ACM (AWS Certificate Manager)
SSL/TLS証明書の作成、展開、および管理を行うサービス。
これにより、ユーザーはAWSでセキュアなネットワーク通信と
IDの確認を容易に行うことができる
ECS (Elastic Container Service)
Dockerコンテナの運用とスケーリングを管理するサービス。
ユーザーはアプリケーションを定義
必要に応じてスケールアップまたはダウンすることができます。
ECR(Elastic Container Registry)
Dockerコンテナイメージを保存、管理、デプロイするためのフルマネージド型コンテナレジストリサービス
ECRは、開発から本番へのワークフローを容易にし、開発者が同一のAWSアカウント内や他のアカウント、
パブリックリポジトリからイメージをプルして共有することを支援します。
Fargate
サーバーレスコンテナエンジンで、ユーザーがECSまたはEKS(Elastic Kubernetes Service)のランタイムとして使用できます。Fargateは、クラスタやサーバーの運用を管理せずにアプリケーションを実行することを可能にします。
S3 (Simple Storage Service)
インターネット向けのストレージサービスで、任意の量のデータを保存し、世界中から取り出すことが可能。データは“バケット”と呼ばれるコンテナに保存され、各バケットはユニークな名前で識別されます。
CloudWatch
AWSリソースとアプリケーションの監視を行うサービス。
ログの収集、トラッキング、アラーム設定等を通じて、
リソースのパフォーマンスと運用をモニターできます。
自分はここでログを見てなぜエラーが出たのかを確認しました。
まとめ
デプロイ方法でEC2インスタンスに直接インストールしてデプロイするのかと
ECSを使ってdockerのコンテナのイメージをそのまま使ってデプロイする方法で
使用しないサービスがありますが
これらのサービスは知っておいて損はないでしょう!
基本的な部分のインフラ構築自動化
最後に
僕自身どちらも経験しましたがEC2に直接入れるケースの方が苦戦しました
(初めて行う場合3日以上かかるのは当たり前だと思ってます)
SSH通信でインスタンスの中に入りアプリに必要なものを手動でインストールしなくてはなりませんが
ECS(とDocker)を使うと、開発環境をそのまま本番環境に持っていくことができる
つまりSSHでインスタンスに入り必要なソフトウェアを手動でインストールしなくていいのです
何故ならdockerimageの中に必要なソフトウェアが設計されているからです。
なので僕はECSでのデプロイの過程を劇的に簡略化できると思いました。
デプロイまでを経験して改めてdockerの凄さを体験できました。