AWSエンジニアのためのブログメディア
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にログインします。
1
|
$(aws ecr get-login --no-include-email --region ap-northeast-1)
|
そして以下のコマンドを実行し、ECRにプッシュするためにタグ付を行います。
1
|
docker tag [TAG_NAME]:latest [ECR_REPOSITORY_ADDRESS]/[TAG_NAME]:latest
|
そして最後にECRヘのプッシュを行います。そのために以下のコマンドを実行してください。
1
|
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にあります。クラスター名は適宜変更してください。
1
|
ecs-cli configure --cluster [CLUSTER_NAME] --default-launch-type FARGATE --config-name [CONFIG_NAME] --region ap-northeast-1
|
そして以下のコマンドを実行し、AWSの認証情報をECSのconfigファイルに追加します。
1
|
ecs-cli configure profile --access-key [AWS_ACCESS_KEY_ID] --secret-key [AWS_SECRET_ACCESS_KEY] --profile-name [AWS_PROFILE_NAME]
|
クラスターとセキュリティグループを作成する
次に、クラスターとセキュリティグループを作成します。すでに作成済みのクラスターを更新するときは—forceオプションをつけましょう。何度も実行するとセキュリティグループのvpcが許容数を超えるので、その場合はEC2の画面から、セキュリティグループの不必要なキーを削除します。
1
|
ecs-cli up --cluster-config [CLUSTER_NAME] --ecs-profile [PROFILE_NAME] --force
|
出力例
1
2
3
4
5
|
~~中略~~
VPC created: vpc-xxxxxxxxxxxxxxxx
Subnet created: subnet-xxxxxxxxxxx
Subnet created: subnet-xxxxxxxxxxx
Cluster creation succeeded.
|
そして以下のコマンドを実行し、セキュリティグループを作成します。
1
|
aws ec2 describe-security-groups --filters Name=vpc-id,Values=[VPC_ID] --region ap-northeast-1
|
出力例
1
2
3
4
5
6
7
8
|
{
"SecurityGroups":
~~中略~~
{
"GroupId": "sg-xxxxxxxxxxxxxxxx",
"UserId": "xxxxxxxxxxxx"
}
}
|
次に以下のコマンドを実行し、セキュリティグループルールを追加します。
1
|
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ファイルについて紹介しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
・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を起動する
1
|
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を使ってみてください。
Search キーワード検索
Popular 人気の記事
reccomended おすすめ記事
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
通信キャリア向け基盤構築/東京都渋谷区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/在宅ワーク
月給65万~65万円東京都渋谷区(神泉駅) -
各種対応/東京都新宿区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給60万~60万円東京都新宿区(高田馬場駅) -
要件定義、構築/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給60万~60万円東京都千代田区(飯田橋駅) -
運用構築/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給56万~56万円東京都千代田区(飯田橋駅) -
監視システムの保守、更改/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給55万~55万円東京都千代田区(神保町駅)