ECSでDockerコンテナをデプロイする-AWS

前提条件

・ECRにDockerイメージをPushしている。 maya313.hatenablog.com

1. タスク定義の作成

ECSで以下の「task.json」ファイルを利用してタスク定義を作成します。
※以下の変数は右の値に変更してください。
・ecr_url:ECRのDockerイメージURL
aws_account_id:AWSアカウントID

task.json

{
    "family": "sample-task-definition",
    "containerDefinitions": [
        {
            "name": "sample-task-definition",
            "image": "ecr_url",
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "/ecs/sample-task-definition",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "ecs"
                },
                "secretOptions": []
            }
        }
    ],
    "taskRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "1024",
    "memory": "3072",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }
}
$ aws ecs register-task-definition --cli-input-json file://home/maya313/task.json

2. クラスターの作成

ECSでクラスターを作成します。

$ aws ecs create-cluster \
--cluster-name sample-cluster \
--capacity-providers "FARGATE" "FARGATE_SPOT" \
--region ap-northeast-1

3. サービスの作成

ECSのクラスターの中にサービスを作成します。
※以下の変数は右の値に変更してください。
・subnet_id:サブネットID
・security_group_id:セキュリティグループID

$ aws ecs create-service \
--cluster sample-cluster \
--service-name sample-service \
--task-definition sample-task-definition \
--desired-count 1 \
--launch-type FARGATE \
--deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \
--network-configuration "awsvpcConfiguration={subnets=[subnet_id,subnet_id],securityGroups=[security_group_id],assignPublicIp=ENABLED}" \
--enable-ecs-managed-tags