#[non_exhaustive]pub struct S3Config {Show 29 fields
pub root: Option<String>,
pub bucket: String,
pub enable_versioning: bool,
pub endpoint: Option<String>,
pub region: Option<String>,
pub access_key_id: Option<String>,
pub secret_access_key: Option<String>,
pub session_token: Option<String>,
pub role_arn: Option<String>,
pub external_id: Option<String>,
pub role_session_name: Option<String>,
pub disable_config_load: bool,
pub disable_ec2_metadata: bool,
pub allow_anonymous: bool,
pub server_side_encryption: Option<String>,
pub server_side_encryption_aws_kms_key_id: Option<String>,
pub server_side_encryption_customer_algorithm: Option<String>,
pub server_side_encryption_customer_key: Option<String>,
pub server_side_encryption_customer_key_md5: Option<String>,
pub default_storage_class: Option<String>,
pub enable_virtual_host_style: bool,
pub batch_max_operations: Option<usize>,
pub delete_max_size: Option<usize>,
pub disable_stat_with_override: bool,
pub checksum_algorithm: Option<String>,
pub disable_write_with_if_match: bool,
pub enable_write_with_append: bool,
pub disable_list_objects_v2: bool,
pub enable_request_payer: bool,
}Expand description
Config for Aws S3 and compatible services (including minio, digitalocean space, Tencent Cloud Object Storage(COS) and so on) support.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.root: Option<String>root of this backend.
All operations will happen under this root.
default to / if not set.
bucket: Stringbucket name of this backend.
required.
enable_versioning: boolis bucket versioning enabled for this bucket
endpoint: Option<String>endpoint of this backend.
Endpoint must be full uri, e.g.
- AWS S3:
https://s3.amazonaws.comorhttps://s3.{region}.amazonaws.com - Cloudflare R2:
https://<ACCOUNT_ID>.r2.cloudflarestorage.com - Aliyun OSS:
https://{region}.aliyuncs.com - Tencent COS:
https://cos.{region}.myqcloud.com - Minio:
http://127.0.0.1:9000
If user inputs endpoint without scheme like “s3.amazonaws.com”, we will prepend “https://” before it.
- If endpoint is set, we will take user’s input first.
- If not, we will try to load it from environment.
- If still not set, default to
https://s3.amazonaws.com.
region: Option<String>Region represent the signing region of this endpoint. This is required if you are using the default AWS S3 endpoint.
If using a custom endpoint,
- If region is set, we will take user’s input first.
- If not, we will try to load it from environment.
access_key_id: Option<String>access_key_id of this backend.
- If access_key_id is set, we will take user’s input first.
- If not, we will try to load it from environment.
secret_access_key: Option<String>secret_access_key of this backend.
- If secret_access_key is set, we will take user’s input first.
- If not, we will try to load it from environment.
session_token: Option<String>session_token (aka, security token) of this backend.
This token will expire after sometime, it’s recommended to set session_token by hand.
role_arn: Option<String>role_arn for this backend.
If role_arn is set, we will use already known config as source
credential to assume role with role_arn.
external_id: Option<String>external_id for this backend.
role_session_name: Option<String>role_session_name for this backend.
disable_config_load: boolDisable config load so that opendal will not load config from environment.
For examples:
- envs like
AWS_ACCESS_KEY_ID - files like
~/.aws/config
disable_ec2_metadata: boolDisable load credential from ec2 metadata.
This option is used to disable the default behavior of opendal to load credential from ec2 metadata, a.k.a, IMDSv2
allow_anonymous: boolAllow anonymous will allow opendal to send request without signing when credential is not loaded.
server_side_encryption: Option<String>server_side_encryption for this backend.
Available values: AES256, aws:kms.
server_side_encryption_aws_kms_key_id: Option<String>server_side_encryption_aws_kms_key_id for this backend
- If
server_side_encryptionset toaws:kms, andserver_side_encryption_aws_kms_key_idis not set, S3 will use aws managed kms key to encrypt data. - If
server_side_encryptionset toaws:kms, andserver_side_encryption_aws_kms_key_idis a valid kms key id, S3 will use the provided kms key to encrypt data. - If the
server_side_encryption_aws_kms_key_idis invalid or not found, an error will be returned. - If
server_side_encryptionis notaws:kms, settingserver_side_encryption_aws_kms_key_idis a noop.
server_side_encryption_customer_algorithm: Option<String>server_side_encryption_customer_algorithm for this backend.
Available values: AES256.
server_side_encryption_customer_key: Option<String>server_side_encryption_customer_key for this backend.
Value: BASE64-encoded key that matches algorithm specified in
server_side_encryption_customer_algorithm.
server_side_encryption_customer_key_md5: Option<String>Set server_side_encryption_customer_key_md5 for this backend.
Value: MD5 digest of key specified in server_side_encryption_customer_key.
default_storage_class: Option<String>default storage_class for this backend.
Available values:
DEEP_ARCHIVEGLACIERGLACIER_IRINTELLIGENT_TIERINGONEZONE_IAEXPRESS_ONEZONEOUTPOSTSREDUCED_REDUNDANCYSTANDARDSTANDARD_IA
S3 compatible services don’t support all of them
enable_virtual_host_style: boolEnable virtual host style so that opendal will send API requests in virtual host style instead of path style.
- By default, opendal will send API to
https://s3.us-east-1.amazonaws.com/bucket_name - Enabled, opendal will send API to
https://bucket_name.s3.us-east-1.amazonaws.com
batch_max_operations: Option<usize>delete_max_size instead of batch_max_operationsSet maximum batch operations of this backend.
Some compatible services have a limit on the number of operations in a batch request.
For example, R2 could return Internal Error while batch delete 1000 files.
Please tune this value based on services’ document.
delete_max_size: Option<usize>Set the maximum delete size of this backend.
Some compatible services have a limit on the number of operations in a batch request.
For example, R2 could return Internal Error while batch delete 1000 files.
Please tune this value based on services’ document.
disable_stat_with_override: boolDisable stat with override so that opendal will not send stat request with override queries.
For example, R2 doesn’t support stat with response_content_type query.
checksum_algorithm: Option<String>Checksum Algorithm to use when sending checksums in HTTP headers. This is necessary when writing to AWS S3 Buckets with Object Lock enabled for example.
Available options:
- “crc32c”
disable_write_with_if_match: boolDisable write with if match so that opendal will not send write request with if match headers.
For example, Ceph RADOS S3 doesn’t support write with if match.
enable_write_with_append: boolEnable write with append so that opendal will send write request with append headers.
disable_list_objects_v2: boolOpenDAL uses List Objects V2 by default to list objects. However, some legacy services do not yet support V2. This option allows users to switch back to the older List Objects V1.
enable_request_payer: boolIndicates whether the client agrees to pay for the requests made to the S3 bucket.
Trait Implementations§
Source§impl Configurator for S3Config
Available on crate feature services-s3 only.
impl Configurator for S3Config
services-s3 only.Source§fn from_uri(uri: &OperatorUri) -> Result<Self>
fn from_uri(uri: &OperatorUri) -> Result<Self>
Source§fn into_builder(self) -> Self::Builder
fn into_builder(self) -> Self::Builder
Source§impl<'de> Deserialize<'de> for S3Config
Available on crate feature services-s3 only.
impl<'de> Deserialize<'de> for S3Config
services-s3 only.Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for S3Config
services-s3 only.impl StructuralPartialEq for S3Config
services-s3 only.Auto Trait Implementations§
impl Freeze for S3Config
impl RefUnwindSafe for S3Config
impl Send for S3Config
impl Sync for S3Config
impl Unpin for S3Config
impl UnwindSafe for S3Config
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.