Os modelos do ROS permitem consultar valores de mapas armazenados como pares chave-valor. Dependendo da definição do mapa na seção Mappings e da quantidade de níveis que ele possui, utilize as funções intrínsecas descritas neste tópico.
Escolha a função adequada conforme o tipo de mapa:
|
Tipo de mapa |
Definido na seção Mappings |
Função recomendada |
|
Nível único |
Não |
|
|
Nível único (string JSON) |
Não |
|
|
Dois níveis |
Sim |
|
|
Dois níveis |
Não |
|
|
Multinível |
Sim (dois níveis ou mais) |
|
|
Multinível |
Não |
|
|
Multinível (filtros complexos) |
Ambos |
|
Consultar um valor de um mapa de nível único
Não defina um mapa de nível único na seção Mappings. O Resource Orchestration Service (ROS) não consegue consultar valores de mapas de nível único nessa seção. Para mais informações, consulte Mappings.
Fn::Select
Utilize Fn::Select para consultar um valor em um mapa de nível único.
A função Fn::Select recebe uma chave e um objeto de mapa, retornando o valor correspondente. Para mais detalhes, veja Fn::Select.
-
Consulte
value_aa partir de um parâmetro de objeto JSON — ao fornecerkey_a, a função retornavalue_a:ROSTemplateFormatVersion: '2015-09-01' Parameters: InputMap: Type: Json Outputs: value_a: Value: Fn::Select: - key_a - InputMap -
Obtenha um valor de um mapa inline definido diretamente no modelo:
ROSTemplateFormatVersion: '2015-09-01' Resources: Mock: Type: MockResource Properties: Prop1: Fn::Select: - key - key1: value1 key2: value2
Fn::GetJsonValue
Caso o mapa seja fornecido como uma string JSON em vez de um objeto JSON, empregue Fn::GetJsonValue para recuperar o valor de uma chave de primeiro nível. Consulte também Fn::GetJsonValue.
Ao informar key_a, o resultado é value_a:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InputMapJsonString:
Type: Json
Outputs:
value_a:
Value:
Fn::GetJsonValue:
- key_a
- InputMapJsonString
Consultar um valor de um mapa de dois níveis
Fn::FindInMap
A função Fn::FindInMap opera exclusivamente com mapas de dois níveis definidos na seção Mappings.
Use Fn::FindInMap para localizar um valor através de uma chave de nível superior e uma chave de segundo nível. Para mais informações, acesse Mappings e Fn::FindInMap.
O exemplo abaixo seleciona o ID de uma imagem ECS com base na região e na arquitetura. Considerando regionParam=hangzhou e arquitetura '32', o retorno será m-25l0rcfjo:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
regionParam:
Description: the region where you want to create the Elastic Compute Service (ECS) instance
Type: String
AllowedValues:
- hangzhou
- beijing
Mappings:
RegionMap:
hangzhou:
'32': m-25l0rcfjo
'64': m-25l0rcfj1
beijing:
'32': m-25l0rcfj2
'64': m-25l0rcfj3
Resources:
WebServer:
Type: ALIYUN::ECS::Instance
Properties:
ImageId:
Fn::FindInMap:
- RegionMap
- Ref: regionParam
- '32'
Fn::Select
Para mapas de dois níveis fora da seção Mappings, aplique Fn::Select de forma aninhada.
Aninhe Fn::Select duas vezes para navegar por um mapa de dois níveis. A chamada interna obtém o submapa em key_1, enquanto a chamada externa recupera o valor em key_1_1. Veja mais em Fn::Select.
Retorna value_1_1:
Fn::Select:
- key_1_1:
- Fn::Select:
- key_1
- key_1:
key_1_1: value_1_1
key_1_2: value_1_2
key_2:
key_2_1: value_2_1
key_2_2: value_2_2
Consultar um valor de um mapa multinível
Fn::Select
-
Em mapas com mais de dois níveis na seção Mappings, combine
Fn::FindInMapeFn::Select: useFn::FindInMappara obter um submapa no limite de dois níveis e, em seguida, apliqueFn::Selectpara acessar a chave mais profunda.Fn::Select: - key - Fn::FindInMap: - MapName - TopLevelKey - SecondLevelKey Para mapas multiníveis fora da seção Mappings, aninhe
Fn::Selectvárias vezes seguindo o mesmo padrão do exemplo de dois níveis. Consulte Fn::Select para detalhes.
Fn::Jq
Recorra a Fn::Jq quando precisar de filtragens complexas em estruturas aninhadas, como extrair campos específicos de um array de objetos. Saiba mais em Fn::Jq.
No exemplo a seguir, extraímos name e type de cada objeto presente no array parameters:
Fn::Jq:
- All
- '.parameters[] | {"param_name": .name, "param_type":.type}'
- changeSet:
items: []
kind: git
id: 2013-12-27_00-09-37
parameters:
- name: PKG_TAG_NAME
value: trunk
- name: GIT_COMMIT
value: master
- name: TRIGGERED_JOB
value: trunk-buildall
Retorno:
- param_name: PKG_TAG_NAME
- param_name: GIT_COMMIT
- param_name: TRIGGERED_JOB