aws-cdk - 如何使用从数字或布尔值的 CloudFormation 参数读取的属性创建 Cfn 资源?
问题描述
我想创建 Firehose 传输流并enabled
从 CloudFormation 参数中读取缓冲提示和标志。
我发现了当有人需要一个字符串的情况下如何做到这一点,例如队列名称,
new sqs.Queue(this, 'MyQueue', {
queueName: Fn.conditionIf('Condition', 'Hello', 'World').toString()
});
我不知道如何为数字或布尔值做这件事。下面代码中的 XXXXXXXXXXXXXXX 和 YYYYYYYYYYYYYYYY 应该使用什么?
const cfnParam = new CfnParameter(this, "EnableFirehoseDataFormatConversion", {
type: "String"
});
const cfnCondition = new CfnCondition(this, "FirehoseDataFormatConversionEnabled", {
expression: Fn.conditionEquals(cfnParam.valueAsString, "true"),
});
new kinesisf.CfnDeliveryStream(this, "MyFirehose", {
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-extendeds3destinationconfiguration.html
extendedS3DestinationConfiguration: {
bucketArn: dataBucket.bucketArn,
bufferingHints: {
intervalInSeconds: XXXXXXXXXXXXXX,
sizeInMBs: 128,
},
compressionFormat: "UNCOMPRESSED",
dataFormatConversionConfiguration: {
enabled: YYYYYYYYYYYYYYY
},
roleArn: myRole.roleArn,
prefix: dataStoragePrefixInS3,
errorOutputPrefix: errorStoragePrefixInS3,
}
});
环境
- CDK CLI 版本: 1.30
- 操作系统: Mac 10.13
- 语言:打字稿
解决方案
我发现我应该为 YYYYYYYYYYYYYYYY 使用什么。
这是怎么回事?事实证明,某些值的类型不必是标量 ( string
, number
, ...),但可以是IResolvable
允许 CDK 在合成期间评估它们的类型。例如,这里是DataFormatConversionConfigurationProperty
in的声明node_modules/@aws-cdk/aws-kinesisfirehose/lib/kinesisfirehose.generated.d.ts
:
export declare namespace CfnDeliveryStream {
interface DataFormatConversionConfigurationProperty {
readonly enabled: boolean | cdk.IResolvable;
readonly inputFormatConfiguration: CfnDeliveryStream.InputFormatConfigurationProperty | cdk.IResolvable;
readonly outputFormatConfiguration: CfnDeliveryStream.OutputFormatConfigurationProperty | cdk.IResolvable;
readonly schemaConfiguration: CfnDeliveryStream.SchemaConfigurationProperty | cdk.IResolvable;
}
}
这意味着我们可以使用以下enabled
属性
const cfnParam = new CfnParameter(this, "EnableFirehoseDataFormatConversion", {
type: "String"
});
const cfnCondition = new CfnCondition(this, "FirehoseDataFormatConversionEnabled", {
expression: Fn.conditionEquals(cfnParam.valueAsString, "true"),
});
const enabledOrNot: IResolvable = Fn.conditionIf(cfnCondition.logicalId, true, false);
new kinesisf.CfnDeliveryStream(this, "MyFirehose", {
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-extendeds3destinationconfiguration.html
extendedS3DestinationConfiguration: {
bucketArn: dataBucket.bucketArn,
bufferingHints: {
intervalInSeconds: XXXXXXXXXXXXXX,
sizeInMBs: 128,
},
compressionFormat: "UNCOMPRESSED",
dataFormatConversionConfiguration: {
enabled: enabledOrNot
},
roleArn: myRole.roleArn,
prefix: dataStoragePrefixInS3,
errorOutputPrefix: errorStoragePrefixInS3,
}
});
此方法不适用于 XXXXXXXXXXXXXX,因为 type of intervalInSeconds
isnumber
而不是number | IResolvable
. 但是,类型bufferingHints
是IResolvable
,因此您应该能够指定整个结构。我还不知道如何构建一个IResolvable
返回结构的实例。
推荐阅读
- php - 如何在 Flask 中访问 SERVER 变量?
- python - 如何在 python 中更改打印语句的输出格式?
- php - RouterListener.php 第 125 行中的 NotFoundHttpException:找不到“GET /”的路由
- python - Pandas DataFrame 计算特定时间范围内两列之间的时间差
- node.js - Firebase 云功能,收到 304 错误
- c# - 如何计算机器人在 C# 控制台中访问的唯一方块
- python - 为每个特定时间执行特定任务并等待其时间(Python)
- python-2.7 - 为什么我的关系在我的对象与 sale_order 对象中不起作用
- javascript - 根据单元格内容添加具有功能的复制按钮
- wordpress - 如何从 wordpress 搜索中排除特定短语