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(ecs): enable fault injection flag #32598

Merged
merged 13 commits into from
Jan 7, 2025
Merged

Conversation

mazyu36
Copy link
Contributor

@mazyu36 mazyu36 commented Dec 19, 2024

Issue # (if applicable)

N/A

Reason for this change

Add a missing property.

Description of changes

Add enableFaultInjection property.

Describe any new or updated permissions being added

No

Description of how you validated changes

Add unit test and integ test

Checklist


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

@github-actions github-actions bot added the p2 label Dec 19, 2024
@aws-cdk-automation aws-cdk-automation requested a review from a team December 19, 2024 22:20
@github-actions github-actions bot added the distinguished-contributor [Pilot] contributed 50+ PRs to the CDK label Dec 19, 2024
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.

A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed add Clarification Request to a comment.

Copy link

codecov bot commented Dec 19, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 81.52%. Comparing base (3606deb) to head (11b6572).

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #32598   +/-   ##
=======================================
  Coverage   81.52%   81.52%           
=======================================
  Files         222      222           
  Lines       13715    13715           
  Branches     2417     2417           
=======================================
  Hits        11181    11181           
  Misses       2254     2254           
  Partials      280      280           
Flag Coverage Δ
suite.unit 81.52% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
packages/aws-cdk 80.97% <ø> (ø)
packages/aws-cdk-lib/core 82.09% <ø> (ø)

@mazyu36 mazyu36 marked this pull request as ready for review December 19, 2024 23:14
@aws-cdk-automation aws-cdk-automation dismissed their stale review December 19, 2024 23:15

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

@aws-cdk-automation aws-cdk-automation added the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Dec 20, 2024
Copy link
Contributor

@nmussy nmussy left a comment

Choose a reason for hiding this comment

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

LGTM, mostly docs nits and additional integ coverage 👍

packages/aws-cdk-lib/aws-ecs/README.md Outdated Show resolved Hide resolved
packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts Outdated Show resolved Hide resolved
packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts Outdated Show resolved Hide resolved
memoryLimitMiB: 512,
});

new IntegTest(app, 'TaskDefinitionEnableFaultInjection', {
Copy link
Contributor

Choose a reason for hiding this comment

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

Could you add assertions to a DescribeTaskDefinition API call? You should be able to retrieve the enableFaultInjection prop there

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'm struggling to add integration test assertions.

The enable fault injection was correctly set to true in the management console after deployment.

image

However, the assertions are failing.
I'm not yet sure of the root cause, but I might need to update the SDK version used in the integ tests.

test.assertions.awsApiCall('@aws-sdk/client-ecs', 'DescribeTaskDefinition', {
  taskDefinition: ec2TaskDefinition.taskDefinitionArn,
})
  .expect(ExpectedResult.objectLike({
    taskDefinition: {
      enableFaultInjection: true,
    },
  }));
  ASSERT     aws-ecs/test/integ.task-definition-enable-fault-injection-TaskDefinitionEnableFaultInjection/DefaultTest (undefined/us-east-1) 128.939s
      AssertionResultsAwsApiCallawssdkclientecsDescribeTaskDefinitionfd8b5aaee373c34a7ec063a10e6c89a0
{
  "tags": [],
  "taskDefinition": {
    "compatibilities": [ "EC2", "FARGATE" ],
    "containerDefinitions": [ { ... } ],
    "cpu": "256",
!!   Missing key 'enableFaultInjection'
    "enableFaultInjection": undefined,

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think it's a SDK issue, but one with the API, or at least its docs, as DescribeTaskDefinition should return enableFaultInjection, whether or not it was set. I'm not getting the property from the CLI either with aws ecs describe-task-definition, with both the EC2 or the Fargate definition.

Checking the task definition JSON in the web console does indicate that enableFaultInjection is being properly set by your integration, but I don't think we can test it as is. You could try to raise this issue with the AWS support but it might be better if a CDK team member could forward this issue.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you for the approval.
After updating the version in AWS CLI, I was able to retrieve it using describe-task-definition by AWS CLI.
Therefore, I think it might be an issue with a tool.

I'll investigate this further separately from this PR.​​​​​​​​​​​​​​​​

Copy link
Contributor

@nmussy nmussy Dec 26, 2024

Choose a reason for hiding this comment

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

You're absolutely right, I upgraded my CLI from 2.22.7 to 2.22.23 and the field now appears:

$ aws ecs describe-task-definition --task-definition <arn> | jq '.taskDefinition.enableFaultInjection'
true

I assumed the AWS API would do all the work with describe* commands, but I guess either the implementations map the results, or the API only returns certain fields after a certain version? Either way, kind of odd.

From what I can tell, since it's no longer documented, Node Lambdas ship with version 3.632.0 of the SDK (at least on us-east-1), so there's not much we can do about this as the assertions are ran on a custom resource. I don't think it's worth bundling and shipping the SDK for the version lag we're experiencing, even if this version is over 4 months old

@aws-cdk-automation aws-cdk-automation removed the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Dec 24, 2024
@aws-cdk-automation aws-cdk-automation added the pr/needs-maintainer-review This PR needs a review from a Core Team Member label Dec 25, 2024
@godwingrs22 godwingrs22 self-requested a review January 6, 2025 20:40
@godwingrs22 godwingrs22 changed the title feat(ecs): enbale fault injection flag feat(ecs): enable fault injection flag Jan 6, 2025
Copy link
Member

@godwingrs22 godwingrs22 left a comment

Choose a reason for hiding this comment

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

Thanks @mazyu36 for the contribution. LGTM overall. Just left two nit comments.

Comment on lines +470 to +473
if (props.enableFaultInjection && ![NetworkMode.AWS_VPC, NetworkMode.HOST].includes(this.networkMode)) {
throw new Error(`Only AWS_VPC and HOST Network Modes are supported for enabling Fault Injection, got ${this.networkMode} mode.`);
}

Copy link
Member

Choose a reason for hiding this comment

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

nit: It would be good to mention the behaviour link also above this code as a comment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks. I've added the link.

@@ -514,6 +527,7 @@ export class TaskDefinition extends TaskDefinitionBase {
cpuArchitecture: this.runtimePlatform?.cpuArchitecture?._cpuArchitecture,
operatingSystemFamily: this.runtimePlatform?.operatingSystemFamily?._operatingSystemFamily,
} : undefined,
enableFaultInjection: props.enableFaultInjection,
Copy link
Member

Choose a reason for hiding this comment

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

nit: since the enableFaultInjection is default false (as mentioned in jsdoc), it would be better we specify as false instead of leaving it as undefined. This ensures the default behavior is clear.

enableFaultInjection: props.enableFaultInjection ?? false

Copy link
Contributor Author

Choose a reason for hiding this comment

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

In my understanding, if default false is set, all existing templates will change, and it should be avoided.
I have fixed the JSDoc. Please correct me if I'm wrong.

@mazyu36 mazyu36 requested a review from godwingrs22 January 7, 2025 07:35
Copy link
Contributor

mergify bot commented Jan 7, 2025

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).

@aws-cdk-automation aws-cdk-automation removed the pr/needs-maintainer-review This PR needs a review from a Core Team Member label Jan 7, 2025
Copy link
Contributor

mergify bot commented Jan 7, 2025

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).

@godwingrs22
Copy link
Member

@Mergifyio update

Copy link
Contributor

mergify bot commented Jan 7, 2025

update

✅ Branch has been successfully updated

@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

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

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

Copy link
Contributor

mergify bot commented Jan 7, 2025

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 ed366ce into aws:main Jan 7, 2025
19 checks passed
Copy link

github-actions bot commented Jan 7, 2025

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jan 7, 2025
@mazyu36 mazyu36 deleted the ecs-enable-fis branch January 7, 2025 23:54
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
distinguished-contributor [Pilot] contributed 50+ PRs to the CDK p2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants