コード例 #1
0
ファイル: FileManager.cs プロジェクト: rmccomb/Backup
        private static void InitiateGlacierJob(Topic topic)
        {
            // Make the call to AWS Glacier to get inventory
            var settings = SettingsManager.GetSettings();

            using (var client = new AmazonGlacierClient(
                       settings.AWSAccessKeyID,
                       settings.AWSSecretAccessKey,
                       RegionEndpoint.GetBySystemName(settings.AWSGlacierRegion.SystemName)))
            {
                var initJobRequest = new InitiateJobRequest
                {
                    VaultName     = settings.AWSGlacierVault,
                    JobParameters = new JobParameters
                    {
                        Type        = topic.Type,
                        Description = topic.Description,
                        ArchiveId   = topic.ArchiveId,
                        SNSTopic    = topic.TopicARN,
                    }
                };

                var initJobResponse = client.InitiateJob(initJobRequest);
                topic.JobId         = initJobResponse.JobId;
                topic.Status        = GlacierResult.JobRequested;
                topic.DateRequested = DateTime.Now;
                SaveTopicFile(topic);
            }
        }
コード例 #2
0
        public static void DownloadFile(AWSArchiveRquest request)
        {
            AmazonGlacier client;

            try
            {
                using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USEast1))
                {
                    // Setup SNS topic and SQS queue.
                    SetupTopicAndQueue();
                    RetrieveArchive(client, request);
                }
                Console.WriteLine("Operations successful. To continue, press Enter");
            }
            catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
            catch (Exception e) { Console.WriteLine(e.Message); }
            finally
            {
                // Delete SNS topic and SQS queue.
                snsClient.DeleteTopic(new DeleteTopicRequest()
                {
                    TopicArn = topicArn
                });
                sqsClient.DeleteQueue(new DeleteQueueRequest()
                {
                    QueueUrl = queueUrl
                });
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: x7URTL3/aws-net-guides
        private static void SetVaultAccessPolicy(AmazonGlacierClient glacier)
        {
            string jsonPolicy = @"{
                ""Version"":""2012-10-17"",
                ""Statement"":[
                {
                    ""Sid"": ""glacier-perm"",
                    ""Principal"": ""*"",
                    ""Effect"": ""Allow"",
                    ""Action"": [
                        ""glacier:*""
                    ],
                    ""Resource"": [
                        ""arn:aws:glacier:us-west-2:" + accountId + @":vaults/" + vaultName + @"""
                    ]
                }
                ]
            }";

            SetVaultAccessPolicyRequest req = new SetVaultAccessPolicyRequest();

            req.VaultName     = vaultName;
            req.Policy        = new VaultAccessPolicy();
            req.Policy.Policy = jsonPolicy;

            Task <SetVaultAccessPolicyResponse> res = glacier.SetVaultAccessPolicyAsync(req);

            Task.WaitAll(res);

            if (res.IsCompletedSuccessfully)
            {
                Console.Write("Set Vault Access Policy on vault {0}", vaultName);
            }
        }
コード例 #4
0
ファイル: Uploader.cs プロジェクト: daniefer/BackerUpper
        internal async Task <string> GetVaultNameAsync(CancellationToken cancellationToken)
        {
            using (AmazonGlacierClient client = new AmazonGlacierClient(Amazon.RegionEndpoint.USEast2))
            {
                var request = new DescribeVaultRequest
                {
                    VaultName = $"{PreferedVaultName}_{_configuration.UniqueClientId}"
                };
                try
                {
                    var details = await client.DescribeVaultAsync(request, cancellationToken).ConfigureAwait(false);

                    if (!string.IsNullOrEmpty(details.VaultName))
                    {
                        return(details.VaultName);
                    }
                    using (ArchiveTransferManager manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USEast2))
                    {
                        manager.CreateVault(request.VaultName);
                    }
                }
                catch (Exception e)
                {
                    _logger.Info(e, $"Vault does not exist. Creating vault '{request.VaultName}' ...");
                    throw new ConfigurationErrorsException("Cannot create vault", e);
                }


                return(request.VaultName);
            }
        }
コード例 #5
0
        static async Task Main(string[] args)
        {
            var client    = new AmazonGlacierClient();
            var vaultName = "example-vault";

            var request = new ListTagsForVaultRequest
            {
                // Using a hyphen "=" for the Account Id will
                // cause the SDK to use the Account Id associated
                // with the default user.
                AccountId = "-",
                VaultName = vaultName,
            };

            var response = await client.ListTagsForVaultAsync(request);

            if (response.Tags.Count > 0)
            {
                foreach (KeyValuePair <string, string> tag in response.Tags)
                {
                    Console.WriteLine($"Key: {tag.Key}, value: {tag.Value}");
                }
            }
            else
            {
                Console.WriteLine($"{vaultName} has no tags.");
            }
        }
コード例 #6
0
        private UploadArchiveResponse StoreArchive(Stream uncompressedContent, string archiveDescription)
        {
            using (
                var glacierClient = new AmazonGlacierClient(new BasicAWSCredentials(GlacierAccessKey, new Secrets().GetGlacierSecretKey()),
                                                            GlacierRegion))
            {
                // zip to memory stream
                var ms     = new MemoryStream();
                var zipper = new GZipStream(ms, CompressionLevel.Optimal);
                uncompressedContent.CopyTo(zipper);
                ms.Seek(0, SeekOrigin.Begin);


                //calculate sha256 hash
                var shaTree = TreeHashGenerator.CalculateTreeHash(ms);
                ms.Seek(0, SeekOrigin.Begin);

                var result =
                    glacierClient.UploadArchive(new UploadArchiveRequest()
                {
                    AccountId          = GlacierOwnerAccountID,
                    VaultName          = GlacierVaultName,
                    ArchiveDescription = archiveDescription,
                    Body     = ms,
                    Checksum = shaTree,
                });

                return(result);
            }
        }
コード例 #7
0
ファイル: AWSVaultLowLevel.cs プロジェクト: rmccomb/Backup
            public void VaultLowLevel()
            {
                try
                {
                    using (var client = new AmazonGlacierClient(
                               settings.AWSAccessKeyID,
                               settings.AWSSecretAccessKey,
                               RegionEndpoint.GetBySystemName(settings.AWSS3Region.SystemName)))
                    {
                        Debug.WriteLine("Setup SNS topic and SQS queue.");
                        SetupTopicAndQueue();

                        Debug.WriteLine("Retrieve Inventory List");
                        GetVaultInventory(client);
                    }
                    Debug.WriteLine("Operations successful.");
                }
                catch (AmazonGlacierException e) { Debug.WriteLine(e.Message); }
                catch (AmazonServiceException e) { Debug.WriteLine(e.Message); }
                catch (Exception e) { Debug.WriteLine(e.Message); }
                finally
                {
                    // Delete SNS topic and SQS queue.
                    snsClient.DeleteTopic(new DeleteTopicRequest()
                    {
                        TopicArn = this.topicArn
                    });
                    sqsClient.DeleteQueue(new DeleteQueueRequest()
                    {
                        QueueUrl = this.queueUrl
                    });
                }
            }
コード例 #8
0
        static async Task Main(string[] args)
        {
            var client    = new AmazonGlacierClient();
            var vaultName = "example-vault";

            var request = new ListJobsRequest
            {
                // Using a hyphen "=" for the Account Id will
                // cause the SDK to use the Account Id associated
                // with the default user.
                AccountId = "-",
                VaultName = vaultName,
            };

            var response = await client.ListJobsAsync(request);

            if (response.JobList.Count > 0)
            {
                response.JobList.ForEach(job => {
                    Console.WriteLine($"{job.CreationDate} {job.JobDescription}");
                });
            }
            else
            {
                Console.WriteLine($"No jobs were found for {vaultName}.");
            }
        }
コード例 #9
0
        private static void HandleInventory(string[] args)
        {
            var region = RegionEndpoint.EnumerableAllRegions.SingleOrDefault(reg => reg.SystemName == args[2]);

            if (args.Length < 5 || region == null)
            {
                Console.WriteLine($"args should be aws_key aws_secret region vault_name output_filename");
                return;
            }
            var aws_key    = args[0];
            var aws_secret = args[1];
            var vault_name = args[3];
            var filename   = args[4];
            var creds      = new BasicAWSCredentials(aws_key, aws_secret);
            var config     = new AmazonGlacierConfig
            {
                RegionEndpoint = region,
                Timeout        = TimeSpan.FromDays(10)
            };
            var client  = new AmazonGlacierClient(creds, config);
            var initReq = new InitiateJobRequest(vault_name, new JobParameters("JSON", "inventory-retrieval", null, null));
            var promise = client.InitiateJobAsync(initReq);

            promise.ContinueWith(job =>
            {
                Console.WriteLine($"Job ID: {job.Result.JobId}");
                File.WriteAllText(filename, job.Result.JobId);
            });
            Console.WriteLine("Retrieval job initiated");
        }
コード例 #10
0
        // Uploads each part to AWS
        static List <string> UploadParts(string uploadID, AmazonGlacierClient client, string archiveToUpload)
        {
            List <string> partChecksumList = new List <string>();
            long          currentPosition  = 0;
            var           buffer           = new byte[Convert.ToInt32(partSize)];

            long fileLength = new FileInfo(archiveToUpload).Length;

            using (FileStream fileToUpload = new FileStream(archiveToUpload, FileMode.Open, FileAccess.Read))
            {
                while (fileToUpload.Position < fileLength)
                {
                    Stream uploadPartStream = GlacierUtils.CreatePartStream(fileToUpload, partSize);
                    string checksum         = TreeHashGenerator.CalculateTreeHash(uploadPartStream);
                    partChecksumList.Add(checksum);
                    UploadMultipartPartRequest uploadMPUrequest = new UploadMultipartPartRequest()
                    {
                        VaultName = vaultName,
                        Body      = uploadPartStream,
                        Checksum  = checksum,
                        UploadId  = uploadID
                    };
                    uploadMPUrequest.SetRange(currentPosition, currentPosition + uploadPartStream.Length - 1);
                    client.UploadMultipartPart(uploadMPUrequest);

                    currentPosition = currentPosition + uploadPartStream.Length;
                }
            }
            return(partChecksumList);
        }
コード例 #11
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonGlacierConfig config = new AmazonGlacierConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonGlacierClient client = new AmazonGlacierClient(creds, config);

            ListMultipartUploadsResponse resp = new ListMultipartUploadsResponse();

            do
            {
                ListMultipartUploadsRequest req = new ListMultipartUploadsRequest
                {
                    Limit = maxItems
                };

                resp = client.ListMultipartUploads(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.UploadsList)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.Marker));
        }
コード例 #12
0
        static void Main(string[] args)
        {
            // note: this constructor relies on you having set up a credential profile
            // named 'default', or have set credentials in environment variables
            // AWS_ACCESS_KEY_ID & AWS_SECRET_ACCESS_KEY, or have an application settings
            // file. See https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html
            // for more details and other
            using (var glacier = new AmazonGlacierClient(RegionEndpoint.USWest2))
            {
                CreateVault(glacier);

                SetVaultAccessPolicy(glacier);

                AddTagsToVault(glacier);

                ListVaults(glacier);

                GetVaultAccessPolicy(glacier);

                var archiveId = UploadArchive(glacier);

                DeleteArchive(glacier, archiveId);

                // see important note above
                RequestVaultInventory(glacier);

                // see important note above
                DeleteVault(glacier);
            }

            Console.WriteLine("Glacier sample complete. Press any key to exit.");
            Console.ReadKey();
        }
コード例 #13
0
        public void GetVaultsList()
        {
            string lastMarker = null;
            var    settings   = SettingsManager.GetSettings();
            DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()
            {
                VaultName = settings.AWSGlacierVault
            };
            var client = new AmazonGlacierClient(
                settings.AWSAccessKeyID,
                settings.AWSSecretAccessKey,
                RegionEndpoint.GetBySystemName(settings.AWSS3Region.SystemName));

            do
            {
                ListVaultsRequest request = new ListVaultsRequest()
                {
                    Marker = lastMarker
                };
                ListVaultsResponse response = client.ListVaults(request);

                foreach (DescribeVaultOutput output in response.VaultList)
                {
                    Debug.WriteLine("Vault Name: {0} \tCreation Date: {1} \t #of archives: {2}",
                                    output.VaultName, output.CreationDate, output.NumberOfArchives);
                }
                lastMarker = response.Marker;
            } while (lastMarker != null);
        }
コード例 #14
0
ファイル: FileManager.cs プロジェクト: rmccomb/Backup
        public static void DownloadGlacierJobOutput(
            string jobId,
            AmazonGlacierClient client,
            string vaultName,
            string filePath)
        {
            try
            {
                var getJobOutputRequest = new GetJobOutputRequest
                {
                    JobId     = jobId,
                    VaultName = vaultName
                };

                var getJobOutputResponse = client.GetJobOutput(getJobOutputRequest);
                using (Stream webStream = getJobOutputResponse.Body)
                {
                    using (Stream fileToSave = File.Create(filePath))
                    {
                        CopyStream(webStream, fileToSave);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw ex;
            }
        }
コード例 #15
0
ファイル: Program.cs プロジェクト: x7URTL3/aws-net-guides
        private static string UploadArchive(AmazonGlacierClient glacier)
        {
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("data to archive"));

            string treeHash = TreeHashGenerator.CalculateTreeHash(ms);

            UploadArchiveRequest req = new UploadArchiveRequest();

            req.VaultName = vaultName;
            req.Body      = ms;
            req.Checksum  = treeHash;

            Task <UploadArchiveResponse> res = glacier.UploadArchiveAsync(req);

            Task.WaitAll(res);

            if (res.IsCompletedSuccessfully)
            {
                Console.WriteLine("ArchiveId: {0}", res.Result.ArchiveId);

                return(res.Result.ArchiveId);
            }
            else
            {
                return(string.Empty);
            }
        }
コード例 #16
0
 public GlacierGateway(GlacierParameters parameters)
 {
     _accessKeyId     = parameters.AccessKeyId;
     _secretAccessKey = parameters.SecretAccessKey;
     _accountId       = parameters.AccountId ?? "-";
     _region          = parameters.GetRegion();
     _vaultName       = parameters.VaultName;
     _glacierClient   = new AmazonGlacierClient(_accessKeyId, _secretAccessKey, _region);
     _transferManager = new ArchiveTransferManager(_accessKeyId, _secretAccessKey, _region);
 }
コード例 #17
0
ファイル: Glacier.cs プロジェクト: fiftin/oblqo
 public Glacier(string vault, string rootPath, string accessKeyId, string accessSecretKey, RegionEndpoint region)
 {
     Vault           = vault;
     RootPath        = rootPath;
     AccessKeyId     = accessKeyId;
     AccessSecretKey = accessSecretKey;
     Region          = region;
     rootFolder      = new GlacierFile(this, "", true, "", true);
     client          = new AmazonGlacierClient(accessKeyId, accessSecretKey, region);
 }
コード例 #18
0
        public RavenAwsGlacierClient(GlacierSettings glacierSettings, Config.Categories.BackupConfiguration configuration, Progress progress = null, CancellationToken cancellationToken = default)
        {
            if (glacierSettings == null)
            {
                throw new ArgumentNullException(nameof(glacierSettings));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            if (string.IsNullOrWhiteSpace(glacierSettings.AwsAccessKey))
            {
                throw new ArgumentException("AWS Access Key cannot be null or empty");
            }

            if (string.IsNullOrWhiteSpace(glacierSettings.AwsSecretKey))
            {
                throw new ArgumentException("AWS Secret Key cannot be null or empty");
            }

            if (string.IsNullOrWhiteSpace(glacierSettings.VaultName))
            {
                throw new ArgumentException("AWS Vault Name cannot be null or empty");
            }

            if (string.IsNullOrWhiteSpace(glacierSettings.AwsRegionName))
            {
                throw new ArgumentException("AWS Region Name cannot be null or empty");
            }

            var region = RegionEndpoint.GetBySystemName(glacierSettings.AwsRegionName);

            AWSCredentials credentials;

            if (string.IsNullOrWhiteSpace(glacierSettings.AwsSessionToken))
            {
                credentials = new BasicAWSCredentials(glacierSettings.AwsAccessKey, glacierSettings.AwsSecretKey);
            }
            else
            {
                credentials = new SessionAWSCredentials(glacierSettings.AwsAccessKey, glacierSettings.AwsSecretKey, glacierSettings.AwsSessionToken);
            }

            _client = new AmazonGlacierClient(credentials, new AmazonGlacierConfig
            {
                RegionEndpoint = region,
                Timeout        = configuration.CloudStorageOperationTimeout.AsTimeSpan
            });

            _region            = glacierSettings.AwsRegionName;
            _vaultName         = glacierSettings.VaultName;
            _progress          = progress;
            _cancellationToken = cancellationToken;
        }
コード例 #19
0
 private static bool DeleteVault(string vaultName)
 {
     using (IAmazonGlacier client = new AmazonGlacierClient(RegionEndpoint.EUWest1))
     {
         DeleteVaultRequest request = new DeleteVaultRequest()
         {
             VaultName = vaultName
         };
         DeleteVaultResponse response = client.DeleteVault(request);
         return(response.HttpStatusCode == System.Net.HttpStatusCode.NoContent);
     }
 }
コード例 #20
0
        // Grabs the Upload ID to pass into the UploadParts method
        static string InitiateMultipartUpload(AmazonGlacierClient client, string vaultName)
        {
            InitiateMultipartUploadRequest initiateMPUrequest = new InitiateMultipartUploadRequest()
            {
                VaultName          = vaultName,
                PartSize           = partSize,
                ArchiveDescription = ArchiveDescription
            };

            InitiateMultipartUploadResponse initiateMPUresponse = client.InitiateMultipartUpload(initiateMPUrequest);

            return(initiateMPUresponse.UploadId);
        }
コード例 #21
0
        private static List <GlacierJobDescription> ListInventory(string vaultName)
        {
            using (IAmazonGlacier client = new AmazonGlacierClient(RegionEndpoint.EUWest1))
            {
                ListJobsRequest request = new ListJobsRequest()
                {
                    VaultName = vaultName
                };

                ListJobsResponse response = client.ListJobs(request);
                return(response.JobList);
            }
        }
コード例 #22
0
        private static bool IsInventoryReady(string jobId, string vaultName)
        {
            using (IAmazonGlacier client = new AmazonGlacierClient(RegionEndpoint.EUWest1))
            {
                DescribeJobRequest request = new DescribeJobRequest()
                {
                    JobId     = jobId,
                    VaultName = vaultName
                };

                DescribeJobResponse response = client.DescribeJob(request);
                return(response.Completed);
            }
        }
コード例 #23
0
        public void GlacierDeleteVaultAccessPolicy()
        {
            #region to-delete-the-vault-access-policy-1481840424677

            var client   = new AmazonGlacierClient();
            var response = client.DeleteVaultAccessPolicy(new DeleteVaultAccessPolicyRequest
            {
                AccountId = "-",
                VaultName = "examplevault"
            });


            #endregion
        }
コード例 #24
0
        public void GlacierDeleteVaultNotifications()
        {
            #region to-delete-the-notification-configuration-set-for-a-vault-1481840646090

            var client   = new AmazonGlacierClient();
            var response = client.DeleteVaultNotifications(new DeleteVaultNotificationsRequest
            {
                AccountId = "-",
                VaultName = "examplevault"
            });


            #endregion
        }
コード例 #25
0
        public void GlacierGetDataRetrievalPolicy()
        {
            #region to-get-the-current-data-retrieval-policy-for-the-account-1481851580439

            var client   = new AmazonGlacierClient();
            var response = client.GetDataRetrievalPolicy(new GetDataRetrievalPolicyRequest
            {
                AccountId = "-"
            });

            DataRetrievalPolicy policy = response.Policy;

            #endregion
        }
コード例 #26
0
        public void GlacierAbortVaultLock()
        {
            #region to-abort-a-vault-lock-1481839357947

            var client   = new AmazonGlacierClient();
            var response = client.AbortVaultLock(new AbortVaultLockRequest
            {
                AccountId = "-",
                VaultName = "examplevault"
            });


            #endregion
        }
コード例 #27
0
        protected IAmazonGlacier CreateClient(AWSCredentials credentials, RegionEndpoint region)
        {
            var config = new AmazonGlacierConfig {
                RegionEndpoint = region
            };

            Amazon.PowerShell.Utils.Common.PopulateConfig(this, config);
            this.CustomizeClientConfig(config);
            var client = new AmazonGlacierClient(credentials, config);

            client.BeforeRequestEvent += RequestEventHandler;
            client.AfterResponseEvent += ResponseEventHandler;
            return(client);
        }
コード例 #28
0
        public void GlacierListProvisionedCapacity()
        {
            #region to-list-the-provisioned-capacity-units-for-an-account-1481923656130

            var client   = new AmazonGlacierClient();
            var response = client.ListProvisionedCapacity(new ListProvisionedCapacityRequest
            {
                AccountId = "-"
            });

            List <ProvisionedCapacityDescription> provisionedCapacityList = response.ProvisionedCapacityList;

            #endregion
        }
コード例 #29
0
        public void GlacierPurchaseProvisionedCapacity()
        {
            #region to-purchases-a-provisioned-capacity-unit-for-an-aws-account-1481927446662

            var client   = new AmazonGlacierClient();
            var response = client.PurchaseProvisionedCapacity(new PurchaseProvisionedCapacityRequest
            {
                AccountId = "-"
            });

            string capacityId = response.CapacityId;

            #endregion
        }
コード例 #30
0
        public void GlacierDeleteVault()
        {
            #region 7f7f000b-4bdb-40d2-91e6-7c902f60f60f

            var client   = new AmazonGlacierClient();
            var response = client.DeleteVault(new DeleteVaultRequest
            {
                AccountId = "-",
                VaultName = "my-vault"
            });


            #endregion
        }