The aws:quicksight/folder:Folder resource, part of the Pulumi AWS provider, provisions QuickSight folders that organize dashboards, analyses, and datasets into hierarchical structures. This guide focuses on three capabilities: root-level folder creation, permission grants for users and groups, and nested folder hierarchies.
Folders reference QuickSight users or groups when granting permissions, and can reference parent folders to build hierarchies. The examples are intentionally small. Combine them with your own QuickSight users, groups, and asset management.
Create a root-level folder with a name
Most QuickSight deployments start with a root-level folder that serves as a top-level container for organizing assets.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.quicksight.Folder("example", {
folderId: "example-id",
name: "example-name",
});
import pulumi
import pulumi_aws as aws
example = aws.quicksight.Folder("example",
folder_id="example-id",
name="example-name")
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := quicksight.NewFolder(ctx, "example", &quicksight.FolderArgs{
FolderId: pulumi.String("example-id"),
Name: pulumi.String("example-name"),
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Quicksight.Folder("example", new()
{
FolderId = "example-id",
Name = "example-name",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.Folder;
import com.pulumi.aws.quicksight.FolderArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new Folder("example", FolderArgs.builder()
.folderId("example-id")
.name("example-name")
.build());
}
}
resources:
example:
type: aws:quicksight:Folder
properties:
folderId: example-id
name: example-name
The folderId property sets a unique identifier for the folder within your AWS account. The name property provides the display name users see in the QuickSight console. Without a parentFolderArn, this creates a root-level folder.
Grant folder access to users and groups
Teams control who can view, modify, or manage folders through IAM-style permissions.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.quicksight.Folder("example", {
folderId: "example-id",
name: "example-name",
permissions: [{
actions: [
"quicksight:CreateFolder",
"quicksight:DescribeFolder",
"quicksight:UpdateFolder",
"quicksight:DeleteFolder",
"quicksight:CreateFolderMembership",
"quicksight:DeleteFolderMembership",
"quicksight:DescribeFolderPermissions",
"quicksight:UpdateFolderPermissions",
],
principal: exampleAwsQuicksightUser.arn,
}],
});
import pulumi
import pulumi_aws as aws
example = aws.quicksight.Folder("example",
folder_id="example-id",
name="example-name",
permissions=[{
"actions": [
"quicksight:CreateFolder",
"quicksight:DescribeFolder",
"quicksight:UpdateFolder",
"quicksight:DeleteFolder",
"quicksight:CreateFolderMembership",
"quicksight:DeleteFolderMembership",
"quicksight:DescribeFolderPermissions",
"quicksight:UpdateFolderPermissions",
],
"principal": example_aws_quicksight_user["arn"],
}])
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := quicksight.NewFolder(ctx, "example", &quicksight.FolderArgs{
FolderId: pulumi.String("example-id"),
Name: pulumi.String("example-name"),
Permissions: quicksight.FolderPermissionArray{
&quicksight.FolderPermissionArgs{
Actions: pulumi.StringArray{
pulumi.String("quicksight:CreateFolder"),
pulumi.String("quicksight:DescribeFolder"),
pulumi.String("quicksight:UpdateFolder"),
pulumi.String("quicksight:DeleteFolder"),
pulumi.String("quicksight:CreateFolderMembership"),
pulumi.String("quicksight:DeleteFolderMembership"),
pulumi.String("quicksight:DescribeFolderPermissions"),
pulumi.String("quicksight:UpdateFolderPermissions"),
},
Principal: pulumi.Any(exampleAwsQuicksightUser.Arn),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Quicksight.Folder("example", new()
{
FolderId = "example-id",
Name = "example-name",
Permissions = new[]
{
new Aws.Quicksight.Inputs.FolderPermissionArgs
{
Actions = new[]
{
"quicksight:CreateFolder",
"quicksight:DescribeFolder",
"quicksight:UpdateFolder",
"quicksight:DeleteFolder",
"quicksight:CreateFolderMembership",
"quicksight:DeleteFolderMembership",
"quicksight:DescribeFolderPermissions",
"quicksight:UpdateFolderPermissions",
},
Principal = exampleAwsQuicksightUser.Arn,
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.Folder;
import com.pulumi.aws.quicksight.FolderArgs;
import com.pulumi.aws.quicksight.inputs.FolderPermissionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new Folder("example", FolderArgs.builder()
.folderId("example-id")
.name("example-name")
.permissions(FolderPermissionArgs.builder()
.actions(
"quicksight:CreateFolder",
"quicksight:DescribeFolder",
"quicksight:UpdateFolder",
"quicksight:DeleteFolder",
"quicksight:CreateFolderMembership",
"quicksight:DeleteFolderMembership",
"quicksight:DescribeFolderPermissions",
"quicksight:UpdateFolderPermissions")
.principal(exampleAwsQuicksightUser.arn())
.build())
.build());
}
}
resources:
example:
type: aws:quicksight:Folder
properties:
folderId: example-id
name: example-name
permissions:
- actions:
- quicksight:CreateFolder
- quicksight:DescribeFolder
- quicksight:UpdateFolder
- quicksight:DeleteFolder
- quicksight:CreateFolderMembership
- quicksight:DeleteFolderMembership
- quicksight:DescribeFolderPermissions
- quicksight:UpdateFolderPermissions
principal: ${exampleAwsQuicksightUser.arn}
The permissions array grants specific QuickSight actions to principals (users or groups). Each permission entry lists the actions allowed and the principal’s ARN. Actions include folder management (CreateFolder, DeleteFolder), membership control (CreateFolderMembership), and permission administration (UpdateFolderPermissions).
Nest folders to build hierarchies
Organizations often need multi-level structures to mirror team boundaries or project organization.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const parent = new aws.quicksight.Folder("parent", {
folderId: "parent-id",
name: "parent-name",
});
const example = new aws.quicksight.Folder("example", {
folderId: "example-id",
name: "example-name",
parentFolderArn: parent.arn,
});
import pulumi
import pulumi_aws as aws
parent = aws.quicksight.Folder("parent",
folder_id="parent-id",
name="parent-name")
example = aws.quicksight.Folder("example",
folder_id="example-id",
name="example-name",
parent_folder_arn=parent.arn)
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
parent, err := quicksight.NewFolder(ctx, "parent", &quicksight.FolderArgs{
FolderId: pulumi.String("parent-id"),
Name: pulumi.String("parent-name"),
})
if err != nil {
return err
}
_, err = quicksight.NewFolder(ctx, "example", &quicksight.FolderArgs{
FolderId: pulumi.String("example-id"),
Name: pulumi.String("example-name"),
ParentFolderArn: parent.Arn,
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var parent = new Aws.Quicksight.Folder("parent", new()
{
FolderId = "parent-id",
Name = "parent-name",
});
var example = new Aws.Quicksight.Folder("example", new()
{
FolderId = "example-id",
Name = "example-name",
ParentFolderArn = parent.Arn,
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.Folder;
import com.pulumi.aws.quicksight.FolderArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var parent = new Folder("parent", FolderArgs.builder()
.folderId("parent-id")
.name("parent-name")
.build());
var example = new Folder("example", FolderArgs.builder()
.folderId("example-id")
.name("example-name")
.parentFolderArn(parent.arn())
.build());
}
}
resources:
parent:
type: aws:quicksight:Folder
properties:
folderId: parent-id
name: parent-name
example:
type: aws:quicksight:Folder
properties:
folderId: example-id
name: example-name
parentFolderArn: ${parent.arn}
The parentFolderArn property references another folder’s ARN, creating a parent-child relationship. This builds hierarchical structures where folders can contain both QuickSight assets and other folders. The folderPaths output shows the full ancestry chain.
Beyond these examples
These snippets focus on specific folder-level features: folder creation and naming, permission management, and hierarchical organization. They’re intentionally minimal rather than full QuickSight deployments.
The examples may reference pre-existing infrastructure such as QuickSight users or groups for permission grants. They focus on configuring folders rather than provisioning the complete QuickSight environment.
To keep things focused, common folder patterns are omitted, including:
- Folder type configuration (folderType defaults to SHARED)
- Tag-based organization and cost tracking
- Cross-account folder sharing
- Folder membership management (adding assets to folders)
These omissions are intentional: the goal is to illustrate how each folder feature is wired, not provide drop-in QuickSight modules. See the QuickSight Folder resource reference for all available configuration options.
Let's create AWS QuickSight Folders
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Folder Structure & Hierarchy
awsAccountId, folderId, and parentFolderArn properties cannot be changed after creation. Modifying these requires replacing the resource, so plan your folder structure carefully.parentFolderArn property to the ARN of an existing folder to create a nested structure. If parentFolderArn is not set, the folder is created at the root level.SHARED is currently supported as a valid folder type. This is the default value for the folderType property.Permissions & Access Control
permissions array with actions and principal properties. Each permission specifies which QuickSight actions a user or group can perform on the folder.quicksight:CreateFolder, quicksight:DescribeFolder, quicksight:UpdateFolder, quicksight:DeleteFolder, quicksight:CreateFolderMembership, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions, and quicksight:UpdateFolderPermissions.Import & Identification
aws-account-id,folder-id when importing. For example: pulumi import aws:quicksight/folder:Folder example 123456789012,example-id.Using a different cloud?
Explore analytics guides for other cloud providers: