startSnapshot method
Creates a new Amazon EBS snapshot. The new snapshot enters the
pending
state after the request completes.
After creating the snapshot, use PutSnapshotBlock to write blocks of data to the snapshot.
May throw AccessDeniedException. May throw ValidationException. May throw RequestThrottledException. May throw ResourceNotFoundException. May throw ServiceQuotaExceededException. May throw InternalServerException. May throw ConcurrentLimitExceededException. May throw ConflictException.
Parameter volumeSize
:
The size of the volume, in GiB. The maximum size is 16384
GiB
(16 TiB).
Parameter clientToken
:
A unique, case-sensitive identifier that you provide to ensure the
idempotency of the request. Idempotency ensures that an API request
completes only once. With an idempotent request, if the original request
completes successfully. The subsequent retries with the same client token
return the result from the original successful request and they have no
additional effect.
If you do not specify a client token, one is automatically generated by the AWS SDK.
For more information, see Idempotency for StartSnapshot API in the Amazon Elastic Compute Cloud User Guide.
Parameter description
:
A description for the snapshot.
Parameter encrypted
:
Indicates whether to encrypt the snapshot. To create an encrypted
snapshot, specify true
. To create an unencrypted snapshot,
omit this parameter.
If you specify a value for ParentSnapshotId, omit this parameter.
If you specify true
, the snapshot is encrypted using the CMK
specified using the KmsKeyArn parameter. If no value is specified
for KmsKeyArn, the default CMK for your account is used. If no
default CMK has been specified for your account, the AWS managed CMK is
used. To set a default CMK for your account, use
ModifyEbsDefaultKmsKeyId.
If your account is enabled for encryption by default, you cannot set this
parameter to false
. In this case, you can omit this
parameter.
For more information, see Using encryption in the Amazon Elastic Compute Cloud User Guide.
Parameter kmsKeyArn
:
The Amazon Resource Name (ARN) of the AWS Key Management Service (AWS KMS)
customer master key (CMK) to be used to encrypt the snapshot. If you do
not specify a CMK, the default AWS managed CMK is used.
If you specify a ParentSnapshotId, omit this parameter; the snapshot will be encrypted using the same CMK that was used to encrypt the parent snapshot.
If Encrypted is set to true
, you must specify a CMK
ARN.
Parameter parentSnapshotId
:
The ID of the parent snapshot. If there is no parent snapshot, or if you
are creating the first snapshot for an on-premises volume, omit this
parameter.
If your account is enabled for encryption by default, you cannot use an unencrypted snapshot as a parent snapshot. You must first create an encrypted copy of the parent snapshot using CopySnapshot.
Parameter tags
:
The tags to apply to the snapshot.
Parameter timeout
:
The amount of time (in minutes) after which the snapshot is automatically
cancelled if:
- No blocks are written to the snapshot.
- The snapshot is not completed after writing the last block of data.
60
minutes.
Implementation
Future<StartSnapshotResponse> startSnapshot({
required int volumeSize,
String? clientToken,
String? description,
bool? encrypted,
String? kmsKeyArn,
String? parentSnapshotId,
List<Tag>? tags,
int? timeout,
}) async {
ArgumentError.checkNotNull(volumeSize, 'volumeSize');
_s.validateNumRange(
'volumeSize',
volumeSize,
1,
1152921504606846976,
isRequired: true,
);
_s.validateStringLength(
'clientToken',
clientToken,
0,
255,
);
_s.validateStringLength(
'description',
description,
0,
255,
);
_s.validateStringLength(
'kmsKeyArn',
kmsKeyArn,
1,
2048,
);
_s.validateStringLength(
'parentSnapshotId',
parentSnapshotId,
1,
64,
);
_s.validateNumRange(
'timeout',
timeout,
10,
60,
);
final $payload = <String, dynamic>{
'VolumeSize': volumeSize,
'ClientToken': clientToken ?? _s.generateIdempotencyToken(),
if (description != null) 'Description': description,
if (encrypted != null) 'Encrypted': encrypted,
if (kmsKeyArn != null) 'KmsKeyArn': kmsKeyArn,
if (parentSnapshotId != null) 'ParentSnapshotId': parentSnapshotId,
if (tags != null) 'Tags': tags,
if (timeout != null) 'Timeout': timeout,
};
final response = await _protocol.send(
payload: $payload,
method: 'POST',
requestUri: '/snapshots',
exceptionFnMap: _exceptionFns,
);
return StartSnapshotResponse.fromJson(response);
}