6.2 KiB
title_tag, meta_desc, title, h1, weight, menu, aliases
title_tag | meta_desc | title | h1 | weight | menu | aliases | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Modify the Program | Google Cloud | This page provides an overview on how to update Google Cloud (GCP) project from a Pulumi program. | Modify program | Pulumi & Google Cloud: Modify program | 6 |
|
|
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.
{{< chooser os "macos,linux,windows" / >}}
{{% choosable os macos %}}
cat <<EOT > index.html
<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>
EOT
{{% /choosable %}}
{{% choosable os linux %}}
cat <<EOT > index.html
<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>
EOT
{{% /choosable %}}
{{% choosable os windows %}}
@"
<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>
"@ | Out-File -FilePath index.html
{{% /choosable %}}
Now that you have an index.html
file with some content, open {{< langfile >}} and modify it to add that file to your storage bucket.
For this, you'll use Pulumi's FileAsset
class to assign the content of the file to a new BucketObject
.
{{< chooser language "javascript,typescript,python,go,csharp,java,yaml" / >}}
{{% choosable language javascript %}}
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")
});
{{% /choosable %}}
{{% choosable language typescript %}}
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")
});
{{% /choosable %}}
{{% choosable language python %}}
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")
)
{{% /choosable %}}
{{% choosable language go %}}
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
}
{{% /choosable %}}
{{% choosable language csharp %}}
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")
});
{{% /choosable %}}
{{% choosable language java %}}
In {{< langfile >}}, import the following additional classes, then create the BucketObject
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()
);
// ...
});
}
}
{{% /choosable %}}
{{% choosable language yaml %}}
In {{< langfile >}}, create the BucketObject
right below the bucket itself.
resources:
# ...
index-html:
type: gcp:storage:BucketObject
properties:
bucket: ${my-bucket}
source:
fn::fileAsset: ./index.html
{{% /choosable %}}
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:
{{% choosable language typescript %}}
const bucketBinding = new gcp.storage.BucketIAMBinding("my-bucket-binding", {
bucket: bucket.name,
role: "roles/storage.objectViewer",
members: ["allUsers"]
});
{{% /choosable %}}
{{% choosable language javascript %}}
const bucketBinding = new gcp.storage.BucketIAMBinding("my-bucket-binding", {
bucket: bucket.name,
role: "roles/storage.objectViewer",
members: ["allUsers"]
});
{{% /choosable %}}
{{% choosable language python %}}
bucket_iam_binding = storage.BucketIAMBinding(
"my-bucket-binding",
bucket=bucket.name,
role="roles/storage.objectViewer",
members=["allUsers"],
)
{{% /choosable %}}
{{% choosable language go %}}
_, 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
}
{{% /choosable %}}
{{% choosable language csharp %}}
var bucketBinding = new BucketIAMBinding("my-bucket-binding", new BucketIAMBindingArgs
{
Bucket = bucket.Name,
Role = "roles/storage.objectViewer",
Members = new[]
{
"allUsers",
},
});
{{% /choosable %}}
{{% choosable language java %}}
var bucketBinding = new BucketIAMBinding("my-bucket-binding", BucketIAMBindingArgs.builder()
.bucket(bucket.name())
.role("roles/storage.objectViewer")
.members("allUsers")
.build());
{{% /choosable %}}
{{% choosable language yaml %}}
my-bucket-binding:
type: gcp:storage:BucketIAMBinding
properties:
bucket: ${my-bucket.name}
role: "roles/storage.objectViewer"
members:
- allUsers
{{% /choosable %}}
Next, you'll deploy your changes.
{{< get-started-stepper >}}