代码之家  ›  专栏  ›  技术社区  ›  villasv

在CloudFormation上指定Glue::Crawler和JdbcTargets

  •  5
  • villasv  · 技术社区  · 7 年前

    我正在尝试设置AWS Glue,以便使用CloudFormation读取RDS Postgres中的内容。为了做到这一点,我需要使用JdbcTarget选项创建一个爬虫程序。(或者我没有?)

      Records:
        Type: 'AWS::Glue::Crawler'
        Properties:
          DatabaseName: transact
          Targets:
            JdbcTargets:
              - Path: "jdbc:postgresql://host:5432/database"
          Role: !Ref ETLAgent
    

    但在CloudFormation上创建堆栈将失败,原因是:

    CREATE_FAILED | AWS::Glue::Crawler | Records | Connection name cannot be equal to null or empty. (Service: AWSGlue; Status Code: 400; Error Code: InvalidInputException;

    尽管 the docs 说:

    连接名称

    用于JDBC目标的连接的名称。

    必填项:否

    使用CloudFormation的正确AWS胶水设置是什么,允许我从RDS读取?

    1 回复  |  直到 4 年前
        1
  •  7
  •   botchniaque    3 年前

    你真的错过了 ConnectionName 属性,该属性应包含缺少的连接资源的名称。这个 Path 属性用于选择要爬网的架构/表( dbname/%/% 包括所有)。咨询 CloudFormation docs on Crawler JDBCTarget 有关详细信息。

    您的模板应该如下所示

      MyDbConnection:
        Type: "AWS::Glue::Connection"
        Properties:
          CatalogId: !Ref 'AWS::AccountId'
          ConnectionInput:
            Description: "JDBC Connection to my RDS DB"
            PhysicalConnectionRequirements:
              AvailabilityZone: "eu-central-1a"
              SecurityGroupIdList:
               - my-sec-group-id
              SubnetId: my-subnet-id
            ConnectionType: "JDBC"
            ConnectionProperties:
              "JDBC_CONNECTION_URL": "jdbc:postgresql://host:5432/database"
              "USERNAME": "my-db-username"
              "PASSWORD": "my-password"
      Records:
        Type: 'AWS::Glue::Crawler'
        Properties:
          DatabaseName: transact
          Targets:
            JdbcTargets:
              - ConnectionName: !Ref MyDbConnection
                Path: "database/%/%"
          Role: !Ref ETLAgent