Skip to content

Commit 9ab7f45

Browse files
author
awstools
committed
feat(client-backup): This release introduces a new logically air-gapped vault (Preview) in AWS Backup that stores immutable backup copies, which are locked by default and isolated with encryption using AWS owned keys. Logically air-gapped vault (Preview) allows secure recovery of application data across accounts.
1 parent a9723dc commit 9ab7f45

16 files changed

+1296
-47
lines changed

clients/client-backup/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,14 @@ CreateLegalHold
255255

256256
[Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/classes/createlegalholdcommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/createlegalholdcommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/createlegalholdcommandoutput.html)
257257

258+
</details>
259+
<details>
260+
<summary>
261+
CreateLogicallyAirGappedBackupVault
262+
</summary>
263+
264+
[Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/classes/createlogicallyairgappedbackupvaultcommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/createlogicallyairgappedbackupvaultcommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/createlogicallyairgappedbackupvaultcommandoutput.html)
265+
258266
</details>
259267
<details>
260268
<summary>
@@ -599,6 +607,14 @@ ListProtectedResources
599607

600608
[Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/classes/listprotectedresourcescommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/listprotectedresourcescommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/listprotectedresourcescommandoutput.html)
601609

610+
</details>
611+
<details>
612+
<summary>
613+
ListProtectedResourcesByBackupVault
614+
</summary>
615+
616+
[Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/classes/listprotectedresourcesbybackupvaultcommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/listprotectedresourcesbybackupvaultcommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-backup/interfaces/listprotectedresourcesbybackupvaultcommandoutput.html)
617+
602618
</details>
603619
<details>
604620
<summary>

clients/client-backup/src/Backup.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ import {
3333
CreateLegalHoldCommandInput,
3434
CreateLegalHoldCommandOutput,
3535
} from "./commands/CreateLegalHoldCommand";
36+
import {
37+
CreateLogicallyAirGappedBackupVaultCommand,
38+
CreateLogicallyAirGappedBackupVaultCommandInput,
39+
CreateLogicallyAirGappedBackupVaultCommandOutput,
40+
} from "./commands/CreateLogicallyAirGappedBackupVaultCommand";
3641
import {
3742
CreateReportPlanCommand,
3843
CreateReportPlanCommandInput,
@@ -243,6 +248,11 @@ import {
243248
ListLegalHoldsCommandInput,
244249
ListLegalHoldsCommandOutput,
245250
} from "./commands/ListLegalHoldsCommand";
251+
import {
252+
ListProtectedResourcesByBackupVaultCommand,
253+
ListProtectedResourcesByBackupVaultCommandInput,
254+
ListProtectedResourcesByBackupVaultCommandOutput,
255+
} from "./commands/ListProtectedResourcesByBackupVaultCommand";
246256
import {
247257
ListProtectedResourcesCommand,
248258
ListProtectedResourcesCommandInput,
@@ -363,6 +373,7 @@ const commands = {
363373
CreateBackupVaultCommand,
364374
CreateFrameworkCommand,
365375
CreateLegalHoldCommand,
376+
CreateLogicallyAirGappedBackupVaultCommand,
366377
CreateReportPlanCommand,
367378
DeleteBackupPlanCommand,
368379
DeleteBackupSelectionCommand,
@@ -406,6 +417,7 @@ const commands = {
406417
ListFrameworksCommand,
407418
ListLegalHoldsCommand,
408419
ListProtectedResourcesCommand,
420+
ListProtectedResourcesByBackupVaultCommand,
409421
ListRecoveryPointsByBackupVaultCommand,
410422
ListRecoveryPointsByLegalHoldCommand,
411423
ListRecoveryPointsByResourceCommand,
@@ -525,6 +537,23 @@ export interface Backup {
525537
cb: (err: any, data?: CreateLegalHoldCommandOutput) => void
526538
): void;
527539

540+
/**
541+
* @see {@link CreateLogicallyAirGappedBackupVaultCommand}
542+
*/
543+
createLogicallyAirGappedBackupVault(
544+
args: CreateLogicallyAirGappedBackupVaultCommandInput,
545+
options?: __HttpHandlerOptions
546+
): Promise<CreateLogicallyAirGappedBackupVaultCommandOutput>;
547+
createLogicallyAirGappedBackupVault(
548+
args: CreateLogicallyAirGappedBackupVaultCommandInput,
549+
cb: (err: any, data?: CreateLogicallyAirGappedBackupVaultCommandOutput) => void
550+
): void;
551+
createLogicallyAirGappedBackupVault(
552+
args: CreateLogicallyAirGappedBackupVaultCommandInput,
553+
options: __HttpHandlerOptions,
554+
cb: (err: any, data?: CreateLogicallyAirGappedBackupVaultCommandOutput) => void
555+
): void;
556+
528557
/**
529558
* @see {@link CreateReportPlanCommand}
530559
*/
@@ -1220,6 +1249,23 @@ export interface Backup {
12201249
cb: (err: any, data?: ListProtectedResourcesCommandOutput) => void
12211250
): void;
12221251

1252+
/**
1253+
* @see {@link ListProtectedResourcesByBackupVaultCommand}
1254+
*/
1255+
listProtectedResourcesByBackupVault(
1256+
args: ListProtectedResourcesByBackupVaultCommandInput,
1257+
options?: __HttpHandlerOptions
1258+
): Promise<ListProtectedResourcesByBackupVaultCommandOutput>;
1259+
listProtectedResourcesByBackupVault(
1260+
args: ListProtectedResourcesByBackupVaultCommandInput,
1261+
cb: (err: any, data?: ListProtectedResourcesByBackupVaultCommandOutput) => void
1262+
): void;
1263+
listProtectedResourcesByBackupVault(
1264+
args: ListProtectedResourcesByBackupVaultCommandInput,
1265+
options: __HttpHandlerOptions,
1266+
cb: (err: any, data?: ListProtectedResourcesByBackupVaultCommandOutput) => void
1267+
): void;
1268+
12231269
/**
12241270
* @see {@link ListRecoveryPointsByBackupVaultCommand}
12251271
*/

clients/client-backup/src/BackupClient.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ import {
5959
import { CreateBackupVaultCommandInput, CreateBackupVaultCommandOutput } from "./commands/CreateBackupVaultCommand";
6060
import { CreateFrameworkCommandInput, CreateFrameworkCommandOutput } from "./commands/CreateFrameworkCommand";
6161
import { CreateLegalHoldCommandInput, CreateLegalHoldCommandOutput } from "./commands/CreateLegalHoldCommand";
62+
import {
63+
CreateLogicallyAirGappedBackupVaultCommandInput,
64+
CreateLogicallyAirGappedBackupVaultCommandOutput,
65+
} from "./commands/CreateLogicallyAirGappedBackupVaultCommand";
6266
import { CreateReportPlanCommandInput, CreateReportPlanCommandOutput } from "./commands/CreateReportPlanCommand";
6367
import { DeleteBackupPlanCommandInput, DeleteBackupPlanCommandOutput } from "./commands/DeleteBackupPlanCommand";
6468
import {
@@ -167,6 +171,10 @@ import { ListBackupVaultsCommandInput, ListBackupVaultsCommandOutput } from "./c
167171
import { ListCopyJobsCommandInput, ListCopyJobsCommandOutput } from "./commands/ListCopyJobsCommand";
168172
import { ListFrameworksCommandInput, ListFrameworksCommandOutput } from "./commands/ListFrameworksCommand";
169173
import { ListLegalHoldsCommandInput, ListLegalHoldsCommandOutput } from "./commands/ListLegalHoldsCommand";
174+
import {
175+
ListProtectedResourcesByBackupVaultCommandInput,
176+
ListProtectedResourcesByBackupVaultCommandOutput,
177+
} from "./commands/ListProtectedResourcesByBackupVaultCommand";
170178
import {
171179
ListProtectedResourcesCommandInput,
172180
ListProtectedResourcesCommandOutput,
@@ -241,6 +249,7 @@ export type ServiceInputTypes =
241249
| CreateBackupVaultCommandInput
242250
| CreateFrameworkCommandInput
243251
| CreateLegalHoldCommandInput
252+
| CreateLogicallyAirGappedBackupVaultCommandInput
244253
| CreateReportPlanCommandInput
245254
| DeleteBackupPlanCommandInput
246255
| DeleteBackupSelectionCommandInput
@@ -283,6 +292,7 @@ export type ServiceInputTypes =
283292
| ListCopyJobsCommandInput
284293
| ListFrameworksCommandInput
285294
| ListLegalHoldsCommandInput
295+
| ListProtectedResourcesByBackupVaultCommandInput
286296
| ListProtectedResourcesCommandInput
287297
| ListRecoveryPointsByBackupVaultCommandInput
288298
| ListRecoveryPointsByLegalHoldCommandInput
@@ -318,6 +328,7 @@ export type ServiceOutputTypes =
318328
| CreateBackupVaultCommandOutput
319329
| CreateFrameworkCommandOutput
320330
| CreateLegalHoldCommandOutput
331+
| CreateLogicallyAirGappedBackupVaultCommandOutput
321332
| CreateReportPlanCommandOutput
322333
| DeleteBackupPlanCommandOutput
323334
| DeleteBackupSelectionCommandOutput
@@ -360,6 +371,7 @@ export type ServiceOutputTypes =
360371
| ListCopyJobsCommandOutput
361372
| ListFrameworksCommandOutput
362373
| ListLegalHoldsCommandOutput
374+
| ListProtectedResourcesByBackupVaultCommandOutput
363375
| ListProtectedResourcesCommandOutput
364376
| ListRecoveryPointsByBackupVaultCommandOutput
365377
| ListRecoveryPointsByLegalHoldCommandOutput
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
// smithy-typescript generated code
2+
import { EndpointParameterInstructions, getEndpointPlugin } from "@smithy/middleware-endpoint";
3+
import { getSerdePlugin } from "@smithy/middleware-serde";
4+
import { HttpRequest as __HttpRequest, HttpResponse as __HttpResponse } from "@smithy/protocol-http";
5+
import { Command as $Command } from "@smithy/smithy-client";
6+
import {
7+
FinalizeHandlerArguments,
8+
Handler,
9+
HandlerExecutionContext,
10+
HttpHandlerOptions as __HttpHandlerOptions,
11+
MetadataBearer as __MetadataBearer,
12+
MiddlewareStack,
13+
SerdeContext as __SerdeContext,
14+
} from "@smithy/types";
15+
16+
import { BackupClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../BackupClient";
17+
import {
18+
CreateLogicallyAirGappedBackupVaultInput,
19+
CreateLogicallyAirGappedBackupVaultInputFilterSensitiveLog,
20+
CreateLogicallyAirGappedBackupVaultOutput,
21+
} from "../models/models_0";
22+
import {
23+
de_CreateLogicallyAirGappedBackupVaultCommand,
24+
se_CreateLogicallyAirGappedBackupVaultCommand,
25+
} from "../protocols/Aws_restJson1";
26+
27+
/**
28+
* @public
29+
*/
30+
export { __MetadataBearer, $Command };
31+
/**
32+
* @public
33+
*
34+
* The input for {@link CreateLogicallyAirGappedBackupVaultCommand}.
35+
*/
36+
export interface CreateLogicallyAirGappedBackupVaultCommandInput extends CreateLogicallyAirGappedBackupVaultInput {}
37+
/**
38+
* @public
39+
*
40+
* The output of {@link CreateLogicallyAirGappedBackupVaultCommand}.
41+
*/
42+
export interface CreateLogicallyAirGappedBackupVaultCommandOutput
43+
extends CreateLogicallyAirGappedBackupVaultOutput,
44+
__MetadataBearer {}
45+
46+
/**
47+
* @public
48+
* <p>This request creates a logical container where backups are stored.</p>
49+
* <p>This request includes a name, optionally one or more resource tags, an encryption key,
50+
* and a request ID.</p>
51+
* <note>
52+
* <p>Do not include sensitive data, such as passport numbers, in the name of a backup
53+
* vault.</p>
54+
* </note>
55+
* @example
56+
* Use a bare-bones client and the command you need to make an API call.
57+
* ```javascript
58+
* import { BackupClient, CreateLogicallyAirGappedBackupVaultCommand } from "@aws-sdk/client-backup"; // ES Modules import
59+
* // const { BackupClient, CreateLogicallyAirGappedBackupVaultCommand } = require("@aws-sdk/client-backup"); // CommonJS import
60+
* const client = new BackupClient(config);
61+
* const input = { // CreateLogicallyAirGappedBackupVaultInput
62+
* BackupVaultName: "STRING_VALUE", // required
63+
* BackupVaultTags: { // Tags
64+
* "<keys>": "STRING_VALUE",
65+
* },
66+
* CreatorRequestId: "STRING_VALUE",
67+
* MinRetentionDays: Number("long"), // required
68+
* MaxRetentionDays: Number("long"), // required
69+
* };
70+
* const command = new CreateLogicallyAirGappedBackupVaultCommand(input);
71+
* const response = await client.send(command);
72+
* // { // CreateLogicallyAirGappedBackupVaultOutput
73+
* // BackupVaultName: "STRING_VALUE",
74+
* // BackupVaultArn: "STRING_VALUE",
75+
* // CreationDate: new Date("TIMESTAMP"),
76+
* // VaultState: "CREATING" || "AVAILABLE" || "FAILED",
77+
* // };
78+
*
79+
* ```
80+
*
81+
* @param CreateLogicallyAirGappedBackupVaultCommandInput - {@link CreateLogicallyAirGappedBackupVaultCommandInput}
82+
* @returns {@link CreateLogicallyAirGappedBackupVaultCommandOutput}
83+
* @see {@link CreateLogicallyAirGappedBackupVaultCommandInput} for command's `input` shape.
84+
* @see {@link CreateLogicallyAirGappedBackupVaultCommandOutput} for command's `response` shape.
85+
* @see {@link BackupClientResolvedConfig | config} for BackupClient's `config` shape.
86+
*
87+
* @throws {@link AlreadyExistsException} (client fault)
88+
* <p>The required resource already exists.</p>
89+
*
90+
* @throws {@link InvalidParameterValueException} (client fault)
91+
* <p>Indicates that something is wrong with a parameter's value. For example, the value is
92+
* out of range.</p>
93+
*
94+
* @throws {@link InvalidRequestException} (client fault)
95+
* <p>Indicates that something is wrong with the input to the request. For example, a
96+
* parameter is of the wrong type.</p>
97+
*
98+
* @throws {@link LimitExceededException} (client fault)
99+
* <p>A limit in the request has been exceeded; for example, a maximum number of items allowed
100+
* in a request.</p>
101+
*
102+
* @throws {@link MissingParameterValueException} (client fault)
103+
* <p>Indicates that a required parameter is missing.</p>
104+
*
105+
* @throws {@link ServiceUnavailableException} (server fault)
106+
* <p>The request failed due to a temporary failure of the server.</p>
107+
*
108+
* @throws {@link BackupServiceException}
109+
* <p>Base exception class for all service exceptions from Backup service.</p>
110+
*
111+
*/
112+
export class CreateLogicallyAirGappedBackupVaultCommand extends $Command<
113+
CreateLogicallyAirGappedBackupVaultCommandInput,
114+
CreateLogicallyAirGappedBackupVaultCommandOutput,
115+
BackupClientResolvedConfig
116+
> {
117+
// Start section: command_properties
118+
// End section: command_properties
119+
120+
public static getEndpointParameterInstructions(): EndpointParameterInstructions {
121+
return {
122+
UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" },
123+
Endpoint: { type: "builtInParams", name: "endpoint" },
124+
Region: { type: "builtInParams", name: "region" },
125+
UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
126+
};
127+
}
128+
129+
/**
130+
* @public
131+
*/
132+
constructor(readonly input: CreateLogicallyAirGappedBackupVaultCommandInput) {
133+
// Start section: command_constructor
134+
super();
135+
// End section: command_constructor
136+
}
137+
138+
/**
139+
* @internal
140+
*/
141+
resolveMiddleware(
142+
clientStack: MiddlewareStack<ServiceInputTypes, ServiceOutputTypes>,
143+
configuration: BackupClientResolvedConfig,
144+
options?: __HttpHandlerOptions
145+
): Handler<CreateLogicallyAirGappedBackupVaultCommandInput, CreateLogicallyAirGappedBackupVaultCommandOutput> {
146+
this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize));
147+
this.middlewareStack.use(
148+
getEndpointPlugin(configuration, CreateLogicallyAirGappedBackupVaultCommand.getEndpointParameterInstructions())
149+
);
150+
151+
const stack = clientStack.concat(this.middlewareStack);
152+
153+
const { logger } = configuration;
154+
const clientName = "BackupClient";
155+
const commandName = "CreateLogicallyAirGappedBackupVaultCommand";
156+
const handlerExecutionContext: HandlerExecutionContext = {
157+
logger,
158+
clientName,
159+
commandName,
160+
inputFilterSensitiveLog: CreateLogicallyAirGappedBackupVaultInputFilterSensitiveLog,
161+
outputFilterSensitiveLog: (_: any) => _,
162+
};
163+
const { requestHandler } = configuration;
164+
return stack.resolve(
165+
(request: FinalizeHandlerArguments<any>) =>
166+
requestHandler.handle(request.request as __HttpRequest, options || {}),
167+
handlerExecutionContext
168+
);
169+
}
170+
171+
/**
172+
* @internal
173+
*/
174+
private serialize(
175+
input: CreateLogicallyAirGappedBackupVaultCommandInput,
176+
context: __SerdeContext
177+
): Promise<__HttpRequest> {
178+
return se_CreateLogicallyAirGappedBackupVaultCommand(input, context);
179+
}
180+
181+
/**
182+
* @internal
183+
*/
184+
private deserialize(
185+
output: __HttpResponse,
186+
context: __SerdeContext
187+
): Promise<CreateLogicallyAirGappedBackupVaultCommandOutput> {
188+
return de_CreateLogicallyAirGappedBackupVaultCommand(output, context);
189+
}
190+
191+
// Start section: command_body_extra
192+
// End section: command_body_extra
193+
}

clients/client-backup/src/commands/DescribeBackupVaultCommand.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ export interface DescribeBackupVaultCommandOutput extends DescribeBackupVaultOut
4545
* const client = new BackupClient(config);
4646
* const input = { // DescribeBackupVaultInput
4747
* BackupVaultName: "STRING_VALUE", // required
48+
* BackupVaultAccountId: "STRING_VALUE",
4849
* };
4950
* const command = new DescribeBackupVaultCommand(input);
5051
* const response = await client.send(command);
5152
* // { // DescribeBackupVaultOutput
5253
* // BackupVaultName: "STRING_VALUE",
5354
* // BackupVaultArn: "STRING_VALUE",
55+
* // VaultType: "BACKUP_VAULT" || "LOGICALLY_AIR_GAPPED_BACKUP_VAULT",
5456
* // EncryptionKeyArn: "STRING_VALUE",
5557
* // CreationDate: new Date("TIMESTAMP"),
5658
* // CreatorRequestId: "STRING_VALUE",

clients/client-backup/src/commands/DescribeRecoveryPointCommand.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export interface DescribeRecoveryPointCommandOutput extends DescribeRecoveryPoin
4747
* const input = { // DescribeRecoveryPointInput
4848
* BackupVaultName: "STRING_VALUE", // required
4949
* RecoveryPointArn: "STRING_VALUE", // required
50+
* BackupVaultAccountId: "STRING_VALUE",
5051
* };
5152
* const command = new DescribeRecoveryPointCommand(input);
5253
* const response = await client.send(command);

clients/client-backup/src/commands/GetRecoveryPointRestoreMetadataCommand.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export interface GetRecoveryPointRestoreMetadataCommandOutput
5555
* const input = { // GetRecoveryPointRestoreMetadataInput
5656
* BackupVaultName: "STRING_VALUE", // required
5757
* RecoveryPointArn: "STRING_VALUE", // required
58+
* BackupVaultAccountId: "STRING_VALUE",
5859
* };
5960
* const command = new GetRecoveryPointRestoreMetadataCommand(input);
6061
* const response = await client.send(command);

0 commit comments

Comments
 (0)