#docker #amazon-ec2 #docker-compose #amazon-cloudformation #amazon-ecs
#docker #amazon-ec2 #docker-compose #aws-cloudformation #amazon-ecs
Вопрос:
Создание стека застряло бы в CREATE_IN_PROGRESS. Конкретно служба ресурсов. Создание стека завершилось бы без него. Вот как выглядит cloudformation. Я проверил CloudTrail, но не могу найти ничего необычного.
AWSTemplateFormatVersion: '2010-09-09'
Description: Amazon ECS Preview Quickstart Template
Parameters:
SubnetID:
Type: String
SubnetID2:
Type: String
ClusterName:
Description: Name of your Amazon ECS Cluster
Type: String
ConstraintDescription: must be a valid Amazon ECS Cluster.
Default: TestCluster
KeyName:
Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
Type: AWS::EC2::KeyPair::KeyName
ConstraintDescription: must be the name of an existing EC2 KeyPair.
InstanceType:
Description: Container Instance type
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
- t2.medium
- m3.medium
- m3.large
- m3.xlarge
- m3.2xlarge
- c3.large
- c3.xlarge
- c3.2xlarge
- c3.4xlarge
- c3.8xlarge
- r3.large
- r3.xlarge
- r3.2xlarge
- r3.4xlarge
- r3.8xlarge
- i2.xlarge
- i2.2xlarge
- i2.4xlarge
- i2.8xlarge
- hi1.4xlarge
- hs1.8xlarge
- cr1.8xlarge
- cc2.8xlarge
ConstraintDescription: must be a valid EC2 instance type.
SSHLocation:
Description: " The IP address range that can be used to SSH to the EC2 instances"
Type: String
MinLength: '9'
MaxLength: '18'
Default: 0.0.0.0/0
AllowedPattern: "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})"
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
Mappings:
AWSInstanceType2Arch:
t2.micro:
Arch: HVM64
t2.small:
Arch: HVM64
t2.medium:
Arch: HVM64
m3.medium:
Arch: HVM64
m3.large:
Arch: HVM64
m3.xlarge:
Arch: HVM64
m3.2xlarge:
Arch: HVM64
c3.large:
Arch: HVM64
c3.xlarge:
Arch: HVM64
c3.2xlarge:
Arch: HVM64
c3.4xlarge:
Arch: HVM64
c3.8xlarge:
Arch: HVM64
r3.large:
Arch: HVM64
r3.xlarge:
Arch: HVM64
r3.2xlarge:
Arch: HVM64
r3.4xlarge:
Arch: HVM64
r3.8xlarge:
Arch: HVM64
i2.xlarge:
Arch: HVM64
i2.2xlarge:
Arch: HVM64
i2.4xlarge:
Arch: HVM64
i2.8xlarge:
Arch: HVM64
hi1.4xlarge:
Arch: HVM64
hs1.8xlarge:
Arch: HVM64
cr1.8xlarge:
Arch: HVM64
cc2.8xlarge:
Arch: HVM64
AWSRegionArch2AMI:
us-east-1:
HVM64: ami-34ddbe5c
Resources:
Cluster:
Type: AWS::ECS::Cluster
Properties:
ClusterName: ClusterName
LogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: deployment-example-log-group
ContainerInstance:
Type: AWS::EC2::Instance
Properties:
IamInstanceProfile:
Ref: ECSIamInstanceProfile
ImageId:
Fn::FindInMap:
- AWSRegionArch2AMI
- Ref: AWS::Region
- Fn::FindInMap:
- AWSInstanceType2Arch
- Ref: InstanceType
- Arch
InstanceType:
Ref: InstanceType
SecurityGroups:
- Ref: ECSQuickstartSecurityGroup
KeyName:
Ref: KeyName
UserData:
Fn::Base64:
Fn::Join:
- ''
- - "#!/bin/bash -xen"
- echo ECS_CLUSTER=
- Ref: ClusterName
- " >> /etc/ecs/ecs.confign"
ECSQuickstartSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable HTTP access via SSH
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp:
Ref: SSHLocation
ECSIamInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- Ref: ECSQuickstartRole
ECSQuickstartRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Path: "/"
Policies:
- PolicyName: ECSQuickstart
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: ecs:*
Resource: "*"
TaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: deployment-example-task
Cpu: 256
Memory: 512
# NetworkMode: awsvpc
TaskRoleArn: !Ref ECSQuickstartRole
ContainerDefinitions:
-
Name: engine
Image: gcr.io/xxxxx
Environment:
- Name: db_instance
Value: "clouform2"
- Name: LOG_LEVEL
Value: 1
- Name: HOST
Value: 0.0.0.0
- Name: HTTP_PORT
Value: 8181
PortMappings:
- ContainerPort: 8181
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: !Ref AWS::Region
awslogs-group: !Ref LogGroup
awslogs-stream-prefix: ecs
-
Name: encyou
Image: gcr.io/xxxx3
DependsOn:
- Condition: START
ContainerName: engine
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: !Ref AWS::Region
awslogs-group: !Ref LogGroup
awslogs-stream-prefix: ecs
-
Name: packager
Image: gcr.io/xxxxx
DependsOn:
- Condition: START
ContainerName: engine
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: !Ref AWS::Region
awslogs-group: !Ref LogGroup
awslogs-stream-prefix: ecs
RequiresCompatibilities:
- EC2
Service:
Type: AWS::ECS::Service
DependsOn: ContainerInstance
Properties:
ServiceName: ServiceName
Cluster: !Ref Cluster
DeploymentConfiguration:
MaximumPercent: 200
MinimumHealthyPercent: 75
DesiredCount: 2
TaskDefinition: !Ref 'TaskDefinition'
LaunchType: EC2
Я бы увидел, что служба, хотя это ресурс, который застрял, будет успешно зарегистрирована в кластере, а задачи — нет.
Есть идеи, что я делаю не так?
Ответ №1:
Кажется, вы используете неправильные имена кластеров. Ваш кластер будет просто вызван ClusterName
, а не TestCluster
. Впоследствии ваш экземпляр будет пытаться зарегистрироваться в несуществующем кластере.
Это потому, что вместо:
ClusterName: ClusterName
должно быть:
ClusterName: !Ref ClusterName
Пожалуйста, обратите внимание, что могут быть другие проблемы, которые пока не очевидны. Более того, вы используете пользовательские изображения gcr.io/xxxxx
witch не позволяет повторно создавать возможные проблемы.
Комментарии:
1. Я внес изменения, и экземпляр EC2 теперь появляется в кластере. К сожалению, задачи по-прежнему отсутствуют в кластере и «создать сервис». Я также внес обновления в то, как я распределял процессор и хранилище между контейнерами.
2. Вы можете попробовать запустить с изображением nginx, чтобы повторить проблему.
3. @Paschal Может быть много причин. Ваш вопрос не дает много информации. Например, используете ли вы VPC по умолчанию или пользовательский vpc? Если пользовательский, правильно ли он настроен для разрешения доступа в Интернет. Какой экземпляр вы используете в своих тестах? Если он слишком мал, на нем не поместятся задачи.