From 9b5e21ea1761e7fe4afc4406e341f155849c00ab Mon Sep 17 00:00:00 2001 From: Corey Pyle Date: Thu, 29 Feb 2024 11:48:20 -0500 Subject: [PATCH 1/3] GitHub: Change JS workflow to include JSON in changed files check. --- .github/workflows/javascript.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/javascript.yml b/.github/workflows/javascript.yml index 51500c453d7..8bbc45399ce 100644 --- a/.github/workflows/javascript.yml +++ b/.github/workflows/javascript.yml @@ -20,18 +20,18 @@ jobs: id: changed-files uses: tj-actions/changed-files@v41 with: - files: "javascriptv3/**/*.{js,ts,jsx,tsx}" + files: "javascriptv3/**/*.{js,ts,jsx,tsx,json}" - name: Setup NodeJS if: steps.changed-files.outputs.any_changed == 'true' uses: actions/setup-node@v3 with: node-version: "20.x" - - name: Install dependencies - if: steps.changed-files.outputs.any_changed == 'true' - run: npm i --prefix javascriptv3 - name: Validate package names if: steps.changed-files.outputs.any_changed == 'true' run: ./javascriptv3/github_scripts/validate_packages.sh + - name: Install dependencies + if: steps.changed-files.outputs.any_changed == 'true' + run: npm i --prefix javascriptv3 - name: Lint added and modified files if: steps.changed-files.outputs.any_changed == 'true' run: | From f0f05a103ff787c6df66708148caa95296bfc0eb Mon Sep 17 00:00:00 2001 From: Rachel Hagerman <110480692+rlhagerm@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:56:32 -0600 Subject: [PATCH 2/3] .NET v3: Add the S3 Object Lock Workflow Scenario (#6179) --- .doc_gen/metadata/s3_metadata.yaml | 142 ++++++ dotnetv3/S3/README.md | 20 + .../scenarios/S3ObjectLockScenario/README.md | 57 +++ .../S3ObjectLockScenario.sln | 31 ++ .../S3ObjectLockScenarioTests.cs | 108 ++++ .../S3ObjectLockTests.csproj | 40 ++ .../S3ObjectLockTests/Usings.cs | 4 + .../S3ObjectLockTests/testsettings.json | 4 + .../S3ObjectLockWorkflow/S3ActionsWrapper.cs | 435 ++++++++++++++++ .../S3ObjectLockScenario.csproj | 29 ++ .../S3ObjectLockWorkflow.cs | 432 ++++++++++++++++ .../S3ObjectLockWorkflow/settings.json | 4 + workflows/s3_object_lock/README.md | 35 ++ workflows/s3_object_lock/SPECIFICATION.md | 476 ++++++++++++++++++ .../Diagram_Amazon-S3-Object-Lock.png | Bin 0 -> 169923 bytes 15 files changed, 1817 insertions(+) create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/README.md create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockScenario.sln create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockScenarioTests.cs create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockTests.csproj create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/Usings.cs create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/testsettings.json create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockScenario.csproj create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockWorkflow.cs create mode 100644 dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/settings.json create mode 100644 workflows/s3_object_lock/README.md create mode 100644 workflows/s3_object_lock/SPECIFICATION.md create mode 100644 workflows/s3_object_lock/resources/Diagram_Amazon-S3-Object-Lock.png diff --git a/.doc_gen/metadata/s3_metadata.yaml b/.doc_gen/metadata/s3_metadata.yaml index b7fa79a2323..22506be619e 100644 --- a/.doc_gen/metadata/s3_metadata.yaml +++ b/.doc_gen/metadata/s3_metadata.yaml @@ -77,6 +77,9 @@ s3_CreateBucket: - description: snippet_tags: - S3.dotnetv3.S3_Basics-CreateBucket + - description: Create a bucket with object lock enabled. + snippet_tags: + - S3LockWorkflow.dotnetv3.CreateBucketWithObjectLock C++: versions: - sdk_version: 1 @@ -954,6 +957,57 @@ s3_GetBucketLifecycleConfiguration: - python.example_code.s3.GetBucketLifecycleConfiguration services: s3: {GetBucketLifecycleConfiguration} +s3_GetObjectLegalHoldConfiguration: + title: Get the legal hold configuration of an &S3; object using an &AWS; SDK + title_abbrev: Get the legal hold configuration of an object + synopsis: get the legal hold configuration of an S3 bucket. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.GetObjectLegalHold + services: + s3: {GetObjectLegalHold} +s3_GetObjectLockConfiguration: + title: Get the object lock configuration of an &S3; bucket using an &AWS; SDK + title_abbrev: Get the object lock configuration of a bucket + synopsis: get the object lock configuration of an S3 bucket. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.GetBucketObjectLockConfiguration + services: + s3: {GetObjectLockConfiguration} +s3_GetObjectRetention: + title: Get the retention configuration of an &S3; object using an &AWS; SDK + title_abbrev: Get the retention configuration of an object + synopsis: get the retention configuration of an S3 object. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.GetObjectRetention + services: + s3: {GetObjectRetention} s3_ServiceAccessLogging: title: Enable logging on an &S3; bucket using an &AWS; SDK title_abbrev: Enable logging @@ -2088,6 +2142,74 @@ s3_PutObjectAcl: - s3.cpp.put_object_acl.code services: s3: {PutObjectAcl} +s3_PutObjectLegalHold: + title: Set the legal hold configuration of an &S3; object using an &AWS; SDK + title_abbrev: Set the legal hold configuration of an object + synopsis: set the legal hold configuration of an S3 object. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.ModifyObjectLegalHold + services: + s3: {PutObjectLegalHold} +s3_PutObjectLockConfiguration: + title: Set the object lock configuration of an &S3; bucket using an &AWS; SDK + title_abbrev: Set the object lock configuration of an bucket + synopsis: set the object lock configuration of an existing S3 bucket. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.EnableObjectLockOnBucket + services: + s3: {PutObjectLockConfiguration} +s3_PutObjectRetention: + title: Set the retention period of an &S3; object using an &AWS; SDK + title_abbrev: Set the retention period of an object + synopsis: set the retention period of an S3 object. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.ModifyObjectRetentionPeriod + services: + s3: {PutObjectRetention} +s3_PutDefaultObjectLockConfiguration: + title: Set the default retention period of an &S3; bucket using an &AWS; SDK + title_abbrev: Set the default retention period of a bucket + synopsis: set the default retention period of an S3 bucket. + category: + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: + snippet_tags: + - S3LockWorkflow.dotnetv3.ModifyBucketDefaultRetention + services: + s3: {PutObjectLockConfiguration} s3_UploadPart: title: Upload a single part of a multipart upload using an &AWS; SDK title_abbrev: Upload a single part of a multipart upload @@ -2931,3 +3053,23 @@ s3_GetObject_MRAP: - s3.kotlin.mrap.getobject services: s3: {GetObject} +s3_Scenario_ObjectLock: + title: Work with &S3; object lock features using an &AWS; SDK + title_abbrev: Lock &S3; objects + synopsis: work with S3 object lock features. + category: Scenarios + languages: + .NET: + versions: + - sdk_version: 3 + github: dotnetv3/S3/scenarios/S3ObjectLockScenario + sdkguide: + excerpts: + - description: Run an interactive scenario demonstrating &S3; object lock features. + snippet_tags: + - S3LockWorkflow.dotnetv3.ObjectLockWorkflow + - description: A wrapper class for S3 functions. + snippet_tags: + - S3LockWorkflow.dotnetv3.S3ActionsWrapper + services: + s3: {PutObjectLockConfiguration, PutObjectRetention, GetObjectRetention, PutObjectLegalHold, GetObjectLegalHold, GetObjectLockConfiguration} diff --git a/dotnetv3/S3/README.md b/dotnetv3/S3/README.md index 08be16cd94b..2f2658fa883 100644 --- a/dotnetv3/S3/README.md +++ b/dotnetv3/S3/README.md @@ -49,13 +49,20 @@ Code excerpts that show you how to call individual service functions. - [Get CORS rules for a bucket](s3CORSExample/S3CORS.cs#L125) (`GetBucketCors`) - [Get an object from a bucket](S3_Basics/S3Bucket.cs#L85) (`GetObject`) - [Get the ACL of a bucket](BucketACLExample/BucketACL.cs#L75) (`GetBucketAcl`) +- [Get the legal hold configuration of an object](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L259) (`GetObjectLegalHold`) - [Get the lifecycle configuration of a bucket](LifecycleExample/Lifecycle.cs#L169) (`GetBucketLifecycleConfiguration`) +- [Get the object lock configuration of a bucket](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L290) (`GetObjectLockConfiguration`) +- [Get the retention configuration of an object](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L193) (`GetObjectRetention`) - [Get the website configuration for a bucket](WebsiteConfigExample/WebsiteConfig.cs#L72) (`GetBucketWebsite`) - [List buckets](ListBucketsExample/ListBuckets.cs#L4) (`ListBuckets`) - [List object versions in a bucket](versioned-examples/ListObjectVersionsExample/ListObjectVersions.cs#L6) (`ListObjectVersions`) - [List objects in a bucket](S3_Basics/S3Bucket.cs#L171) (`ListObjectsV2`) - [Restore an archived copy of an object](RestoreArchivedObjectExample/RestoreArchivedObject.cs#L6) (`RestoreObject`) - [Set a new ACL for a bucket](BucketACLExample/BucketACL.cs#L37) (`PutBucketAcl`) +- [Set the default retention period of a bucket](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L139) (`PutObjectLockConfiguration`) +- [Set the legal hold configuration of an object](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L224) (`PutObjectLegalHold`) +- [Set the object lock configuration of an bucket](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L60) (`PutObjectLockConfiguration`) +- [Set the retention period of an object](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs#L102) (`PutObjectRetention`) - [Set the website configuration for a bucket](WebsiteConfigExample/WebsiteConfig.cs#L57) (`PutBucketWebsite`) - [Upload an object to a bucket](S3_Basics/S3Bucket.cs#L43) (`PutObject`) @@ -68,6 +75,7 @@ functions within the same service. - [Get started with buckets and objects](S3_Basics/S3_Basics.cs) - [Get started with encryption](SSEClientEncryptionExample/SSEClientEncryption.cs) - [Get started with tags](ObjectTagExample/ObjectTag.cs) +- [Lock Amazon S3 objects](scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockWorkflow.cs) - [Manage access control lists (ACLs)](ManageACLsExample/ManageACLs.cs) - [Perform a multipart copy](MPUapiCopyObjExample/MPUapiCopyObj.cs) - [Upload or download large files](scenarios/TransferUtilityBasics/TransferUtilityBasics/TransferBasics.cs) @@ -163,6 +171,18 @@ This example shows you how to get started with tags for Amazon S3 objects. +#### Lock Amazon S3 objects + +This example shows you how to work with S3 object lock features. + + + + + + + + + #### Manage access control lists (ACLs) This example shows you how to manage access control lists (ACLs) for Amazon S3 buckets. diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/README.md b/dotnetv3/S3/scenarios/S3ObjectLockScenario/README.md new file mode 100644 index 00000000000..ec8f5b0cf00 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/README.md @@ -0,0 +1,57 @@ +# Amazon S3 Object Lock Workflow + +## Overview + +This example shows how to use AWS SDKs to work with Amazon Simple Storage Service (Amazon S3) object locking features. The workflow demonstrates how to create, update, view, and modify object locks, as well as how locked objects behave regarding requests to delete and overwrite. + +[Amazon S3 Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) can help prevent Amazon S3 objects from being deleted or overwritten for a fixed amount of time or indefinitely. Object Lock can help meet regulatory requirements or protect against object changes or deletion. + +![Object Lock Features](../../../../workflows/s3_object_lock/resources/Diagram_Amazon-S3-Object-Lock.png) + +This workflow demonstrates the following steps and tasks: +1. Add object lock settings to both new and existing S3 buckets. + 1. Add objects to buckets with optional object lock or retention period settings. +2. Attempt to delete or overwrite locked objects. +3. Retrieve and view the object lock and retention period settings of buckets and objects. +4. Delete the objects and buckets. + 1. Remove any object locks and use the BypassGovernanceRetention setting. + +## ⚠ Important + +* Running this code might result in charges to your AWS account. +* Running the tests might result in charges to your AWS account. +* We recommend that you grant your code least privilege. At most, grant only the minimum permissions required to perform the task. For more information, see [Grant least privilege](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege). +* This code is not tested in every AWS Region. For more information, see [AWS Regional Services](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services). + +## Scenario + +### Prerequisites + +For general prerequisites, see the [README](../../../README.md) in the `dotnetv3` folder. + +### Resources + +The workflow scenario steps create the buckets and objects needed for the example. No additional resources are required. + +This workflow includes an optional step to add a governance mode retention period of one day to objects in an S3 bucket. In order to delete these objects, you must have the `s3:BypassGovernanceRetention` permission. If you do not have this permission, you will be unable to delete these objects until the retention period has expired. + +### Instructions + +After the example compiles, you can run it from the command line. To do so, navigate to +the folder that contains the .sln file and run the following command: + +``` +dotnet run +``` + +Alternatively, you can run the example from within your IDE. + +This starts an interactive scenario that walks you through creating, exploring, and deleting S3 buckets and objects with various object lock settings. + +## Additional resources + +- [S3 Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) + +--- + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockScenario.sln b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockScenario.sln new file mode 100644 index 00000000000..82430802b26 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockScenario.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34221.43 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "S3ObjectLockScenario", "S3ObjectLockWorkflow\S3ObjectLockScenario.csproj", "{AD5B04A6-0ED1-4384-9125-2E64B7898B52}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "S3ObjectLockTests", "S3ObjectLockTests\S3ObjectLockTests.csproj", "{9E2CFE55-8998-44D2-8331-93AAE8554677}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AD5B04A6-0ED1-4384-9125-2E64B7898B52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AD5B04A6-0ED1-4384-9125-2E64B7898B52}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD5B04A6-0ED1-4384-9125-2E64B7898B52}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AD5B04A6-0ED1-4384-9125-2E64B7898B52}.Release|Any CPU.Build.0 = Release|Any CPU + {9E2CFE55-8998-44D2-8331-93AAE8554677}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E2CFE55-8998-44D2-8331-93AAE8554677}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E2CFE55-8998-44D2-8331-93AAE8554677}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E2CFE55-8998-44D2-8331-93AAE8554677}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E2318334-46A6-4814-892D-EE6AE0307BEC} + EndGlobalSection +EndGlobal diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockScenarioTests.cs b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockScenarioTests.cs new file mode 100644 index 00000000000..97da02e2609 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockScenarioTests.cs @@ -0,0 +1,108 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +using Amazon.S3; +using Microsoft.Extensions.Configuration; +using S3ObjectLockScenario; +using Xunit.Extensions.Ordering; + +namespace S3ObjectLockTests; + +/// +/// Tests for the ObjectLockScenario example. +/// +public class S3ObjectLockScenarioTests +{ + private readonly IConfiguration _configuration; + + private readonly S3ActionsWrapper _s3ActionsWrapper = null!; + private readonly string _resourcePrefix; + + /// + /// Constructor for the test class. + /// + public S3ObjectLockScenarioTests() + { + _configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("testsettings.json") // Load test settings from .json file. + .AddJsonFile("testsettings.local.json", + true) // Optionally, load local settings. + .Build(); + + _resourcePrefix = _configuration["resourcePrefix"] ?? "dotnet-example"; + + _s3ActionsWrapper = new S3ActionsWrapper( + new AmazonS3Client(), + _configuration); + + S3ObjectLockWorkflow._s3ActionsWrapper = _s3ActionsWrapper; + S3ObjectLockWorkflow._configuration = _configuration; + } + + /// + /// Run the setup step of the workflow. Should return successful. + /// + /// Async task. + [Fact] + [Order(1)] + [Trait("Category", "Integration")] + public async Task TestSetup() + { + // Arrange. + S3ObjectLockWorkflow.ConfigurationSetup(); + + // Act. + var success = await S3ObjectLockWorkflow.Setup(false); + + var finished = false; + while (!finished) + { + // Make sure the buckets are available before moving on. + var created = await S3ObjectLockWorkflow.ListBucketsAndObjects(false); + finished = created.Count > 0; + } + + // Assert. + Assert.True(success); + } + + /// + /// Run the list object step of the workflow. Should return successful. + /// + /// Async task. + [Fact] + [Order(2)] + [Trait("Category", "Integration")] + public async Task TestObjects() + { + // Arrange. + S3ObjectLockWorkflow.ConfigurationSetup(); + + // Act. + var objects = await S3ObjectLockWorkflow.ListBucketsAndObjects(false); + + // Assert. + Assert.NotEmpty(objects); + } + + + /// + /// Run the cleanup step of the workflow. Should return successful. + /// + /// Async task. + [Fact] + [Order(3)] + [Trait("Category", "Integration")] + public async Task TestCleanup() + { + // Arrange. + S3ObjectLockWorkflow.ConfigurationSetup(); + + // Act. + var success = await S3ObjectLockWorkflow.Cleanup(false); + + // Assert. + Assert.True(success); + } +} \ No newline at end of file diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockTests.csproj b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockTests.csproj new file mode 100644 index 00000000000..5cd1fc94523 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/S3ObjectLockTests.csproj @@ -0,0 +1,40 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + PreserveNewest + + + PreserveNewest + testsettings.json + + + + + + + + diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/Usings.cs b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/Usings.cs new file mode 100644 index 00000000000..47af9ec2f2c --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/Usings.cs @@ -0,0 +1,4 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +global using Xunit; \ No newline at end of file diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/testsettings.json b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/testsettings.json new file mode 100644 index 00000000000..872c2a7f9a7 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockTests/testsettings.json @@ -0,0 +1,4 @@ +{ + "resourcePrefix": "dotnet-s3-lock-example", + "exampleFileName": "dotnet-example-file.txt" +} diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs new file mode 100644 index 00000000000..c875a92c353 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ActionsWrapper.cs @@ -0,0 +1,435 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +// snippet-start:[S3LockWorkflow.dotnetv3.S3ActionsWrapper] + +using System.Net; +using Amazon.S3; +using Amazon.S3.Model; +using Microsoft.Extensions.Configuration; + +namespace S3ObjectLockScenario; + +/// +/// Encapsulate the Amazon S3 operations. +/// +public class S3ActionsWrapper +{ + private readonly IAmazonS3 _amazonS3; + + /// + /// Constructor for the S3ActionsWrapper. + /// + /// The injected S3 client. + public S3ActionsWrapper(IAmazonS3 amazonS3, IConfiguration configuration) + { + _amazonS3 = amazonS3; + } + + // snippet-start:[S3LockWorkflow.dotnetv3.CreateBucketWithObjectLock] + /// + /// Create a new Amazon S3 bucket with object lock actions. + /// + /// The name of the bucket to create. + /// True to enable object lock on the bucket. + /// True if successful. + public async Task CreateBucketWithObjectLock(string bucketName, bool enableObjectLock) + { + Console.WriteLine($"\tCreating bucket {bucketName} with object lock {enableObjectLock}."); + try + { + var request = new PutBucketRequest + { + BucketName = bucketName, + UseClientRegion = true, + ObjectLockEnabledForBucket = enableObjectLock, + }; + + var response = await _amazonS3.PutBucketAsync(request); + + return response.HttpStatusCode == System.Net.HttpStatusCode.OK; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"Error creating bucket: '{ex.Message}'"); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.CreateBucketWithObjectLock] + + // snippet-start:[S3LockWorkflow.dotnetv3.EnableObjectLockOnBucket] + /// + /// Enable object lock on an existing bucket. + /// + /// The name of the bucket to modify. + /// True if successful. + public async Task EnableObjectLockOnBucket(string bucketName) + { + try + { + // First, enable Versioning on the bucket. + await _amazonS3.PutBucketVersioningAsync(new PutBucketVersioningRequest() + { + BucketName = bucketName, + VersioningConfig = new S3BucketVersioningConfig() + { + EnableMfaDelete = false, + Status = VersionStatus.Enabled + } + }); + + var request = new PutObjectLockConfigurationRequest() + { + BucketName = bucketName, + ObjectLockConfiguration = new ObjectLockConfiguration() + { + ObjectLockEnabled = new ObjectLockEnabled("Enabled"), + }, + }; + + var response = await _amazonS3.PutObjectLockConfigurationAsync(request); + Console.WriteLine($"\tAdded an object lock policy to bucket {bucketName}."); + return response.HttpStatusCode == System.Net.HttpStatusCode.OK; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"Error modifying object lock: '{ex.Message}'"); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.EnableObjectLockOnBucket] + + // snippet-start:[S3LockWorkflow.dotnetv3.ModifyObjectRetentionPeriod] + /// + /// Set or modify a retention period on an object in an S3 bucket. + /// + /// The bucket of the object. + /// The key of the object. + /// The retention mode. + /// The date retention expires. + /// True if successful. + public async Task ModifyObjectRetentionPeriod(string bucketName, + string objectKey, ObjectLockRetentionMode retention, DateTime retainUntilDate) + { + try + { + var request = new PutObjectRetentionRequest() + { + BucketName = bucketName, + Key = objectKey, + Retention = new ObjectLockRetention() + { + Mode = retention, + RetainUntilDate = retainUntilDate + } + }; + + var response = await _amazonS3.PutObjectRetentionAsync(request); + Console.WriteLine($"\tSet retention for {objectKey} in {bucketName} until {retainUntilDate:d}."); + return response.HttpStatusCode == System.Net.HttpStatusCode.OK; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tError modifying retention period: '{ex.Message}'"); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.ModifyObjectRetentionPeriod] + + // snippet-start:[S3LockWorkflow.dotnetv3.ModifyBucketDefaultRetention] + /// + /// Set or modify a retention period on an S3 bucket. + /// + /// The bucket to modify. + /// The retention mode. + /// The date for retention until. + /// True if successful. + public async Task ModifyBucketDefaultRetention(string bucketName, bool enableObjectLock, ObjectLockRetentionMode retention, DateTime retainUntilDate) + { + var enabledString = enableObjectLock ? "Enabled" : "Disabled"; + var timeDifference = retainUntilDate.Subtract(DateTime.Now); + try + { + // First, enable Versioning on the bucket. + await _amazonS3.PutBucketVersioningAsync(new PutBucketVersioningRequest() + { + BucketName = bucketName, + VersioningConfig = new S3BucketVersioningConfig() + { + EnableMfaDelete = false, + Status = VersionStatus.Enabled + } + }); + + var request = new PutObjectLockConfigurationRequest() + { + BucketName = bucketName, + ObjectLockConfiguration = new ObjectLockConfiguration() + { + ObjectLockEnabled = new ObjectLockEnabled(enabledString), + Rule = new ObjectLockRule() + { + DefaultRetention = new DefaultRetention() + { + Mode = retention, + Days = timeDifference.Days // Can be specified in days or years but not both. + } + } + } + }; + + var response = await _amazonS3.PutObjectLockConfigurationAsync(request); + Console.WriteLine($"\tAdded a default retention to bucket {bucketName}."); + return response.HttpStatusCode == System.Net.HttpStatusCode.OK; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tError modifying object lock: '{ex.Message}'"); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.ModifyBucketDefaultRetention] + + // snippet-start:[S3LockWorkflow.dotnetv3.GetObjectRetention] + /// + /// Get the retention period for an S3 object. + /// + /// The bucket of the object. + /// The object key. + /// The object retention details. + public async Task GetObjectRetention(string bucketName, + string objectKey) + { + try + { + var request = new GetObjectRetentionRequest() + { + BucketName = bucketName, + Key = objectKey + }; + + var response = await _amazonS3.GetObjectRetentionAsync(request); + Console.WriteLine($"\tObject retention for {objectKey} in {bucketName}: " + + $"\n\t{response.Retention.Mode} until {response.Retention.RetainUntilDate:d}."); + return response.Retention; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tUnable to fetch object lock retention: '{ex.Message}'"); + return new ObjectLockRetention(); + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.GetObjectRetention] + + // snippet-start:[S3LockWorkflow.dotnetv3.ModifyObjectLegalHold] + /// + /// Set or modify a legal hold on an object in an S3 bucket. + /// + /// The bucket of the object. + /// The key of the object. + /// The On or Off status for the legal hold. + /// True if successful. + public async Task ModifyObjectLegalHold(string bucketName, + string objectKey, ObjectLockLegalHoldStatus holdStatus) + { + try + { + var request = new PutObjectLegalHoldRequest() + { + BucketName = bucketName, + Key = objectKey, + LegalHold = new ObjectLockLegalHold() + { + Status = holdStatus + } + }; + + var response = await _amazonS3.PutObjectLegalHoldAsync(request); + Console.WriteLine($"\tModified legal hold for {objectKey} in {bucketName}."); + return response.HttpStatusCode == System.Net.HttpStatusCode.OK; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tError modifying legal hold: '{ex.Message}'"); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.ModifyObjectLegalHold] + + // snippet-start:[S3LockWorkflow.dotnetv3.GetObjectLegalHold] + /// + /// Get the legal hold details for an S3 object. + /// + /// The bucket of the object. + /// The object key. + /// The object legal hold details. + public async Task GetObjectLegalHold(string bucketName, + string objectKey) + { + try + { + var request = new GetObjectLegalHoldRequest() + { + BucketName = bucketName, + Key = objectKey + }; + + var response = await _amazonS3.GetObjectLegalHoldAsync(request); + Console.WriteLine($"\tObject legal hold for {objectKey} in {bucketName}: " + + $"\n\tStatus: {response.LegalHold.Status}"); + return response.LegalHold; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tUnable to fetch legal hold: '{ex.Message}'"); + return new ObjectLockLegalHold(); + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.GetObjectLegalHold] + + // snippet-start:[S3LockWorkflow.dotnetv3.GetBucketObjectLockConfiguration] + /// + /// Get the object lock configuration details for an S3 bucket. + /// + /// The bucket to get details. + /// The bucket's object lock configuration details. + public async Task GetBucketObjectLockConfiguration(string bucketName) + { + try + { + var request = new GetObjectLockConfigurationRequest() + { + BucketName = bucketName + }; + + var response = await _amazonS3.GetObjectLockConfigurationAsync(request); + Console.WriteLine($"\tBucket object lock config for {bucketName} in {bucketName}: " + + $"\n\tEnabled: {response.ObjectLockConfiguration.ObjectLockEnabled}" + + $"\n\tRule: {response.ObjectLockConfiguration.Rule?.DefaultRetention}"); + + return response.ObjectLockConfiguration; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tUnable to fetch object lock config: '{ex.Message}'"); + return new ObjectLockConfiguration(); + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.GetBucketObjectLockConfiguration] + + // snippet-start:[S3LockWorkflow.dotnetv3.UploadFileAsync] + /// + /// Upload a file from the local computer to an Amazon S3 bucket. + /// + /// The Amazon S3 bucket to use. + /// The object to upload. + /// The path, including file name, of the object to upload. + /// True if success. + public async Task UploadFileAsync(string bucketName, string objectName, string filePath) + { + var request = new PutObjectRequest + { + BucketName = bucketName, + Key = objectName, + FilePath = filePath, + ChecksumAlgorithm = ChecksumAlgorithm.SHA256 + }; + + var response = await _amazonS3.PutObjectAsync(request); + if (response.HttpStatusCode == System.Net.HttpStatusCode.OK) + { + Console.WriteLine($"\tSuccessfully uploaded {objectName} to {bucketName}."); + return true; + } + else + { + Console.WriteLine($"\tCould not upload {objectName} to {bucketName}."); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.UploadFileAsync] + + // snippet-start:[S3LockWorkflow.dotnetv3.ListBucketObjectsAndVersions] + /// + /// List bucket objects and versions. + /// + /// The Amazon S3 bucket to use. + /// The list of objects and versions. + public async Task ListBucketObjectsAndVersions(string bucketName) + { + var request = new ListVersionsRequest() + { + BucketName = bucketName + }; + + var response = await _amazonS3.ListVersionsAsync(request); + return response; + } + // snippet-end:[S3LockWorkflow.dotnetv3.ListBucketObjectsAndVersions] + + // snippet-start:[S3LockWorkflow.dotnetv3.DeleteObjectFromBucket] + /// + /// Delete an object from a specific bucket. + /// + /// The Amazon S3 bucket to use. + /// The key of the object to delete. + /// True if the object has retention settings. + /// Optional versionId. + /// True if successful. + public async Task DeleteObjectFromBucket(string bucketName, string objectKey, bool hasRetention, string? versionId = null) + { + try + { + var request = new DeleteObjectRequest() + { + BucketName = bucketName, + Key = objectKey, + VersionId = versionId, + }; + if (hasRetention) + { + // Set the BypassGovernanceRetention header + // if the file has retention settings. + request.BypassGovernanceRetention = true; + } + await _amazonS3.DeleteObjectAsync(request); + Console.WriteLine( + $"Deleted {objectKey} in {bucketName}."); + return true; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tUnable to delete object {objectKey} in bucket {bucketName}: " + ex.Message); + return false; + } + } + // snippet-end:[S3LockWorkflow.dotnetv3.DeleteObjectFromBucket] + + // snippet-start:[S3LockWorkflow.dotnetv3.DeleteBucketByName] + /// + /// Delete a specific bucket. + /// + /// The Amazon S3 bucket to use. + /// The key of the object to delete. + /// Optional versionId. + /// True if successful. + public async Task DeleteBucketByName(string bucketName) + { + try + { + var request = new DeleteBucketRequest() { BucketName = bucketName, }; + var response = await _amazonS3.DeleteBucketAsync(request); + Console.WriteLine($"\tDelete for {bucketName} complete."); + return response.HttpStatusCode == HttpStatusCode.OK; + } + catch (AmazonS3Exception ex) + { + Console.WriteLine($"\tUnable to delete bucket {bucketName}: " + ex.Message); + return false; + } + + } + // snippet-end:[S3LockWorkflow.dotnetv3.DeleteBucketByName] + +} +// snippet-end:[S3LockWorkflow.dotnetv3.S3ActionsWrapper] \ No newline at end of file diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockScenario.csproj b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockScenario.csproj new file mode 100644 index 00000000000..4eb4d3dc299 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockScenario.csproj @@ -0,0 +1,29 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + settings.json + + + + diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockWorkflow.cs b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockWorkflow.cs new file mode 100644 index 00000000000..00a7c91bcec --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/S3ObjectLockWorkflow.cs @@ -0,0 +1,432 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +// snippet-start:[S3LockWorkflow.dotnetv3.ObjectLockWorkflow] + +using Amazon.S3; +using Amazon.S3.Model; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Console; +using Microsoft.Extensions.Logging.Debug; + +namespace S3ObjectLockScenario; + +public static class S3ObjectLockWorkflow +{ + /* + Before running this .NET code example, set up your development environment, including your credentials. + + This .NET example performs the following tasks: + 1. Create test Amazon Simple Storage Service (S3) buckets with different lock policies. + 2. Upload sample objects to each bucket. + 3. Set some Legal Hold and Retention Periods on objects and buckets. + 4. Investigate lock policies by viewing settings or attempting to delete or overwrite objects. + 5. Clean up objects and buckets. + */ + + public static S3ActionsWrapper _s3ActionsWrapper = null!; + public static IConfiguration _configuration = null!; + private static string _resourcePrefix = null!; + private static string noLockBucketName = null!; + private static string lockEnabledBucketName = null!; + private static string retentionAfterCreationBucketName = null!; + private static List bucketNames = new List(); + private static List fileNames = new List(); + + public static async Task Main(string[] args) + { + // Set up dependency injection for the Amazon service. + using var host = Host.CreateDefaultBuilder(args) + .ConfigureLogging(logging => + logging.AddFilter("System", LogLevel.Debug) + .AddFilter("Microsoft", LogLevel.Information) + .AddFilter("Microsoft", LogLevel.Trace)) + .ConfigureServices((_, services) => + services.AddAWSService() + .AddTransient() + ) + .Build(); + + _configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("settings.json") // Load settings from .json file. + .AddJsonFile("settings.local.json", + true) // Optionally, load local settings. + .Build(); + + ConfigurationSetup(); + + ServicesSetup(host); + + try + { + Console.WriteLine(new string('-', 80)); + Console.WriteLine("Welcome to the Amazon Simple Storage Service (S3) Object Locking Workflow Scenario."); + Console.WriteLine(new string('-', 80)); + await Setup(true); + + await DemoActionChoices(); + + Console.WriteLine(new string('-', 80)); + Console.WriteLine("Cleaning up resources."); + Console.WriteLine(new string('-', 80)); + await Cleanup(true); + + Console.WriteLine(new string('-', 80)); + Console.WriteLine("Amazon S3 Object Locking Workflow is complete."); + Console.WriteLine(new string('-', 80)); + } + catch (Exception ex) + { + Console.WriteLine(new string('-', 80)); + Console.WriteLine($"There was a problem: {ex.Message}"); + await Cleanup(true); + Console.WriteLine(new string('-', 80)); + } + } + + /// + /// Populate the services for use within the console application. + /// + /// The services host. + private static void ServicesSetup(IHost host) + { + _s3ActionsWrapper = host.Services.GetRequiredService(); + } + + /// + /// Any setup operations needed. + /// + public static void ConfigurationSetup() + { + _resourcePrefix = _configuration["resourcePrefix"] ?? "dotnet-example"; + + noLockBucketName = _resourcePrefix + "-no-lock"; + lockEnabledBucketName = _resourcePrefix + "-lock-enabled"; + retentionAfterCreationBucketName = _resourcePrefix + "-retention-after-creation"; + + bucketNames.Add(noLockBucketName); + bucketNames.Add(lockEnabledBucketName); + bucketNames.Add(retentionAfterCreationBucketName); + } + + // + /// Deploy necessary resources for the scenario. + /// + /// True to run as interactive. + /// True if successful. + public static async Task Setup(bool interactive) + { + Console.WriteLine( + "\nFor this workflow, we will use the AWS SDK for .NET to create several S3\n" + + "buckets and files to demonstrate working with S3 locking features.\n"); + + Console.WriteLine(new string('-', 80)); + Console.WriteLine("Press Enter when you are ready to start."); + if (interactive) + Console.ReadLine(); + + Console.WriteLine("\nS3 buckets can be created either with or without object lock enabled."); + await _s3ActionsWrapper.CreateBucketWithObjectLock(noLockBucketName, false); + await _s3ActionsWrapper.CreateBucketWithObjectLock(lockEnabledBucketName, true); + await _s3ActionsWrapper.CreateBucketWithObjectLock(retentionAfterCreationBucketName, false); + + Console.WriteLine("Press Enter to continue."); + if (interactive) + Console.ReadLine(); + + Console.WriteLine("\nA bucket can be configured to use object locking with a default retention period."); + await _s3ActionsWrapper.ModifyBucketDefaultRetention(retentionAfterCreationBucketName, true, + ObjectLockRetentionMode.Governance, DateTime.UtcNow.AddDays(1)); + + Console.WriteLine("Press Enter to continue."); + if (interactive) + Console.ReadLine(); + + Console.WriteLine("\nObject lock policies can also be added to existing buckets."); + await _s3ActionsWrapper.EnableObjectLockOnBucket(lockEnabledBucketName); + + Console.WriteLine("Press Enter to continue."); + if (interactive) + Console.ReadLine(); + + // Upload some files to the buckets. + Console.WriteLine("\nNow let's add some test files:"); + var fileName = _configuration["exampleFileName"] ?? "exampleFile.txt"; + int fileCount = 2; + // Create the file if it does not already exist. + if (!File.Exists(fileName)) + { + await using StreamWriter sw = File.CreateText(fileName); + await sw.WriteLineAsync( + "This is a sample file for uploading to a bucket."); + } + + foreach (var bucketName in bucketNames) + { + for (int i = 0; i < fileCount; i++) + { + var numberedFileName = Path.GetFileNameWithoutExtension(fileName) + i + Path.GetExtension(fileName); + fileNames.Add(numberedFileName); + await _s3ActionsWrapper.UploadFileAsync(bucketName, numberedFileName, fileName); + } + } + Console.WriteLine("Press Enter to continue."); + if (interactive) + Console.ReadLine(); + + if (!interactive) + return true; + Console.WriteLine("\nNow we can set some object lock policies on individual files:"); + foreach (var bucketName in bucketNames) + { + for (int i = 0; i < fileNames.Count; i++) + { + // No modifications to the objects in the first bucket. + if (bucketName != bucketNames[0]) + { + var exampleFileName = fileNames[i]; + switch (i) + { + case 0: + { + var question = + $"\nWould you like to add a legal hold to {exampleFileName} in {bucketName}? (y/n)"; + if (GetYesNoResponse(question)) + { + // Set a legal hold. + await _s3ActionsWrapper.ModifyObjectLegalHold(bucketName, exampleFileName, ObjectLockLegalHoldStatus.On); + + } + break; + } + case 1: + { + var question = + $"\nWould you like to add a 1 day Governance retention period to {exampleFileName} in {bucketName}? (y/n)" + + "\nReminder: Only a user with the s3:BypassGovernanceRetention permission will be able to delete this file or its bucket until the retention period has expired."; + if (GetYesNoResponse(question)) + { + // Set a Governance mode retention period for 1 day. + await _s3ActionsWrapper.ModifyObjectRetentionPeriod( + bucketName, exampleFileName, + ObjectLockRetentionMode.Governance, + DateTime.UtcNow.AddDays(1)); + } + break; + } + } + } + } + } + Console.WriteLine(new string('-', 80)); + return true; + } + + // + /// List all of the current buckets and objects. + /// + /// True to run as interactive. + /// The list of buckets and objects. + public static async Task> ListBucketsAndObjects(bool interactive) + { + var allObjects = new List(); + foreach (var bucketName in bucketNames) + { + var objectsInBucket = await _s3ActionsWrapper.ListBucketObjectsAndVersions(bucketName); + foreach (var objectKey in objectsInBucket.Versions) + { + allObjects.Add(objectKey); + } + } + + if (interactive) + { + Console.WriteLine("\nCurrent buckets and objects:\n"); + int i = 0; + foreach (var bucketObject in allObjects) + { + i++; + Console.WriteLine( + $"{i}: {bucketObject.Key} \n\tBucket: {bucketObject.BucketName}\n\tVersion: {bucketObject.VersionId}"); + } + } + + return allObjects; + } + + /// + /// Present the user with the demo action choices. + /// + /// Async task. + public static async Task DemoActionChoices() + { + var choices = new string[]{ + "List all files in buckets.", + "Attempt to delete a file.", + "Attempt to delete a file with retention period bypass.", + "Attempt to overwrite a file.", + "View the object and bucket retention settings for a file.", + "View the legal hold settings for a file.", + "Finish the workflow."}; + + var choice = 0; + // Keep asking the user until they choose to move on. + while (choice != 6) + { + Console.WriteLine(new string('-', 80)); + choice = GetChoiceResponse( + "\nExplore the S3 locking features by selecting one of the following choices:" + , choices); + Console.WriteLine(new string('-', 80)); + switch (choice) + { + case 0: + { + await ListBucketsAndObjects(true); + break; + } + case 1: + { + Console.WriteLine("\nEnter the number of the object to delete:"); + var allFiles = await ListBucketsAndObjects(true); + var fileChoice = GetChoiceResponse(null, allFiles.Select(f => f.Key).ToArray()); + await _s3ActionsWrapper.DeleteObjectFromBucket(allFiles[fileChoice].BucketName, allFiles[fileChoice].Key, false, allFiles[fileChoice].VersionId); + break; + } + case 2: + { + Console.WriteLine("\nEnter the number of the object to delete:"); + var allFiles = await ListBucketsAndObjects(true); + var fileChoice = GetChoiceResponse(null, allFiles.Select(f => f.Key).ToArray()); + await _s3ActionsWrapper.DeleteObjectFromBucket(allFiles[fileChoice].BucketName, allFiles[fileChoice].Key, true, allFiles[fileChoice].VersionId); + break; + } + case 3: + { + var allFiles = await ListBucketsAndObjects(true); + Console.WriteLine("\nEnter the number of the object to overwrite:"); + var fileChoice = GetChoiceResponse(null, allFiles.Select(f => f.Key).ToArray()); + // Create the file if it does not already exist. + if (!File.Exists(allFiles[fileChoice].Key)) + { + await using StreamWriter sw = File.CreateText(allFiles[fileChoice].Key); + await sw.WriteLineAsync( + "This is a sample file for uploading to a bucket."); + } + await _s3ActionsWrapper.UploadFileAsync(allFiles[fileChoice].BucketName, allFiles[fileChoice].Key, allFiles[fileChoice].Key); + break; + } + case 4: + { + var allFiles = await ListBucketsAndObjects(true); + Console.WriteLine("\nEnter the number of the object and bucket to view:"); + var fileChoice = GetChoiceResponse(null, allFiles.Select(f => f.Key).ToArray()); + await _s3ActionsWrapper.GetObjectRetention(allFiles[fileChoice].BucketName, allFiles[fileChoice].Key); + await _s3ActionsWrapper.GetBucketObjectLockConfiguration(allFiles[fileChoice].BucketName); + break; + } + case 5: + { + var allFiles = await ListBucketsAndObjects(true); + Console.WriteLine("\nEnter the number of the object to view:"); + var fileChoice = GetChoiceResponse(null, allFiles.Select(f => f.Key).ToArray()); + await _s3ActionsWrapper.GetObjectLegalHold(allFiles[fileChoice].BucketName, allFiles[fileChoice].Key); + break; + } + } + } + return true; + } + + // + /// Clean up the resources from the scenario. + /// + /// True to run as interactive. + /// True if successful. + public static async Task Cleanup(bool interactive) + { + Console.WriteLine(new string('-', 80)); + + if (!interactive || GetYesNoResponse("Do you want to clean up all files and buckets? (y/n) ")) + { + // Remove all locks and delete all buckets and objects. + var allFiles = await ListBucketsAndObjects(false); + foreach (var fileInfo in allFiles) + { + // Check for a legal hold. + var legalHold = await _s3ActionsWrapper.GetObjectLegalHold(fileInfo.BucketName, fileInfo.Key); + if (legalHold?.Status?.Value == ObjectLockLegalHoldStatus.On) + { + await _s3ActionsWrapper.ModifyObjectLegalHold(fileInfo.BucketName, fileInfo.Key, ObjectLockLegalHoldStatus.Off); + } + + // Check for a retention period. + var retention = await _s3ActionsWrapper.GetObjectRetention(fileInfo.BucketName, fileInfo.Key); + var hasRetentionPeriod = retention?.Mode == ObjectLockRetentionMode.Governance && retention.RetainUntilDate > DateTime.UtcNow.Date; + await _s3ActionsWrapper.DeleteObjectFromBucket(fileInfo.BucketName, fileInfo.Key, hasRetentionPeriod, fileInfo.VersionId); + } + + foreach (var bucketName in bucketNames) + { + await _s3ActionsWrapper.DeleteBucketByName(bucketName); + } + + } + else + { + Console.WriteLine( + "Ok, we'll leave the resources intact.\n" + + "Don't forget to delete them when you're done with them or you might incur unexpected charges." + ); + } + + Console.WriteLine(new string('-', 80)); + return true; + } + + /// + /// Helper method to get a yes or no response from the user. + /// + /// The question string to print on the console. + /// True if the user responds with a yes. + private static bool GetYesNoResponse(string question) + { + Console.WriteLine(question); + var ynResponse = Console.ReadLine(); + var response = ynResponse != null && ynResponse.Equals("y", StringComparison.InvariantCultureIgnoreCase); + return response; + } + + /// + /// Helper method to get a choice response from the user. + /// + /// The question string to print on the console. + /// The choices to print on the console. + /// The index of the selected choice + private static int GetChoiceResponse(string? question, string[] choices) + { + if (question != null) + { + Console.WriteLine(question); + + for (int i = 0; i < choices.Length; i++) + { + Console.WriteLine($"\t{i + 1}. {choices[i]}"); + } + } + + var choiceNumber = 0; + while (choiceNumber < 1 || choiceNumber > choices.Length) + { + var choice = Console.ReadLine(); + Int32.TryParse(choice, out choiceNumber); + } + + return choiceNumber - 1; + } +} +// snippet-end:[S3LockWorkflow.dotnetv3.ObjectLockWorkflow] \ No newline at end of file diff --git a/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/settings.json b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/settings.json new file mode 100644 index 00000000000..872c2a7f9a7 --- /dev/null +++ b/dotnetv3/S3/scenarios/S3ObjectLockScenario/S3ObjectLockWorkflow/settings.json @@ -0,0 +1,4 @@ +{ + "resourcePrefix": "dotnet-s3-lock-example", + "exampleFileName": "dotnet-example-file.txt" +} diff --git a/workflows/s3_object_lock/README.md b/workflows/s3_object_lock/README.md new file mode 100644 index 00000000000..b1c447c5c0b --- /dev/null +++ b/workflows/s3_object_lock/README.md @@ -0,0 +1,35 @@ +# Amazon S3 Object Lock Workflow + +## Overview + +This example shows how to use AWS SDKs to work with Amazon Simple Storage Service (Amazon S3) object locking features. The workflow demonstrates how to create, update, view, and modify object locks, as well as how locked objects behave regarding requests to delete and overwrite. + +[Amazon S3 Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) can help prevent Amazon S3 objects from being deleted or overwritten for a fixed amount of time or indefinitely. Object Lock can help meet regulatory requirements or protect against object changes or deletion. + +![Object Lock Features](resources/Diagram_Amazon-S3-Object-Lock.png) + +This workflow demonstrates the following steps and tasks: +1. Add object lock settings to both new and existing S3 buckets. + 1. Add objects to buckets with optional object lock or retention period settings. +2. Attempt to delete or overwrite locked objects. +3. Retrieve and view the object lock and retention period settings of buckets and objects. +4. Delete the objects and buckets. + 1. Remove any object locks and use the BypassGovernanceRetention setting. + +### Resources + +The workflow scenario steps create the buckets and objects needed for the example. No additional resources are required. + +## Implementations + +This example is implemented in the following languages: + +- [.NET](../../dotnetv3/S3/scenarios/S3ObjectLockScenario/README.md) + +## Additional reading + +- [S3 Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) + +--- + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 diff --git a/workflows/s3_object_lock/SPECIFICATION.md b/workflows/s3_object_lock/SPECIFICATION.md new file mode 100644 index 00000000000..c74789177da --- /dev/null +++ b/workflows/s3_object_lock/SPECIFICATION.md @@ -0,0 +1,476 @@ +# Amazon S3 Object Lock Workflow - Technical specification + +This document contains the technical specifications for _Amazon S3 Object Lock Workflow_, +a workflow scenario that showcases AWS services and SDKs. It is primarily intended for the AWS code +examples team to use while developing this example in additional languages. + +This document explains the following: + +- Architecture and features of the example workflow. +- Metadata information for the scenario. +- Sample reference output. + +For an introduction, see the [README.md](README.md). + +--- + +### Table of contents + +- [Resources and User Input](#resources-and-user-input) +- [Metadata](#metadata) + +## Resources and User Input + +- Amazon Simple Storage Service (Amazon S3) Buckets and objects (created in the scenario) + - One bucket with no locking features enabled. + - One bucket with object lock enabled on creation. + - One bucket with object lock enabled after creation. + - One bucket with a default retention period. + +Example: +``` +S3 buckets can be created either with or without object lock enabled. + Creating bucket dotnet-s3-lock-example0-no-lock with object lock False. + Creating bucket dotnet-s3-lock-example0-lock-enabled with object lock True. + Creating bucket dotnet-s3-lock-example0-retention-after-creation with object lock False. +Press Enter to continue. + + +A bucket can be configured to use object locking with a default retention period. + Added a default retention to bucket dotnet-s3-lock-example0-retention-after-creation. +Press Enter to continue. + + +Object lock policies can also be added to existing buckets. + Added an object lock policy to bucket dotnet-s3-lock-example0-lock-enabled. +Press Enter to continue. + +``` +- Amazon S3 objects created in the scenario: + - Two files in each bucket, so that different settings can be applied. + - For Object Lock and Retention Period settings, the user should be given the option to add these settings. + - For Retention Period, only Governance mode should be used, since Compliance mode cannot be removed even by the root user. + +Example: + +``` +Now let's add some test files: + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-no-lock. + Successfully uploaded dotnet-example-file1.txt to dotnet-s3-lock-example0-no-lock. + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-lock-enabled. + Successfully uploaded dotnet-example-file1.txt to dotnet-s3-lock-example0-lock-enabled. + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-retention-after-creation. + Successfully uploaded dotnet-example-file1.txt to dotnet-s3-lock-example0-retention-after-creation. +Press Enter to continue. + + +Now we can set some object lock policies on individual files: + +Would you like to add a legal hold to dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled? (y/n) +y + Modified legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled. + +Would you like to add a 1 day Governance retention period to dotnet-example-file1.txt in dotnet-s3-lock-example0-lock-enabled? (y/n) +Reminder: Only a user with the s3:BypassGovernanceRetention permission will be able to delete this file or its bucket until the retention period has expired. +y +``` + +- Locking Options + - In order to cover all the example topics in the S3 guide section, the workflow covers attempting to delete, overwrite, and view object lock and retention settings for a file. This section should provide a menu of options to the user so they can observe the results on the locked and unlocked files. + +Example +``` +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. + +6 +-------------------------------------------------------------------------------- + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 +6: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: 5aHizC1XBao6nnTyLnbiaOEmKAVSIy6R + +Enter the number of the object to view: +3 + Object legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled: + Status: ON +-------------------------------------------------------------------------------- +``` +- Cleanup + - The workflow should get the full list of objects, and remove all locks before deleting the objects and buckets. + - Object locks should be removed. + - Governance Retention periods should be bypassed using the BypassGovernanceRetention header. + - All versions should be deleted. + - The user should be notified if the delete operation cannot occur. + +Example: + +``` +-------------------------------------------------------------------------------- +Welcome to the Amazon Simple Storage Service (S3) Object Locking Workflow Scenario. +-------------------------------------------------------------------------------- + +For this workflow, we will use the AWS SDK for .NET to create several S3 +buckets and files to demonstrate working with S3 locking features. + +-------------------------------------------------------------------------------- +Press Enter when you are ready to start. + + +S3 buckets can be created either with or without object lock enabled. + Creating bucket dotnet-s3-lock-example0-no-lock with object lock False. + Creating bucket dotnet-s3-lock-example0-lock-enabled with object lock True. + Creating bucket dotnet-s3-lock-example0-retention-after-creation with object lock False. +Press Enter to continue. + + +A bucket can be configured to use object locking with a default retention period. + Added a default retention to bucket dotnet-s3-lock-example0-retention-after-creation. +Press Enter to continue. + + +Object lock policies can also be added to existing buckets. + Added an object lock policy to bucket dotnet-s3-lock-example0-lock-enabled. +Press Enter to continue. + + +Now let's add some test files: + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-no-lock. + Successfully uploaded dotnet-example-file1.txt to dotnet-s3-lock-example0-no-lock. + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-lock-enabled. + Successfully uploaded dotnet-example-file1.txt to dotnet-s3-lock-example0-lock-enabled. + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-retention-after-creation. + Successfully uploaded dotnet-example-file1.txt to dotnet-s3-lock-example0-retention-after-creation. +Press Enter to continue. + + +Now we can set some object lock policies on individual files: + +Would you like to add a legal hold to dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled? (y/n) +y + Modified legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled. + +Would you like to add a 1 day Governance retention period to dotnet-example-file1.txt in dotnet-s3-lock-example0-lock-enabled? (y/n) +Reminder: Only a user with the s3:BypassGovernanceRetention permission will be able to delete this file or its bucket until the retention period has expired. +y + Set retention for dotnet-example-file1.txt in dotnet-s3-lock-example0-lock-enabled until 2/28/2024. + +Would you like to add a legal hold to dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation? (y/n) +y + Modified legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation. + +Would you like to add a 1 day Governance retention period to dotnet-example-file1.txt in dotnet-s3-lock-example0-retention-after-creation? (y/n) +Reminder: Only a user with the s3:BypassGovernanceRetention permission will be able to delete this file or its bucket until the retention period has expired. +y + Set retention for dotnet-example-file1.txt in dotnet-s3-lock-example0-retention-after-creation until 2/28/2024. +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +1 +-------------------------------------------------------------------------------- + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 +6: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: 5aHizC1XBao6nnTyLnbiaOEmKAVSIy6R +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +2 +-------------------------------------------------------------------------------- + +Enter the number of the object to delete: + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 +6: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: 5aHizC1XBao6nnTyLnbiaOEmKAVSIy6R +6 + Unable to delete object dotnet-example-file1.txt in bucket dotnet-s3-lock-example0-retention-after-creation: Access Denied +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +3 +-------------------------------------------------------------------------------- + +Enter the number of the object to delete: + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 +6: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: 5aHizC1XBao6nnTyLnbiaOEmKAVSIy6R +6 +Deleted dotnet-example-file1.txt in dotnet-s3-lock-example0-retention-after-creation. +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +4 +-------------------------------------------------------------------------------- + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 + +Enter the number of the object to overwrite: +5 + Successfully uploaded dotnet-example-file0.txt to dotnet-s3-lock-example0-retention-after-creation. +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +5 +-------------------------------------------------------------------------------- + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: xTlwkuQ_l9uKZoksfHKCHRjNNXLuEqCi +6: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 + +Enter the number of the object and bucket to view: +5 + Object retention for dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation: + GOVERNANCE until 2/28/2024. + Bucket object lock config for dotnet-s3-lock-example0-retention-after-creation in dotnet-s3-lock-example0-retention-after-creation: + Enabled: Enabled + Rule: Amazon.S3.Model.DefaultRetention +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +6 +-------------------------------------------------------------------------------- + +Current buckets and objects: + +1: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +2: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-no-lock + Version: null +3: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: GY4S9LbwYsglEhq3FY5I0tvc85peaplB +4: dotnet-example-file1.txt + Bucket: dotnet-s3-lock-example0-lock-enabled + Version: h4BEwfBUtanzdrDFbnqLfqxJflYQ2_9g +5: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: xTlwkuQ_l9uKZoksfHKCHRjNNXLuEqCi +6: dotnet-example-file0.txt + Bucket: dotnet-s3-lock-example0-retention-after-creation + Version: X22KoUqO4DRfrHgNnS_4ZDf7bpR4eKc6 + +Enter the number of the object to view: +3 + Object legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled: + Status: ON +-------------------------------------------------------------------------------- + +Explore the S3 locking features by selecting one of the following choices: + 1. List all files in buckets. + 2. Attempt to delete a file. + 3. Attempt to delete a file with retention period bypass. + 4. Attempt to overwrite a file. + 5. View the object and bucket retention settings for a file. + 6. View the legal hold settings for a file. + 7. Finish the workflow. +7 +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +Cleaning up resources. +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +Do you want to clean up all files and buckets? (y/n) +y + Unable to fetch legal hold: 'Bucket is missing Object Lock Configuration' + Unable to fetch object lock retention: 'Bucket is missing Object Lock Configuration' +Deleted dotnet-example-file0.txt in dotnet-s3-lock-example0-no-lock. + Unable to fetch legal hold: 'Bucket is missing Object Lock Configuration' + Unable to fetch object lock retention: 'Bucket is missing Object Lock Configuration' +Deleted dotnet-example-file1.txt in dotnet-s3-lock-example0-no-lock. + Object legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled: + Status: ON + Modified legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled. + Unable to fetch object lock retention: 'The specified object does not have a ObjectLock configuration' +Deleted dotnet-example-file0.txt in dotnet-s3-lock-example0-lock-enabled. + Unable to fetch legal hold: 'The specified object does not have a ObjectLock configuration' + Object retention for dotnet-example-file1.txt in dotnet-s3-lock-example0-lock-enabled: + GOVERNANCE until 2/28/2024. +Deleted dotnet-example-file1.txt in dotnet-s3-lock-example0-lock-enabled. + Unable to fetch legal hold: 'The specified object does not have a ObjectLock configuration' + Object retention for dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation: + GOVERNANCE until 2/28/2024. +Deleted dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation. + Object legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation: + Status: ON + Modified legal hold for dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation. + Object retention for dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation: + GOVERNANCE until 2/28/2024. +Deleted dotnet-example-file0.txt in dotnet-s3-lock-example0-retention-after-creation. + Delete for dotnet-s3-lock-example0-no-lock complete. + Delete for dotnet-s3-lock-example0-lock-enabled complete. + Delete for dotnet-s3-lock-example0-retention-after-creation complete. +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +Amazon S3 Object Locking Workflow is complete. +-------------------------------------------------------------------------------- +``` + +--- + +## Metadata + +| action / scenario | metadata file | metadata key | +|------------------------------|------------------| --------------------------------- | +| `GetObjectLegalHold` | s3_metadata.yaml | s3_GetObjectLegalHoldConfiguration | +| `GetObjectLockConfiguration` | s3_metadata.yaml | s3_GetObjectLockConfiguration | +| `GetObjectRetention` | s3_metadata.yaml | s3_GetObjectRetention | +| `PutObjectLegalHold` | s3_metadata.yaml | s3_PutObjectLegalHold | +| `PutObjectLockConfiguration` | s3_metadata.yaml | s3_PutObjectLockConfiguration | +| `PutObjectRetention` | s3_metadata.yaml | s3_PutObjectRetention | +| `PutObjectLockConfiguration` | s3_metadata.yaml | s3_PutDefaultObjectLockConfiguration | +| `S3 Object Lock Scenario` | s3_metadata.yaml | s3_Scenario_ObjectLock | + diff --git a/workflows/s3_object_lock/resources/Diagram_Amazon-S3-Object-Lock.png b/workflows/s3_object_lock/resources/Diagram_Amazon-S3-Object-Lock.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2439a05695a84618e91431385107bf0d240910 GIT binary patch literal 169923 zcmd?R2{@GP`#-EG^+bB8q(X}&64}RIMA=3eOJu3+B>TQhs6-)#Y=a^uOUah(l#E@B zeb2rN!!TobuOU6^>3P0=f4}$rzwdFpcSlFubKlo>Ue~#O&d+&GepjKFssA|o2N@X| zwfvP!s$^t)A!K9}@q2cIJJBu&UxR=4T3^w!BO^P^O8UD)UX|r5xVghl^|CbCoBHG9 z;1>#$i^>|M62VtTWnv~PKVKnIff)b2O#N=$JcpK z*=D_+0?JJzi7vT4h3)d4l`S-$JD^Kn+)>O=VAseG>ooIFE{DcHw104CSK#fBtrrhW z`xmg}2;`lzGI^$0UtiB{;%IDAB1Tvtqq)Lem9cE9v8Ri&kLc5i&(Zz!=PQ^jYk^YX zz|Xh;BxnEItzX^awWj^sbHBRxo5TJ8Yl^+L{S?4LHZCq6a`vsCPh8)}Z$06djyA(F zS!kYj@9ggM&uZ*=0&DFTjj3}Qs3nNvo5G8+i98+o|;N4Io zO6ZNQ9>`hE8#XEV7d6_120{hj*LTXX*B7QI{O;tN;|ab13lv8F7ea&gjQZ6aw`~#g z_AS~C-P*1TZ>f-5Ki|8_0NJtiOBtW_&aI!ljs6;lqNa53*8M%tyy&)mKEU<=#00G$ zsF3g871(IJc{dQ61Jsz6|L#vzTA4$ukf_aw2jg$*@S9pv_j)iu^1l4O?l;~eM`eSe#`s9i=#e=dm)ZNf5%n-8koX&R>U4M6IK}$;*PC!mUqRkdLsom-=)weq#STw!o%__0Cn zY+}rs4(rO0UdSwbzJEbqK`OQ~oKLbo(yyUuPHLd5XFu4;WvSC(PlHoke%yA{{it|LhPWYT(Q7(~%`Iv|M^7Lni;(5Q? zh8*b*ztXfTWkJZLCw7#+@GA!tjd*Q&Ux_X|+&|pqFHPbBX ziYK2By2O!C)`cbT*LSwTf;>ECGyGO6*Sd0uL5M2XwEQ%W1e{P&sVr586vJ^@x_xTZsLOreM}3Ue0|U&Mx0>Sh>ssuat%6>(Tkq! z>u?h%<}EMy<@T-g_qKVw?OnB;u*7Escjp%rS*v5U=J%fwk!@dzO|Nphx$=vlE?4FBr5ZlS8xFgJ()JjmQ$Q%0DS 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 iyVf=x=MhJx-vzaQdD7t? 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≷je4bIGM69Pe##q&L;f!M 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 z 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

e{xyRcPs9Ig}VP%`9QTbkQD zWoOQNXlO4@wGK;oR6IcFw{&pBFY6-b`{Hm>99AvUhd^EI-*lwGBbZh?o)PT_r*0~+ zX1n8O9TEESBjNtQPUz12ull=$tDQ1O@{Ih7?wpp8fEAvOx0hTI^uFY2aze8YiLlp7VHD9*0PPdtWR|_GCVMCoC&V=6ABhd@KZW{NwxjC zw)ylSjbCsIxJBLQ0NNKqn?FS&5H7Wm1&H+F5(7kkf3IJv0S(gxc*aYt6!q5-r&7)z z?9umHKeuWfkz-|VvtE6-djIHfOQ*QuA)nX0oYIw)e}`-JXUh4pXANOdtuhJ{ZZ6nL zEANfFc^-#J?>(e-^KUfwT05>hw-_t0vY3*5aHLCSh%WB!jak_Hv4MekEx;7dd?ah1 zaJe2sKLaI-Cm9=10#g#T8o7~? zN*4|3b+@x#X?Uy;j3Lq1c0*5iE+@IAQfu0nSH{9$nm(PJZSdZ5tN#s+Op z>EUx*%TEY1w2fy6RjEXSN#FeCod8ZYPP8-WJ~*ls1RaT*4^s+%vOP)YcBmN^LuX`c(+n!dd(Qt_g54W&DbCu@Ei`oxq4~U|p zw-Dom>lW8OgcQSF=5a`=oo43vH7?$;ZBjnw*m-jM?bE4rL}4co=oXu$501)U5%T~&5W-HHPkqA zxOou1@klABV4S~F^0phDK7aMip~}H~L*A6p0W=-9YCqwN@aOY^lNAmWM zwV9y2quV!>_gNHAJDW1u;?6gmLZ`9%9cifP`N-$!@~RmUT3JM;XV|o48feABu|%o` zbhR;!SMC>R{V`hkGS~E4|M?QnbTR3%2E=)cGuQxkv_Li3VM2yoO=c>fPQwkI^cZja zSr9(0nKdd_JehpHln2Dw@0zsK&{|K*wpoQr?NCqVn?P;S(sOavb#b6vVMhS$B940Z;$~^Y& zI=mY`4kPZT#aN#gk4R=#@k*RZ$D-${ONrQObIHK z=r_|h><%ZHfw=9n>E=WWHAT+Od8`q z-yND4?%JC2-P>Z|&7}tl4gGI1@?SdFW8+kEw=F;RhZQIQ-@OOEqHo9lBA8Gh#DS`T z8OSt4zDV%kW1Ou2;uw5$U+1#Zw5Igata^4xwcU{iGU?|YaJ+$>dYudK03+_k<%Z&^ zN%Y4{?c>>QPyj$1-YPm5^4##Qo>uZ-=B7^+mU6Sd1_=}xuRdC+_+XW?6IiKT6~l2n zR$KlDH&3zE^6}K@=8@9X1RV~cV{k(^8HYj>ZF^-?dyuB*o<lWW_yQUC(EtG zo0fG-rhL971@Ce@mAG7>uoJ0U(;Y&f(ih64D*WTY;hrMOJZR~&;*ML4(+=3$@&T|` zC5sI@^oe|`Fi`R}oZ4;PQ5c2%hxiAE4rZvZ8`#$ZA>mgaG6AzJ=TH-js28e`eeU7r z@stefb{1#;Pt8)@Oa!A2)iVV#5Um9>vOw%Ai=@f?v9$VaF1MeOjOki<>SKACj&nbO zqaCLqHDs8_Rhf?~A}p!j=160R^)Qu^yGS_%Cia3iM&(4I)!{FJ_ECziN&OrRtJN6K z{etr}Pu<=GWgUAJ{uADwlS|y7AH*m?SUh0YIg@HF3rDNA%FrV%+HVsg%7%Q>JMNXs>)}l)+MLEP7g^GH zHp>g!Bi)v_Pad;66&;%zClmw)r2C?rJ_CbmeD`3VAZDSN0RRiws!1PT?hFjNl@Wd% zJgliC;)8Ckf!W}{AbQnmpamOedT<7a+Gq{!D1CJ*1(qNrdN+>HX>>W?ihxcE3nOYs zg8O#N70}zIG6u?pmtEIh+pZCWyMrSDHc7M?i3D|te>`lzX9On$DiQ9uQow;zSO+)@ z0Hw~$cDm`3BdiVN#_x+x%?^24#)+P3p@M@xMoxld|=o!^pWbO9mocoTkW|O zx6=is`8lCUh$jWzRGOK`A#}8PRfQRCyeZCY{e}{7Yd1tlpdv2ebsFdg>*2*L_=w7n z{X_B7qsjw2Qv-l%uCu+MNzAwQo@%(Cwt#T7glm zH*647y>R|uqqts*Lacs}L2~DFkLOo;q<7M`7lLiWN8KG@V4G??^VD`I16!_=)9*Bb z5V zo~w90UaK%oMCFzjx_A$k+Odc*K{M&;-jm@4^2Zm@N%vdJ197`O0^tMtSZN^9A}U!N zjGgHUw~i!B>Yk?^HT{10)F>fFQ?%wY-Qn-{vm(y9Go}yF(9Q%Ux9V5AoE5t*2)w1@QaIkE0$dLq=?eUi-v;36Kj$q=1>M7Z^@S z(<)r_5K>5NG;m8tqTK;k+)T*X|G~?FYm|A* zzVgtT;wkv$+g8^UfseIH#+)qKSJPaUd!A1Q-h76p zM+U$9aOfu(QDJ&hniCLFm_OUL?_kD6#8q70`vsxoMZXeggcWxV?cC-si0-9^$nvV) z1CfO#X2JfVl=HjB-M-RGGTQgL^lGaNA}`XZmRPktV=%u}n$y({*0D=C<+%w3_ZD77 z+@0Mi^}BI2c>_K3-Xpnl95lI@p7q4Ky4|b5GncQwZ0Q!UeSr$49ulwCDi?W(x1(w zPNNTv!=C6Y>lyK)TCanCGX6~RYTqC9OyIt zrN(^ze5AM`w2t<5toh}1^vg7-CBE_kTrxs!)(sA4 z^dG*8J(?I*drq0E1dyLpd7Yh|37{(+6wbU(LJqe&%a8@V`d{id89F*>X8#xPb52W- z7v!bjJz|Y%O!`UMm#b1uk!P74Jj=J?mxCBOm;s$ZuBy$oJq6r^P&h*vLs-)N**C#p z3f@~D*m3^%4jLLE^f5vN7+X<8lzO7nJ!JiVQ2X9dzUp5*2&^kP(7^YK6@KM9>@Ohc z^hl~f+Wlh5!g)Qpo*6Lhi!Y@YJ zIZW{d*b^Rn`#<)#w81xf??b?hs)Zta!jf)M0d{QeBH3w;0tFK31Ex&r3810=*FBx7 zkW%+LOz}7bA(VZz^(0v^Rw&5Lub_cw=~XibYQS%Rf1RwoTKe}isQ!JBKzk2ezXCc7 z!;`WPe&_p>5LZ{%a6#je7(fQyhJh`Sl9yTV1bOEg;QoF7Qlv3?rs{)Rw`+P1vq0{m zn_I`>%C*|bsiK#icOe;Taq}1x0xclQb&riv(|raovW3y(0k2Q(V$x_(fqL)t!ftmv zGLwh0OS3xS+jv8?53M?czpn)*Xbx|MZJ!A&Z10uDl?ha(`ifX&D6LJtUWSb^ylu=D{>!+Xj+;1q=cZ+ivBA8&x3 zAD`tRf6Ku~n*4t-aXgeD4Ft~_>C;JwJuK|pXYD^A;y{tIi5}xDBNOnQ#*2YVCSux9erv`>?92ufK-g ztzxf{`ED9FYPXjoWd#2-kM2v^uWgs&Irrbrg;rpv{8iNiamQ3GJpuP=AnmbSc~{!C>2*Sur9w-ER2#N^=A1xEQnWjYQPz2Fmp6O;%!g1s zCy~mJG$qx(Jbd%mE&^lNg- zdo9?b6KEjj=H}%6;xHfqX8|XSxir^7orITi-}%c1(xmES*qWGBIkIad(}iE) zN*J`pG;qHfZC+Ja;uje39GG)5az`in8w?~_ z1v_r;a9Rb+%4(yEdsku)DZq4);ol&zvZQFVmUA0jO40=V{I-J*1GoXpF{VJ$pi!qSLX*w;B;f#7`W& zg)E}f@u{_QZ)h7Q?8<-!i$c^7E2V3V+}Aqytt3<4l3YW{0C zp$|-R|7tyX(J(CO!BK5bX2)DCHuQ5l#is;880>CXy4&XyQTb*_jO;!jyD>)69j)Sbh7A$Kv^6$wuMbDy#`` z#K)?&sv06Rmp9uD5h+^0v+dxcB8=uAG_2QJ*zbev0wWS|&GcDd#T^575(1VYXH=t> zgz)>ipYrLET7QWS-7vMJWtF|gV>;{TonZiwq93IW!uonaTy_3j)=O%_$J(pVX!-V=!1?Fq%#8E5$HQl$_^Lv8y#lpEar+=~we-+GU))KS z@PQ3o(YEY|5T;L=k8RFwbX7t>yXzs>ih4~TNyA^Z4HyCTPzZdSW zOn62_Toc^hL_mLCZ&Y_6zZ@HE+(I;9$InOa8e*dj&#+9zN#SY(d2AI*`UJ4x*-%a5z6l& zP;4D77ppw2_-s=^zVlIVNjyr^jYuN0Gd!@>PjI(exjW;)+3Y5t7}-id@a-Bl8{h`L z$~rW4WckaTLw_F=_niN8R|2ONf+z`22zm@7{L3-0Gf|#uXP+Todouk?+r`fb8o-_n z+i#;}=D}ghK`<%QH=oU&;aJj3d zenY1G8&^AEzHPJd@oY|Ifh5UKwx{*EH6ui|)$f(r4Qax`n*h9CNFUJ1wp>k66zC!lEtl)0p#$fO0YnH`hdVeLRN8B143?!tzs)ByT0a>qlW>2 zp>>sdh$DU4r9Z4^$b0@6aU8MwLq18q$#(}`SI`E6cA{YJ>67V|le3FSX}!Q?{O*t1 z$=T|%5(5WV8(1MXxtp;+q3^arEgbn85g{^^ye08}fX83j=feQ) zfMjN7a$?X6jPSq5$Jme;n)&hP9*Q_%hXcEWR!RZ55PnS7EP4SWC#|}je4+2M39XxNZF zODDh9oK6ky!vArTMJ&nvwEq@u|E^fHp<6y4Ri~*wX>O?>US17O;!O^=nSGNJkUT2k zvxz;LrN}Gs2nHlD$d22PA84tXG31t}j=aPpl?|e-kgj&ki}>{L=1oud8W>6Wa&LKj zFk$jXMK_zgQAn4LUh4VMl9NDa-GYuuMuKK~P;64&-$1Pb*I%)?;Q=^ifhhd!uRdav zW~mn9_5jd@akefK0!HL!=r_Ups^hq4Ul)DrvU968P;2yzWYGN&F#d0=0XQoySp5^> z1a()3yX#@(0G>ReJRKB!5r}+2qYo8m*kH?i*>w`4&Bc395)G(2zci#hv_ImoO4e-# z$1s;~xu8aOLYcXjBPY3Rrzf&|wYgKhSqU^I+9@NcpD#!*&QSe2`6#Y=>Rgt- z!49I_KRW1)uE+0f=a?u)odxMb`=#bRD9vzE)B?_oi+tQkj+yi6Zp&(265|?4+kKMp zm*7WDz8Bjs2wJn}GHDByuw^(77QlnVDD$KkXfJ$UEMkyIW>dY}%47)K2zCZ4wF{~F z`F58;B&buOm~3j0*J?Y}unA3W#-~%8fY!d4dXM{h%XYfB6NuPOYR7@|Ek=!+(bD=Wk#=u!6h%cZ1qpA>isO^dW2d@VPFv~MFMJpn{0b&*$yj`Y0|rS^6W=bZTl z5h7a!1b#R#1!2#%rF(C>{y9~RM1gu!Qb0|+x z(^@+IMA3=A>%Dl0KiQxv=T*2}V*FIa$+;4%p=kX}G5vED=ldd6tHx};XKvyONrE=4sf@Qf858>$Sx#V_37VGb*o=07{UCEyZ{?MU~y@^F~rQy<4M za9{iTO-6-Q=%09fK7({alquK}->TEN)r6~{)X&Iuu@`(s{#mCr|DomlpyXv@Aahxu z6cZR1w?r3zcI-);=4Pd-24KXZzb*TjV@PEA+8wR4zJxm_bpS3Xg&UoiK@ zM*B8y{;?q;rdTyJvua2OE!BzdqOVlHD}v4wuq=D~u*@?I+Y{)$WjcZom&h{nKxs9* znF)FH`{7mtJ^|2=$ZMLaXqmAz6Yz=l*VJ3f1O)L(l7R5+4H`HBEBiY!gy=Xyd)4ne z8GX)Q0OBh`Y}{RK9lt;9@-2R;OW=fOCT~>f^~Y*I+*j7&66gONno$S=o#!8YT8&Dy zb4RHm0#csiH^~{7PmEwtQf}Tm&{CaVuinx?NiJhQ1!W5<6iJSP`m4p11Uz9}l>Do6Mva)w8M=xy3_GJIQ^!L;MU0+EYv^GUvb?5`_@a;6h z^cRztL4&*lY-O|t1D?S)FMzg}lim9q%0eH7E>Dzo69=#g48-8K&rHnq-L)=TRd?~Y zNA+bzX>X?+WES=t;?jF1=a<4wg1s$0zkMH+1a-8MQ-=FpXila~gSrBOURPt`FknOr zY<=)cL+gWmZ+v7^;984={h}py7J%X%KOmNYjQ%Q?P*9Nm zEgyYVnxNdOt`rXHUOz5O-I)GR={nHHUsU(QXK!~$KUp_nb2d8kGCrh8txl~k;hk0= zVcF9qy?3#yC{(e(s$dSdDij>t~l(?JYF$PCbk0eJquY`17MiYuo*^FfLTlDSq z))rQYGUb_ih9;5DEgq>V7LawUAI$F1maT%vczSrGq>pI9zSUg+#_0uKG|PflztqRp@LrxZx`S1RU})Z&auif2oE37H>-cvlQ@58Tx%i?O&->HcQU zN-YZ_lqh5vYWU9E){OZ>!P~rH(}71&(WKt&mv$yC<#EpKqxR6Ag+Zr4*F3KpK9tYUu85F_CV+FTpQ^5X`fRX#X*2 zST-{xCY4UUq=Wv*-Y;UzHRJesD0G>2 z$`r{^)>yWMh^%M6!qC8Mu7I-~d}xApwR1thf&Kmq^`OPQhwT|p&h|fz@-)nXi^lbt z8tX5X4mb49LrKLY!k?y-qf}gWYL`ofOVR$lxSU!W|Dr zzPMht=TX#4S^9M2T?7;>D>}s9>hPuecsXo)Rqs@7L~fX zFV;imT(YD3$PoPgUYH|?#oIC0-D zEtV&*;q^+VO{OKs33Ifh0jaUWm-|o=-(rM`*Q?LTNern4gu-dyX@Z`v_TIn^oWHzi z=e(@PmU*Mji})};)wYkz61_JyljDwCHN+M7?%R#XsCPIr`Edy2%G7P`^^@8g(;Tl2Y*glIf?e;gy90E{Yt51C6`*BK?0RFBw(rNvz=2MV5uG#%=VOZC(2# zd#J!rgtx1CKHtYPt(<7trrIUaYYzr-uA$q4A5#hlw#()Fg|wBbV3@s<2JY2SvkXie zr3K)xL441*{hL#C+|A!+r9RS6)F@zsk2FY*h8p5}`_4og3(&rFVZ;0NHa=X7!VMVg z+QJKI7p?k*3sTgZ6_%{vq^nGdZ1Dn#nZf%}Y`pN6gl0_@sU#Q9`5=(Ey6&wFZ#@e- zw!fr`KNW(%Z)Mr$FTXp8Iu$ZCus1e25VEnQF(haYMC!R90jqtyUm`9`8eS_j5xQnC zW(i^x$pXRI&&;SRTNt^}rDtBDbsH9|EOo?C(&XeT@a0ri+v`@|;9V~N$0R;x4ucB+ zvob(Ykl%)-ZznK9ybZU~k%{IygO(F3qqRKl-fl9$MYg>o&|+h>OMOIkv4MUu6^%d< zZbMjk13VK$qzVx%avq1QJw;yJdf8KcF+hF9V{Y;VudgDEKbtpNPfM%3+l0-J38lR@ zSsGlo+o3Zav_H7W!QNnLXdR+w#&4y@5mfQ3j zdNQc*sQK3kEt|7~%B9AwniJc2zZU!K!Q{}U{*6{0($tSizzbNv86{V`YnC)FTB7sE z0m8e#zcefjW>vAut@;q_`l@cAEIedj1|H>=SWG1(1^KOUsIR(6$^vNV!uCML1$ zj9J;$$c3&nU;09G>hdFEW;Z08%It4ihs9pF!xCP5l=?(U0auMmVV}gjOrH+U+_RC` zB9n*hEh*@BDz4`;%&G_t-g>8_SJ_w>WO>ha-+oQ#6FCur-R74rjt*lG0n#D`#rx!s zS{ftGDXP92xAcSxvYvG=^=^^MvwI~N3{1nKLUnc?zb_ejF&JuU4LxYqn$f~ITQDN; zwMOgrd_seuoq~eZMdn@C_oXuX=#bE$ThEToN2Hn9_Gg#iW*0Xq*BYW@y|imO85d*H z@3md(eA&`t=2WAoN3}4FQYf>c>pY<{cNf0wuZ=2S;m2Qy2+syD!;1BX71pk?Yk!GHwpznybS}5D66aNiI zdgqvv>Xm}>Lbo&O`F>7EU~|CRvsYE7E;gXzmD<-KC_mq1uk}TzlBYagS#$J@9Ol`N z?OcjEQwJ?A%xX5w9LwnR#!cWHW{X`jD*_jCkjrR8O93ZGteNU}Q$>#}@y?}=Fl?K1 zz8da_UA$jIX~?YQgg;+%KcniFQ+~m4^9-u0##fho6^kPI0zzD?dB|nXA=7$xBV3DEE4rCD;@pW$nty#o7&IVObisRbDt7~~(UuC% zOXnIojYq;i%C0ud&&ZiJE4DY?wn&RC%b18J#lSzVeUi1caA04n6x-Tf4R)6qpO*H@ zEbH11iQCx?v^V8gEjXIDes21$U8KIL{HK?@3?l*?@uarW%i_5jcHSAoaB?EilFEYY zSHV!Hfj1vgP{f5foPfwgcc!&G!7*Jcw}&#PwuOC4Yxx#CWEmpgKNNV|c!y+Izh!nP z=h+xv`(GBsC##DYaI|KJQSb29wOqazz2%<`y6+^5E6xRZvCZuWPndJGM7%tntU3E- z>s+-%^3jsOrSEvV2`MV}bpLuE?_9qi#C*xM@3jvqTrm9Qu58NeLGqtI-R_BQTa)0) z6J_Zi2ugQf4D4PN4zvK*`+hBV^39bKkoU9v0Gog@7U{!Wn4C03GqnfoFijED#ONg` z>O~mT_$ybtQIH<24c_OFD&*qRc{6G5r3weHk>ax}@;>f7ulOFi;gjv#UYey8l|M-) z8kD?S+-};X!*Fy{-(TO{^>8{?My7+s-FKBJfz$`sh>BQZumF3O$9E z;TV3W7&F}P=NK%G#)6rSN!*J(rFMTFgo7vfXyLV&SEA2bR0z${$mqR}ELX4h>7?`- zJORTU0RzxR3kV@!5V&e>=0wbu8$zH6PSNyeuw zbruQ1UYnTE>ebG2{c2On;xSk99#uC3CKjQU#kfH>2r08(tx{TfzNJvGl~Mav#Z-Ro zYwTvtgJbEpAQey1%+bSer;WZE1Enwl#L9l4#8`N6-yJ~|O5r+Y zg=~MJrf@f*CRc=In%kU*%w`b2GIDf_3g^-wg$n zrM(@|_bD0iNOed@{k%mF_10iyqP>*UU}(jwtm&&IIrI<-rTCRUl+&x6e??b*r7><61BIwCPO64PJ&SJ9y+U z{M%HLKW$Gu-E)kNS^pWp|Fku9gduBvUpQe_B;aV#L{pQ!5sY zt@1WPDbAd2eX|L*{@R~ca7|PZ2h5|J%Ml1ZRMl~inx|z$Gb7-yyzoqW6`lK(HtetC zh(<*-tUL0=-4gN}x0x7kn8a%0YIAPxv_YRHzhUUmu?Ex8^z&eyn58Y6$V&D& z2gco1TMbJ_?f9d}j`~n7^oR)yp@` zyw*%ZO`L3p_!@+$YBTR*5E+cJcUMsK(G~Ql+^X96HHY;WgIq(K7~1Oq$8iQ(Ld zc2BKx%Ztf4xs}^~bC2_=0=4Dt(8Zni_WS6>u=gD8bXHTm+9MUmPwe%U2!iy?*^LmZ zW?T;g7h`(P0~av`6sKcqgPkiq*&j~$#oHsXJf=X5ijh`#*y_U?4(5wX)E}$nbf9|LkayiE*U*300gK5M#0YQCom*_neBdA6QE^||ZE-&jcjr#J) zLO)qR8or<0YLw~kB7fLqs(8*6+$Ar_ot+UuFv?V&apJH-t`AQ0gEIy%UkV$HI~HqE0tevpU+h%7LS{*dwZSq9_bjoXk0_s(r zvvlXa#!h$7S%0gtb7aoSOObAbu% zUcPCKi3XkI|WbWnIIKYlqeh3nHSzi4NU?Aoli@aw*)6|*+5 z`F`$W@Ka~DO;0xT+!}eXtc1X`bZBGbL0exxXJJ>koo*(De1 z$eWtMVaiTLoX#8d+)>wGBZF~QKCnN?4pSFfvB+1Y&P`A*fnr#NDfwseo< zHx+I!Y*UPSO5kDzyV+V+bZY}NZn_)6KJ0@~DYc>X(R#OMf+&$APh0b%m|!~$mHG+@ zi~5ZH93O-i$0D%2rn9>ZO(w|t*xl!U7QZ~Th}rC2HljwAR+KjAUaUz7mNvQtM5H@j zu8h`k!SdkWevP>(ALmA!jN2 zydzUr9>oR(f%e%ut!uA^WyVEo^KcAkE4g<&H4$`7suxnpl zxuij3mz5UsLxae6Z7a)d(@)ir#LrM=%hbZDXWo$2@LyXWyB(7xEH8D7$&I3&xag%N zH+lbqsxPjd&w>n%DVPngITrmT#DS=CyDz9=IH6){gW?8ukwREz6>W^=e5ufyKWs}i zsiiCUIaFDPm1pq$P8ZyX36VNw3&LbRw|)!R1Sjvx;Sr;C9_U(TLR;h{@kx{`j6^oN zn6upH7k8!Gl+eYJWR`#hk-TUr)RVL}Y^hytH)&^!Zx@_q^qm*tmM>KLYCd?;Ry3l~ z+^Az$mN=8a9j%3l>g)TuWtZwMrp~&t`E2bF2D@&iKH8WO;U9rb`>$RsAb>h@Eb+>M z-{rH{R6PP_Z^Q?zcK&FxqB@L1f>H;tb$uJ`GvYN$b5rg}j^7iM6gkAr#tZh=gd|dh z$VE^@>THqvJv{QBUYX~(gvuy5-f5hna{GGa?dmkhm4iP7IsLS=!Yz{d;(KVu6i(`6F7Pb5$Q>$Fcej&2C-t;9W zVS8XuhCSJ3X}I(TJ1E!{X%4+08124Suovq0VtJ2|_Katf!Qog@qh&j3IupVq@@vX& z^2Nhl4*%)EuV$U?cGW_D9K4*4eN~oa(v`I)n(W+K;+<@TTpMpYdzJ0VL_a@!?PFKC znb=VEMUP?4So{(jId{=gErwZj0KTIQq(3gT8X^;VaRm5G^b)ZLxvpwcHDt zrYfaXUzk5gl+$rxu}ya&(`$CIK#z>@VnIBFK+gT)Wbaw`29qwNv8xY@JdJ9a@Lry1 zERKeRtaOi@6}!HVG5@##%uy`B(dfj@H_mQ|Ox)!Qf`Bu{MdXnTUxKZw{B(V^v^3EM z0bkI^8!4$7FWTu_F(*3wyK5u1uyo)L+7_8r9+_9GE)gj@z1wflW?x)qA9F?!u&k9% z4dJ1y@W6&0MrOSyuj^4E$2Ymbib!Y6%|)^0yM}ghaxx}Rq7S1zD&}3*R*pa*{&PS&z#)wQ+}yi{Wvn& ze(IIJ($MS9kbJc>JaH zhhX_6Nu9p!m+B5hKYC`CYZzFe3bzqTjNMQM+a2{Q&b9}r=hg*3F;v}(*nZvm-1S}h z(Hs5N7}dJcclPC|+_64a)o&ihF~fTq+*=6n{`t0X4^gF*WO_Ad>#Wc>!geWeoOBu~ zx1z$52KB`i_(VVmoeUEmWW+0~4A}#iA?ol(G6J57^j6-$Gv_`+bh&x3gz(abUzJ?c zpL}|i;4x_IojZ}3oSAxo`8`~xZNEoGSoC=5kQY4H=hldaMzycX?daS0NGrPm?N;?v zokLh8yl{j*aUSyt$@ zFfyEswkVHJE?UF(4OuXcxg0cMos6Y{>|6j7ty}OOTGF)?SgLGL`saI4yYLqT|qcvUihrh4^R|-k0zO&psw9s~#q(+uuYv zLX!p`D)JTMLDZViCIcA-Hq&a}=@9Hsw(PW*=f~$ZC$j|&Wz2@^S7xl}OvAS;*-HOI zzz~XGe?V;;2%@!HU@y?W*{QWNw^Zi!9||w^+z2fn^(k6m=CRU%l9pU!=2Lxi{op0k z^F%?CU=XJ(49FL@lZ6=3VtivYHzGBM(v-PMB zk(YHtEmvCb7pLDdb{UGd$p@r|#_i}GTfv|+Pf)ToZ*f)n)P}zz{kzcR-$OEDywrI2 z{elU;%IttugH2KRTYmp7-G6(Bu6i8b0X7-+lhLJx&RpA_Uw}a)UwsG|z#AZkulvCs ze*4aui2-9PMEuAOmC~f!e_ENhpL7SUdcWWQ7z=h@)&cj(_{GUy`RpW*1t7jRsR4$3 zi(1PK+2WVP>Hi*g{T-A3=~zs#)5!tk3jatmTFW0;`dSy7+XJ4g^dVL7e)!*E^o~s6 z(d$~+gEGPs#|K5n|IO*FSo;n(=9Lc9C6x*nlZD|@ zx~RQxeBANkt z1%F_JMg)ue(#!{#>$#pg84a9vDjZ_@_`L0pdIh}W3{BY~(tYvBB zu6;2v(0*h!(DVkkZE}xfiekRPDqSB0K-9mM_?dGXc-i`&yh>P}kiYQ0eOJ}lHMC9E zVrSBM7`iKmqJ=BEA5+Lx;Ab3CCAM#V-zMe(c)6QX;5&t$5)XzabalesOgo$aTy@&6 zngYdUa-&t?qKIbIGPFD=oAbqn0w82hKs~=4gxuO~%1|e>l6J|;Z1U%1*CME4OE>y2 z_AQ;da%~}=N}KhWZwZjk+hq20{JoJEcnN{px;dYN6K14;U=UXbG|&GEf%LLc;9r+` zZfs+7OcQ$gH?wsuy-ZwJ-EC$^H&*N4fYj+FDe`$`B%z6!(Tk%Xb~OQ@yze>mG8UN` z27tM|ztLxAzLmUAmvOYE+GqJX7xc#m=_unadmRT3nh7tcYxx0WQ8eKP;T6^SVoFhe zf93kY)`7;!?9x%&og`xApUwkCHb015LNC(JLQ^4%RG;>xCXMlEf`J$IG;1z;QEo+iJxOg$xWEri7?Q^3>!jO4Rx$TG!C@zC)5=kHAk|mg zQFqv@;;N6vNni6XdneC!SMhE~MwdQ_t&?GRa`a|z*e3GuGDbbu*ZhoR`V_nsePa3) zw57$SskFwTpd(U;+ zS=p^y$@p!-tCbEZ&G4OLxxKs(1G*>xW~{vJ8N{|wa{9sU+ao=O#0RSlc}~y+jxgT} z$SwbkaO(lWS@-csM)~WW?ICDG0yN~-B#Vq$8=WFEk?dtd1npb0`pNSTnOi+L(LTYE zbxT%{ngL~ymgs>rj_RzJf(OO`gZL*qVh$q1NApvsK=y3YCXfvgsAQN^s@k^YInMBZ zGOdJ#V z|9Nm_(BM-rD~dr742@K`;cbdYxx~AWrdV~4sxxMB!MUc2fI)CMBud1glD?p+S#(fv z;62A+*Om1&J3_h5+Q7}2PxMvoBx{Zwxa}Ls)S}dNF7_{`VKU`*fLero4}NW=AM`i) z|K(e~Sm@)yIgsCb?6V+Ni!bcvtAhjhdxL!@4ev~q3!l&}CaqX2JsX7xEC4=+;z`4? z-29HB3=V66a57s&Ug}Ob)xwTgz`IP1y_C>;ZrBS*ffj|IFF#54$0jav2WZW8OSS73 zp2*pm2EW>S@nO|6mD1?MU4D^FSu=G`O3{pHMS~bjtRw|g-RaQ11Q+Jg2%6LYi;;xTxh##^_M=Fw;o6q;90=lv7f6FZY-U z*q+!_8Ej4uW~;{;G!M)hmfWGy%FW0dB4}ZSLrFM!L)PEooXzJO0{pP60QH^=q9^7^ zK6rfOIP0E8h#-w8*R%jHqisz>X*U0ZZfHYSHx$jKqi#V44^Di;+6Dh&;0{w)zNn;) z#+MVt9IR}iQ6#DQKDyA5`bOPjSk!G-OX(OKUX1ZmGMI8fQ1a~8LA-fmHT!#z(Wg?5 zIObFspt*)CB|jsVdJ)*>;#p=;Dmy=Sk%HDJG$Yf+vf*0vUR2>^VNtHS;L2i!`DMn9 zUasKHK+IlFmzmG8jRL|NN_!9J9f)~aIgZuW+tPnkkTU&r$-bsCgPJ^@lS~!QSB+>a zUrxfa8Q7F$0-2~%(>f{FTaff=ldhyJ;B;IXO84NH;<&1fCQ#?$H{++K>U04PKHs(U zykP1wJHAcisgWCvsEmMWa0^WPxB}A_W<%mX&$6T;!2d0qRXj4bl9<)7qaX{gHXp`# zWC>s0{@1;DhkT-=8r))&`M|M#yx+PON-L1d9SS~*P*)yPXnM{Cxo>-#=)kFE@i=bG zS^&q?fustAE=i$Sj;X5<5#*e%r8noB8kXi#Or{Opdxa^>#&jfUxxKu#XAdoK{9d1; zDDs+IqMl2`{8sN5A#Xb+Y(LiP9i1xn(ZDl#SL{UB{FW!g$?*pQDyOR!x-p@s0J^Q> zC1)Oqi)N#XM?A^3!&y0ahGg2I$)HcvOSYp(2up1dp|7Ofc64|D)OKIOo%;TmDdF4% z-Oj{PzA%e5`8e(b`_3)$Dtnkf25W9*8rfb|DI^+B+5f%T!N5aB`ct8?HbrHQ4VIaz zwuBwphIiVR&zKH|&p1F_zteh|mFNOFKqd&AVbbXktNk{6o30&gV^oGJJDr`LYKp1)raJ z^`UvSda0IcrO)Fo9)>2kLqx6LDMwg*2v*WY^u7ruY{6$o1yZrnFYfDKeR>&s-x(el zKNuz)&?4*%v9Dj4e_hrY>s^UK|gXySM`Gs4!>ZwIMJ1iqs^6UQV#fWc`gC+ z+4~tgV~@+m{l0EF@~;8OV8AyY4oJ?HI_^<^_tDbtG9Ud9Bqo;^QFTknYvg|%S_r<` z18x@&Bq&M#*d$tLC#{D1d2^|^3BXij|9A`yfWMfDUcJt&a{+{gF-*qnODjxt;a{Yw zH4JOJ{21@IEFvtQW}9@%RWXbBIJQae{{&%ZA3+33F6-B8cvvar>yFi`fel> zu3!$fofyal2~jrpw+=^uJ-CAZ&-qyP^DZNt>C!p7`Qp6jZdvm0k2_^R*~Kv#{@>R* zXQfzb0VmNRxts^*%$d>BoCCnTeguchAePPC$v;xa*27pL{ol(=dSO{POm4ZV^8xx9 z?T?Zi|KWtlHHDAe5Rse2x?I+rweN?J6jgZwr1n?nAcAnF;p(}Wi|_9G$irEg&qnSf z;ClfkU%4X!q_$UB(dbUH#r@M+Czb2wOw@v{MhifZZ_|>@v)90gG;#z^F<6ZIdPZ@+ zZmDFR-qH8A%fq8^uzvrNG3mN~{+--W@@$zE@>+9pp=3S>mklahMppPI&LsG`z$C=H z?Mn&eN>uzph-khyxQnCB0`Pd%%12v9gq6E5{IR{2sbUS&aZTmvSbgD54i9@JPbY*g zzSef0f&dOTek_3;-YD)-oEnw|Sr+tL11hDjio=Twg2&eL5`w7rZwG3uP;_yE_Ps}& zk4$>N;TR5?XNo+ou|O&hcPs5k(+^Gm8o2}Z35e7F%)o~2N;>ObtVA?+j@<)`He})?bf)fHvdLEmup9(#d z`1=9z`sdC0ZXICS#O$Z&ptkAe1Z5gGuY}iDN~^-mPn{Ekw}Nt%@xeGu2t19n(Pns# z-~97R*QuDPAS%5w%{WNa836@N^K=j&+n+y9$;-eB@o?@{MeQqTzV_-pl|!>Fejx(v zEqVTiW@&T^+5QLqJT7-gLesRg*jr0v4My1QFd^x>Xtc*e*eQP2?)!QWK)TRk3($2gqY+e=KOYlTexMTibLIxlc2ixF;=NPGXA)*| zG*37u&-#ZHzD_a0QC+{cHcuEEqG|_+0D3<>zhkvJui$i&&FHS+BllF@QO}Q)L9TxB zdb&XkQuFfUV&gOYW4y{fVTD*1Am3!R0)$Q_o=msMl~&f^wte9A7WM;N9+?Pnk4%+i zoWJ#|r07-iP1)k;#ZxqIJJK`>DSu6pNz^Y`1e@;*Q={xFIUS2oOPo#G8PVA2!yg89 z&i+fI0#3tE$*ireoXS3XGRV#qp6$NE;VkNZ_unVbOr=y`{YnzVUn4CXvL-LL>#@g- z1G4GF!cxK1P!`bqR7)-K2Qi;OXquEG7@nr1T%WGYYbW?|0H^)uRVaPId$9_<*C;C> z&%}iGhM5TWB=JkUjXVBw1wb0|mw7%FfM41l_J^_lfIz!VWV4cEP6&=f;28T=O5;}* z>3?be^UloWH**{OY8ydD6=b(Ay?JAqKL8IY+x_hhGPqK^x!=jtCz=cxY}FhSnMUq> z@Tq$;Xr@UL&m=C5LLO1eCUWXg773oVG_X#ox=A>t^}i7pAeZ@IwU7);a+bF-NDc!* z3iUhQc5)lP1f1zx55eBb0A zbY^@@1X_jz?zY;Vwolw4^yOCmA@$s%gI+k{QwTmD=$YjUO5sz<$Tz^1y&f+ac|a0j zj;{uf;s7+NMF?_m=$r%lt%R!W-?GVH{Np7T-)FMp)N`Hle*KfSY-CW61KH5uc*rA0 zWJkM&-yW-!iVNo7ygu7qkCT2XmVtFzC`13-oH_mn73v!ckPU0@-DTbShe>NtPTD>2EJ3BfCI0nq4&y9( zwmK$IUb`;L#I^NbETCo;&*u!RAJnJoZNJ$+JmHc*ScjEfuQ5<^99GR!?g)UCfYht# z>@~r=wB9NMaNj_H>&yN?fAmOHb6lC5ICFwpdHP%b$oZFSIyLgd9UR23G0&^%?m_@G zp_@RTsIXNaX%T`8fjuCvLR;+E>Y7M4M)XoVi5x-+Bmup090cfrD(jP~ffN(8b4_&XEVEMt&IEBI7s2dl#bNfQJRPtEqFnPewUY_)65Y zZu+J4XpKb1rFS>CtZ`BLri=gNn+RZf&<2jMiYhmoL&i+&$}wx%Q1b|@=%_}XPZq+A2XV-hDiSi7>1ll&=xQF80Yrd!1&TpW$uVUo0$Oj;3 z)PG;YFn1n=sUverrg(B7-PaKwxw@-Uw=1rwvaudEEBMsDBqne0HE11*%N+*V)!!%u z35mN45`=a!PinYPae$xQU84^&6#wnGB_nD@H)D#pi>{CFhU{GJ`VeZD070}rR->pl z(`#2BsP-zH1jc>Pdik!4jAo+yv-b>lS415qVCyC(3gnSb1Ij%|e$YSw6qb2|1b+cL z3mzUyi+$qcQkiE(vfimQs89aEBS8#Cg~|%Ue{j1$ z(w_zmTa*ppgIyBpe~UtkuJ2j#qviX9Mb!7lx`B=GHn6x~O6t7f1phIfe^=J!=v4WX zp2fSZS1&&%3>sMRHpu%kqG=!b>|LbNzYa)rBB-(@^T#XCta^W3W#aGMG4*C$W0g#G zaHRnaH$Da3_sMsk|I@ev3k&4S_}RPU_TZD&jT9RtHBbI@#jAIoP)Z+A&pmVZuT2Hi zeOzH>B&M_E2mh3Zh-3-LbUPZh@u7Qo-J3^89F=<6cY;l&b9#qz z)N()i*4twgjf@FpvoB?UE;a|Y(V=|gGaV$5ih@v9`S;^80zv(|AoBx6`EK0*&{qxv z>Ab<)461VI?H>WpeZni$E%GH&sqzGXRr&Ur;_w)8Nd-_rx_q@F^3I1cdGL(lgj2Y& zVn3mcWT`^DE;;x&84O4;$1O((?9zoGMP>h$&Re~mJfxd3W7qgB{wFeawSbK=}Ai7_UL{x7vGhI;Sm`ctSEzsidnJxnJ3@B58}b89LKM88v5Q=o;es7 zp30zefHnMb*r!7_RR3Mdzn>nFo#vzrD2TaI23|WyoR|f*i|j`|-w7LRu}YFQ$psNu zZUtK5#OxYu)W3i5`RjucEnUa4`+5w`^Tmxr%cgdv(Fu%_k=Pe}%SWakt5T;lEUAJ4 zm@f;Yo?Q5l&8*=wNy2g)%u&m-g2YLd_{9^~0(CALxjgRNqTJ^je`k1P{41zI?^yb7 z=AO!Rnte8VUu*?|E+W80a6=MmqPpKy)q@i<8KB2GKuPM9RKu2o5`rjtGAb~&k6gXg zbAcH5gQW3_6><1cx8dDs+Rvjtg@)@eu2QUdvie|OU+JpQ_NA`{b}`bSmjuO|owXrm zRDm}veymG00jH(MjCF`&z!T~!azf0d3;i8C*F8|XiYmsyjH8~PbsyV6ZUj~VJ;+c> z!$Tr*US#f^MX=qvDjW7DKWu0MsQNh*^gDeBppzZ%rN91JmQQLU^7AJW5mcVHKkLPOIekvp3MwG3{H4_W6Zq($X5O8%gCl-aO3x<4t!3 z^I>@fl?5>ef_?%|2CSpik$CzygF*R)6_P$BYJP!9MDR_e6v(zOuhg3sTmf>^!mfvv z1)K^&XglB2h(0H@$Hif;C|wly&_`RKUka+%ghTqe?we8_zUB$K+QVs?&KmZ2A!0sA|O3IBJR?VkvdxlPkE>wFNI<_V*8AoS<9}9kl#(6UgI~%wG57k5CE}i7|9A zZ_J;v_rU@qkLxkl)I}3SR%6X@4TR!Gb{03Vrfjc5vzb8dkXlmOP1Ez|Mzi*^ZEJjf zh4bqe0jfM)OSQVtW+A*OH=M-LMU( ztqU1ce8p?_XZN4&K0rzIqpanzgYu%B5d4~@&^1xc^DX<4V9xuu)>geCp6?)SCnUd~ z3$)XO(xNkO>y$?2&v#;zj5}qQC*p@dk}W!!TY%8eQa$x%3?71<@y11@7o5w6dwXSH z0V_1>PrmN0HfcquQN*1zqJ8#5`QUs!B+A^PZ!;w-S1J0r^Sll^?5)g|9GUQO8Tu}5 z>rvcd5`FGB1ex&IW%!G<;QpU0MsR!Yab*P#Oo8kWOu|%1zZ2G11_%#aupcG{RLMHtOV>qI~ zz|j%o3a|=Kp2lV*C^}D3D^4fPL^SN|bm5e{Obnp;R<&6IeOawdOO=&JzPOb;*5Ffv z&~MX9i{=C(0~>e=7gHlD$`z#Z@ku;fCNJNI&7nzZ^4N#8cF{E%-PTCd34@lz29kfs zLPDCPYPTA@t4J$@muu5E=euBzH-k&{RrPqV4AixUtIUe$0(1tYjPM z#7LN&z4Pat1NzT5^Ha6weF7R2v9$6@CXvl&@z|vHEKgp1Kz&u?U!^NWARKrHaz0Eb z0Loo(XPjt`d%(0u%-TkYYun2pu&{4~y_nGlhICATbj*wl+4c0Yjby$`f5UlvgR8#= zE)cmixmPm*9G}-_ybAoplpo5s`%eoC4|~naVJA;vqD%iSNpPu7a{CCtnE@M zGPKjl6KP&C>p-0$EcWdTpIcxG9za}(=kL&BZV2Qc+4s5X4wP1fR4H&SwQ?KB6&1&7 zZG95omtQE_b9;pcl2ExI6)p^uvdi4yiBNa7gt%x(s%6x$FSeSQET=w)Z%Pt}bwt&@ z7NG)`XE@9I#B;`P)GqoC-b;o_5eZOTX0$Kjm?4=#n?2F~ORr2!qLD1EbupH=f0R^m ztdpM18Pbsf1t`%yV$-Soq;UR292c4RczJ1-?#% z*?2mvy5Tn+%M?E#`P16L%&F&fh)AF`cYO_h6Jh8+NkI5yFExgnT0Li_lDGd5+3|=kGQj%+-%{?Edz4hjzcfN5+`h9Zj(f1Y7rH2 zi(g~vBYHvtqTI(pDXylqsI6u+xvQDR5zw+LzYTuA3rIV)h8krWFvf4N+C{|Bp5#=#MZnwKrPpo%|+t) z1LLB%dTn1s;t^=Qdo}{uG+`N{auYJrSM|DYKD+95*Fa%*N#Jd2-yC4Zs!sP3_Z?H` zyEU~f2Y}?;7-nI$b6GnGS+B$ZenV?0hO^uRqWJO9SCwz;o0K%s`Hn0;YaiJmVAlGu zGA(UJ`+Gf-lGHyL0FD$Z*ozDH4mePfcKyp@OpIkj3w@$P*iZC^-%QEr=dHIS)T%nO z*`Aq)mSW?IvHD~nA0`d4WPRq^)v54hJ~=sb=_SZ&E-m$CEiDKvbzCxwfKD|qGz^qi z_3g#Y^W!>h#a0#{d*NBvHr--TH*1J=Cy_lPnGH+v+>#1qF4gjwAFOERpy>2N6q#|o z(P)+hZvbdjZ-H0OM-q}wA_zRiWXuLf_}Wc%x(v14{9VDYdG@ljP;R{xU$aI%ch=Xy z@en3JFJS~}i3I6sreLSpT#I?~9wg1$XixJC=D*X-?NlcnHpU?wkcx4nR3o?OCXl~Q zihu77JXC3?Fj>ZU??CW=J*t^|p@m(fa&w_!d6HdlLKmrl_BD4ZnWdPDttH}RMklVe z1*Ne{u+k%VwxwXMZQKg+X3mVfY^Ioc34$)USj0{iFXiob6KpJgWbF|Nwps{XVRu8} z)_JwZvqex(ib}y&Laj+KjR+D7~>yI0)GaDcE9~qgC zYY5)wB3=f#Xc*2jKdFYOF7$LQJO)(Xv-lx+*@(yRZlND@0MFe2tkyX36jIfB3*HWu zehcWahu09!cG&6bruWrC+#*wXbl74CJmt5|^?hG6JTx!X9k#?sE4VhC>m?z8$CX-i zO}*sk8~5d=D z7HP$H%=Dhx{H1y>^K9$0+3IC!R=wGT(FxtyrW5I1Emb2K>}Sv1G)vb8HJvza5ONHN zq?%tC7K}rFNZL+`x78#QTcf=yqmfcDQZZN^vD$e_b`KOelDXIaf{C9nz&!(c5`dEo zBj%+YCtX=NjZxg%2dzgI%qi2iXTQeWZTJZ{KSdolGV5TSH6*OMbj^JJjh1`lq$Y+h9_g&YDSjZDQ4XKHJTR4X|2&C^xrxjW_&z z=BN{UTgzc+_t9}J?(Vd0%uj$HsWjha|C}sb7~_6*v8A^k6e)17FHRX+Ve-gIB^qO< ze+|%1SCa%v?iXg`(VkWVno6{S6<5ghdobc5ls)4gN_zDG<}MS@ff}1?>7K&}g2;`4 zA7a4^n4{sDS6lp_Y+)XeW7ijmP2&QQK@CJ66IfGrS2t)05XAWEZ%N`6k7{Nsqk_V7 z^G(9N*p^in!yjc5zA%h1JN4>vmsv}{_6y#&$(D?2rGyyb{nRcfY3DehV=wlAg}koN z0Xxl%|M{$YDz{VXY7HeJk?-Tj4{UIS=HBF$|y47B3L{r7UjXmXkl8yCmmjk$o-Vg6FLV)3We2H=C)vrIezL<)Brc$ay zNg9k$N1Aae6}E4(>yV7v!%YTVoUMc(HXE*Q?y822wxGq&FXBVDCHFNa_zw27&bsIG zqciV;x`Rhi6hx#F*aOAmqT)VKh+&j9{h-M{uVeZ8^k|^V-G8s%4L^9|mA-D>Cw`g5 z%p5wxk{d&x%r2^XdigLuqgq-tk^!Xm=Z~Ez@s#Sbwgm-e8FDD!H{FGi+6&8KyA5B) zR+K?rfjVh}1^Y_91B|}fS13SLLm@YopH)YaphkVa<1)9G6pAG@z=trLr|tAxx5Nc`!(@WsKjSYrm&!T(z2ImJIgLfh=w|WP7n(S9r#IY z_ivbMwkq0_(~Eqdf&h+OXeN*eOvfJ#Y=8OUhU;;ss5?WPTFz2_=hdd>bn|n05M81-o&UJ}`wV`m!1V%a zhA%;nw?sYsKD(ltQ?Z5_^(xEn#GPM!V8-{+NfImT=i-44jF*yuZWLMdJCvwIw>D}s z-;~{)6}_W~Rur-b-(3Q716#8=g80u+`2}-pHk;2dZR-2v)o6-EvlUZ9$Ww=mRr|ok z!}&3l`rl03H{G@A0zWhj(1ebru50aIT`54>n}%hIcolm1SYwdaQc6w(NZZzb8$+U| zK`=dn))xoaT-RuSKW%Wns;*=E|q0&2)z)1c88V)50?SM+;CtY?qZpconvmLmoEMG6Vz0-b1wl zTb5exESguzr?yWsxRMJQs9#Sr6eN1`f@M&cE-ab#w0OsQ5ah_5H$s9|V ztrl@m)X2+?#w)@IgXWh0%h*?03Lm5k5O1Jy;ZG}{M)ehFA1Ju1h)PUiATm#l7C>i4 zt$g`p0j1LB6tCEmE2*UQ@xyKVG+bxg%k5;PFeE6|n6&Pa@ZWC34+}F^tQgV{Zw+oL zs($+AD9ynemHqF44VGe1wj)~VJHnymh)gsnvkx-${dy=_HVKtUI+b=61H@U8J$1+| z$NqJSimtm?XP~>CM!5zhJNFLLgk75;04)%JFA3anb9NOj4+EvNJqzm2pY~zLVMp7) zBqKplM1LGxRC^fO(V!i)RVFssMEIAEpUxy}OYL*dnKFVc#aNF}jUKWfowt`!jCG}X zWHpuB*30qj#@F`wgL;TfWO7J9^=SKejl1+7X_3}d6RTyE} z+;S=?pe!3JevaQP50;O&nDxf4b{;H9KtB9wS$MD0{@63j<%+JEs;|^I5sRTI(*Y)G zwpG7(J*~>{Dj+v3N$-vHVDiQM@PKu|P%+NGPiq6C^=wx#Gh~5!n%G~S8wMtCWw)OqPS;eyy`~&yyvt(- z#I)BU6G~n`+ms*ItE18Jpv=i)+}CG2!@koyO+sUvT-%p_&6EKhzu`AtM_`XVyne6! z`17dxtOD)Ne`|iIDJjtZ>LX+x-$J1BFz#o!@ekKU%k_ z<&NCncw?8U4Vt3)P{oRkqDkq2GU(y_w9{mK8@1F|;Mg2DBTRw^WVp+4~ zZ1;^1Y}ox#(}PMPQ-0O5u%oKU^(GiDi{YiM!yR9ujE!3kPx4oGQUh)sj~BWOBYf98OStzvvI{*?sCzPf#o0N7`Of^$9U9)*X~k^ zBIHL-tnl$vLvi`3k0C2A4)y|-iF9_`)&Vl-hd-Efr7Hn!Z#=0pBy9Fl-Cq)dckg${ zRO>6d5do^`T@At8xBsauW5epf5=M-PGz%7H<4GhS5U z{Z3ce7=7Y>1B(BO;z1t4h)ho6W>+Y?0QA)dvw&pGa-ae9V&aMy7y1`Vy_tgMD;@Iq zKx};6)J05UUhF7E@&42j(8vpfkhAyXD)Vn9GFPj~aG&T$ec zBc5ccSvaGkq~3YY(#Q!RDtT6E*J_7x$H@#;cBj2k^T>JS8Tk_CuyefRM&l-A68Cr> zHtF}QWDIScYqYgf0TMdy+`y}Ojt z@cB4LqVuKeSMc#e6=%CAtL7>@bH*+fj${N0l;V=%C_l}sphB@(F&sCTVBH1A3}1$V zd~bHF`s8&O;9{SA_YoIswNUgB^m|ydb+z*oY2C=TgVlMDK@D9v^nkmPk4!WHwayL~ zz~&TQcaI#sa};PT)aVoK_#>dn5s04(Kuqwq=MvBgsVkRTc(`2^C6?$tTDf1e_^?om zH8H@YjG}i%U8`?+zIhNNG)<-&YReMSg?Kh!5tz)BA#@)8tV<>&v1D(EQ5F^!r&6^| zw>gI=w;!1Y>E9u?)o|s2Npxb8fXVHQF~5D?Eks8cHvI%(gJZ7a9O9EA@M(bGz_>sY zTz34tv`nCoOLSNg(^#GkKt9S)3PH^foD7Qr3+;SfO#LEl-v2?%^Ly-I4&NaQ;PFZ> z6-{SyU+)!)B+-eID{Y{4(Ur}12=;gWc+iy4FY;tk3lIyOyfV=jGVly{3gGGZ7^ep< zet9R@(9lIEBT9uV;(3f`GOZeBc@c)cP=y$Od8yqOJXq(m$c_H53@pI>{nZQ#6x11q z#|8g%GhpU=$H|O*W$I-B;Y(&kAKu0K%2nf%_RR_zqho1)RVYo^Uafr(Aw<8*xI*SB z1iZ0|+UYv#W>j9ozCquXc4lnjh#EuQnn=G;<7d6t_IVED6l)4yNwYupb5X$PLQ63N z@BmS30Le^?vb{Z$(VVLt^Dv2@YYz`jpJHw8>972~nw(6DnHq`;Yavytl;$2WkfPIt zd}vC{SJ2uPhqS!*?I9b`{OHC9Js4vEsFI{H1;WM}^WrM-%iWl;Og>djc_Fhn4nPpn`xgK`>iGi(f#Gnm5N zD9*ml_?nubNQ@46S|_|vpjqECHZWrf&opDL8MVbk-4XakTp9EtNvv7i&W8HKIBH{b z`L39-i~^*ji&!;uXXLZpsE@(KML2dF_ISO$;6UH5yT& zbt8Wlb30GQlG&%<%v4D+BZI;)K~xfIDJsAhm0LJP`9cGAE54DpbSx^YhM8CSEZ${t z(Ur|i1(}N7)u~$YMQcj5o)dpU0kY4ZGAW}y=392%6I=kjKYC}A0H;EdVboQe-wY+LMg6O!!Jq*w znZ6^7v*|&oiEX;7ecqF;Nnz^yPf|&=q*fMlflF#8_vjURiXuQyQV>_u=xCcy!rGu8k-l?}ylm-2NyFHg)5>8om0Nc{C_ z1yv6=*k@+W+A2kx+Y7-O!%rcR*qyPq=YXqMeCvb5Asf z`NEYG()-M3;$^9Q^e%P|uP9!F)Q9yMf2oi6M(|?>3UXGIclYK6g1$gYU?$#n004T_ z^1ARy!q>c;vlsYkV3xmpNz(2^{al>bfz!y{4}*~)^fA+hMX9Wv<84x~IK(Yhwc* zyGL#c;5@V1WIbHO4|c z#TLN)w`6$xHQyjjgNvfI>OvzL1#Jml1du?f1Hr1EAUG*S}q;QSgG!OlM+WYdb zrml5;dhEfXfIUT2W~;Rdg2)^okXjT}Ori!vK!`Gm%tHjiBvR2bicCT#m68Yu9Eivq zKx7tD4YOfTz!(Aq2r+~JxjQP_fz#8T=l8qMz0Y&^UwKyc{`T5ye{1;O^}X+=bIDbD ztkZqeG1sERb8y2zD<}YA9GtyTRkjidY_y*M_N0LYv)|ct1Lu~EolcKZYgF-;^aoUh zhK;s#=}EJ4SASTpGy`=rkVMOs5(7(?qPG!{;0B*WF+ zzj>OK*B;TI?CCrO+Aw-&ZP2#K5J_Qe6>-J=E&^3j>p1A&sH41n8!{d<=8zm~4-AC( zl$?%3+p(|AgKQmt)P7<{Zn=-rFe7KCu_n=22OF(D?iq1_66j1LkhePpA6dG*J+yf{ z_TIulw_4QQ2fmW3AgN;Ci;7Z8zP5fw5pU124HZwn2DU=%T)>*fF$jJrB2u}TqVxz5 z;F|&nA`XOOBHan^X1%C;`(Vv=$*K(++A*}BZ>x8hZ3K|`ul#F=z}F4Q2z(4WVY;PE z>oWE;KOhtJz1*mX1t=zVy=PbQ{TC~Pfd=7Gn*gAX^F?k=-jGe#02NSS)cM*W>hMrr zI(4En`F_V~Sf9YI8Q{{VSSTM@x={rvB;7-$1I(1>50$PQE@{e~nbV&62g><~Rvz2L zAve8u%EIG#@_p8lqy|z(PSV@=DK)6S&`CYLIhyHTaCnFzErKmYR` zWVMW}@v>9J`->Bcz)O*)yhNK1%R}!v<#Y5-2veKRdeX9NRQCln35u2F~?RJ#L=@W8l4<9bn?(NuRmfTao^S%$D&Z_{R zH+vsNsVEsR96M$bn*kuWU71%Ayg9dH-kNb=0!VS`7uuJ>TTBK^J>4oOr`v&^Yt~d4 zU+pH1cIkc_8|gUZ-k_>}`n*DWA^3WHLL0yim6||PLXbGm1U@)v(J`amuGoHI5ZEsE z>;=BUex>nzut?(;vg=mFr#ub6+v&+T&!Ia{cUg=izKCyv_5cuKdJCHHhbI-m-4Z{L@!cISAfV=MUnmfn)gYw7QR zI`4F(rsY9yPJX+3l}|{EfA2&o_876Cl`}v!F$IO4s2x@hc`{|i?c{GJJGXi#eON`Q z3!f~_RJ;X|fZo#6^0T~(z#7n74Fy64J{Ocx=rmh(E`J{c$(lQ*!ULx4BLACY z*|ILdy~^|!8Aim^Z92dTT|W1wy==L%$NEY;UEn5b4~(iEh?LM3e88D~K=Y}t3Bvud zH@xZ)E14D;0Sv2D%*2P??20z|vvv3ED}iWZcwz?jDL$TNA3n zy1`qWPU_2OKMnWUU2Z?q0WhJ08^bzY!4xgWl?DGWcrZ5N9O1m#W+F08aMNHsaAcC( zG)8a#%A#^hmc1=lE#7vHT24(W0jBmn*FnTZ_F3eE{co8Wwhg%yKGKcgJnK7xe$mBp z!q~R9au7uZtJMd-Xi|sSN?ydJ27nVzb!|#FoX|?IWCOdCU{aRll#uDU=LWC>2pwhx zcIT>NT-{2>owwSEJkkQ&sOVl&=a4KcaDBF?<$J#2KjhvfGE(~j)YElFx;p^rJwNip z(@6u%;HRuydZg;6Xf9u|6o~o4RH$@6jSRxIlI}fCr8{KVhPDySy%5b^BcPMvK=ER-E(YVD&^q> zwR~AoqYseT5ux$##RLH^i)fc-r;lH+fjTQ|r`?__A#l1^mqIyWAE*h+GLFYIp_nAr zw{!7{yrJh>fiP9eeW%{scznzuq%EQ9iTVzQi8u^HryZ=l1b);j%L3_CAH!vp#i;{(=>l`S)^b0MKKtIx@;Ck7j8W&GEKf%RFN3QKt zUJL7=0ITD@0OUI<6^F|CrSJi4gm>T;We1)}@nug8y+8(l0DnRC`vt$_BgFSBypEXK zHzwrAcUqik_5wbHRaDgCD*p?z8cn1sCdye|hllYiJ8RaBYC=~;yT>(8-icjuyAW)G z<{X=Uv1*?o$|Sb)7n}%@PRnCJ6XxT-E0DN4CejAc)N{S7nu&2w&aDPA8gUcfid|t= zf6Vj$B%3cLAaC4F_9?~SMgm9jnVYLe3C;?b$&q=y1$AO3 zkqi|6)B>Ci0xcgdv_)dNqK!-#| z0^dWrfFY(9z@A*!z&cgUQ~=?CD!;$~&cBPpSWcs#e?yh{H&0pVEDkI88R-gecHe7h zUtL{ZIz^{%Oqx+hTH2WUd5kl`<)+;@GRmm1&;3H;P9IgV+?KN+0U2 z;ys5VGoVq)lm(Olwck;cZ7 zKyskMIKYd*A5VWi_W65<`{WO3EWm9ShkZ9MxkgGjnk<9uZK{_zijQ9NyuaijzpyR& z9~r{GtoIOPZV-pibwbvJEb6U8MwWN75=HnQI9o>%15)F7l% z?Qk6h9iYL)Coa3=66pj7bNuFj(s9bozFq9vUiG2AY$4_vC;2QMhw*7+ROtyLTpcyx zJnkf~k&5yZ3S_wRb&WxRp_k`tbkHVG7f_3uu3`9BO_66x1%y9LfRr4u?2Gvrnr@^6HEXr|6%^}ZD(2Fa~Z5x zWM|>@5xicPG0ju6LZxn|ma{O+UtEbhVaoGq6I3$bu5zYf`9^GgxMs!MT~s$yVXmuNyz6s~hD=LbL` zv*zs5cKq##jIgMns0(Scrr~e>S8F3@9fjYIkDR*^e)(3*Cbmh2<(%!5P9+Z#8XlBb zTOPdP5`xPd#`YD?GgrBOrUYeWQ))m6neUZ08~GA!*ZOkQE=0&_q$MD?3s)E=iav|s zZTw(sWr-r1T6H*?|q$1mgUt{u^vb<7`c&d6L~z=CG%YZ(1)2!qpf7Y=X$4H0 ziyt5Q{&gbewL8eA-TYX}1%!IZ*N9b9$i;RcCfq2cuaYg%0`om=ezGhU$}xvoHBS|tTjrOkL1 z`-oj;#K9b*Az`xxbnF6x=1*H3Sr~TkTG*j}{CEtYWo zRRh6>yw$i^C|6riS4s%w*QX`;zv!K z3UkdNzB&f;G$~OHzg#*y<-(G|RzX`%xO4XEqp11{hN$hzMpD<05A_kL)x~;>#y!gV zxTjK?`LQsRIJAj6?wHIDZ2YN;bZ|mAqz&`UPQc6K=~j$~M4!%6i1NjnAo{`-{Uu`H zqH3_Pd1{B6qNXg|`%+W@qNksEn12jv?M%G35w`bC*geEzW!n|z;;S5DU`wV!tkHHz zZC-gA4RclS_-3Asp%>Z>^o>z@Luz(D%ook-$EISp85ic+yj{k{MRB@ll_|7)%+3gQ z-kW1E)J9lhvtZUME(FgPFgQxs*K!(d6`+Ghwi zlJ0IZX;TGuJVBj#NRBNz8ZrJkDcS8hv<&9A3GR_EZzdaiV&!~&x2ELXr9C90bSdo8 zwGvv5OxAJurA^J2O)}VK5{P^CE`t3%2Z5Qy4tMWY(zM@X;vAjmhCX)0`z)E@!cFRwQhhk`$xDEHSXjqD5 zGZYE7LdPM59ZU&0nPh04aF>Fz{dxk&Ec`7$TAMU4)J%r`dAL znS?u&TXG(~-FR}pvX*y*f^=3~4sn@NNIwSSWhP+e&4`6@7ihg#b4YEi_a`5c&X5d- zkfCVWnep1J6dEtZ)8&p8BNQ0Va2L84!lb2<$!rVYn#W~o_Rmr=Gx3o=1%8(hA#sQW z7t&GjjvWRLNjSQdmR}Wk$sqOAvxeB+xiQllVG!A77(_!m!01akV=3}V;7dMLcK7{K zUayH))oF08D!769-S`4=g94s6e>Sl0Y8rXSe7+36pI;?rjdY1UGpwC1Rn^WU$-hz$QqOOLhVYSk56U z<_)GxXDSBPC5`Pmz}QMU64ib{5!3_=m^_1h)m`ZSm^O8hS@}4)d(opRY8>v=P8s7i zMN*241EcQosohO5t2lh?f>%&?w>SD8O@RXsvFoa5hIA4N3$hGsmSs?hv2f~B;@m#w zVgSr1Umk?BZ=%vV<+LWmq131N;UJ$ZlBNlHw%;Q>0KuN_A7%E_Q)umQ-)w$c70Ht@ z-tD!Zt9(!?9{*;m@qov08`K&C>GPg*44U04rzH#b%%%_^C90Rv2!nZA;86b^)ytO< zIjLCu;Lj2;6wJk_YLVJ`&6%|2QUccWZ1{M$@Sii(ZrPa@lFsxH4+8#5m{+w$rk#I& zL09KezVXFNvsrUD-h}&Utkw)!z#o{@Lv&}RI&?%Bs4B9E{Mr0ZT3tmYcBdldCLDF!Ba zc_DTP91SDR5kFZO{k*X(D#_(C$?m+3bF{K{iedwSu#qtF{c+|vpoq)*hZT$CtyRK799(*={rw<*p`Zk#48zkBUO{I(%s4$iID1* zj?Xsi-9Va*rge1=sf)r=bzrw89tVWP1Mq@Zx4>3e`ogQH0T8svEtQ!v2~w z7gyia+^{#w@2@m6aBei>MKrCV0vRPRv9uqmWe-z(JaOvYiFFLSa)K*uBxgOO@L$(# zNGd`O#E+rFOtL#O0NMnVpqbF|Ht>Ye*^yg>-PEmST++Y0?`_N|HmI15r=ti z{5SaCpM(tG`3uTm!F6_x7zz!FEfBx!!0ZA(e AP5=M^ literal 0 HcmV?d00001 From 9c53fd2f9e5f7fd060af00f2b2df2fa47f4b838f Mon Sep 17 00:00:00 2001 From: Corey Pyle Date: Thu, 29 Feb 2024 11:30:48 -0500 Subject: [PATCH 3/3] Dummy commit to prove the package name checker works. --- javascriptv3/example_code/cloudwatch-logs/package.json | 2 +- javascriptv3/example_code/glue/package.json | 2 +- javascriptv3/example_code/lambda/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/javascriptv3/example_code/cloudwatch-logs/package.json b/javascriptv3/example_code/cloudwatch-logs/package.json index ae43b55bbb5..78081788d65 100644 --- a/javascriptv3/example_code/cloudwatch-logs/package.json +++ b/javascriptv3/example_code/cloudwatch-logs/package.json @@ -1,5 +1,5 @@ { - "name": "@aws-doc-sdk-examples/example-javascriptv3-cloudwatchlogs", + "name": "/example-javascriptv3-cloudwatchlogs", "version": "1.0.0", "author": "Corey Pyle ", "license": "Apache-2.0", diff --git a/javascriptv3/example_code/glue/package.json b/javascriptv3/example_code/glue/package.json index 1ee7361d142..3aa52151d2b 100644 --- a/javascriptv3/example_code/glue/package.json +++ b/javascriptv3/example_code/glue/package.json @@ -1,5 +1,5 @@ { - "name": "@aws-doc-sdk-examples/glue", + "name": "glue", "version": "1.0.0", "description": "AWS SDK for JavaScript (v3) examples for AWS Glue", "type": "module", diff --git a/javascriptv3/example_code/lambda/package.json b/javascriptv3/example_code/lambda/package.json index 78731575e1f..34d03879706 100644 --- a/javascriptv3/example_code/lambda/package.json +++ b/javascriptv3/example_code/lambda/package.json @@ -1,5 +1,5 @@ { - "name": "@aws-doc-sdk-examples/example-javascriptv3-lambda", + "name": "@aws-doc-sdk-example/example-javascriptv3-lambda", "version": "1.0.0", "description": "Code samples for interacting with Lambda via the AWS SDK for JavaScript (v3)", "main": "index.js",