Ejemplo n.º 1
0
        /// <summary>
        /// Creates an S3 Multi-Region Access Point and waits for it to be ready
        /// </summary>
        /// <param name="s3ControlClient">S3Control client to create the MRAP with</param>
        /// <param name="mrapRequest">Prepared CreateMultiRegionAccessPoint request</param>
        /// <returns>Alias of the new Multi-Region Access Point</returns>
        public static string CreateMRAPWithWait(IAmazonS3Control s3ControlClient, CreateMultiRegionAccessPointRequest mrapRequest)
        {
            var asyncRequestArn = s3ControlClient.CreateMultiRegionAccessPoint(mrapRequest).RequestTokenARN;

            var mrapAlias = UtilityMethods.WaitUntilSuccess(() =>
            {
                var request = new GetMultiRegionAccessPointRequest
                {
                    AccountId = mrapRequest.AccountId,
                    Name      = mrapRequest.Details.Name
                };

                var response = s3ControlClient.GetMultiRegionAccessPoint(request);

                if (response.AccessPoint.Status == MultiRegionAccessPointStatus.READY)
                {
                    return(response.AccessPoint.Alias);
                }
                else
                {
                    throw new Exception("S3 Multi-Region Access Point not ready yet, will continue waiting.");
                }
            });

            return(mrapAlias);
        }
Ejemplo n.º 2
0
        public static void Setup(TestContext context)
        {
            _bucketName = S3TestUtils.CreateBucketWithWait(Client);
            _mrapName   = UtilityMethods.SDK_TEST_PREFIX + DateTime.Now.Ticks;

            // Look up the account ID for the credentials being used to run the tests
            _accountId = new AmazonSecurityTokenServiceClient().GetCallerIdentity(new GetCallerIdentityRequest()).Account;

            var request = new CreateMultiRegionAccessPointRequest
            {
                AccountId = _accountId,
                Details   = new CreateMultiRegionAccessPointInput
                {
                    Name    = _mrapName,
                    Regions = new List <Region>
                    {
                        new Region
                        {
                            Bucket = _bucketName
                        }
                    }
                }
            };

            // All MRAP control plane requests must go to us-west-2 per
            // https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManagingMultiRegionAccessPoints.html
            var mrapAlias = S3TestUtils.CreateMRAPWithWait(new AmazonS3ControlClient(RegionEndpoint.USWest2), request);

            _mrapArn = $"arn:aws:s3::{_accountId}:accesspoint/{mrapAlias}";
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets a long-lived S3 Multi-Region Access Point for running integration tests against if
        /// if exists in the current account. If not, creates it and waits for it to be ready.
        /// </summary>
        /// <param name="s3ControlClient">S3Control client to create the MRAP with</param>
        /// <param name="s3Client">S3 client to create the backing bucket with</param>
        /// <returns>ARN of the new Multi-Region Access Point</returns>
        public static string GetOrCreateTestMRAP(IAmazonS3Control s3ControlClient, IAmazonS3 s3Client)
        {
            var accountId = new AmazonSecurityTokenServiceClient().GetCallerIdentity(new GetCallerIdentityRequest()).Account;

            // If the MRAP already exists, return it
            var mrapArn = CheckIfMRAPExists(s3ControlClient, accountId, TEST_MRAP_NAME);

            if (!string.IsNullOrEmpty(mrapArn))
            {
                return(mrapArn);
            }

            // Otherwise the MRAP doesn't exist, so we must create it, starting with the backing bucket.
            var putBucketRequest = new PutBucketRequest {
                BucketName = $"{accountId}-{TEST_MRAP_NAME}"
            };
            var backingBucketName = CreateBucketWithWait(s3Client, putBucketRequest);

            var createMrapRequest = new CreateMultiRegionAccessPointRequest
            {
                AccountId = accountId,
                Details   = new CreateMultiRegionAccessPointInput
                {
                    Name    = TEST_MRAP_NAME,
                    Regions = new List <Region>
                    {
                        new Region
                        {
                            Bucket = backingBucketName
                        }
                    }
                }
            };

            // Initiate the MRAP creation
            var asyncRequestArn = s3ControlClient.CreateMultiRegionAccessPoint(createMrapRequest).RequestTokenARN;

            // Wait until its status is READY
            UtilityMethods.WaitUntilSuccess(() =>
            {
                var request = new GetMultiRegionAccessPointRequest
                {
                    AccountId = accountId,
                    Name      = TEST_MRAP_NAME
                };

                var response = s3ControlClient.GetMultiRegionAccessPoint(request);

                if (response.AccessPoint.Status == MultiRegionAccessPointStatus.READY)
                {
                    // Wait for SSL provisioning to finish
                    Thread.Sleep(TimeSpan.FromMinutes(1));

                    return($"arn:aws:s3::{accountId}:accesspoint/{response.AccessPoint.Alias}");
                }
                else
                {
                    throw new Exception("S3 Multi-Region Access Point not ready yet, will continue waiting.");
                }
            });

            throw new Exception($"{nameof(GetOrCreateTestMRAP)} timed out while creating a new Multi-Region Access Point");
        }