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