Pulumi & Azure: Modify program
Now that your storage account is provisioned, let’s add an object to it. First, from within your project directory, create a new index.html
file with some content in it.
cat <<EOT > index.html <html> <body> <h1>Hello, Pulumi!</h1> </body> </html> EOT
cat <<EOT > index.html <html> <body> <h1>Hello, Pulumi!</h1> </body> </html> EOT
@" <html> <body> <h1>Hello, Pulumi!</h1> </body> </html> "@ | Out-File -FilePath index.html
Now that you have your new index.html
with some content, you can enable static website support, upload index.html
to a storage container, and retrieve a public URL through the use of resource properties. These properties can be used to define dependencies between related resources or to retrieve property values for further processing.
To start, open index.ts
and add the following right after the storage account creation:
// Enable static website support const staticWebsite = new storage.StorageAccountStaticWebsite("staticWebsite", { accountName: storageAccount.name, resourceGroupName: resourceGroup.name, indexDocument: "index.html", });
To start, open __main__.py
and add the following right after the storage account creation:
# Enable static website support static_website = storage.StorageAccountStaticWebsite( "staticWebsite", account_name=account.name, resource_group_name=resource_group.name, index_document="index.html", )
To start, open main.go
and add the following right after the storage account creation:
// Enable static website support staticWebsite, err := storage.NewStorageAccountStaticWebsite(ctx, "staticWebsite", &storage.StorageAccountStaticWebsiteArgs{ AccountName: account.Name, ResourceGroupName: resourceGroup.Name, IndexDocument: pulumi.String("index.html"), }) if err != nil { return err }
To start, open Program.cs
and add the following right after the storage account creation:
// Enable static website support var staticWebsite = new StorageAccountStaticWebsite("staticWebsite", new StorageAccountStaticWebsiteArgs { AccountName = storageAccount.Name, ResourceGroupName = resourceGroup.Name, IndexDocument = "index.html", });
To start, open App.java
and add the following imports:
import com.pulumi.azurenative.storage.StorageAccountStaticWebsite; import com.pulumi.azurenative.storage.StorageAccountStaticWebsiteArgs; import com.pulumi.azurenative.storage.Blob; import com.pulumi.azurenative.storage.BlobArgs; import com.pulumi.azurenative.storage.outputs.EndpointsResponse; import com.pulumi.asset.FileAsset;
Next, add the following right after the storage account creation:
var staticWebsite = new StorageAccountStaticWebsite("staticWebsite", StorageAccountStaticWebsiteArgs.builder() .accountName(storageAccount.name()) .resourceGroupName(resourceGroup.name()) .indexDocument("index.html") .build());
To start, open Pulumi.yaml
and add the following right after the storage account creation:
resources: # ... staticWebsite: type: azure-native:storage:StorageAccountStaticWebsite properties: accountName: ${sa.name} resourceGroupName: ${resourceGroup.name} indexDocument: index.html
The static website resource leverages the storage account and resource group names defined previously in your program.
Now use all of these cloud resources and a local FileAsset
resource to upload index.html
into your storage container by adding the following at the end of the file (after enabling the static website support):
// Upload the file const indexHtml = new storage.Blob("index.html", { resourceGroupName: resourceGroup.name, accountName: storageAccount.name, containerName: staticWebsite.containerName, source: new pulumi.asset.FileAsset("index.html"), contentType: "text/html", });
# Upload the file index_html = storage.Blob( "index.html", resource_group_name=resource_group.name, account_name=account.name, container_name=static_website.container_name, source=pulumi.FileAsset("index.html"), content_type="text/html", )
// Upload the file _, err = storage.NewBlob(ctx, "index.html", &storage.BlobArgs{ ResourceGroupName: resourceGroup.Name, AccountName: account.Name, ContainerName: staticWebsite.ContainerName, Source: pulumi.NewFileAsset("index.html"), ContentType: pulumi.String("text/html"), }) if err != nil { return err }
// Upload the file var indexHtml = new Blob("index.html", new BlobArgs { ResourceGroupName = resourceGroup.Name, AccountName = storageAccount.Name, ContainerName = staticWebsite.ContainerName, Source = new FileAsset("./index.html"), ContentType = "text/html", });
// Upload the file var index_html = new Blob("index.html", BlobArgs.builder() .resourceGroupName(resourceGroup.name()) .accountName(storageAccount.name()) .containerName(staticWebsite.containerName()) .source(new FileAsset("index.html")) .contentType("text/html") .build());
resources: # ... # Upload the file index-html: type: azure-native:storage:Blob properties: resourceGroupName: ${resourceGroup.name} accountName: ${sa.name} containerName: ${staticWebsite.containerName} source: fn::fileAsset: ./index.html contentType: text/html blobName: index.html type: Block
Finally, at the end of index.ts
, export the resulting storage container’s endpoint URL to stdout for easy access:
// Web endpoint to the website export const staticEndpoint = storageAccount.primaryEndpoints.web;
Finally, at the end of __main__.py
, export the resulting storage container’s endpoint URL to stdout for easy access:
# Web endpoint to the website pulumi.export("staticEndpoint", account.primary_endpoints.web)
Finally, at the end of main.go
, export the resulting storage container’s endpoint URL to stdout for easy access:
// Web endpoint to the website ctx.Export("staticEndpoint", account.PrimaryEndpoints.Web())
Finally, at the end of Program.cs
, export the resulting storage container’s endpoint URL to stdout for easy access:
// Web endpoint to the website return new Dictionary<string, object?> { ["primaryStorageKey"] = primaryStorageKey, ["staticEndpoint"] = storageAccount.PrimaryEndpoints.Apply(primaryEndpoints => primaryEndpoints.Web) };
Finally, at the end of App.java
, export the resulting storage container’s endpoint URL to stdout for easy access:
ctx.export("staticEndpoint", storageAccount.primaryEndpoints() .applyValue(EndpointsResponse::web));
Finally, at the end of Pulumi.yaml
in the outputs
, export the resulting storage container’s endpoint URL to stdout for easy access:
outputs: # ... staticEndpoint: ${sa.primaryEndpoints.web}
Now that you have declared how you want your resources to be provisioned, it is time to deploy these remaining changes.
Thank you for your feedback!
If you have a question about how to use Pulumi, reach out in Community Slack.
Open an issue on GitHub to report a problem or suggest an improvement.