Hello everyone, at our company we're trying to migrate from Heroku to AWS. I'd like to define a awsx...
j

Jiří Špác

9 months ago
Hello everyone, at our company we're trying to migrate from Heroku to AWS. I'd like to define a awsx.ecs.FargateService in a custom vpc which has private/public subnet, currently I do this:
const lbSecurityGroup = new aws.ec2.SecurityGroup(
    `ls-lb-sg-${stackName}`,
    {
      vpcId: vpc.vpcId,
      description: 'Security group for load balancer',
      ingress: [
        { protocol: 'tcp', fromPort: 80, toPort: 80, cidrBlocks: ['0.0.0.0/0'] },
        { protocol: 'tcp', fromPort: 443, toPort: 443, cidrBlocks: ['0.0.0.0/0'] },
      ],
      egress: [{ protocol: '-1', fromPort: 0, toPort: 0, cidrBlocks: ['0.0.0.0/0'] }],
      tags: {
        environment: stackName,
      },
    },
    { provider },
  )

  // Create security group for the Fargate services
  const serviceSecurityGroup = new aws.ec2.SecurityGroup(
    `ls-service-sg-${stackName}`,
    {
      vpcId: vpc.vpcId,
      description: 'Security group for Fargate services',
      ingress: [
        {
          protocol: 'tcp',
          fromPort: 3000,
          toPort: 3000,
          securityGroups: [lbSecurityGroup.id], 
        },
      ],
      egress: [{ protocol: '-1', fromPort: 0, toPort: 0, cidrBlocks: ['0.0.0.0/0'] }],
      tags: {
        Name: `ls-service-sg-${stackName}`,
        environment: stackName,
      },
    },
    { provider },
  )

  const loadBalancer = new awsx.lb.ApplicationLoadBalancer(
    `ls-loadbalancer-${stackName}`,
    {
      internal: false,
      subnetIds: publicSubnetIds, 
      securityGroups: [lbSecurityGroup.id],
      tags: {
        environment: stackName,
      },
    },
    {
      provider,
    },
  )

  const apiService = new awsx.ecs.FargateService(
    `ls-api-service-${stackName}`,
    {
      cluster: cluster.id,
      taskDefinitionArgs: {
        containers: {
          api: {
            name: `ls-api-${stackName}`,
            image: img.imageUri,
            memory: 4096,
            cpu: 1024,
            essential: true,
            command: ['build/app.js'],
            portMappings: [
              {
                containerPort: 3000,
                hostPort: 3000,
                targetGroup: loadBalancer.defaultTargetGroup,
              },
            ],
            environment: environmentVariables,
            healthCheck: {
              command: ['CMD-SHELL', 'curl -f <http://localhost:3000/health> || exit 1'],
              interval: 30,
              timeout: 5,
              retries: 3,
              startPeriod: 60,
            },
          },
          datadog: {
            name: `datadog-agent-${stackName}`,
            image: 'datadog/agent:latest',
            cpu: 256,
            memory: 512,
            essential: false,
            environment: [datadogApiKey, { name: 'ECS_FARGATE', value: 'true' }],
          },
        },
      },
      desiredCount: stackName === 'production' ? 2 : 1,
      networkConfiguration: {
        subnets: privateSubnetIds,
        securityGroups: [serviceSecurityGroup.id],
        assignPublicIp: false,
      },
      tags: {
        environment: stackName,
      },
    },
    { provider },
  )
the problem is whenever I try to deploy, I get
aws:lb:LoadBalancer (ls-loadbalancer-dev):
    error:   sdk-v2/provider2.go:520: sdk.helper_schema: setting ELBv2 Load Balancer (arn:aws:elasticloadbalancing:us-east-1:662016171348:loadbalancer/app/ls-loadbalancer-dev-2873ccc/062c2c77270e2e27) security groups: operation error Elastic Load Balancing v2: SetSecurityGroups, https response error StatusCode: 400, RequestID: c079a5d7-2486-45b2-b8ce-8593168d5989, InvalidConfigurationRequest: One or more security groups are invalid: provider=aws@6.56.1
    error: 1 error occurred:
        * setting ELBv2 Load Balancer (arn:aws:elasticloadbalancing:us-east-1:662016171348:loadbalancer/app/ls-loadbalancer-dev-2873ccc/062c2c77270e2e27) security groups: operation error Elastic Load Balancing v2: SetSecurityGroups, https response error StatusCode: 400, RequestID: c079a5d7-2486-45b2-b8ce-8593168d5989, InvalidConfigurationRequest: One or more security groups are invalid
Can anyone point me to what is invalid about my security groups?