sebagomez / azurestorageexplorer

☁💾 Manage your Azure Storage blobs, tables, queues and file shares from this simple and intuitive web application.
https://azurestorage.azurewebsites.net/
MIT License
131 stars 67 forks source link
angular azure azure-storage azure-storage-explorer c-sharp docker-image dotnet hacktoberfest

.NET build Docker build Helm release

Docker Pulls

justforfunnoreally.dev badge

Try it live at https://azurestorage.azurewebsites.net

Or deploy it wherever you want thanks to docker images (created with GitHub Actions)

drawing

Azure Storage Explorer

Original blog post from 2009! https://sgomez.blogspot.com/2009/11/mi-first-useful-azure-application.html

Azure Storage Web Explorer makes it easier for developers to browse and manage Blobs, Queues and Tables from Azure Storage. You'll no longer have to install a local client to do that. It was originally developed in C# with asp.net and WebForms 2.0, but now it has been migrated to .NET Core 2.1, 2.2, 3.1, 5.0, 6, 7 8 and Angular.

Edit: Sick and tired of all del npm module and dependency hell I moved this project to a Blazor Server app.

Login

To login just enter your account name and key or Shared Access Signature, or, a full Connection String.

The Connection String can also allow you to connect to a local Azurite or potentionally (I have not been able to test it) to Azure Government.

Login

Environment Varibales

You can also set up these fields in environment variables and Azure Storage Explorer will go straight to the home page if it could successfully authenticate.

These variables are AZURE_STORAGE_CONNECTIONSTRING, AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_KEY, and AZURE_STORAGE_ENDPOINT. The connection string takes precedence over the others, meaning if you set it, no more variables will be read. On the other hand, if the connection string variable is not set, all the rest variables will be read and they all have to be present.

Exploring

Blobs: Create public or private Containers and Blobs (only BlockBlobs for now). Download or delete your blobs.

Queues: Create Queues and messages.

File Shares: Navigate across File Shares and directories.

Tables: Create table and Entities. To create an Entity you'll have to add one property per line in the form of <PropertyName>='<PropertyValue>'

If you don't set PertitionKey or RowKey default values will be used ("1" for PartitionKey and a current timestamp for RowKey).
For example to create a new movie:

PartitionKey=Action
RowKey=1
Title=Die Hard

You can also set the desired data type for a specific property setting the desired EEdm datatype as follows:

Year=1978
Year@odata.type=Edm.Int32

This will create the Year as a 32 bit integer in the table.

Allowed datatypes are the following:

Edm.Int64
Edm.Int32
Edm.Boolean
Edm.DateTime
Edm.Double
Edm.Guid

Anything else would be treated as a string.

To query the entities from a table use the following syntax: <PropertyName> [operator] <ProepertyValue> Where the valid operators are: eq (equals), gt (greater than), ge (greater or equal), lt (less than), le (less or equal) and ne (not equal).
Take a look at the supported comparaison operators
To query action movies use the following:

PartitionKey eq 'Action'

Please note there's a space character before and after the eq operator.

If you don't write a query the system will retrieve every Entity on the Table

Build

To build this repo make sure you install .NET 8.0 SDK.

At the root of the project just execute the ./build.sh script

./build.sh

Run locally

Just execute the ./publish.sh script on the root folder on the repo. Kestrell will kick in and you'll see in the terminal what port number was asigned, navigate to that port, in my case http://localhost:5000 and that's it!

CMD

Docker

There's a docker image at hub.docker.com that you can use to run this app on the environment of your choice. Keep reading for Kubernetes.

To spin up a container with the latest version just run the following command

docker run --rm -it -p 8000:8080 sebagomez/azurestorageexplorer

Then open your browser and navigate to http://localhost:8000, et voila!

Docker Compose

There's now a Docker Compose manifest in this repo that allows you to spin Azurite and Azure Storage web Explorer. In the manifest you can see that the AZURE_STORAGE_CONNECTIONSTRING environment variable is already set up to connect to Azurite; so after spinning up the containers you can navigate to http://localhost:8080 and you should be already logged in to Azurite.

docker-compose -f ./docker-compose/azurestorageexplorer.yaml up 

Kubernetes

A [deployment]() and a [service]() are available in the k8s folder. If you have kubectl locally configured with a cluster just apply them and you'll have an instance of Azure Storage Explorer running in your cluster.

 kubectl apply -f ./k8s

Port-forward to a local host to easyly test your set up

kubectl port-forward svc/azurestorageexplorer 8080:8080

and access http://localhost:8080

Helm

As of version 2.7.1 there's a new Helm chart with this project ready to be deployed in your favorite K8s cluster.
If you want this app to run in your cluster, make sure you have helm installed on your system.

Add the repo

helm repo add sebagomez https://sebagomez.github.io/azurestorageexplorer

Install the chart

helm install azurestorageexplorer sebagomez/azurestorageexplorer

The helm chart provides a deployment and a service, you can enable port-forwarding to that service with the following command:

kubectl port-forward service/azurestorageexplorer 8080:8080

or, you can follow helm instructions the get the application URL:

export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=azurestorageexplorer,app.kubernetes.io/instance=azurestorageexplorer" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"

kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

Thanks to this repo for the info and detailed steps on how to create your own Helm repo with GitHub pages.