AWS::ECS::Service - AWS CloudFormation

AWS::ECS::Service

Die AWS::ECS::Service-Ressource erstellt ein Amazon Elastic Container Service (Amazon ECS)-Dienst, der die angeforderte Anzahl von Aufgaben und die zugehörigen Load Balancer ausführt und pflegt.

Syntax

Um diese Entität in der AWS CloudFormation-Vorlage zu deklarieren, verwenden Sie die folgende Syntax:

JSON

{ "Type" : "AWS::ECS::Service", "Properties" : { "Cluster" : String, "DeploymentConfiguration" : DeploymentConfiguration, "DeploymentController" : DeploymentController, "DesiredCount" : Integer, "EnableECSManagedTags" : 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 } }

Eigenschaften

Cluster

Die Kurzbezeichnung oder der vollständige Amazon-Ressourcenname (ARN) des Clusters, auf dem Sie Ihren Service ausführen. Wenn Sie keinen Cluster angeben, wird der Standardcluster verwendet.

Erforderlich: Nein

Typ: Zeichenfolge

Update requires: Replacement

DeploymentConfiguration

Optionale Bereitstellungsparameter zur Steuerung, wie viele Aufgaben während der Bereitstellung ausgeführt werden, und zur Steuerung der Reihenfolge beim Starten oder Stoppen von Aufgaben.

Erforderlich: Nein

Typ: DeploymentConfiguration

Update requires: No interruption

DeploymentController

Der für den Service zu verwendende Bereitstellungs-Controller.

Erforderlich: Nein

Typ: DeploymentController

Update requires: Replacement

DesiredCount

Die Anzahl der Instanziierungen der angegebenen Aufgabendefinition, die auf dem Cluster platziert und ausgeführt werden soll.

Dies ist erforderlich, wenn schedulingStrategy REPLICA ist oder nicht angegeben ist. Wenn schedulingStrategy DAEMON ist, ist dies nicht erforderlich.

Erforderlich: Bedingt

Typ: Ganzzahl

Update requires: No interruption

EnableECSManagedTags

Gibt an, ob von Amazon ECS verwaltete Tags für Aufgaben innerhalb des Service aktiviert werden sollen. Weitere Informationen finden Sie unter Ihre Amazon ECS-Ressourcen mit Tags kennzeichnen im Developerhandbuch zum Amazon Elastic Container Service.

Erforderlich: Nein

Typ: Boolesch

Update requires: Replacement

HealthCheckGracePeriodSeconds

Die Zeit in Sekunden, die der Amazon ECS Service-Scheduler fehlerhafte Elastic Load Balancing-Zustandsprüfungen des Ziels ignorieren soll, nachdem eine Aufgabe zum ersten Mal gestartet wurde. Sie wird nur verwendet, wenn Ihr Service für die Verwendung eines Load Balancers konfiguriert ist. Wenn für Ihren Service ein Load Balancer definiert ist und Sie keinen Wert für die Karenzzeit der Zustandsprüfung angeben, wird der Standardwert 0 verwendet.

Wenn die Aufgaben Ihres Services eine Weile brauchen, bis sie gestartet sind und auf die Zustandsprüfung von Elastic Load Balancing reagieren, können Sie eine Wartefrist für den Zustandsprüfung von bis zu 2.147.483.647 Sekunden festlegen. Während dieser Zeit ignoriert der Scheduler des Amazon ECS Services den Status der Zustandsprüfung. Diese Frist kann verhindern, dass der Service-Scheduler Aufgaben als ungesund markiert und stoppt, bevor sie ausreichend Zeit zum Initialisieren bekommen haben.

Erforderlich: Nein

Typ: Ganzzahl

Update requires: No interruption

LaunchType

Der Starttyp, der für die Ausführung Ihres Service verwendet wird. Weitere Informationen finden Sie unter Amazon ECS-Starttypen im Developerhandbuch zum Amazon Elastic Container Service.

Erforderlich: Nein

Typ: Zeichenfolge

Zulässige Werte: EC2 | FARGATE

Update requires: Replacement

LoadBalancers

Eine Liste der Load Balancer-Objekte, die dem Service zugeordnet werden sollen. Wenn Sie die Eigenschaft Role angegeben, muss auch LoadBalancers angegeben werden. Weitere Informationen über die Anzahl der Load Balancer, die Sie für jeden Service festlegen können, finden Sie unter Service – Load Balancing im Developerhandbuch zum Amazon Elastic Container Service.

Erforderlich: Nein

Typ: LoadBalancer-Liste

Update requires: Replacement

NetworkConfiguration

Die Netzwerkkonfiguration für den Service. Dieser Parameter ist erforderlich, damit Aufgabendefinitionen, die den Netzwerkmodus awsvpc verwenden, ihre eigene Elastic Network-Schnittstelle erhalten. Für andere Netzwerkmodus wird er nicht unterstützt. Weitere Informationen finden Sie unter Vernetzung im Developerhandbuch zum Amazon Elastic Container Service.

Erforderlich: Bedingt

Typ: NetworkConfiguration

Update requires: No interruption

PlacementConstraints

Ein Array von Platzierungseinschränkungsobjekten, die für Aufgaben in Ihrem Service verwendet werden sollen. Sie können maximal zehn Einschränkungen pro Aufgabe festlegen (dieses Limit enthält Einschränkungen in der Aufgabendefinition und solche, die während der Laufzeit festgelegt werden).

Erforderlich: Nein

Typ: PlacementConstraint-Liste

Update requires: Replacement

PlacementStrategies

Die Platzierungsstrategieobjekte, die für Aufgaben in Ihrem Service verwendet werden sollen. Sie können maximal fünf Strategieregeln pro Service festlegen. Weitere Informationen finden Sie unter Aufgabenplatzierungsstrategien im Entwicklerhandbuch zum Amazon Elastic Container Service.

Erforderlich: Nein

Typ: PlacementStrategy-Liste

Update requires: Replacement

PlatformVersion

Die Plattformversion, auf der Ihre Aufgaben im Service ausgeführt werden. Eine Plattformversion ist nur für Aufgaben mit dem Starttyp "Fargate" vorgesehen. Ist kein solcher angegeben, wird standardmäßig die LATEST-Plattformversion verwendet. Weitere Informationen finden Sie unter AWS Fargate-Plattformversionen im Developerhandbuch zum Amazon Elastic Container Service.

Erforderlich: Nein

Typ: Zeichenfolge

Update requires: Replacement

PropagateTags

Gibt an, ob die Tags von der Aufgabendefinition oder dem Service in die Aufgaben in dem Service weitergegeben werden sollen. Wenn kein Wert angegeben wird, werden die Tags nicht weitergegeben. Tags können nur während der Serviceerstellung in die Aufgaben in dem Service weitergegeben werden. Wenn Sie Tags nach der Serviceerstellung einer Aufgabe hinzufügen möchten, verwenden Sie die API-Aktion TagResource.

Erforderlich: Nein

Typ: Zeichenfolge

Zulässige Werte: SERVICE | TASK_DEFINITION

Update requires: Replacement

Role

Der Name oder der vollständige Amazon-Ressourcenname (ARN) für die IAM-Rolle, die es Amazon ECS ermöglicht, Aufrufe in Ihrem Namen an Ihren Load Balancer vorzunehmen. Dieser Parameter ist nur zulässig, wenn Sie bei Ihrem Service einen Load Balancer verwenden und Ihre Aufgabendefinition nicht den Netzwerkmodus awsvpc verwendet. Wenn Sie den role-Parameter festlegen, müssen Sie auch ein Load Balancer-Objekt mit dem loadBalancers-Parameter angeben.

Wichtig

Wenn Ihr Konto bereits über die servicegebundene Rolle für den Amazon ECS Service verfügt, wird diese Rolle standardmäßig für Ihren Service verwendet, es sei denn, Sie geben hier eine Rolle an. Die serviceverknüpfte Rolle ist erforderlich, wenn Ihre Aufgabendefinition den awsvpc-Netzwerkmodus verwendet oder wenn der Service für die Verwendung der Service Discovery, eines externen Bereitstellungs-Controllers, mehrerer Zielgruppen oder der Elastic Inference-Beschleuniger konfiguriert ist. In diesem Fall sollten Sie hier keine Rolle angeben. Weitere Informationen finden Sie unter Verwenden von servicegebundenen Rollen für Amazon ECS im Developerhandbuch zum Amazon Elastic Container Service.

Wenn Ihre festgelegte Rolle einen anderen Pfad als / aufweist, müssen Sie entweder den vollständigen Rollen-ARN angeben (empfohlen) oder einen Präfix mit dem Pfad vor dem Rollennamen verwenden. Wenn beispielsweise ein Rolle mit dem Namen bar den Pfad /foo/ aufweist, würden Sie /foo/bar als Rollennamen festlegen. Weitere Informationen finden Sie unter Anzeigenamen und Pfade im IAM-Benutzerhandbuch.

Erforderlich: Nein

Typ: Zeichenfolge

Update requires: Replacement

SchedulingStrategy

Die Terminierungsstrategie, die für den Service verwendet werden soll. Weitere Informationen finden Sie unter Services.

Es gibt zwei Strategien für Service-Scheduler:

  • REPLICA: Die Replica-Einplanungsstrategie platziert und die gewünschte Anzahl von Aufgaben in Ihrem Cluster und behält sie bei. Standardmäßig verteilt der Service Scheduler Aufgaben über Availability Zones. Mit Aufgabenplatzierungsstrategien und -bedingungen können Sie festlegen, wie Aufgaben platziert und beendet werden. Diese Scheduler-Strategie ist erforderlich, wenn der Service die Bereitstellungs-Controller-Typen CODE_DEPLOY oder EXTERNAL verwendet.

  • DAEMON: Die Daemon-Einplanungsstrategie stellt genau eine Aufgabe auf jeder aktiven Container-Instance bereit, die alle von Ihnen in Ihrem Cluster angegebenen Platzierungsbedingungen für die Aufgaben erfüllt. Der Service Scheduler wertet auch die Aufgabenplatzierungseinschränkungen für ausgeführte Aufgaben aus und stoppt Aufgaben, die die Platzierungsbedingungen nicht erfüllen. Bei Verwendung dieser Strategie ist es nicht erforderlich, eine gewünschte Anzahl von Aufgaben oder eine Aufgabenplatzierungsstrategie anzugeben oder Auto Scaling-Richtlinien zu verwenden.

    Anmerkung

    Aufgaben, die den Starttyp "Fargate" oder die Controller-Typen CODE_DEPLOY oder EXTERNAL verwenden, unterstützen die DAEMON-Scheduling-Strategie nicht.

Erforderlich: Nein

Typ: Zeichenfolge

Zulässige Werte: DAEMON | REPLICA

Update requires: Replacement

ServiceName

Der Name Ihres Service. Bis zu 255 Buchstaben (Groß- und Kleinbuchstaben), Ziffern und Unterstriche sind zulässig. Servicenamen in einem Cluster müssen eindeutig sein. Sie können jedoch ähnlich benannte Services in mehreren Clustern innerhalb einer Region oder in mehreren Regionen haben.

Erforderlich: Nein

Typ: Zeichenfolge

Update requires: Replacement

ServiceRegistries

Die Details der Service Discovery-Registrierungen, die diesem Service zugewiesen werden sollen. Weitere Informationen finden Sie unter Service Discovery.

Anmerkung

Service Discovery wird für Fargate-Aufgaben unterstützt, wenn Plattform-Version v1.1.0 oder höher verwendet wird. Weitere Informationen finden Sie unter AWS Fargate-Plattformversionen.

Erforderlich: Nein

Typ: ServiceRegistry-Liste

Update requires: Replacement

Tags

Die Metadaten, die Sie auf den Service anwenden, um die Kategorisierung und Organisation zu erleichtern. Jeder Tag besteht aus einem Schlüssel und einem optionalen Wert, die sie beide festlegen können. Wenn ein Service gelöscht wird, werden auch die Tags gelöscht.

Die folgenden grundlegenden Einschränkungen gelten für Tags:

  • Die maximale Anzahl an Tags pro Ressource beträgt 50.

  • Jeder Tag muss für jede Ressource eindeutig sein. Jeder Tag kann nur einen Wert haben.

  • Maximale Schlüssellänge: 128 Unicode-Zeichen in UTF-8

  • Maximale Wertlänge: 256 Unicode-Zeichen in UTF-8

  • Wenn Ihr Markierungsschema für mehrere Services und Ressourcen verwendet wird, denken Sie daran, dass andere Services möglicherweise Einschränkungen für zulässige Zeichen haben. Allgemein erlaubte Zeichen sind: Buchstaben, Zahlen und Leerzeichen, die in UTF-8 darstellbar sind, und die folgenden Sonderzeichen: + - = . _ : / @.

  • Bei Tag-Schlüsseln und -Werten muss die Groß-/Kleinschreibung beachtet werden.

  • Verwenden Sie weder aws: noch AWS: oder anderen Kombinationen aus Groß- und Kleinbuchstaben als Präfix für Schlüssel oder Werte, da sie für die AWS-Verwendung reserviert sind. Sie können keine Tag-Schlüssel oder -Werte mit diesem Präfix bearbeiten oder löschen. Tags mit diesem Präfix werden nicht als Ihre Tags pro Ressourcenlimit angerechnet.

Erforderlich: Nein

Typ: Liste von Tag

Maximum: 50

Update requires: No interruption

TaskDefinition

family und revision (family:revision) oder der vollständige ARN der Aufgabendefinition, die in Ihrem Service ausgeführt werden soll. Zur Stabilisierung der Ressource ist revision erforderlich.

Eine Aufgabendefinition muss angegeben werden, wenn der Service entweder ECS oder den Bereitstellungs-Controller CODE_DEPLOY verwendet.

Erforderlich: Nein

Typ: Zeichenfolge

Update requires: No interruption

Rückgabewerte

Ref

Wenn Sie die logische ID dieser Ressource an die intrinsische Ref-Funktion übergeben, gibt Ref der Amazon-Ressourcenname (ARN).

Im folgenden Beispiel gibt die Funktion Ref den ARN des MyECSService-Service zurück, z. B. arn:aws:ecs:us-west-2:123456789012:service/sample-webapp.

{ "Ref": "MyECSService" }

For more information about using the Ref function, see Ref.

Fn::GetAtt

Die intrinsische Fn::GetAtt-Funktion gibt einen Wert für ein angegebenes Attribut dieses Typs zurück. Im Folgenden sehen Sie die verfügbaren Attribute und Beispielrückgabewerte.

Weitere Informationen über die Verwendung der Fn::GetAtt-Funktion finden Sie unter FN::GetAtt.

Name

Der Name des Amazon ECS Service, z. B. sample-webapp.

Beispiele

Definieren eines grundlegenden Amazon ECS Service

Die folgenden Beispiele definieren einen Amazon ECS Service, der einen Cluster und eine Aufgabendefinition verwendet, der/die an anderer Stelle in derselben Vorlage deklariert sind.

JSON

"WebApp": { "Type": "AWS::ECS::Service", "Properties" : { "Cluster": { "Ref": "cluster" }, "DesiredCount": { "Ref": "desiredcount" }, "TaskDefinition" : { "Ref": "taskdefinition" } } }

YAML

WebApp: Type: AWS::ECS::Service Properties: Cluster: Ref: "cluster" DesiredCount: Ref: "desiredcount" TaskDefinition: Ref: "taskdefinition"

Verknüpfen eines Application Load Balancer mit einem Service

Im folgenden Beispiel wird ein Application Load Balancer durch Referenzieren einer AWS::ElasticLoadBalancingV2::TargetGroup-Ressource einem Amazon ECS Service zugeordnet.

Anmerkung

Der Amazon ECS Service setzt eine explizite Abhängigkeit von der Application Load Balancer-Listener-Regel und dem Application Load Balancer-Listener voraus. Dadurch wird verhindert, dass der Service gestartet wird, bevor der Listener bereit ist.

JSON

"service" : { "Type" : "AWS::ECS::Service", "DependsOn": ["Listener"], "Properties" : { "Role" : { "Ref" : "ECSServiceRole" }, "TaskDefinition" : { "Ref" : "taskdefinition" }, "DesiredCount" : "1", "LoadBalancers" : [{ "TargetGroupArn" : { "Ref" : "TargetGroup" }, "ContainerPort" : "80", "ContainerName" : "sample-app" }], "Cluster" : { "Ref" : "ECSCluster" } } }

YAML

service: Type: AWS::ECS::Service DependsOn: - Listener Properties: Role: Ref: ECSServiceRole TaskDefinition: Ref: taskdefinition DesiredCount: 1 LoadBalancers: - TargetGroupArn: Ref: TargetGroup ContainerPort: 80 ContainerName: sample-app Cluster: Ref: ECSCluster

Definieren eines Service mit einer Übergangsfrist der Zustandsprüfung

Das folgende Beispiel definiert einen Service mit einem Parameter, mit dem Benutzer angeben können, wie viele Sekunden lang der Amazon ECS Service-Scheduler fehlerhafte Elastic Load Balancing-Zustandsprüfungen des Ziels ignorieren soll, nachdem eine Aufgabe zum ersten Mal gestartet wurde.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "Creating ECS service", "Parameters": { "AppName": { "Type":"String", "Description": "Name of app requiring ELB exposure", "Default": "simple-app" }, "AppContainerPort": { "Type":"Number", "Description": "Container port of app requiring ELB exposure", "Default": "80" }, "AppHostPort": { "Type":"Number", "Description": "Host port of app requiring ELB exposure", "Default": "80" }, "ServiceName": { "Type": "String" }, "LoadBalancerName": { "Type": "String" }, "HealthCheckGracePeriodSeconds": { "Type": "String" } }, "Resources": { "cluster": { "Type": "AWS::ECS::Cluster" }, "taskdefinition": { "Type": "AWS::ECS::TaskDefinition", "Properties" : { "ContainerDefinitions" : [ { "Name": {"Ref": "AppName"}, "MountPoints": [ { "SourceVolume": "my-vol", "ContainerPath": "/var/www/my-vol" } ], "Image":"amazon/amazon-ecs-sample", "Cpu": "10", "PortMappings":[ { "ContainerPort": {"Ref":"AppContainerPort"}, "HostPort": {"Ref":"AppHostPort"} } ], "EntryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "Memory":"500", "Essential": "true" }, { "Name": "busybox", "Image": "busybox", "Cpu": "10", "EntryPoint": [ "sh", "-c" ], "Memory": "500", "Command": [ "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" ], "Essential" : "false", "VolumesFrom": [ { "SourceContainer": {"Ref":"AppName"} } ] } ], "Volumes": [ { "Host": { "SourcePath": "/var/lib/docker/vfs/dir/" }, "Name": "my-vol" } ] } }, "service": { "Type": "AWS::ECS::Service", "Properties" : { "Cluster": {"Ref": "cluster"}, "DeploymentConfiguration": { "MaximumPercent": 200, "MinimumHealthyPercent": 100 }, "DesiredCount": 0, "HealthCheckGracePeriodSeconds": {"Ref": "HealthCheckGracePeriodSeconds"}, "LoadBalancers": [{ "ContainerName": {"Ref" : "AppName"}, "ContainerPort": {"Ref":"AppContainerPort"}, "LoadBalancerName": {"Ref": "elb"} }], "PlacementStrategies": [{ "Type" : "binpack", "Field": "memory" }, { "Type": "spread", "Field": "host" }], "PlacementConstraints": [{ "Type": "memberOf", "Expression": "attribute:ecs.availability-zone != us-east-1d" }, { "Type": "distinctInstance" }], "TaskDefinition" : {"Ref":"taskdefinition"}, "ServiceName": {"Ref": "ServiceName"}, "Role": {"Ref": "Role"} } }, "elb": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "LoadBalancerName": {"Ref": "LoadBalancerName"}, "Listeners": [{ "InstancePort": {"Ref": "AppHostPort"}, "LoadBalancerPort": "80", "Protocol": "HTTP" }], "Subnets": [{"Ref":"Subnet1"}] }, "DependsOn": "GatewayAttachment" }, "VPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/24" } }, "Subnet1": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/25" } }, "InternetGateway": { "Type": "AWS::EC2::InternetGateway" }, "GatewayAttachment": { "Type": "AWS::EC2::VPCGatewayAttachment", "Properties": { "InternetGatewayId": {"Ref": "InternetGateway"}, "VpcId": {"Ref": "VPC"} } }, "Role": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole"] } } }, "Outputs" : { "Cluster": { "Value": {"Ref" : "cluster"} } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: Creating ECS service Parameters: AppName: Type: String Description: Name of app requiring ELB exposure Default: simple-app AppContainerPort: Type: Number Description: Container port of app requiring ELB exposure Default: '80' AppHostPort: Type: Number Description: Host port of app requiring ELB exposure Default: '80' ServiceName: Type: String LoadBalancerName: Type: String HealthCheckGracePeriodSeconds: Type: String Resources: cluster: Type: AWS::ECS::Cluster taskdefinition: Type: AWS::ECS::TaskDefinition Properties: ContainerDefinitions: - Name: !Ref AppName MountPoints: - SourceVolume: my-vol ContainerPath: /var/www/my-vol Image: amazon/amazon-ecs-sample Cpu: '10' PortMappings: - ContainerPort: !Ref AppContainerPort HostPort: !Ref AppHostPort EntryPoint: - /usr/sbin/apache2 - '-D' - FOREGROUND Memory: '500' Essential: true - Name: busybox Image: busybox Cpu: '10' EntryPoint: - sh - '-c' Memory: '500' Command: - >- /bin/sh -c "while true; do /bin/date > /var/www/my-vol/date; sleep 1; done" Essential: false VolumesFrom: - SourceContainer: !Ref AppName Volumes: - Host: SourcePath: /var/lib/docker/vfs/dir/ Name: my-vol service: Type: AWS::ECS::Service Properties: Cluster: !Ref cluster DeploymentConfiguration: MaximumPercent: 200 MinimumHealthyPercent: 100 DesiredCount: 0 HealthCheckGracePeriodSeconds: !Ref HealthCheckGracePeriodSeconds LoadBalancers: - ContainerName: !Ref AppName ContainerPort: !Ref AppContainerPort LoadBalancerName: !Ref elb PlacementStrategies: - Type: binpack Field: memory - Type: spread Field: host PlacementConstraints: - Type: memberOf Expression: 'attribute:ecs.availability-zone != us-east-1d' - Type: distinctInstance TaskDefinition: !Ref taskdefinition ServiceName: !Ref ServiceName Role: !Ref Role elb: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: LoadBalancerName: !Ref LoadBalancerName Listeners: - InstancePort: !Ref AppHostPort LoadBalancerPort: '80' Protocol: HTTP Subnets: - !Ref Subnet1 DependsOn: GatewayAttachment VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/24 Subnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/25 InternetGateway: Type: AWS::EC2::InternetGateway GatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC Role: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2008-10-17 Statement: - Sid: '' Effect: Allow Principal: Service: ecs.amazonaws.com Action: 'sts:AssumeRole' ManagedPolicyArns: - 'arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole' Outputs: Cluster: Value: !Ref cluster