よくあるユースケース
このページでは、ecspressoの一般的なユースケースと実践的な使用例を紹介します。
Blue/Greenデプロイ
Blue/Greenデプロイは、ダウンタイムなしでアプリケーションを更新するための手法です。ecspressoは、AWS CodeDeployと連携してBlue/Greenデプロイをサポートしています。
設定方法
- サービス定義ファイルで、デプロイメントコントローラーをCodeDeployに設定します:
{
"deploymentController": {
"type": "CODE_DEPLOY"
},
"loadBalancers": [
{
"targetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/blue/0123456789abcdef",
"containerName": "web",
"containerPort": 80
}
]
}
- ecspresso.ymlにCodeDeployの設定を追加します:
region: ap-northeast-1
cluster: default
service: myservice
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
codedeploy:
application_name: AppECS-default-myservice
deployment_group_name: DgpECS-default-myservice
deployment_config_name: CodeDeployDefault.ECSAllAtOnce
auto_rollback_on_error: true
- デプロイを実行します:
$ ecspresso deploy --rollback-events DEPLOYMENT_FAILURE
自動スケーリングの設定
ecspressoを使用して、ECSサービスの自動スケーリングを設定できます。
設定方法
- サービス定義ファイルに自動スケーリングの設定を追加します:
{
"deploymentConfiguration": {
"maximumPercent": 200,
"minimumHealthyPercent": 100
}
}
scale
コマンドを使用して、自動スケーリングを設定します:
$ ecspresso scale --tasks 2 --min-tasks 1 --max-tasks 10
- CloudWatchアラームに基づいたスケーリングポリシーを設定するには、AWS Management Consoleまたはaws-cliを使用します。
環境変数を使用した複数環境の管理
異なる環境(開発、ステージング、本番)で同じアプリケーションを管理するために、環境変数ファイルを使用できます。
設定方法
- 環境ごとに環境変数ファイルを作成します:
$ cat .env.dev
IMAGE_TAG=dev
MIN_CAPACITY=1
MAX_CAPACITY=2
$ cat .env.prod
IMAGE_TAG=v1.2.3
MIN_CAPACITY=2
MAX_CAPACITY=10
- タスク定義ファイルでテンプレート変数を使用します:
{
"containerDefinitions": [
{
"name": "web",
"image": "myapp:",
// ...
}
]
}
- 環境変数ファイルを指定してデプロイします:
$ ecspresso deploy --config ecspresso.yml --envfile .env.dev
$ ecspresso deploy --config ecspresso.yml --envfile .env.prod
一時的なタスクの実行
データベースマイグレーションやバッチ処理などの一時的なタスクを実行するには、run
コマンドを使用します。
使用例
- 基本的なタスク実行:
$ ecspresso run --task-def ecs-task-def.json
- コマンドのオーバーライド:
$ ecspresso run --task-def ecs-task-def.json --overrides '{"containerOverrides":[{"name":"web","command":["./migrate.sh"]}]}'
- 実行結果の確認:
$ ecspresso run --task-def ecs-task-def.json --watch
デプロイ戦略のカスタマイズ
ecspressoでは、様々なデプロイ戦略をカスタマイズできます。
強制的な新規デプロイ
現在のタスク定義を使用して、強制的に新しいデプロイを開始します:
$ ecspresso deploy --force-new-deployment
タスク定義の更新をスキップ
サービスの設定のみを更新し、タスク定義の更新をスキップします:
$ ecspresso deploy --skip-task-definition
自動スケーリングの再開
デプロイ後に自動スケーリングを再開します:
$ ecspresso deploy --resume-auto-scaling
デプロイのロールバック
デプロイに問題が発生した場合、以前のバージョンにロールバックできます。
手動ロールバック
- 以前のリビジョンを確認します:
$ ecspresso revisions
- 特定のリビジョンにロールバックします:
$ ecspresso rollback --revision 3
自動ロールバック
デプロイ中にエラーが発生した場合、自動的にロールバックするように設定できます:
$ ecspresso deploy --rollback-events DEPLOYMENT_FAILURE
Jsonnetを使用した高度なテンプレート
Jsonnetを使用すると、より柔軟で再利用可能な設定ファイルを作成できます。
使用例
- Jsonnetファイルの作成:
// ecs-task-def.jsonnet
local env = std.extVar('env');
local common = import 'common.libsonnet';
{
family: "myservice-" + env,
containerDefinitions: [
{
name: "web",
image: "myapp:" + std.extVar('IMAGE_TAG'),
essential: true,
portMappings: [
{
containerPort: 80,
hostPort: 80,
protocol: "tcp"
}
],
logConfiguration: common.logConfiguration(env),
environment: common.environment(env)
}
],
executionRoleArn: common.roles.executionRole,
networkMode: "awsvpc",
requiresCompatibilities: [
"FARGATE"
],
cpu: if env == "prod" then "512" else "256",
memory: if env == "prod" then "1024" else "512"
}
- 外部変数を指定してデプロイ:
$ ecspresso deploy --config ecspresso.yml --ext-str env=prod --ext-str IMAGE_TAG=v1.2.3
VPC Latticeとの統合
ecspressoは、VPC Latticeとの統合をサポートしています。
設定方法
- サービス定義ファイルにVPC Latticeの設定を追加します:
{
"vpcLatticeConfigurations": [
{
"targetGroupArn": "arn:aws:vpc-lattice:ap-northeast-1:123456789012:targetgroup/tg-0123456789abcdef",
"containerName": "web",
"containerPort": 80
}
]
}
- 通常通りデプロイします:
$ ecspresso deploy --config ecspresso.yml
EBSボリュームの使用
ecspressoは、EBSボリュームの設定もサポートしています。
設定方法
- サービス定義ファイルにボリューム設定を追加します:
{
"volumeConfigurations": [
{
"name": "data",
"managedEBSVolume": {
"encrypted": true,
"kmsKeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
"sizeInGiB": 20,
"snapshotId": "snap-0123456789abcdef0",
"volumeType": "gp3",
"iops": 3000,
"throughput": 125,
"tagSpecifications": [
{
"resourceType": "volume",
"tags": [
{
"key": "Name",
"value": "myservice-data"
}
]
}
]
}
}
]
}
- タスク定義ファイルでボリュームを参照します:
{
"volumes": [
{
"name": "data"
}
],
"containerDefinitions": [
{
"name": "web",
"mountPoints": [
{
"sourceVolume": "data",
"containerPath": "/data",
"readOnly": false
}
]
}
]
}
- 通常通りデプロイします:
$ ecspresso deploy --config ecspresso.yml
次のステップ
- コマンドリファレンスを参照して、各コマンドの詳細を確認しましょう
- 実践ガイドを参照して、より高度な使用方法を学びましょう