Я создаю шаблон CloudFormation со свойствами, которые должны быть установлены с разными значениями в зависимости от стадии (например, бета, prod).Тип свойства - число.Однако Fn.FindInMap возвращает строковый токен.Так как же использовать FindInMap для установки такого свойства типа числа?
Это для API-интерфейсов языка Java AWS CDK.
Это фрагмент кода 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());
Этот раздел кода пытается получить значение из сопоставления по параметру stage и назначить его свойствам (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]}"