Создание ресурсов в CDK в for-in l oop не работает, но создание напрямую работает? - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в CDK и столкнулся с проблемой при создании коллекции ресурсов внутри стека CDK.

Я заметил, что внутри for l oop createRule () даже не похоже, запускается, потому что я ранее сделал ошибку в CDK внутри createRule (использовал токен в идентификаторе), который даже не был обнаружен, пока я не вызвал createRule () из l oop.

Должен ли этот l oop работать? Могу ли я получить какой-нибудь совет о том, как устранить неполадки, почему он не работает или не создает ресурсы, даже если на карте есть содержимое?

Вот упрощенная версия того, что происходит:

export class Stack extends Cdk.Stack {

   construct(scope: ... , id: string, props?: Cdk.StackProps) { 
   
       const somePrefix: string = new Cdk.CfnParameter(this, 'SomePrefix', {...}).valueAsString;
       
       ... // some other resources ... / 
       
       let someMap = new Map<string, string[]>();
       someMap.set("ABC", ["AB", "CD", "EF", "GH", "IJ"]);
       someMap.set("XYZ", ["BLAH"]);
       
       // this runs and creates the resource as expected
       this.createRule(this, somePrefix, "ARGH", "MI");

       for (let x in someMap.keys()) {
           for (let y in someMap.get(x)) {
               // this seems like it doesn't create anything
               this.createRule(this, somePrefix, x, y);
           }
       }
    }

    createRule(scope: Cdk.Construct, somePrefix: string, x: string, y: string): Rule {

        const someLambda: string = Cdk.Fn.importValue(
            `${somePrefix}someLambda`
        );
        const someLambdaHandler = Lambda.Function.fromFunctionArn(scope, "SomeLambdaHandler", someLambda);

        const someEvent = {
            queryStringParameters: {
                ... 
            }
        };

        const someTarget = new Targets.LambdaFunction(someLambdaHandler, {
            event: RuleTargetInput.fromObject(someEvent)
        });

        return new Rule(scope, `lambdarule-${x}-${y}`, {
            enabled: true,
            schedule: Schedule.cron({minute: "30"}),
            targets: [realmCountryFunctionTarget],
            ruleName: `SomeRule-${somePrefix}${x}-${y}`
        })
    }
...