Google Cloud Network and Instance with ComponentResource
A Google Cloud Python Pulumi program using ComponentResource
This example lives in the pulumi/examples repository. Check out just this directory to use it:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set gcp-py-network-componentcd pulumi-examples/gcp-py-network-componentThis example uses pulumi.ComponentResource as described here
to create a Google Cloud Network and instance.
The use of pulumi.ComponentResource demonstrates how multiple low-level resources
can be composed into a higher-level, reusable abstraction.
Prerequisites#
Deploying and running the program#
-
Create a new stack:
Terminal window pulumi stack init -
Set the Google Cloud project and region
Terminal window pulumi config set gcp:project proj-123456pulumi config set gcp:region us-central1 -
Configure one or more subnetwork CIDRs for the program to use Note: This example is using structured configuration as per Structured Configuration
Terminal window pulumi config set --path 'subnet_cidr_blocks[0]' 172.1.0.0/16pulumi config set --path 'subnet_cidr_blocks[1]' 172.2.0.0/16 -
Run
pulumi upto preview and deploy the changes:Terminal window pulumi up -yPreviewing update (dev):Type Name Plan+ pulumi:pulumi:Stack gcp-py-network-component-dev create+ ├─ my:modules:Vpc demo create+ │ └─ gcp:compute:Network demo create+ │ ├─ gcp:compute:Subnetwork demo-0 create+ │ ├─ gcp:compute:Subnetwork demo-1 create+ │ ├─ gcp:compute:Router demo create+ │ └─ gcp:compute:RouterNat demo create+ └─ my:modules:Instance demo create+ ├─ gcp:compute:Address demo-nginx create+ ├─ gcp:compute:Firewall demo-nginx create+ └─ gcp:compute:Instance demo-nginx createResources:+ 11 to createUpdating (dev):Type Name Status+ pulumi:pulumi:Stack gcp-py-network-component-dev created+ ├─ my:modules:Vpc demo created+ │ └─ gcp:compute:Network demo created+ │ ├─ gcp:compute:Subnetwork demo-0 created+ │ ├─ gcp:compute:Subnetwork demo-1 created+ │ ├─ gcp:compute:Router demo created+ │ └─ gcp:compute:RouterNat demo created+ └─ my:modules:Instance demo created+ ├─ gcp:compute:Address demo-nginx created+ ├─ gcp:compute:Firewall demo-nginx created+ └─ gcp:compute:Instance demo-nginx createdOutputs:network : "demo-7a734d7"public_ip: "34.66.58.210"Resources:+ 11 createdDuration: 46sPermalink: https://app.pulumi.com/clstokes/gcp-py-network-component/dev/updates/10 -
Get the IP address of the newly-created instance from the stack’s outputs:
Terminal window pulumi stack output nginx_public_ip13.64.196.146 -
Check to see that your server is now running:
Terminal window curl http://$(pulumi stack output nginx_public_ip)Powered by Pulumi! -
Destroy the stack:
Terminal window pulumi destroy -yPreviewing destroy (dev):Type Name Plan- pulumi:pulumi:Stack gcp-py-network-component-dev delete- ├─ my:modules:Vpc demo delete- │ └─ gcp:compute:Network demo delete- │ ├─ gcp:compute:RouterNat demo delete- │ ├─ gcp:compute:Router demo delete- │ ├─ gcp:compute:Subnetwork demo-1 delete- │ └─ gcp:compute:Subnetwork demo-0 delete- └─ my:modules:Instance demo delete- ├─ gcp:compute:Firewall demo-nginx delete- ├─ gcp:compute:Instance demo-nginx delete- └─ gcp:compute:Address demo-nginx deleteOutputs:- network : "demo-7a734d7"- nginx_public_ip: "34.66.58.210"Resources:- 11 to deleteDestroying (dev):Type Name Status- pulumi:pulumi:Stack gcp-py-network-component-dev deleted- ├─ my:modules:Vpc demo deleted- │ └─ gcp:compute:Network demo deleted- │ ├─ gcp:compute:RouterNat demo deleted- │ ├─ gcp:compute:Router demo deleted- │ ├─ gcp:compute:Subnetwork demo-1 deleted- │ └─ gcp:compute:Subnetwork demo-0 deleted- └─ my:modules:Instance demo deleted- ├─ gcp:compute:Firewall demo-nginx deleted- ├─ gcp:compute:Instance demo-nginx deleted- └─ gcp:compute:Address demo-nginx deletedOutputs:- network : "demo-7a734d7"- nginx_public_ip: "34.66.58.210"Resources:- 11 deletedDuration: 4m40sPermalink: https://app.pulumi.com/clstokes/gcp-py-network-component/dev/updates/11The resources in the stack have been deleted, but the history and configuration associated with the stack are still maintained.If you want to remove the stack completely, run 'pulumi stack rm dev'.