CDK генерирует пустые цели для CfnCrawler - PullRequest
1 голос
/ 04 июня 2019

Я использую CDK Python API для определения сканера Glue, однако созданный CDK шаблон содержит пустой блок 'Targets' в ресурсе Crawler.

Мне не удалось найти пример для подражания.Я пытался изменить определение объекта назначения, но CDK, похоже, игнорирует определение объекта.

from aws_cdk import cdk

BUCKET='poc-1-bucket43879c71-5uabw2rni0cp'

class PocStack(cdk.Stack):

    def __init__(self, app: cdk.App, id: str, **kwargs) -> None:
        super().__init__(app, id)

        from aws_cdk import (
            aws_iam as iam,
            aws_glue as glue,
            cdk
        )

        glue_role = iam.Role(
            self, 'glue_role',
            assumed_by=iam.ServicePrincipal('glue.amazonaws.com'),
            managed_policy_arns=['arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole']
        )

        glue_crawler = glue.CfnCrawler(
            self, 'glue_crawler',
            database_name='db',
            role=glue_role.role_arn,
            targets={"S3Targets": [{"Path": f'{BUCKET}/path/'}]},
        )

Я ожидаю, что сгенерированный шаблон будет содержать действительный блок 'target' с одним S3Target.Однако cdk synth выводит шаблон с пустыми целями в ресурсе AWS :: Glue :: Crawler:

  gluecrawler:
    Type: AWS::Glue::Crawler
    Properties:
      DatabaseName: db
      Role:
        Fn::GetAtt:
          - glueroleFCCAEB57
          - Arn
      Targets: {}

1 Ответ

1 голос
/ 04 июня 2019

Решено, благодаря умному коллеге!Изменение «S3Targets» на «s3Targets» и «Path» на «path» решило проблему.См. Ниже.

Привет, Боб,

Когда я использую машинопись, у меня работает следующее:

new glue.CfnCrawler(this, 'glue_crawler', {
      databaseName: 'db',
      role: glue_role.roleArn,
      targets: {
        s3Targets: [{ path: "path" }]
      }
    }

Когда я использую Python, следующее работаеттоже:

glue_crawler = glue.CfnCrawler(
            self, 'glue_crawler',
            database_name='db',
            role=glue_role.role_arn,
            targets={
                "s3Targets": [{ "path": f'{BUCKET}/path/'}]
            },
        )

В Typescript TargetsProperty - это интерфейс с s3Targets в качестве свойства.И в s3Targets path также является свойством.Я предполагаю, что во время преобразования JSII это заставляет нас использовать те же имена в Python вместо исходных имен ресурсов CFN.

...