diff --git a/resources/aws/environment.go b/resources/aws/environment.go index ceab6aa86..7a7417f9a 100644 --- a/resources/aws/environment.go +++ b/resources/aws/environment.go @@ -40,7 +40,7 @@ const ( // AWS ECS DDInfraEcsExecKMSKeyID = "aws/ecs/execKMSKeyID" - DDInfraEcsFargateFakeintakeClusterArn = "aws/ecs/fargateFakeintakeClusterArn" + DDInfraEcsFargateFakeintakeClusterArns = "aws/ecs/fargateFakeintakeClusterArns" DDInfraEcsFakeintakeLBs = "aws/ecs/defaultfakeintakeLBs" DDInfraEcsTaskExecutionRole = "aws/ecs/taskExecutionRole" DDInfraEcsTaskRole = "aws/ecs/taskRole" @@ -73,6 +73,7 @@ type Environment struct { randomSubnets pulumi.StringArrayOutput randomLBIdx pulumi.IntOutput + randomECSArn pulumi.StringOutput } var _ config.Env = (*Environment)(nil) @@ -139,6 +140,14 @@ func NewEnvironment(ctx *pulumi.Context, options ...func(*Environment)) (Environ } env.randomLBIdx = shuffleLB.Result + shuffleFakeintakeECS, err := random.NewRandomShuffle(env.Ctx(), env.Namer.ResourceName("rnd-ecs"), &random.RandomShuffleArgs{ + Inputs: pulumi.ToStringArray(env.DefaultFakeintakeECSArns()), + ResultCount: pulumi.IntPtr(1), + }, env.WithProviders(config.ProviderRandom)) + if err != nil { + return Environment{}, err + } + env.randomECSArn = shuffleFakeintakeECS.Results.Index(pulumi.Int(0)) return env, nil } @@ -201,6 +210,10 @@ func (e *Environment) DefaultSubnets() []string { return e.GetStringListWithDefault(e.InfraConfig, DDInfraDefaultSubnetsParamName, e.envDefault.ddInfra.defaultSubnets) } +func (e *Environment) DefaultFakeintakeECSArns() []string { + return e.GetStringListWithDefault(e.InfraConfig, DDInfraEcsFargateFakeintakeClusterArns, e.envDefault.ddInfra.ecs.fargateFakeintakeClusterArn) +} + func (e *Environment) DefaultFakeintakeLBs() []FakeintakeLBConfig { var fakeintakeLBConfig FakeintakeLBConfig return e.GetObjectWithDefault(e.InfraConfig, DDInfraEcsFakeintakeLBs, fakeintakeLBConfig, e.envDefault.ddInfra.ecs.defaultFakeintakeLBs).([]FakeintakeLBConfig) @@ -257,8 +270,8 @@ func (e *Environment) ECSExecKMSKeyID() string { return e.GetStringWithDefault(e.InfraConfig, DDInfraEcsExecKMSKeyID, e.envDefault.ddInfra.ecs.execKMSKeyID) } -func (e *Environment) ECSFargateFakeintakeClusterArn() string { - return e.GetStringWithDefault(e.InfraConfig, DDInfraEcsFargateFakeintakeClusterArn, e.envDefault.ddInfra.ecs.fargateFakeintakeClusterArn) +func (e *Environment) ECSFargateFakeintakeClusterArn() pulumi.StringOutput { + return e.randomECSArn } func (e *Environment) ECSFakeintakeLBListenerArn() pulumi.StringOutput { diff --git a/resources/aws/environmentDefaults.go b/resources/aws/environmentDefaults.go index a2e183828..e6c52395b 100644 --- a/resources/aws/environmentDefaults.go +++ b/resources/aws/environmentDefaults.go @@ -44,7 +44,7 @@ type ddInfra struct { type ddInfraECS struct { execKMSKeyID string - fargateFakeintakeClusterArn string + fargateFakeintakeClusterArn []string defaultFakeintakeLBs []FakeintakeLBConfig taskExecutionRole string taskRole string @@ -108,7 +108,7 @@ func sandboxDefault() environmentDefault { ecs: ddInfraECS{ execKMSKeyID: "arn:aws:kms:us-east-1:601427279990:key/c84f93c2-a562-4a59-a326-918fbe7235c7", - fargateFakeintakeClusterArn: "arn:aws:ecs:us-east-1:601427279990:cluster/fakeintake-ecs", + fargateFakeintakeClusterArn: []string{"arn:aws:ecs:us-east-1:601427279990:cluster/fakeintake-ecs"}, taskExecutionRole: "arn:aws:iam::601427279990:role/ecsExecTaskExecutionRole", taskRole: "arn:aws:iam::601427279990:role/ecsExecTaskRole", instanceProfile: "arn:aws:iam::601427279990:instance-profile/ecsInstanceRole", @@ -151,7 +151,7 @@ func agentSandboxDefault() environmentDefault { ecs: ddInfraECS{ execKMSKeyID: "arn:aws:kms:us-east-1:376334461865:key/1d1fe533-a4f1-44ee-99ec-225b44fcb9ed", - fargateFakeintakeClusterArn: "arn:aws:ecs:us-east-1:376334461865:cluster/fakeintake-ecs", + fargateFakeintakeClusterArn: []string{"arn:aws:ecs:us-east-1:376334461865:cluster/fakeintake-ecs-stress-test"}, defaultFakeintakeLBs: []FakeintakeLBConfig{ {listenerArn: "arn:aws:elasticloadbalancing:us-east-1:376334461865:listener/app/fakeintake/3bbebae6506eb8cb/eea87c947a30f106", baseHost: ".lb1.fi.sandbox.dda-testing.com"}, {listenerArn: "arn:aws:elasticloadbalancing:us-east-1:376334461865:listener/app/fakeintake2/e514320b44979d84/3df6c797d971c13b", baseHost: ".lb2.fi.sandbox.dda-testing.com"}, @@ -213,7 +213,7 @@ func agentQADefault() environmentDefault { ecs: ddInfraECS{ execKMSKeyID: "arn:aws:kms:us-east-1:669783387624:key/384373bc-6d99-4d68-84b5-b76b756b0af3", - fargateFakeintakeClusterArn: "arn:aws:ecs:us-east-1:669783387624:cluster/fakeintake-ecs", + fargateFakeintakeClusterArn: []string{"arn:aws:ecs:us-east-1:669783387624:cluster/fakeintake-ecs", "arn:aws:ecs:us-east-1:669783387624:cluster/fakeintake-ecs-2", "arn:aws:ecs:us-east-1:669783387624:cluster/fakeintake-ecs-3"}, defaultFakeintakeLBs: []FakeintakeLBConfig{ {listenerArn: "arn:aws:elasticloadbalancing:us-east-1:669783387624:listener/app/fakeintake/de7956e70776e471/ddfa738893c2dc0e", baseHost: ".lb1.fi.qa.dda-testing.com"}, {listenerArn: "arn:aws:elasticloadbalancing:us-east-1:669783387624:listener/app/fakeintake2/d59e26c0a29d8567/52a83f7da0f000ee", baseHost: ".lb2.fi.qa.dda-testing.com"}, @@ -273,7 +273,7 @@ func tsePlaygroundDefault() environmentDefault { ecs: ddInfraECS{ execKMSKeyID: "arn:aws:kms:us-east-1:570690476889:key/f1694e5a-bb52-42a7-b414-dfd34fbd6759", - fargateFakeintakeClusterArn: "arn:aws:ecs:us-east-1:570690476889:cluster/fakeintake-ecs", + fargateFakeintakeClusterArn: []string{"arn:aws:ecs:us-east-1:570690476889:cluster/fakeintake-ecs", "arn:aws:ecs:us-east-1:570690476889:cluster/fakeintake-ecs-2", "arn:aws:ecs:us-east-1:570690476889:cluster/fakeintake-ecs-3"}, taskExecutionRole: "arn:aws:iam::570690476889:role/ecsExecTaskExecutionRole", taskRole: "arn:aws:iam::570690476889:role/ecsExecTaskRole", instanceProfile: "arn:aws:iam::570690476889:instance-profile/ecsInstanceRole", diff --git a/scenarios/aws/fakeintake/fakeintake.go b/scenarios/aws/fakeintake/fakeintake.go index 70a612624..141effd58 100644 --- a/scenarios/aws/fakeintake/fakeintake.go +++ b/scenarios/aws/fakeintake/fakeintake.go @@ -91,15 +91,16 @@ func NewECSFargateInstance(e aws.Environment, name string, option ...Option) (*f // fargateSvcNoLB deploys one fakeintake container to a dedicated Fargate cluster // Hardcoded on sandbox func fargateSvcNoLB(e aws.Environment, namer namer.Namer, taskDef *awsxEcs.FargateTaskDefinition, fi *fakeintake.Fakeintake, opts ...pulumi.ResourceOption) error { - fargateService, err := ecs.FargateService(e, namer.ResourceName("srv"), pulumi.String(e.ECSFargateFakeintakeClusterArn()), taskDef.TaskDefinition.Arn(), nil, opts...) + fargateService, err := ecs.FargateService(e, namer.ResourceName("srv"), e.ECSFargateFakeintakeClusterArn(), taskDef.TaskDefinition.Arn(), nil, opts...) if err != nil { return err } // Hack passing taskDef.TaskDefinition.Arn() to execute apply function // when taskDef has an ARN, thus it is defined on AWS side - output := pulumi.All(taskDef.TaskDefinition.Arn(), fargateService.Service.Name()).ApplyT(func(args []any) ([]string, error) { + output := pulumi.All(taskDef.TaskDefinition.Arn(), fargateService.Service.Name(), e.ECSFargateFakeintakeClusterArn()).ApplyT(func(args []any) ([]string, error) { serviceName := args[1].(string) + fakeintakeECSArn := args[2].(string) var ipAddress string err := backoff.Retry(func() error { e.Ctx().Log.Debug("waiting for fakeintake task private ip", nil) @@ -107,7 +108,7 @@ func fargateSvcNoLB(e aws.Environment, namer namer.Namer, taskDef *awsxEcs.Farga if err != nil { return err } - ipAddress, err = ecsClient.GetTaskPrivateIP(e.ECSFargateFakeintakeClusterArn(), serviceName) + ipAddress, err = ecsClient.GetTaskPrivateIP(fakeintakeECSArn, serviceName) if err != nil { return err } @@ -199,7 +200,7 @@ func fargateSvcLB(e aws.Environment, namer namer.Namer, taskDef *awsxEcs.Fargate }, } - _, err = ecs.FargateService(e, namer.ResourceName("srv"), pulumi.String(e.ECSFargateFakeintakeClusterArn()), taskDef.TaskDefinition.Arn(), balancerArray, opts...) + _, err = ecs.FargateService(e, namer.ResourceName("srv"), e.ECSFargateFakeintakeClusterArn(), taskDef.TaskDefinition.Arn(), balancerArray, opts...) if err != nil { return err }