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

Sourcing service config from the environment. #3493

Merged
merged 32 commits into from
Apr 1, 2024
Merged

Conversation

Velfi
Copy link
Contributor

@Velfi Velfi commented Mar 15, 2024

Motivation and Context

#2863
awslabs/aws-sdk-rust#1060

Description

This PR adds a new feature: the ability to source service-specific config from the environment.
This is only supported when creating a service config from an SdkConfig. I've posted a guide to our discussions board.

This also adds support for setting an endpoint URL in environment config.

Testing

I have written several tests ensuring config is extracted with the correct precedence.

Checklist

  • I have updated CHANGELOG.next.toml if I made changes to the AWS SDK, generated SDK code, or SDK runtime crates

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link
Collaborator

@jdisanti jdisanti left a comment

Choose a reason for hiding this comment

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

Nice work on this!

let profile_value = match (profiles, self.profile_key.as_ref()) {
(Some(profiles), Some(profile_key)) => {
// Check for a service-specific profile key first
let service_config = get_service_config_from_profile(
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think for the S3 Express properties, the service config lookup needs to be explicitly turned off. Otherwise, this would end up working:

[default]
services = foo

[services foo]
s3 =
    s3_disable_express_session_auth = true

Which is unspecified behavior.

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'll add a test ensuring that this isn't the case.

aws/rust-runtime/aws-runtime/src/profile.rs Outdated Show resolved Hide resolved
aws/rust-runtime/aws-runtime/src/profile/parse.rs Outdated Show resolved Hide resolved

/// A single profile file within a [`ProfileFiles`] file set.
#[derive(Clone)]
pub(crate) enum ProfileFile {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Should really consider renaming these things since they're not profile files, but rather, shared config files.

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 did a big rename of these and related types. Let me know what you think.

For ease of review, I kept using the same type names as the old ones in aws-config by using the deprecated type aliases. I can switch them to use the new names, I just thought this might make it easier to understand what's actually changed and what's basically the same after the move+rename

aws/rust-runtime/aws-runtime/src/profile/profile_set.rs Outdated Show resolved Hide resolved
aws/rust-runtime/aws-runtime/src/profile/section.rs Outdated Show resolved Hide resolved
aws/rust-runtime/aws-types/src/sdk_config.rs Outdated Show resolved Hide resolved
@Velfi
Copy link
Contributor Author

Velfi commented Mar 25, 2024

I still have at least one test to fix. Otherwise, this is nearly complete.

Copy link

A new generated diff is ready to view.

  • AWS SDK (ignoring whitespace)
  • No codegen difference in the Client Test
  • No codegen difference in the Server Test
  • No codegen difference in the Server Test Python
  • No codegen difference in the Server Test Typescript

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

Copy link
Contributor

@ysaito1001 ysaito1001 left a comment

Choose a reason for hiding this comment

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

Changes look great, handling moving types, leaving [deprecated] really well! Leaving minor comments while continuing to review testing

Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

@Velfi Velfi marked this pull request as ready for review March 28, 2024 14:38
@Velfi Velfi requested review from a team as code owners March 28, 2024 14:38
Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

Copy link
Contributor

@ysaito1001 ysaito1001 left a comment

Choose a reason for hiding this comment

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

Looks great, and consider this approval from me. Just want to check the status of this comment?

aws/rust-runtime/aws-runtime/src/env_config/file.rs Outdated Show resolved Hide resolved
CHANGELOG.next.toml Outdated Show resolved Hide resolved
Copy link

A new generated diff is ready to view.

A new doc preview is ready to view.

@Velfi Velfi added this pull request to the merge queue Apr 1, 2024
Merged via the queue into main with commit 5f7113f Apr 1, 2024
41 of 42 checks passed
@Velfi Velfi deleted the zhessler-service-env-config branch April 1, 2024 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants