private void GetS3ActionResources(PipelineActionS3Options actionS3Options, IDictionary <string, Artifact_> artifacts, out IBucket bucket, out Artifact_ artifact, out IRole role)
        {
            // Locate bucket
            bucket = LocateBucket(actionS3Options.BucketName,
                                  $"The bucket {actionS3Options.BucketName} of the pipeline action {actionS3Options.Name} was not found",
                                  $"The pipeline action {actionS3Options.Name} must have a bucket");

            // Create artifact
            if (string.IsNullOrWhiteSpace(actionS3Options.OutputArtifact))
            {
                throw new ArgumentException($"There is no output artifact in the pipeline action {actionS3Options.Name}");
            }
            else
            {
                if (artifacts.ContainsKey(actionS3Options.OutputArtifact))
                {
                    throw new ArgumentException($"The artifact {actionS3Options.OutputArtifact} of the pipeline action {actionS3Options.Name} already exists");
                }
                else
                {
                    artifact = new Artifact_();
                    artifacts.Add(actionS3Options.OutputArtifact, artifact);
                }
            }

            // Locate role
            role = LocateRole(actionS3Options.Role, $"The role {actionS3Options.Role} of the pipeline action {actionS3Options.Name} was not found");
        }
        private void CreateS3Action(IStage stage, IDictionary <string, Artifact_> artifacts, PipelineActionS3Options actionS3Options)
        {
            GetS3ActionResources(actionS3Options, artifacts, out var bucket, out var artifact, out var role);

            AwsCdkHandler.CreateS3ActionInStage(stage, actionS3Options.Name, bucket, actionS3Options.BucketKey, artifact, role);
        }