Как использовать AWS CDK FindInMap для установки свойства числового типа?
Я создаю шаблон CloudFormation со свойствами, которые должны быть установлены с различными значениями в зависимости от стадии (например, бета, prod). Тип свойства - число. Однако Fn.FindInMap возвращает строковый токен. Так как же использовать FindInMap для установки такого свойства числового типа?
Это для AWS CDK API языка Java.
Это раздел кода Mapping:
Mapping writeCapacityMapping = new Mapping(parent, "TableWriteCapacityMapping", MappingProps.builder()
.withMapping(ImmutableMap.of(
Stage.beta.name(), ImmutableMap.of(
"min", 5,
"max", 100),
Stage.prod.name(), ImmutableMap.of(
"min", 400,
"max", 1200)))
.build());
Этот раздел кода пытается получить значение из сопоставления по параметру рабочей области и назначить его свойствам (minCapacity и maxCapacity), для которых требуется тип Number.
String minCapacity = Fn.findInMap("TableWriteCapacityMapping", stageParameter.getValueAsString(), "min");
String maxCapacity = Fn.findInMap("TableWriteCapacityMapping", stageParameter.getValueAsString(), "max");
ScalableTargetProps props = ScalableTargetProps.builder()
.withMinCapacity(Integer.valueOf(minCapacity))
.withMaxCapacity(Integer.valueOf(maxCapacity))
.build();
Ожидаемый шаблон CloudFormation:
Mappings:
WriteCapacityMap:
beta:
min: 5
max: 100
prod:
min: 400
max: 1200
TableWriteCapacityScalableTarget:
Type: "AWS::ApplicationAutoScaling::ScalableTarget"
Properties:
MinCapacity:
Fn::FindInMap: [WriteCapacityMap, { Ref: "Stage" }, min]
MaxCapacity:
Fn::FindInMap: [WriteCapacityMap, { Ref: "Stage" }, max]
Однако будет выдано следующее исключение, поскольку minCapacity или maxCapacity являются строкой токена: Exception in thread "main" java.lang.NumberFormatException: For input string: "${Token[TOKEN.14]}"
1 ответ
В случае, если это будет полезно для вас, я хотел бы поделиться своим решением - с помощью библиотеки уровней AWS CloudFormation.
Как упоминалось в документации AWS CDK [1], под капотом конструкции CDK реализуются с использованием библиотек AWS CloudFormation, которые доступны в CfnXxx
занятия в каждой библиотеке. Для сложных случаев использования и пробелов между CDK и CloudFormation может потребоваться использование этих библиотек CloudFormation.
Например:
Конструкция AWS CDK:
minCapacity
недвижимость вsoftware.amazon.awscdk.services.applicationautoscaling.ScalableTarget
принимает параметрNumber
тип.void setMinCapacity(final java.lang.Number value);
Библиотека AWS CloudFormation:
minCapacity
недвижимость вsoftware.amazon.awscdk.services.applicationautoscaling.CfnScalableTargetProps
CfnScalableTargetProps
можно установить с помощьюNumber
или жеToken
,void setMinCapacity(final java.lang.Number value); void setMinCapacity(final software.amazon.awscdk.Token value);
[1] https://docs.aws.amazon.com/CDK/latest/userguide/cloudformation.html