AWS ECSのFargate/EC2タイプのCloudFormation記述比較メモ

aws_logo

ECSのEC2タイプとFargateタイプでCloudFormationテンプレートの記述に制約があり手間取ることが多かったので、両者の記述の比較メモ。

ECSクラスタ

Type: AWS::ECS::Cluster
Properties: 
  CapacityProviders: 
    - String
  ClusterName: String
  ClusterSettings: 
    - ClusterSettings
  Configuration: 
    ClusterConfiguration
  DefaultCapacityProviderStrategy: 
    - CapacityProviderStrategyItem
  Tags: 
    - Tag

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html

Fargate EC2
CapacityProviders オンデマンドインスタンス、スポットインスタンスの利用有無 利用するAuto Scaingグループに応じた自由なEC2インスタンススペック選択、インスタンス台数やウォームアップ

ECSサービス

Type: AWS::ECS::Service
Properties: 
  CapacityProviderStrategy: 
    - CapacityProviderStrategyItem
  Cluster: String
  DeploymentConfiguration: 
    DeploymentConfiguration
  DeploymentController: 
    DeploymentController
  DesiredCount: Integer
  EnableECSManagedTags: Boolean
  EnableExecuteCommand: Boolean
  HealthCheckGracePeriodSeconds: Integer
  LaunchType: String
  LoadBalancers: 
    - LoadBalancer
  NetworkConfiguration: 
    NetworkConfiguration
  PlacementConstraints: 
    - PlacementConstraint
  PlacementStrategies: 
    - PlacementStrategy
  PlatformVersion: String
  PropagateTags: String
  Role: String
  SchedulingStrategy: String
  ServiceName: String
  ServiceRegistries: 
    - ServiceRegistry
  Tags: 
    - Tag
  TaskDefinition: String

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html

Fargate EC2
LaunchType FARGATE EC2
LoadBalancers ALBもしくはNLBの指定のみで、CLBは指定できない 任意
NetworkConfiguration 必須 任意
PlacementConstraints 未対応 任意。Cluster query languageにより、タスク配置先の制御が可能
PlacementStrategies 未対応 任意。Cluster query languageにより、タスク配置先の制御が可能
SchedulingStrategy DAEMON未対応なのでREPLICAのみ 任意

ECSタスク定義

Type: AWS::ECS::TaskDefinition
Properties: 
  ContainerDefinitions: 
    - ContainerDefinition
  Cpu: String
  EphemeralStorage: 
    EphemeralStorage
  ExecutionRoleArn: String
  Family: String
  InferenceAccelerators: 
    - InferenceAccelerator
  IpcMode: String
  Memory: String
  NetworkMode: String
  PidMode: String
  PlacementConstraints: 
    - TaskDefinitionPlacementConstraint
  ProxyConfiguration: 
    ProxyConfiguration
  RequiresCompatibilities: 
    - String
  RuntimePlatform: 
    RuntimePlatform
  Tags: 
    - Tag
  TaskRoleArn: String
  Volumes: 
    - Volume

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html

Fargate EC2
ContainerDefinition 後述 後述
Cpu 必須。後述のCPU/メモリ表を参照 任意
EphemeralStorage 任意。タスクごとのエフェメラルストレージを制御 未対応
InferenceAccelerators 未対応 Amazon Elastic Inferenceの利用が可能
IpcMode 未対応 任意
Memory 必須。後述のCPU/メモリ表を参照 任意
NetworkMode awsvpcのみ 任意
PidMode 未対応 任意
PlacementConstraints 未対応 任意。Cluster query languageにより、タスク配置先の制御が可能
ProxyConfiguration プラットフォームバージョン1.3.0以降 任意
RequiresCompatibilities FARGATEが必要 EC2が必要
TaskRoleArn ECS Exceを利用する場合、ここで指定するロールでIAMの調整が必要 任意
Volumes DockerVolumeConfigurationによるDockerボリューム利用は未対応。Host.SourcePathによるDockerコンテナホスト側のパスを指定してのバインドマウントは未対応 EC2が必要

CPU/メモリ表

CPU メモリ
256 (.25 vCPU) 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB)
512 (.5 vCPU) 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB)
1024 (1 vCPU) 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)
2048 (2 vCPU) 4096 (4 GB) と 16384 (16 GB) の間;増分1024 (1 GB)
4096 (4 vCPU) 8192 (8 GB) と 30720 (30 GB) の間;増分1024 (1 GB)

ContainerDefinition

  Command: 
    - String
  Cpu: Integer
  DependsOn: 
    - ContainerDependency
  DisableNetworking: Boolean
  DnsSearchDomains: 
    - String
  DnsServers: 
    - String
  DockerLabels: 
    Key : Value
  DockerSecurityOptions: 
    - String
  EntryPoint: 
    - String
  Environment: 
    - KeyValuePair
  EnvironmentFiles: 
    - EnvironmentFile
  Essential: Boolean
  ExtraHosts: 
    - HostEntry
  FirelensConfiguration: 
    FirelensConfiguration
  HealthCheck: 
    HealthCheck
  Hostname: String
  Image: String
  Interactive: Boolean
  Links: 
    - String
  LinuxParameters: 
    LinuxParameters
  LogConfiguration: 
    LogConfiguration
  Memory: Integer
  MemoryReservation: Integer
  MountPoints: 
    - MountPoint
  Name: String
  PortMappings: 
    - PortMapping
  Privileged: Boolean
  PseudoTerminal: Boolean
  ReadonlyRootFilesystem: Boolean
  RepositoryCredentials: 
    RepositoryCredentials
  ResourceRequirements: 
    - ResourceRequirement
  Secrets: 
    - Secret
  StartTimeout: Integer
  StopTimeout: Integer
  SystemControls: 
    - SystemControl
  Ulimits: 
    - Ulimit
  User: String
  VolumesFrom: 
    - VolumeFrom
  WorkingDirectory: String

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html

Fargate EC2
DisableNetworking 未対応 任意
DockerSecurityOptions 未対応 任意
LinuxParameters Capabilitiesはプラットフォームバージョン1.4.0未満ならDropのサポートのみ、以降なら加えてSYS_PTRACEのAddをサポート。
DevicesMaxSwapSharedMemorySizeSwappinessTmpfs未対応。
任意
LogConfiguration LogDriverawslogssplunkawsfirelensのみサポート 任意
Privileged 未対応 任意
SystemControls 未対応 任意。TCP関連などのカーネルパラメータ調整が可能