2021/06/22

AWSのECSとは?使い方をコマンドベースで詳しく解説!

 
  

AWS ECSとは

AWS ECSとはEC2 Container Serviceといい、EC2におけるコンテナサービスを意味します。ECSを通して、コンテナを用いてAWS上にサービスをアップロードすることができます。 ECSでは、Dockerコンテナを使用するので、環境に依存せずに開発を容易に行うことができます。また、ECSの中でもAWS Fargateという起動タイプではリソースの管理をAWS側で自動に行ってくれるので、リソースの管理が容易になります。

AWS ECSの使い方

ECSの使い方には手順が4つあります。 ①Dockerをインストール ②Dockerイメージを作成 ③そして作成したDockerイメージをECRにプッシュ ④ECRにアップロードされたDockerコンテナを起動 使い方を順に説明していきます。この記事はAWS CLIを使うことを前提としているので、AWS CLIのセットアップが必要な方は、まずCLIの使い方を調べてみてください。

1. Dockerをインストールする

Dockerのインストールは公式サイトから行うことができます。自分のOSにあったものを公式ページの手順に沿ってインストールしてください。

2. Dockerイメージを作成する

Dockerイメージを作成するためには、docker-compose.ymlとDockerfileの2つを編集する必要があります。 詳しいDockerの使い方は別記事を参考にするようにしてください。Dockerイメージを作成する際に、TAGの名前を設定するようにしてください。後々これを使用します。

3. DockerイメージをECRにプッシュする

AWS ECR(Elastic Container Registry)にDockerイメージをプッシュします。 DockerイメージをECRにプッシュするためには、まずECR上で、リポジトリを作成し、リポジトリのアドレスを入手します。そして以下のコマンドを実行して、AWSにログインします。
$(aws ecr get-login --no-include-email --region ap-northeast-1)
そして以下のコマンドを実行し、ECRにプッシュするためにタグ付を行います。
docker tag [TAG_NAME]:latest [ECR_REPOSITORY_ADDRESS]/[TAG_NAME]:latest
そして最後にECRヘのプッシュを行います。そのために以下のコマンドを実行してください。
docker push [ECR_REPOSITORY_ADDRESS]/[TAG_NAME]:latest

4. Dockerコンテナを起動する

以下で説明するコマンドにおいて、[]で囲まれる部分は該当する変数に置き換えてコマンドを実行してください。

下準備

まず、IAMにおいて、AmazonECS_FullAccess、AmazonEC2ContainerRegistryFullAccessの2つのポリシーをユーザーに追加してください。IAMの使い方については別記事を参照してください。 次にecsTaskExecutionRole のロールを作成します。手順はロールの作成、信頼されたエンティティの選択、EC2、アクセス権限ポリシーをアタッチ、AmazonECSTaskExecutionRolePolicyを選択、tagの追加はそのまま、名前にecsTaskExecutionRoleとして追加の順に行います。これでロールを作成することができます。 もしAmazonECSTaskExecutionRolePolicyが存在しない場合、アタッチポリシー、フィルターにAmazonECSTaskExecutionRolePolicy と入力し、AmazonECSTaskExecutionRolePolicy を選択してください。

ECSのConfigファイルを作成する

ecsのconfigファイルを作成します。configファイル自体は~/.ecsにあります。クラスター名は適宜変更してください。
ecs-cli configure --cluster [CLUSTER_NAME] --default-launch-type FARGATE --config-name [CONFIG_NAME] --region ap-northeast-1
そして以下のコマンドを実行し、AWSの認証情報をECSのconfigファイルに追加します。
ecs-cli configure profile --access-key [AWS_ACCESS_KEY_ID] --secret-key [AWS_SECRET_ACCESS_KEY] --profile-name [AWS_PROFILE_NAME]

クラスターとセキュリティグループを作成する

次に、クラスターとセキュリティグループを作成します。すでに作成済みのクラスターを更新するときは—forceオプションをつけましょう。何度も実行するとセキュリティグループのvpcが許容数を超えるので、その場合はEC2の画面から、セキュリティグループの不必要なキーを削除します。
ecs-cli up --cluster-config [CLUSTER_NAME] --ecs-profile [PROFILE_NAME] --force
出力例
~~中略~~
 VPC created: vpc-xxxxxxxxxxxxxxxx
 Subnet created: subnet-xxxxxxxxxxx
 Subnet created: subnet-xxxxxxxxxxx
 Cluster creation succeeded.
そして以下のコマンドを実行し、セキュリティグループを作成します。
aws ec2 describe-security-groups --filters Name=vpc-id,Values=[VPC_ID] --region ap-northeast-1
出力例
{
    "SecurityGroups":
            ~~中略~~
                        {
                            "GroupId": "sg-xxxxxxxxxxxxxxxx",
                            "UserId": "xxxxxxxxxxxx"
                        }
 }
次に以下のコマンドを実行し、セキュリティグループルールを追加します。
aws ec2 authorize-security-group-ingress --group-id [SECURITY_GROUP_ID] --protocol tcp --port 80 --cidr 0.0.0.0/0 --region ap-northeast-1

ECSの構成ファイルを修正する

次に以下の2つのDockerの構成ファイルを修正します。以下ではNginxを使用する場合のdocker-composeファイルについて紹介しています。
・ecs-params.yml
version: 1
task_definition:
  task_execution_role: ecsTaskExecutionRole
  ecs_network_mode: awsvpc
  task_size:
    mem_limit: 2.0GB(必要に応じて変更してください)
    cpu_limit: 1024(必要に応じて変更してください)

run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - [SUBNETID1]
        - [SUBNETID2]
      security_groups:
        - [SECURITY_GROUP_ID]
      assign_public_ip: ENABLED


・Docker-compose.yml
version: '3'
services:
  web:
    environment:
      - AWS_SECRET_ACCESS_KEY=[AWS_SECRET_ACCESS_KE]
      - AWS_ACCESS_KEY_ID=[AWS_ACCESS_KEY_ID]
      - AWS_DEFAULT_REGION=ap-northeast-1
    - AWS_PROFILE=prod
    image: [ECR_REPOSITORY_ADDRESS]/[TAG_NAME]
    logging:
      driver: awslogs
      options:
        awslogs-group: tutorial
        awslogs-region: ap-northeast-1

  nginx:
    environment:
      - AWS_SECRET_ACCESS_KEY=[AWS_SECRET_ACCESS_KEY]
      - AWS_ACCESS_KEY_ID=[AWS_ACCESS_KEY_ID]
      - AWS_DEFAULT_REGION=ap-northeast-1
    image: [ECR_REPOSITORY_ADDRESS]/[TAG_NAME]
    ports:
      - 80:80
    logging:
      driver: awslogs
      options:
        awslogs-group: tutorial
        awslogs-region: ap-northeast-1
        awslogs-stream-prefix: nginx
networks:
  nginx_network:
    driver: bridge

ECSを起動する

ecs-cli compose --file docker-compose.yml --ecs-params ecs-params.yml --project-name [PROJECT_NAME] service up --create-log-groups --cluster-config [CONFIG_NAME] --ecs-profile [PROFILE_NAME]
このあとマネジメントコンソールに移動し、ECSの画面に移ります。そして、クラスター、タスク、パブリックIPの順にアクセスすることで起動しているコンテナを確認することができます。

まとめ

今回は、AWS ECSについての概要と、その使い方について解説しました。 特にリソースの管理を自動で行ってくれるAWS Fargateという起動タイプにおける使い方について紹介しました。 これまでDockerについて知ってはいても、実際の使い方がわからなかったという方や、Dockerの使い方は知っていたが、管理の手間を感じていた方は、本記事を参考にAWS ECSを使ってみてください。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】