К сожалению, мои эксперименты должны согласиться с вашим выводом Грэма. Я боролся с этим в течение некоторого времени, но не нашел способа вычислить строку через Fn :: Join и сохранить ее для дальнейшего использования в шаблоне.
Могу ли я поделиться с вами типичным примером?
По состоянию на 2014-09-18 наиболее изощренным способом хранения строкового значения для повторного использования в разделе «Ресурсы» является отображение (второго уровня). Более того, я могу предварительно вычислить Условие и определить, использовать ли строку или нет. Но, к сожалению, сохранение строки просто не работает.
Вот пример строфы такого картирования ...
"LoadBalancerBucketMap": {
"BucketName": {
"string": {
"Fn::Join": [
"-",
[
"mylb",
{
"Ref": "Environment"
},
"logs"
]
]
}
}
},
А вот выражение доступа к нему в Ресурсе
"S3BucketName": {
"Fn::FindInMap": [
"LoadBalancerBucketMap",
"BucketName",
"string"
}
В этом примере Environment является литералом строкового параметра с удобным значением по умолчанию. Так что это очень наглядный пример создания и повторного использования строки. Но вот что говорит процессор CloudFormation…
Ошибка проверки шаблона: Ошибка формата шаблона: каждый атрибут Mappings должен быть строкой или списком.
Поэтому я разделяю ваше разочарование тем, что в шаблоне нет способа обеспечить эффект временной строковой переменной.
... насколько я вижу. Но ответ, который вы изначально получили, говорит об обратном (хотя и без примера).
Так что, если у кого-нибудь есть пример обходного решения, то, пожалуйста, поделитесь им?