我使用来定义Glue爬虫,但是,CDK生成的模板在crawler资源中包含空的‘Target’块。
我还没有找到一个可以效仿的例子。我尝试更改了对目标对象的定义,但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/'}]},
)
我希望生成的模板包含一个带有单个S3Target的有效“目标”块。但是,cdk synth
输出一个模板,其中包含AWS::Glue::爬虫资源中的空目标:
gluecrawler:
Type: AWS::Glue::Crawler
Properties:
DatabaseName: db
Role:
Fn::GetAtt:
- glueroleFCCAEB57
- Arn
Targets: {}
发布于 2019-06-04 19:21:53
决心,感谢一个聪明的同事!将"S3Targets“更改为"s3Targets",将"Path”更改为"path“解决了这个问题。见下文。
嗨鲍勃 当我使用打字本时,以下内容适用于我: 新glue.CfnCrawler(此,“glue_glue.CfnCrawler”,{ databaseName:'db',角色: glue_role.roleArn,目标:{ s3Targets:{ path:"path“}} 当我使用Python时,下面的内容看起来也很有效: glue_crawler = glue.CfnCrawler( self,‘胶水_爬虫’,数据库_name=‘db’,role=glue_role.role_arn,targets={ "s3Targets":{ "path":F‘{B桶}/path/’},) 在类型记录中,TargetsProperty是一个与s3Targets作为属性的接口。在s3Targets中,path也是一个属性。我猜在JSII转换期间,它迫使我们在Python中使用相同的名称,而不是最初的CFN资源名称。
发布于 2020-08-16 08:11:42
解决这个问题的一个更普遍的方法是分两个步骤在cdk
库中挖掘:
1.
from aws_cdk import aws_glue
print(aws_glue.__file__)
(.env/lib/python3.8/site-packages/aws_cdk/aws_glue/__init__.py)
@jsii.data_type(
jsii_type="@aws-cdk/aws-glue.CfnCrawler.TargetsProperty",
jsii_struct_bases=[],
name_mapping={
"catalog_targets": "catalogTargets",
"dynamo_db_targets": "dynamoDbTargets",
"jdbc_targets": "jdbcTargets",
"s3_targets": "s3Targets",
}
)
我发现lowerCamelCase
总是起作用,而snake_case
不起作用。
https://stackoverflow.com/questions/56434938
复制相似问题