Skip to content

feat(endpoint): log endpoint decisions at debug level #4106

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

Merged
merged 1 commit into from
Oct 27, 2022

Conversation

kuhe
Copy link
Contributor

@kuhe kuhe commented Oct 26, 2022

Issue

internal JS-3672 & #4064

Description

Outputs decision information during endpoints ruleset resolution at the debug log level.

Testing

Local testing with a filtered logger:

  const client = new S3({
    endpoint: "https://s3.amazonaws.com",
    forcePathStyle: true,
    logger: {
      error(...ignored) {},
      warn(...ignored) {},
      info(...ignored) {},
      debug(id, ...rest) {
        if (id === "endpoints") {
          console.debug(...rest);
        }
      },
    },
  });

Sample output:

Initial EndpointParams: {
  "Bucket": "TEST_BUCKET",
  "ForcePathStyle": true,
  "UseArnRegion": false,
  "DisableMultiRegionAccessPoints": false,
  "Accelerate": false,
  "UseGlobalEndpoint": false,
  "UseFIPS": false,
  "Endpoint": "https://s3.amazonaws.com/",
  "Region": "us-east-1",
  "UseDualStack": false
}
evaluateCondition: isSet($Region) = true
evaluateCondition: isSet($Bucket) = true
evaluateCondition: substring($Bucket,49,50,true) = null
evaluateCondition: isSet($Bucket) = true
evaluateCondition: isSet($Endpoint) = true
evaluateCondition: not(isSet(parseURL($Endpoint))) = false
evaluateCondition: isSet($ForcePathStyle) = true
evaluateCondition: booleanEquals($ForcePathStyle,true) = true
evaluateCondition: aws.parseArn($Bucket) = null
evaluateCondition: uriEncode($Bucket) = TEST_BUCKET
assign: uri_encoded_bucket := TEST_BUCKET
evaluateCondition: booleanEquals($UseDualStack,true) = false
evaluateCondition: aws.partition($Region) = {
  "name": "aws",
  "dnsSuffix": "amazonaws.com",
  "dualStackDnsSuffix": "api.aws",
  "supportsFIPS": true,
  "supportsDualStack": true
}
assign: partitionResult := {
  "name": "aws",
  "dnsSuffix": "amazonaws.com",
  "dualStackDnsSuffix": "api.aws",
  "supportsFIPS": true,
  "supportsDualStack": true
}
evaluateCondition: booleanEquals($Accelerate,false) = true
evaluateCondition: booleanEquals($UseFIPS,false) = true
evaluateCondition: booleanEquals($UseDualStack,true) = false
evaluateCondition: booleanEquals($UseDualStack,true) = false
evaluateCondition: booleanEquals($UseDualStack,true) = false
evaluateCondition: booleanEquals($UseDualStack,true) = false
evaluateCondition: booleanEquals($UseDualStack,false) = true
evaluateCondition: isSet($Endpoint) = true
evaluateCondition: parseURL($Endpoint) = {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
assign: url := {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
evaluateCondition: stringEquals($Region,aws-global) = false
evaluateCondition: booleanEquals($UseDualStack,false) = true
evaluateCondition: isSet($Endpoint) = true
evaluateCondition: parseURL($Endpoint) = {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
assign: url := {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
evaluateCondition: stringEquals($Region,aws-global) = false
evaluateCondition: booleanEquals($UseDualStack,false) = true
evaluateCondition: isSet($Endpoint) = true
evaluateCondition: parseURL($Endpoint) = {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
assign: url := {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
evaluateCondition: not(stringEquals($Region,aws-global)) = true
evaluateCondition: booleanEquals($UseGlobalEndpoint,true) = false
evaluateCondition: booleanEquals($UseDualStack,false) = true
evaluateCondition: isSet($Endpoint) = true
evaluateCondition: parseURL($Endpoint) = {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
assign: url := {
  "scheme": "https",
  "authority": "s3.amazonaws.com",
  "path": "/",
  "normalizedPath": "/",
  "isIp": false
}
evaluateCondition: not(stringEquals($Region,aws-global)) = true
evaluateCondition: booleanEquals($UseGlobalEndpoint,false) = true
Resolving endpoint from template: {
  "url": "{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}",
  "properties": {
    "authSchemes": [
      {
        "name": "sigv4",
        "signingName": "s3",
        "disableDoubleEncoding": true,
        "signingRegion": "{Region}"
      }
    ]
  },
  "headers": {}
}
Resolved endpoint: {
  "headers": {},
  "properties": {
    "authSchemes": [
      {
        "name": "sigv4",
        "signingName": "s3",
        "disableDoubleEncoding": true,
        "signingRegion": "us-east-1"
      }
    ]
  },
  "url": "https://s3.amazonaws.com/TEST_BUCKET"
}

@kuhe kuhe requested a review from a team as a code owner October 26, 2022 22:08
@kuhe kuhe merged commit d600213 into aws:main Oct 27, 2022
@github-actions
Copy link

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs and link to relevant comments in this thread.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Nov 11, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants