Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(elbv2): add metrics to INetworkTargetGroup and IApplicationTargetGroup #23993

Merged
merged 2 commits into from
Feb 14, 2023

Conversation

edisongustavo
Copy link
Contributor

@edisongustavo edisongustavo commented Feb 3, 2023

This PR follows the same conventions as #23853

By moving the metrics methods to the INetworkTargetGroup and IApplicationTargetGroup interfaces it allows to create these metrics also for Target Groups that are imported via the fromTargetGroupAttributes() method.

To create the metrics for Target Groups requires (1) the full name of the Target Group and (2) the full name of the Load Balancer.

For (1): it is readily available given that all imported Target Groups need to provide its ARN.
For (2), it is an optional value, so the .metrics parameter will throw an error if it was not provided.

To solve this problem I did:

  • Introduce a new interface for each TG type: INetworkTargetGroupMetrics, IApplicationTargetGroupMetrics
  • Create a concrete implementation for the new interfaces (1 for each): NetworkTargetGroupMetrics and ApplicationTargetGroupMetrics
  • Make each concrete implementation of each Load Balancer to also provide a metrics field. The concrete implementations of the load balancers are:
    ImportedApplicationTargetGroup, and ApplicationLoadBalancer (and the same for the NLB classes).

I chose to create a new interface because code can be reused across the 3 concrete implementations of each Load Balancer. I deprecated the metricXXX() methods of each load balancer because I think it is cleaner to access metrics through the new metrics attribute/interface.

There is a small gotcha here because the parameter of the fromTargetGroupAttributes() method that refers to the LB is: loadBalancerArns, which has its documentation as:

A Token representing the list of ARNs for the load balancer routing to this target group

I'm not treating this parameter as a collection of ARNs, but as a single ARN. Also, I'm not treating it only as a token, but hardcoded ARNs can also be supplied, which "sort of" violates its interface. This attribute is weird though because Target Groups cannot have multiple Load Balancers as of today, although its documentation doesn't clearly express that is the case.

fix: #10850


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

@gitpod-io
Copy link

gitpod-io bot commented Feb 3, 2023

@github-actions github-actions bot added beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK p2 labels Feb 3, 2023
@aws-cdk-automation aws-cdk-automation requested a review from a team February 3, 2023 15:46
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter has failed. See the aws-cdk-automation comment below for failure reasons. If you believe this pull request should receive an exemption, please comment and provide a justification.

@edisongustavo edisongustavo changed the title Add tg metrics feat(elbv2): add metrics to INetworkTargetGroup and IApplicationTargetGroup Feb 3, 2023
@aws-cdk-automation aws-cdk-automation dismissed their stale review February 3, 2023 18:11

✅ Updated pull request passes all PRLinter validations. Dissmissing previous PRLinter review.

@edisongustavo edisongustavo force-pushed the add-tg-metrics branch 3 times, most recently from 0e9e3a5 to 5f9d157 Compare February 7, 2023 14:03
@edisongustavo
Copy link
Contributor Author

This PR contains the commit from #23972, so that PR needs to be merged first.

@edisongustavo edisongustavo marked this pull request as ready for review February 8, 2023 19:15
Copy link
Contributor

@comcalvi comcalvi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor style comment, but other than that looks ready to merge!

…tGroup

By moving the metrics methods to the `INetworkTargetGroup` and
`IApplicationTargetGroup` interfaces it allows to create these metrics also for
Target Groups that are imported via the `fromTargetGroupAttributes()` method.

To create the metrics for Target Groups requires (1) the full name of the Target
Group and (2) the full name of the Load Balancer.

For (1): it is readily available given that all imported Target Groups need to
provide its ARN.
For (2), it is an optional value, so the `.metrics` parameter will throw an
error if it was not provided.

To solve this problem I did:

- Introduce a new interface for each TG type: `INetworkTargetGroupMetrics`,
`IApplicationTargetGroupMetrics`
- Create a concrete implementation for the new interfaces (1 for each):
`NetworkTargetGroupMetrics` and `ApplicationTargetGroupMetrics`
- Make each concrete implementation of each Load Balancer to also provide a
`metrics` field. The concrete implementations of the load balancers are:
`ImportedApplicationTargetGroup`, and `ApplicationLoadBalancer` (and the same
for the NLB classes).

I chose to create a new interface because code can be reused across the 3
concrete implementations of each Load Balancer. I deprecated the `metricXXX()`
methods of each load balancer because I think it is cleaner to access metrics
through the new `metrics` attribute/interface.

There is a small **gotcha** here because the parameter of the
`fromTargetGroupAttributes()` method that refers to the LB is:
`loadBalancerArns`, which has its documentation as:

> A Token representing the list of ARNs for the load balancer routing to this
target group

I'm not treating this parameter as a collection of ARNs, but as a single AR.
Also, I'm not treating it only as a token, but hardcoded ARNs can also be
supplied, which "sort of" violates its interface. This attribute is weird though
because Target Groups cannot have multiple Load Balancers as of today, although
its documentation doesn't clearly express that is the case.

fix: aws#10850

----

### All Submissions:

* [x] Have you followed the guidelines in our [Contributing
guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md)

### Adding new Construct Runtime Dependencies:

* [ ] This PR adds new construct runtime dependencies following the process
described
[here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-construct-runtime-dependencies)

### New Features

* [x] Have you added the new feature to an [integration
test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)?
	* [x] Did you use `yarn integ` to deploy the infrastructure and generate the
snapshot (i.e. `yarn integ` without `--dry-run`)?

*By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache-2.0 license*
comcalvi
comcalvi previously approved these changes Feb 13, 2023
@mergify
Copy link
Contributor

mergify bot commented Feb 13, 2023

Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork).

@mergify mergify bot dismissed comcalvi’s stale review February 14, 2023 03:05

Pull request has been modified.

@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: c3972bc
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@mergify
Copy link
Contributor

mergify bot commented Feb 14, 2023

Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork).

@mergify mergify bot merged commit 6a9e43f into aws:main Feb 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK p2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[elbv2] support metric methods on IApplicationTargetGroup
4 participants