|
1 | 1 | use std::{sync::Arc, sync::LazyLock}; |
2 | 2 |
|
3 | 3 | use arrow::datatypes::SchemaRef; |
4 | | -use aws_config::{ |
5 | | - environment::{EnvironmentVariableCredentialsProvider, EnvironmentVariableRegionProvider}, |
6 | | - meta::{credentials::CredentialsProviderChain, region::RegionProviderChain}, |
7 | | - profile::{ProfileFileCredentialsProvider, ProfileFileRegionProvider}, |
8 | | -}; |
| 4 | +use aws_config::BehaviorVersion; |
9 | 5 | use aws_credential_types::provider::ProvideCredentials; |
10 | 6 | use object_store::{ |
11 | 7 | aws::{AmazonS3, AmazonS3Builder}, |
@@ -92,48 +88,40 @@ fn object_store_with_location(uri: &Url, copy_from: bool) -> (Arc<dyn ObjectStor |
92 | 88 | async fn get_s3_object_store(bucket_name: &str) -> AmazonS3 { |
93 | 89 | let mut aws_s3_builder = AmazonS3Builder::new().with_bucket_name(bucket_name); |
94 | 90 |
|
95 | | - let is_test_running = std::env::var("PG_PARQUET_TEST").is_ok(); |
96 | | - |
97 | | - if is_test_running { |
98 | | - // use minio for testing |
99 | | - aws_s3_builder = aws_s3_builder.with_endpoint("http://localhost:9000"); |
100 | | - aws_s3_builder = aws_s3_builder.with_allow_http(true); |
101 | | - } |
| 91 | + // AWS_ALLOW_HTTP |
| 92 | + if let Ok(aws_allow_http) = std::env::var("AWS_ALLOW_HTTP") { |
| 93 | + aws_s3_builder = aws_s3_builder |
| 94 | + .with_allow_http(aws_allow_http.parse().unwrap_or_else(|e| panic!("{}", e))); |
| 95 | + }; |
102 | 96 |
|
103 | | - let aws_profile_name = std::env::var("AWS_PROFILE").unwrap_or("default".to_string()); |
| 97 | + // first tries to load the profile files from the environment variables and then from the profile |
| 98 | + let sdk_config = aws_config::defaults(BehaviorVersion::v2024_03_28()) |
| 99 | + .load() |
| 100 | + .await; |
104 | 101 |
|
105 | | - let region_provider = RegionProviderChain::first_try(EnvironmentVariableRegionProvider::new()) |
106 | | - .or_else( |
107 | | - ProfileFileRegionProvider::builder() |
108 | | - .profile_name(aws_profile_name.clone()) |
109 | | - .build(), |
110 | | - ); |
| 102 | + if let Some(credential_provider) = sdk_config.credentials_provider() { |
| 103 | + if let Ok(credentials) = credential_provider.provide_credentials().await { |
| 104 | + // AWS_ACCESS_KEY_ID |
| 105 | + aws_s3_builder = aws_s3_builder.with_access_key_id(credentials.access_key_id()); |
111 | 106 |
|
112 | | - let region = region_provider.region().await; |
| 107 | + // AWS_SECRET_ACCESS_KEY |
| 108 | + aws_s3_builder = aws_s3_builder.with_secret_access_key(credentials.secret_access_key()); |
113 | 109 |
|
114 | | - if let Some(region) = region { |
115 | | - aws_s3_builder = aws_s3_builder.with_region(region.to_string()); |
| 110 | + if let Some(token) = credentials.session_token() { |
| 111 | + // AWS_SESSION_TOKEN |
| 112 | + aws_s3_builder = aws_s3_builder.with_token(token); |
| 113 | + } |
| 114 | + } |
116 | 115 | } |
117 | 116 |
|
118 | | - let credential_provider = CredentialsProviderChain::first_try( |
119 | | - "Environment", |
120 | | - EnvironmentVariableCredentialsProvider::new(), |
121 | | - ) |
122 | | - .or_else( |
123 | | - "Profile", |
124 | | - ProfileFileCredentialsProvider::builder() |
125 | | - .profile_name(aws_profile_name) |
126 | | - .build(), |
127 | | - ); |
128 | | - |
129 | | - if let Ok(credentials) = credential_provider.provide_credentials().await { |
130 | | - aws_s3_builder = aws_s3_builder.with_access_key_id(credentials.access_key_id()); |
131 | | - |
132 | | - aws_s3_builder = aws_s3_builder.with_secret_access_key(credentials.secret_access_key()); |
| 117 | + // AWS_ENDPOINT_URL |
| 118 | + if let Some(aws_endpoint_url) = sdk_config.endpoint_url() { |
| 119 | + aws_s3_builder = aws_s3_builder.with_endpoint(aws_endpoint_url); |
| 120 | + } |
133 | 121 |
|
134 | | - if let Some(token) = credentials.session_token() { |
135 | | - aws_s3_builder = aws_s3_builder.with_token(token); |
136 | | - } |
| 122 | + // AWS_REGION |
| 123 | + if let Some(aws_region) = sdk_config.region() { |
| 124 | + aws_s3_builder = aws_s3_builder.with_region(aws_region.as_ref()); |
137 | 125 | } |
138 | 126 |
|
139 | 127 | aws_s3_builder.build().unwrap_or_else(|e| panic!("{}", e)) |
|
0 commit comments