aws.ecs-capacity-provider resource¶
Description¶
CapacityProvider manages an ECS capacity provider. Exactly one provider block is required: an Auto Scaling group provider is account-scoped and must not set cluster, while a Managed Instances provider is cluster-scoped and requires cluster. Tags are reconciled separately from provider settings.
The name and cluster inputs must match ^[0-9A-Za-z_-]{1,255}$, ARN fields get generic ARN validation, and allowed/excluded instance types are checked for length and ^[a-zA-Z0-9.*-]+$ in validate because those checks are not derivable constraints.
Source: internal/service/ecs/capacity_provider_rsrc.go:51
Example usage:
imports: {
aws: 'github.com/cloudboss/unobin-library-aws'
}
resources: {
example: aws.ecs-capacity-provider {
# Set input fields here.
}
}
Inputs¶
name
string
cluster
optional(string)
auto-scaling-group-provider
optional(object)
optional(
object({
auto-scaling-group-arn: string
managed-draining: optional(string)
managed-scaling: optional(
object({
instance-warmup-period: optional(integer)
maximum-scaling-step-size: optional(integer)
minimum-scaling-step-size: optional(integer)
status: optional(string)
target-capacity: optional(integer)
})
)
managed-termination-protection: optional(string)
})
)
managed-instances-provider
optional(object)
optional(
object({
auto-repair-configuration: optional(
object({
actions-status: optional(string)
})
)
infrastructure-optimization: optional(
object({
scale-in-after: optional(integer)
})
)
infrastructure-role-arn: string
instance-launch-template: object({
capacity-option-type: optional(string)
capacity-reservations: optional(
object({
reservation-group-arn: optional(string)
reservation-preference: optional(string)
})
)
ec2-instance-profile-arn: string
fips-enabled: optional(boolean)
instance-metadata-tags-propagation: optional(boolean)
instance-requirements: optional(
object({
memory-mib: object({
min: integer
max: optional(integer)
})
vcpu-count: object({
min: integer
max: optional(integer)
})
accelerator-count: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
accelerator-manufacturers: list(string)
accelerator-names: list(string)
accelerator-total-memory-mib: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
accelerator-types: list(string)
allowed-instance-types: list(string)
bare-metal: optional(string)
baseline-ebs-bandwidth-mbps: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
burstable-performance: optional(string)
cpu-manufacturers: list(string)
excluded-instance-types: list(string)
instance-generations: list(string)
local-storage: optional(string)
local-storage-types: list(string)
max-spot-price-as-percentage-of-optimal-on-demand-price: optional(integer)
memory-gib-per-vcpu: optional(
object({
max: optional(number)
min: optional(number)
})
)
network-bandwidth-gbps: optional(
object({
max: optional(number)
min: optional(number)
})
)
network-interface-count: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
on-demand-max-price-percentage-over-lowest-price: optional(integer)
require-hibernate-support: optional(boolean)
spot-max-price-percentage-over-lowest-price: optional(integer)
total-local-storage-gb: optional(
object({
max: optional(number)
min: optional(number)
})
)
})
)
local-storage-configuration: optional(
object({
use-local-storage: boolean
})
)
monitoring: optional(string)
network-configuration: object({
security-groups: list(string)
subnets: list(string)
})
storage-configuration: optional(
object({
storage-size-gib: integer
})
)
})
propagate-tags: optional(string)
})
)
tags
map(string)
Input Constraints¶
Field combinations
Exactly one of auto-scaling-group-provider or managed-instances-provider.
Forbidden together: auto-scaling-group-provider and cluster.
Managed instances provider rules
cluster is required with managed-instances-provider.
Rule logic
- When
input.managed-instances-provider != null- Require
input.cluster != null
auto-repair actions-status must be ENABLED or DISABLED.
Rule logic
- When
input.managed-instances-provider.auto-repair-configuration.actions-status != null- Require
input.managed-instances-provider.auto-repair-configuration.actions-status == 'ENABLED'
|| input.managed-instances-provider.auto-repair-configuration.actions-status == 'DISABLED'
scale-in-after must be between -1 and 3600.
Rule logic
- When
input.managed-instances-provider.infrastructure-optimization.scale-in-after != null- Require
(input.managed-instances-provider.infrastructure-optimization.scale-in-after == null || input.managed-instances-provider.infrastructure-optimization.scale-in-after >= -1)
&& (input.managed-instances-provider.infrastructure-optimization.scale-in-after == null || input.managed-instances-provider.infrastructure-optimization.scale-in-after <= 3600)
capacity-option-type must be ON_DEMAND, SPOT, or RESERVED.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.capacity-option-type != null- Require
input.managed-instances-provider.instance-launch-template.capacity-option-type == 'ON_DEMAND'
|| input.managed-instances-provider.instance-launch-template.capacity-option-type == 'SPOT'
|| input.managed-instances-provider.instance-launch-template.capacity-option-type == 'RESERVED'
managed instances network-configuration subnets must not be empty.
Rule logic
- When
input.managed-instances-provider != null- Require
input.managed-instances-provider.instance-launch-template.network-configuration.subnets != null
&& @core.length(input.managed-instances-provider.instance-launch-template.network-configuration.subnets) >= 1
monitoring must be BASIC or DETAILED.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.monitoring != null- Require
input.managed-instances-provider.instance-launch-template.monitoring == 'BASIC'
|| input.managed-instances-provider.instance-launch-template.monitoring == 'DETAILED'
reservation-preference must be a valid capacity reservation preference.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.capacity-reservations.reservation-preference != null- Require
input.managed-instances-provider.instance-launch-template.capacity-reservations.reservation-preference == 'RESERVATIONS_ONLY'
|| input.managed-instances-provider.instance-launch-template.capacity-reservations.reservation-preference == 'RESERVATIONS_FIRST'
|| input.managed-instances-provider.instance-launch-template.capacity-reservations.reservation-preference == 'RESERVATIONS_EXCLUDED'
propagate-tags must be CAPACITY_PROVIDER or NONE.
Rule logic
- When
input.managed-instances-provider.propagate-tags != null- Require
input.managed-instances-provider.propagate-tags == 'CAPACITY_PROVIDER'
|| input.managed-instances-provider.propagate-tags == 'NONE'
allowed-instance-types allows at most 400 entries.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.allowed-instance-types != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.allowed-instance-types == null
|| @core.length(input.managed-instances-provider.instance-launch-template.instance-requirements.allowed-instance-types) <= 400
excluded-instance-types allows at most 400 entries.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.excluded-instance-types != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.excluded-instance-types == null
|| @core.length(input.managed-instances-provider.instance-launch-template.instance-requirements.excluded-instance-types) <= 400
memory-mib and vcpu-count ranges must be at least 1.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.memory-mib.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.memory-mib.min >= 1)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.memory-mib.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.memory-mib.max >= 1)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.vcpu-count.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.vcpu-count.min >= 1)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.vcpu-count.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.vcpu-count.max >= 1)
accelerator-count range must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-count != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-count.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-count.min >= 0)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-count.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-count.max >= 0)
accelerator-total-memory-mib range must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-total-memory-mib != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-total-memory-mib.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-total-memory-mib.min >= 0)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-total-memory-mib.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-total-memory-mib.max >= 0)
baseline-ebs-bandwidth-mbps range must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.baseline-ebs-bandwidth-mbps != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.baseline-ebs-bandwidth-mbps.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.baseline-ebs-bandwidth-mbps.min >= 0)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.baseline-ebs-bandwidth-mbps.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.baseline-ebs-bandwidth-mbps.max >= 0)
memory-gib-per-vcpu range must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.memory-gib-per-vcpu != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.memory-gib-per-vcpu.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.memory-gib-per-vcpu.min >= 0)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.memory-gib-per-vcpu.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.memory-gib-per-vcpu.max >= 0)
network-bandwidth-gbps range must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.network-bandwidth-gbps != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.network-bandwidth-gbps.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.network-bandwidth-gbps.min >= 0)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.network-bandwidth-gbps.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.network-bandwidth-gbps.max >= 0)
network-interface-count range must be at least 1.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.network-interface-count != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.network-interface-count.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.network-interface-count.min >= 1)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.network-interface-count.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.network-interface-count.max >= 1)
storage-size-gib must be at least 1.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.storage-configuration != null- Require
input.managed-instances-provider.instance-launch-template.storage-configuration.storage-size-gib == null
|| input.managed-instances-provider.instance-launch-template.storage-configuration.storage-size-gib >= 1
total-local-storage-gb range must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.total-local-storage-gb != null- Require
(input.managed-instances-provider.instance-launch-template.instance-requirements.total-local-storage-gb.min == null || input.managed-instances-provider.instance-launch-template.instance-requirements.total-local-storage-gb.min >= 0)
&& (input.managed-instances-provider.instance-launch-template.instance-requirements.total-local-storage-gb.max == null || input.managed-instances-provider.instance-launch-template.instance-requirements.total-local-storage-gb.max >= 0)
bare-metal must be included, required, or excluded.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.bare-metal != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.bare-metal == 'included'
|| input.managed-instances-provider.instance-launch-template.instance-requirements.bare-metal == 'required'
|| input.managed-instances-provider.instance-launch-template.instance-requirements.bare-metal == 'excluded'
burstable-performance must be included, required, or excluded.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.burstable-performance != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.burstable-performance == 'included'
|| input.managed-instances-provider.instance-launch-template.instance-requirements.burstable-performance == 'required'
|| input.managed-instances-provider.instance-launch-template.instance-requirements.burstable-performance == 'excluded'
local-storage must be included, required, or excluded.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.local-storage != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.local-storage == 'included'
|| input.managed-instances-provider.instance-launch-template.instance-requirements.local-storage == 'required'
|| input.managed-instances-provider.instance-launch-template.instance-requirements.local-storage == 'excluded'
max-spot-price-as-percentage-of-optimal-on-demand-price must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.max-spot-price-as-percentage-of-optimal-on-demand-price != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.max-spot-price-as-percentage-of-optimal-on-demand-price == null
|| input.managed-instances-provider.instance-launch-template.instance-requirements.max-spot-price-as-percentage-of-optimal-on-demand-price >= 0
on-demand-max-price-percentage-over-lowest-price must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.on-demand-max-price-percentage-over-lowest-price != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.on-demand-max-price-percentage-over-lowest-price == null
|| input.managed-instances-provider.instance-launch-template.instance-requirements.on-demand-max-price-percentage-over-lowest-price >= 0
spot-max-price-percentage-over-lowest-price must be at least 0.
Rule logic
- When
input.managed-instances-provider.instance-launch-template.instance-requirements.spot-max-price-percentage-over-lowest-price != null- Require
input.managed-instances-provider.instance-launch-template.instance-requirements.spot-max-price-percentage-over-lowest-price == null
|| input.managed-instances-provider.instance-launch-template.instance-requirements.spot-max-price-percentage-over-lowest-price >= 0
accelerator-manufacturers entries must be valid.
Rule logic
- For each
input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-manufacturers- Require
@each.value == 'amazon-web-services'
|| @each.value == 'amd'
|| @each.value == 'nvidia'
|| @each.value == 'xilinx'
|| @each.value == 'habana'
accelerator-names entries must be valid.
Rule logic
- For each
input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-names- Require
@each.value == 'a100'
|| @each.value == 'inferentia'
|| @each.value == 'k520'
|| @each.value == 'k80'
|| @each.value == 'm60'
|| @each.value == 'radeon-pro-v520'
|| @each.value == 't4'
|| @each.value == 'vu9p'
|| @each.value == 'v100'
|| @each.value == 'a10g'
|| @each.value == 'h100'
|| @each.value == 't4g'
accelerator-types entries must be gpu, fpga, or inference.
Rule logic
- For each
input.managed-instances-provider.instance-launch-template.instance-requirements.accelerator-types- Require
@each.value == 'gpu'
|| @each.value == 'fpga'
|| @each.value == 'inference'
cpu-manufacturers entries must be valid.
Rule logic
- For each
input.managed-instances-provider.instance-launch-template.instance-requirements.cpu-manufacturers- Require
@each.value == 'intel'
|| @each.value == 'amd'
|| @each.value == 'amazon-web-services'
instance-generations entries must be current or previous.
Rule logic
- For each
input.managed-instances-provider.instance-launch-template.instance-requirements.instance-generations- Require
@each.value == 'current'
|| @each.value == 'previous'
local-storage-types entries must be hdd or ssd.
Rule logic
- For each
input.managed-instances-provider.instance-launch-template.instance-requirements.local-storage-types- Require
@each.value == 'hdd'
|| @each.value == 'ssd'
Auto scaling group provider rules
managed-draining must be ENABLED or DISABLED.
Rule logic
- When
input.auto-scaling-group-provider.managed-draining != null- Require
input.auto-scaling-group-provider.managed-draining == 'ENABLED'
|| input.auto-scaling-group-provider.managed-draining == 'DISABLED'
managed-termination-protection must be ENABLED or DISABLED.
Rule logic
- When
input.auto-scaling-group-provider.managed-termination-protection != null- Require
input.auto-scaling-group-provider.managed-termination-protection == 'ENABLED'
|| input.auto-scaling-group-provider.managed-termination-protection == 'DISABLED'
managed-scaling status must be ENABLED or DISABLED.
Rule logic
- When
input.auto-scaling-group-provider.managed-scaling.status != null- Require
input.auto-scaling-group-provider.managed-scaling.status == 'ENABLED'
|| input.auto-scaling-group-provider.managed-scaling.status == 'DISABLED'
instance-warmup-period must be between 0 and 10000.
Rule logic
- When
input.auto-scaling-group-provider.managed-scaling.instance-warmup-period != null- Require
(input.auto-scaling-group-provider.managed-scaling.instance-warmup-period == null || input.auto-scaling-group-provider.managed-scaling.instance-warmup-period >= 0)
&& (input.auto-scaling-group-provider.managed-scaling.instance-warmup-period == null || input.auto-scaling-group-provider.managed-scaling.instance-warmup-period <= 10000)
maximum-scaling-step-size must be between 1 and 10000.
Rule logic
- When
input.auto-scaling-group-provider.managed-scaling.maximum-scaling-step-size != null- Require
(input.auto-scaling-group-provider.managed-scaling.maximum-scaling-step-size == null || input.auto-scaling-group-provider.managed-scaling.maximum-scaling-step-size >= 1)
&& (input.auto-scaling-group-provider.managed-scaling.maximum-scaling-step-size == null || input.auto-scaling-group-provider.managed-scaling.maximum-scaling-step-size <= 10000)
minimum-scaling-step-size must be between 1 and 10000.
Rule logic
- When
input.auto-scaling-group-provider.managed-scaling.minimum-scaling-step-size != null- Require
(input.auto-scaling-group-provider.managed-scaling.minimum-scaling-step-size == null || input.auto-scaling-group-provider.managed-scaling.minimum-scaling-step-size >= 1)
&& (input.auto-scaling-group-provider.managed-scaling.minimum-scaling-step-size == null || input.auto-scaling-group-provider.managed-scaling.minimum-scaling-step-size <= 10000)
target-capacity must be between 1 and 100.
Rule logic
- When
input.auto-scaling-group-provider.managed-scaling.target-capacity != null- Require
(input.auto-scaling-group-provider.managed-scaling.target-capacity == null || input.auto-scaling-group-provider.managed-scaling.target-capacity >= 1)
&& (input.auto-scaling-group-provider.managed-scaling.target-capacity == null || input.auto-scaling-group-provider.managed-scaling.target-capacity <= 100)
Outputs¶
arn
string
capacity-provider-arn
string
status
string
update-status
string
update-status-reason
optional(string)
tags
map(string)
auto-scaling-group-provider
optional(object)
optional(
object({
auto-scaling-group-arn: string
managed-draining: optional(string)
managed-scaling: optional(
object({
instance-warmup-period: optional(integer)
maximum-scaling-step-size: optional(integer)
minimum-scaling-step-size: optional(integer)
status: optional(string)
target-capacity: optional(integer)
})
)
managed-termination-protection: optional(string)
})
)
managed-instances-provider
optional(object)
optional(
object({
auto-repair-configuration: optional(
object({
actions-status: optional(string)
})
)
infrastructure-optimization: optional(
object({
scale-in-after: optional(integer)
})
)
infrastructure-role-arn: string
instance-launch-template: object({
capacity-option-type: optional(string)
capacity-reservations: optional(
object({
reservation-group-arn: optional(string)
reservation-preference: optional(string)
})
)
ec2-instance-profile-arn: string
fips-enabled: optional(boolean)
instance-metadata-tags-propagation: optional(boolean)
instance-requirements: optional(
object({
memory-mib: object({
min: integer
max: optional(integer)
})
vcpu-count: object({
min: integer
max: optional(integer)
})
accelerator-count: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
accelerator-manufacturers: list(string)
accelerator-names: list(string)
accelerator-total-memory-mib: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
accelerator-types: list(string)
allowed-instance-types: list(string)
bare-metal: optional(string)
baseline-ebs-bandwidth-mbps: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
burstable-performance: optional(string)
cpu-manufacturers: list(string)
excluded-instance-types: list(string)
instance-generations: list(string)
local-storage: optional(string)
local-storage-types: list(string)
max-spot-price-as-percentage-of-optimal-on-demand-price: optional(integer)
memory-gib-per-vcpu: optional(
object({
max: optional(number)
min: optional(number)
})
)
network-bandwidth-gbps: optional(
object({
max: optional(number)
min: optional(number)
})
)
network-interface-count: optional(
object({
max: optional(integer)
min: optional(integer)
})
)
on-demand-max-price-percentage-over-lowest-price: optional(integer)
require-hibernate-support: optional(boolean)
spot-max-price-percentage-over-lowest-price: optional(integer)
total-local-storage-gb: optional(
object({
max: optional(number)
min: optional(number)
})
)
})
)
local-storage-configuration: optional(
object({
use-local-storage: boolean
})
)
monitoring: optional(string)
network-configuration: object({
security-groups: list(string)
subnets: list(string)
})
storage-configuration: optional(
object({
storage-size-gib: integer
})
)
})
propagate-tags: optional(string)
})
)