public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonCostAndUsageReportConfig config = new AmazonCostAndUsageReportConfig(); config.RegionEndpoint = region; ConfigureClient(config); AmazonCostAndUsageReportClient client = new AmazonCostAndUsageReportClient(creds, config); DescribeReportDefinitionsResponse resp = new DescribeReportDefinitionsResponse(); do { DescribeReportDefinitionsRequest req = new DescribeReportDefinitionsRequest { NextToken = resp.NextToken , MaxResults = maxItems }; resp = client.DescribeReportDefinitions(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.ReportDefinitions) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.NextToken)); }
public void CostAndUsageReportPutReportDefinition() { #region to-create-a-report-definitions var client = new AmazonCostAndUsageReportClient(); var response = client.PutReportDefinition(new PutReportDefinitionRequest { ReportDefinition = new ReportDefinition { AdditionalArtifacts = new List <string> { "REDSHIFT", "QUICKSIGHT" }, AdditionalSchemaElements = new List <string> { "RESOURCES" }, Compression = "ZIP", Format = "textORcsv", ReportName = "ExampleReport", S3Bucket = "example-s3-bucket", S3Prefix = "exampleprefix", S3Region = "us-east-1", TimeUnit = "DAILY" } }); #endregion }
public void CostAndUsageReportDeleteReportDefinition() { #region to-delete-a-report var client = new AmazonCostAndUsageReportClient(); var response = client.DeleteReportDefinition(new DeleteReportDefinitionRequest { ReportName = "ExampleReport" }); #endregion }
protected IAmazonCostAndUsageReport CreateClient(AWSCredentials credentials, RegionEndpoint region) { var config = new AmazonCostAndUsageReportConfig { RegionEndpoint = region }; Amazon.PowerShell.Utils.Common.PopulateConfig(this, config); this.CustomizeClientConfig(config); var client = new AmazonCostAndUsageReportClient(credentials, config); client.BeforeRequestEvent += RequestEventHandler; client.AfterResponseEvent += ResponseEventHandler; return(client); }
public void CostAndUsageReportDescribeReportDefinitions() { #region to-retrieve-report-definitions var client = new AmazonCostAndUsageReportClient(); var response = client.DescribeReportDefinitions(new DescribeReportDefinitionsRequest { MaxResults = 5 }); List <ReportDefinition> reportDefinitions = response.ReportDefinitions; #endregion }
/// <summary> /// Default constructor that Lambda will invoke. /// </summary> public Entrypoint() { Func <CustomResourceRequest, ILambdaContext, Task <CustomResourceResponse> > CreateAsync = async(request, context) => { string ReportName = String.Empty; try { //arn:aws:lambda:us-east-1:123456789012:function:FunctionName string[] Parts = context.InvokedFunctionArn.Split(":"); string Region = Parts[3]; string AccountId = Parts[4]; AmazonCostAndUsageReportConfig Config = new AmazonCostAndUsageReportConfig(); IAmazonCostAndUsageReport Client = new AmazonCostAndUsageReportClient(Config); PutReportDefinitionRequest Request = JsonConvert.DeserializeObject <PutReportDefinitionRequest>(JsonConvert.SerializeObject(request.ResourceProperties)); if (String.IsNullOrEmpty(Request.ReportDefinition.ReportName)) { Request.ReportDefinition.ReportName = request.LogicalResourceId; } ReportName = Request.ReportDefinition.ReportName; if (Request.ReportDefinition.AdditionalSchemaElements == null) { Request.ReportDefinition.AdditionalSchemaElements = new List <string>(); } // This is required to prevent this error: Value null at 'reportDefinition.additionalSchemaElements' failed to satisfy constraint: Member must not be null if (!Request.ReportDefinition.AdditionalSchemaElements.Contains("RESOURCES")) { Request.ReportDefinition.AdditionalSchemaElements.Add("RESOURCES"); } // Setup defaults for the definition if (String.IsNullOrEmpty(Request.ReportDefinition.S3Region)) { Request.ReportDefinition.S3Region = Region; } if (Request.ReportDefinition.TimeUnit == null || String.IsNullOrEmpty(Request.ReportDefinition.TimeUnit.Value)) { Request.ReportDefinition.TimeUnit = DefaultTimeUnit; } if (Request.ReportDefinition.AdditionalArtifacts != null && Request.ReportDefinition.AdditionalArtifacts.Any(x => x.Equals("ATHENA", StringComparison.OrdinalIgnoreCase)) ) { if (Request.ReportDefinition.AdditionalArtifacts.Count > 1) { throw new InvalidOperationException("The additional artifact ATHENA cannot be combined with other values."); } if (Request.ReportDefinition.Format != ReportFormat.Parquet || Request.ReportDefinition.Compression != CompressionFormat.Parquet) { throw new InvalidOperationException("You must specify Parquet as the format and compression type when ATHENA is specified as the additional artifact."); } } else if (Request.ReportDefinition.AdditionalArtifacts.Any(x => x.Equals("REDSHIFT", StringComparison.OrdinalIgnoreCase) || x.Equals("QUICKSIGHT", StringComparison.OrdinalIgnoreCase))) { if (Request.ReportDefinition.Format != ReportFormat.TextORcsv || Request.ReportDefinition.Compression != CompressionFormat.GZIP) { throw new InvalidOperationException("You must specify TextORCsv as the format and GZIP as the compression type when REDSHIFT or QUICKSIGHT are specified as the additional artifacts."); } } else { if (Request.ReportDefinition.Compression == null || String.IsNullOrEmpty(Request.ReportDefinition.Compression.Value)) { Request.ReportDefinition.Compression = DefaultCompression; } if (Request.ReportDefinition.Format == null || String.IsNullOrEmpty(Request.ReportDefinition.Format.Value)) { Request.ReportDefinition.Format = DefaultFormat; } } PutReportDefinitionResponse Response = await Client.PutReportDefinitionAsync(Request); if ((int)Response.HttpStatusCode < 200 || (int)Response.HttpStatusCode > 299) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)Response.HttpStatusCode}.", request )); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", Request.ReportDefinition.ReportName, request.StackId, request.RequestId, request.LogicalResourceId, false, new Dictionary <string, object>() { { "Name", Request.ReportDefinition.ReportName }, { "Arn", $"arn:aws:cur:{Region}:{AccountId}:definition/{ReportName}" }, { "Id", Request.ReportDefinition.ReportName } } )); } } catch (AmazonCostAndUsageReportException e) { context.LogError(e); return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, ReportName, request.StackId, request.RequestId, request.LogicalResourceId )); } catch (Exception e) { context.LogError(e); return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, ReportName, request.StackId, request.RequestId, request.LogicalResourceId )); } }; Func <CustomResourceRequest, ILambdaContext, Task <CustomResourceResponse> > DeleteAsync = async(request, context) => { try { //arn:aws:lambda:us-east-1:123456789012:function:FunctionName string[] Parts = context.InvokedFunctionArn.Split(":"); string Region = Parts[3]; string AccountId = Parts[4]; AmazonCostAndUsageReportConfig Config = new AmazonCostAndUsageReportConfig(); IAmazonCostAndUsageReport Client = new AmazonCostAndUsageReportClient(Config); DeleteReportDefinitionRequest Request = new DeleteReportDefinitionRequest() { ReportName = request.PhysicalResourceId }; DeleteReportDefinitionResponse Response = await Client.DeleteReportDefinitionAsync(Request); if ((int)Response.HttpStatusCode < 200 || (int)Response.HttpStatusCode > 299) { return(new CustomResourceResponse(CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)Response.HttpStatusCode}.", request)); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request.PhysicalResourceId, request.StackId, request.RequestId, request.LogicalResourceId, false, new Dictionary <string, object>() { { "Name", request.PhysicalResourceId as string }, { "Arn", $"arn:aws:cur:{Region}:{AccountId}:definition/{request.PhysicalResourceId}" }, { "Id", request.PhysicalResourceId as string } } )); } } catch (AmazonCostAndUsageReportException e) { context.LogError(e); return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request.PhysicalResourceId, request.StackId, request.RequestId, request.LogicalResourceId )); } catch (Exception e) { context.LogError(e); return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request.PhysicalResourceId, request.StackId, request.RequestId, request.LogicalResourceId )); } }; Func <CustomResourceRequest, ILambdaContext, Task <CustomResourceResponse> > UpdateAsync = async(request, context) => { CustomResourceResponse Response = await DeleteAsync(request, context); if (Response.Status == CustomResourceResponse.RequestStatus.SUCCESS) { return(await CreateAsync(request, context)); } else { return(Response); } }; this._Handler = new CustomResourceFactory(CreateAsync, UpdateAsync, DeleteAsync); this.ProcessEnvironmentVariables(); }