この記事の目次
AWS ECSとは

AWS ECSの使い方

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の順にアクセスすることで起動しているコンテナを確認することができます。
まとめ

この記事の監修者・著者

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