AWS コンテナサービス(ECR/ECS)
目次
ECR
Elastic Container Registry
AWSから利用するDockerリポジトリ
DockerにおけるDocker-Hubに該当する
ECS
Elastic Container Service
AWSから利用できるDockerサービス
ほぼ全てのAWSサービスを利用できる
プレーン
コントロールプレーン
コンテナを管理する
VPC、セキュリティグループ、コンテナの監視、スケーリング等
ECRがこれに該当する
データプレーン
実際にコンテナが稼働する場所
コントロールプレーンの指示によって起動後、コンテナの状態をコントロールプレーンに通知する
ECSがこれに該当する
ノード(実行基盤)としてEC2かFargateを選択する
ノード
EC2
インスタンスが作成され、管理が必要となるが内部データは保持される
Fargate
インスタンスが作成されず、管理が不要となる一方で内部データは破棄される
アクセスに応じて課金されるのでEC2と比較して低料金になりやすい
タスク
タスク
=コンテナ
EC2(Fagate)上にコンテナを起動させる事を、ノードに「タスクを配置する」と表現する
タスク定義
コンテナの起動設定
docker-compose.ymlに該当
・リソース(メモリ・CPU)設定
・コンテナ定義(DockerFileに該当)を複数設定可能
タスク定義コマンド
aws ecs register-task-definition
--cli-input-json
file://aws/ecs-task-definition-for-command.json
task-definition-for-command.json
”family”: “タスク名“,
”taskRoleArn”: “arn:aws:iam::アカウントID:role/ECSTaskRole”,
”executionRoleArn”: “arn:aws:iam::アカウントID:role/ECSTaskRole”,
”networkMode”: “awsvpc”,
”containerDefinitions”: [
{
”name”: “laravel”,
”image”: “アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/postman/laravel:latest”,
”essential”: true,
”environment”: [
{
”name”: “APP_ENV”,
”value”: “production”
}
],
”secrets”: [
{
”name”: “APP_WORD”,
”valueFrom”: “arn:aws:ssm:ap-northeast-1:178418878883:parameter/APP_WORD”
}
],
”readonlyRootFilesystem”: false,
”logConfiguration”: {
”logDriver”: “awslogs”,
”options”: {
”awslogs-group”: “postman”,
”awslogs-region”: “ap-northeast-1″,
”awslogs-datetime-format”: “%Y-%m-%d %H:%M:%S”,
”awslogs-stream-prefix”: “laravel”
}
}
}
],
”requiresCompatibilities”: [
”FARGATE”
],
”cpu”: “256”,
”memory”: “512”
}
タスク実行コマンド
aws ecs run-task
--cluster postman
--task-definition タスク名
--overrides ‘{
”containerOverrides”: [
{
”name”:”laravel”,”command”: [
phpコマンド
”sh”,”-c”,”php artisan migrate:refresh --seed --force”
]
}
]
}’
--launch-type FARGATE
--network-configuration
“awsvpcConfiguration={
subnets=[サブネットID],
securityGroups=[セキュリティグループID],
assignPublicIp=ENABLED
}”
ライフサイクル
ステータス | 機能 | 保留 |
---|---|---|
provisioning | 準備中 | |
pending | 実行待ち | |
running | 実行中 | |
stopped | 停止済み |
コンテナ定義
Dockerコンテナと1対1
サービス
ALBとタスクを紐づけてアプリケーションを起動する機能
負荷状況に応じて自動的にタスクを追加実行、停止する
注:必ずしもサービスを用いなくてもタスク単体でアプリを起動できる
ALB
ApplicationLoadBalancer
ロードバランサー
URL、コンテナ単位でバランスを調整できる
ターゲットグループ
実サーバへの振り分け設定
クラスター
Cluster
サービス、タスク定義、ノードをまとめた仮想的な概念
実態はない