ECSハンズオン(AWS公式)
https://catalog.workshops.aws/ecs-web-application-handson/ja-JP/docker/image
ハンズオンでの構成図
1. VS Code Server
ハンズオンページの「Launch Stack」ボタンをクリックし、開いたCloudFormationの画面上で「スタックの作成」ボタンを押せば完了!
2. Docker構築
下記のコードをDockerfileに貼り付ける
# ruby:3.2.1 というベースイメージを取得する
FROM public.ecr.aws/docker/library/ruby:3.2.1
# 必要なパッケージ群を取得する
RUN apt-get update -qq && \
apt-get install -y nodejs postgresql-client npm && \
rm -rf /var/lib/apt/lists/\*
# ローカルにあるファイルをコンテナイメージ内にコピーする
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
# Rails アプリケーションを作成する
RUN bundle install && \
rails new . -O && \
sed -i -e "52a\ config.hosts.clear\n config.web_console.allowed_ips = '0.0.0.0/0'\n config.action_dispatch.default_headers.delete('X-Frame-Options')" config/environments/development.rb
# Rails を 3000 番ポートで起動する
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0", "-p", "3000"]
次に、Gemfileを作成します。
source 'https://rubygems.org'
gem 'rails', '7.2.2'
Dockerfileをビルドして、Docker Imageを取得して、コンテナ実行
cd /workshop
docker build -t rails-app .
docker run -d -p 8081:3000 rails-app:latest
ホスト (VS Code Server インスタンス) の 8081 番ポートを、
コンテナの 3000 番ポートにマッピングしています。
コンテナの 3000 番ポートでアプリケーションを実行するように Dockerfile を記述したので、
ホストの 8081 番ポートにアクセスすることで Rails アプリケーションにアクセスできます。
ECS構築
用語整理
- ECS
- クラスター(オフィス)
- Dockerコンテナを配置し、EC2やFargateを立ち上げることができる
- タスク定義(求人票)
- 下記の設定内容を決める
- DockerImage、CPU、メモリ、ネットワーク、環境変数 etc...
- 下記の設定内容を決める
- タスク(従業員)
- クラスター内で、タスク定義に基づいて起動されたコンテナのインスタンスのこと
- クラスター(オフィス)
- VPC(Virtual Privete Cloud)
- 仮想ネットワーク空間のことで、IPアドレスを指定して空間を決める
- サブネット
- VPCをのIPアドレス範囲を、さらに分割した小さいネットワークの単位
- パブリックサブネット
- インターネットから直接アクセスできる
- インターネットゲートウェイ
- VPCとインターネットを繋ぐサービス
- プライベートサブネット
- インターネットから直接アクセスできない(NATゲートウェイという仕組みを使えば可能)
VPCとサブネットの作成
クラスターの作成
コンテナイメージの保存
タスク定義の作成
EC2 へのデプロイ
全体の流れ
- クラスターを作成(EC2/Fargateの実行環境)
- タスク定義を登録(コンテナの設計図)
- サービスを作成
- クラスターに属する形で、
- タスク定義を参照して、
- 必要な数のタスクを常時維持
- サービスがタスクを起動
- タスク定義の内容が「反映」されてコンテナが実行される









