AWS CDK资源创建顺序?

DD *_*Jin 5 aws-cloudformation aws-cdk

我正在使用 AWS CDK。当我部署时,根据 AWS 控制台中的 CloudFormation Events,resources(CfnTrigger)in在和createWorkflow之前初始化。造成哪种情况取决于这两者的资源。createDDBCrawlercreateS3Crawlercreate_failed(Entity not found)createWorkflow

所以我想知道:

  1. AWS CDK 资源生成序列(因为我在函数中没有看到asyncpromise,所以 TypeScript 正在按顺序处理代码。那么它是 CDK/CloudFormation 行为?)

  2. 如何避免这种情况或安排资源创建顺序,除了创建两个堆栈之外。

export class QuicksightGlue extends Construct {

    constructor(scope: Construct, name: string, props: QuicksightGlueProps) {
        super(scope, name);
        this.createGlueDb(props.glueDb);

        for (let zone of zones) {

            const ddbCrawler = this.createDDBCrawler(...);

            const etlJob = this.createEtlJob(...);

            // crawler for processed data
            this.createS3Crawler(...);  

            // create workflow that use crawler
            this.createWorkflow(...);      
        }
    }
Run Code Online (Sandbox Code Playgroud)
private createS3Crawler(...) {
        return new glue.CfnCrawler(this, 's3Crawler_' + zone, {
            name: 's3Crawler_' + zone,
            databaseName: glueDb,
            role: roleArn,
            targets: {
                s3Targets: [{ path: s3 }]
            }
        });
    }
private createWorkflow(...) {
        const extracDdbWorkflow = new glue.CfnWorkflow(this, `ExtractDdb_` + zone, {
            name: `udhcpExtractDdb_` + zone.toLowerCase(),
            description: "Workflow to extract and process data from DDB"
        });

        const scheduledTriggerDdbCrawler = new glue.CfnTrigger(this, 'DdbTrigger_' + zone, {
            workflowName: extracDdbWorkflow.name,
            type: "SCHEDULED",
            schedule: scheduleCronExpression, //"cron(0 * * * ? *)",
            description: "Trigger to start the workflow every hour to update ddb data",
            actions: [{
                crawlerName: ddbCrawler,
                }],
        });
...
Run Code Online (Sandbox Code Playgroud)

小智 5

addDependency您可以通过调用构造的属性来使构造变得依赖于另一个构造node,如下所示:

// Normally these two constructs would be created in parallel
const construct1 = ...;
const construct2 = ...;

// But with this line, construct2 will not be created until construct 1 is
construct2.node.addDependency(construct1);
Run Code Online (Sandbox Code Playgroud)

是一个实际的例子。


也许,您希望将 的返回值保存createS3Crawler到一个变量,然后将该变量作为参数传递给createWorkflow。然后,createWorkflow将调用.node.addDependency(createS3Crawler)它内部创建的每个依赖于 S3 爬网程序的构造。