private createIoTRuleToFirehose()

in infra/stack/data/data-pipeline-stack.ts [99:125]


    private createIoTRuleToFirehose(ruleNameSuffix: string, streamName: string) {
        const ruleName = `${this.projectPrefix}_${ruleNameSuffix}`.toLowerCase().replace('-', '_');
        const sql = `SELECT * FROM '#'`; // $aws/rules/rule_name/thing-name/data-type

        const role = new iam.Role(this, `${ruleNameSuffix}Role`, {
            roleName: `${this.projectPrefix}-${ruleNameSuffix}Role`,
            assumedBy: new iam.ServicePrincipal('iot.amazonaws.com'),
        });
        role.addToPolicy(
            new iam.PolicyStatement({
                resources: ['*'],
                actions: [
                    'firehose:*'
                ]
            })
        );

        new iot.CfnTopicRule(this, ruleNameSuffix, {
            ruleName: ruleName,
            topicRulePayload: {
                ruleDisabled: false,
                sql: sql,
                awsIotSqlVersion: '2016-03-23',
                actions: [{ firehose: { deliveryStreamName: streamName, roleArn: role.roleArn } }],
            }
        });
    }