Is there any way to retrieve the subnet id’s of a ...
# general
b
Is there any way to retrieve the subnet id’s of a VPC to pass in to another function as a string? (before pulumi up is finished executing)
f
You can get subnet ids using: https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/aws/ec2/#getSubnetIds and pass the result into other resources
b
Thanks Dan
I guess I have a larger issue. I’m creating a VPC, then passing it to a function to create Elastic Beanstalk environments in that VPC. In order to use the code in that example, I need the VPC id which is an output parameter and I have the same issue as the output parameter with the subnet id’s. Sounds like VPCs and other resources might need to be setup separately???
f
can you share a code sample of what you're trying to do? (even if it's not working)
b
So on line 20, I need to get the vpc.id as a string, not an Output<string>…exact same issue as vpc.privateSubnetIds being an Ouput<string>[]
I’m still a little confused based on the documentation how to pass an ID of a VPC into another resource when all I get from the VPC class is an Output<string> that cannot be retrieved until the code execution is complete. How does one pass resource ID’s to other resources when a string is expected?
b
Thanks @cool-egg-852. I’ve seen this and I’m still struggling to understand the docs here. I see that you can modify a local copy of an Output<string>, but what if you have resources that do not take an actual resource, they just take the ID? In my particular case, I am creating a VPC, then using that VPC in an EB Environment. EB expects subnets in a string[], not Output<string>[]. I went down the path of using aws.ec2.getSubnetIds() per
I went down the path of using aws.ec2.getSubnetIds() per @future-barista-68134, but I got the same issue where I needed to pass a string instead of an Output<string>.
I apologize guys…I feel like I’m missing something obvious
c
I struggle with it too sometimes. If you can post the code you have, it would be a little easier to assist.
b
I posted it in this Thread above, but I will condense that to just one particular situation…one moment
On line 20, the API is expecting a string, but because I created the VPC in the block above, the VPC ID is an Output<string>
c
I’m not sure you want
vpc.id
anyways. I think
id
is the internal pulumi ID. I don’t use AWS for this, but in GCP we needed
vpc.selfLink
. You may need
vpc.name
or something instead.
And if you need to convert it to a string, you can do it via
Copy code
`${vpc.id}`
for example
b
ah
thank you!
ugh…here’s what I’m getting…
Calling [toString] on an [Output<T>] is not supported. To get the value of an Output<T> as an Output<string> consider either: 1: o.apply(v =>
prefix${v}suffix
) 2: pulumi.interpolate
prefix${v}suffix
See https://pulumi.io/help/outputs for more details. This function may throw in a future version of @pulumi/pulumi.,Calling [toString] on an [Output<T>] is not supported.
this is a different error message than I got before
I’m using import { Vpc } from “@pulumi/awsx/ec2”;
I suspect the handling of Output parameters is different in awsx vs aws
c
You can do
Copy code
pulumi.interpolate`${vpc.id}`
That may work.
Honestly, I end up doing trial and error a lot of times on this.
b
Got it. Thanks for your help. I’ll give it a shot
console.log(pulumi.interpolate`${vpc.id}`);
after doing that just to see
I get the same error:
actually, scratch that
it’s not an error…
OutputImpl { __pulumiOutput: true, isKnown: Promise { <pending> }, isSecret: Promise { <pending> }, resources: [Function], promise: [Function], toString: [Function], toJSON: [Function], apply: [Function], get: [Function] }
that is the response I’m getting