Pulumi & Google Cloud: Modify program
Now that your storage bucket 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 an index.html file with some content, open index.jsindex.ts__main__.pymain.goProgram.csProgram.fsProgram.vbApp.javaPulumi.yaml
For this, you’ll use Pulumi’s FileAsset class to assign the content of the file to a new BucketObject.
In index.js, create the BucketObject right after creating the bucket itself:
const bucketObject = new gcp.storage.BucketObject("index.html", {
bucket: bucket.name,
source: new pulumi.asset.FileAsset("index.html")
});
In index.ts, create the BucketObject right after creating the bucket itself:
const bucketObject = new gcp.storage.BucketObject("index.html", {
bucket: bucket.name,
source: new pulumi.asset.FileAsset("index.html")
});
In __main__.py, create a new bucket object by adding the following right after creating the bucket itself:
bucket_object = storage.BucketObject(
"index.html", bucket=bucket.name, source=pulumi.FileAsset("index.html")
)
In main.go, create the BucketObject right after creating the bucket itself:
_, err = storage.NewBucketObject(ctx, "index.html", &storage.BucketObjectArgs{
Bucket: bucket.Name,
Source: pulumi.NewFileAsset("index.html"),
})
if err != nil {
return err
}
In Program.cs, create the BucketObject right after creating the bucket itself:
var bucketObject = new BucketObject("index.html", new BucketObjectArgs
{
Bucket = bucket.Name,
Source = new FileAsset("./index.html")
});
In index.jsindex.tsmain.pymain.goProgram.csProgram.fsProgram.vbApp.javaPulumi.yamlBucketObject right after creating the bucket itself:
// ...
import com.pulumi.asset.FileAsset;
import com.pulumi.gcp.storage.BucketIAMBinding;
import com.pulumi.gcp.storage.BucketIAMBindingArgs;
import com.pulumi.gcp.storage.BucketObject;
import com.pulumi.gcp.storage.BucketObjectArgs;
public class App {
public static void main(String[] args) {
Pulumi.run(ctx -> {
// ...
// Create a Bucket object
var bucketObject = new BucketObject("index.html", BucketObjectArgs.builder()
.bucket(bucket.name())
.source(new FileAsset("index.html"))
.build()
);
// ...
});
}
}
In index.jsindex.tsmain.pymain.goProgram.csProgram.fsProgram.vbApp.javaPulumi.yamlBucketObject right below the bucket itself.
resources:
# ...
index-html:
type: gcp:storage:BucketObject
properties:
bucket: ${my-bucket}
source:
fn::fileAsset: ./index.html
Notice how you provide the name of the bucket you created earlier as an input for the BucketObject. This tells Pulumi which bucket the object should live in.
Below the BucketObject, add an IAM binding allowing the contents of the bucket to be viewed anonymously over the Internet:
const bucketBinding = new gcp.storage.BucketIAMBinding("my-bucket-binding", {
bucket: bucket.name,
role: "roles/storage.objectViewer",
members: ["allUsers"]
});
const bucketBinding = new gcp.storage.BucketIAMBinding("my-bucket-binding", {
bucket: bucket.name,
role: "roles/storage.objectViewer",
members: ["allUsers"]
});
bucket_iam_binding = storage.BucketIAMBinding(
"my-bucket-binding",
bucket=bucket.name,
role="roles/storage.objectViewer",
members=["allUsers"],
)
_, err = storage.NewBucketIAMBinding(ctx, "my-bucket-binding", &storage.BucketIAMBindingArgs{
Bucket: bucket.Name,
Role: pulumi.String("roles/storage.objectViewer"),
Members: pulumi.StringArray{
pulumi.String("allUsers"),
},
})
if err != nil {
return err
}
var bucketBinding = new BucketIAMBinding("my-bucket-binding", new BucketIAMBindingArgs
{
Bucket = bucket.Name,
Role = "roles/storage.objectViewer",
Members = new[]
{
"allUsers",
},
});
var bucketBinding = new BucketIAMBinding("my-bucket-binding", BucketIAMBindingArgs.builder()
.bucket(bucket.name())
.role("roles/storage.objectViewer")
.members("allUsers")
.build());
my-bucket-binding:
type: gcp:storage:BucketIAMBinding
properties:
bucket: ${my-bucket.name}
role: "roles/storage.objectViewer"
members:
- allUsers
Next, you’ll deploy your 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.
