| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package amazon
- import (
- "github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/service/ecs"
- "github.com/compose-spec/compose-go/types"
- "github.com/docker/ecs-plugin/pkg/compose"
- "github.com/docker/ecs-plugin/pkg/convert"
- "github.com/sirupsen/logrus"
- )
- func (c *client) ComposeUp(project *compose.Project) error {
- vpc, err := c.GetDefaultVPC()
- if err != nil {
- return err
- }
- subnets, err := c.GetSubNets(vpc)
- if err != nil {
- return err
- }
- securityGroup, err := c.CreateSecurityGroup(project, vpc)
- if err != nil {
- return err
- }
- logGroup, err := c.GetOrCreateLogGroup(project)
- if err != nil {
- return err
- }
- for _, service := range project.Services {
- _, err = c.CreateService(project, service, securityGroup, subnets, logGroup)
- if err != nil {
- return err
- }
- }
- return nil
- }
- func (c *client) CreateService(project *compose.Project, service types.ServiceConfig, securityGroup *string, subnets []*string, logGroup *string) (*string, error) {
- task, err := convert.Convert(project, service)
- if err != nil {
- return nil, err
- }
- role, err := c.GetEcsTaskExecutionRole(service)
- if err != nil {
- return nil, err
- }
- task.ExecutionRoleArn = role
- for _, def := range task.ContainerDefinitions {
- def.LogConfiguration.Options["awslogs-group"] = logGroup
- def.LogConfiguration.Options["awslogs-stream-prefix"] = aws.String(service.Name)
- def.LogConfiguration.Options["awslogs-region"] = aws.String(c.Region)
- }
- arn, err := c.RegisterTaskDefinition(task)
- if err != nil {
- return nil, err
- }
- logrus.Debug("Create Service")
- created, err := c.ECS.CreateService(&ecs.CreateServiceInput{
- Cluster: aws.String(c.Cluster),
- DesiredCount: aws.Int64(1), // FIXME get from deploy options
- LaunchType: aws.String(ecs.LaunchTypeFargate), //FIXME use service.Isolation tro select EC2 vs Fargate
- NetworkConfiguration: &ecs.NetworkConfiguration{
- AwsvpcConfiguration: &ecs.AwsVpcConfiguration{
- AssignPublicIp: aws.String(ecs.AssignPublicIpEnabled),
- SecurityGroups: []*string{securityGroup},
- Subnets: subnets,
- },
- },
- ServiceName: aws.String(service.Name),
- SchedulingStrategy: aws.String(ecs.SchedulingStrategyReplica),
- TaskDefinition: arn,
- })
- for _, port := range service.Ports {
- err = c.ExposePort(securityGroup, port)
- if err != nil {
- return nil, err
- }
- }
- return created.Service.ServiceArn, err
- }
|