一般来说,Pulumi 会自动处理资源创建的顺序。在 TypeScript 中,这甚至是由语言的类型系统通过pulumi.Input<T>
and pulumi.Output<T>
类型。但实际上没有必要了解这些类型的详细信息。
Pulumi 引擎将解析资源的所有“参数”或“输入”。因此,如果您使用一个资源作为配置另一个资源的参数,则将首先创建依赖资源。即它按照您希望的方式工作。
但是,在某些情况下,您需要将一种资源显式标记为依赖于另一种资源。当 Pulumi 程序外部存在某种耦合时,就会发生这种情况。
要指定显式依赖关系,您可以提供一个实例pulumi.ResourceOptions
到资源,并设置它的dependsOn
财产。 Pulumi引擎将解析所有资源dependsOn
处理资源之前的数组。
下面是一个简单的示例,展示了 Pulumi 确定排序的两种方式。 AWS S3 存储桶是一种包含文件(称为对象)的资源。必须先创建存储桶,然后才能在其中创建任何对象。
// Create a bucket named "example-bucket", available at s3://example-bucket.
let bucket = new aws.s3.Bucket("bucket",
{
bucket: "example-bucket",
});
let file1 = new aws.s3.BucketObject("file1", {
// The bucket field of BucketObjectArgs is an instance of
// aws.s3.Bucket. Pulumi will know to create the "bucket"
// resource before this BucketObject resource.
bucket: bucket,
});
let file2 = new aws.s3.BucketObject("file2",
{
// The bucket field of BucketObjectArgs is a string. So
// Pulumi does not know to block creating the file2 resource
// until the S3 bucket exists.
bucket: "example-bucket",
} as aws.s3.BucketArgs,
{
// By putting "bucket" in the "dependsOn" array here,
// the Pulumi engine will create the bucket resource before
// this file2 resource.
dependsOn: [ bucket ],
} as pulumi.ResourceOptions);