A seção Conditions
opcional contém instruções que definem as circunstâncias nas quais entidades são criadas ou configuradas. Por exemplo, é possível criar uma condição e, depois, associá-la a um recurso ou uma saída para que o CloudFormation apenas crie o recurso ou a saída se essa condição for verdadeira. Da mesma forma, é possível associar a condição a uma propriedade para que o CloudFormation apenas defina a propriedade como um valor específico se essa condição for verdadeira. Se a condição for falsa, o CloudFormation definirá a propriedade para um valor diferente que você especificar.
Você pode usar as condições quando você deseja reutilizar um modelo que pode criar recursos em contextos diferentes, como um ambiente de teste em comparação com um ambiente de produção. No modelo, você pode adicionar um parâmetro de entrada EnvironmentType
que aceita prod
ou test
como entrada. Para o ambiente de produção, você pode incluir instâncias Amazon EC2 com determinados recursos. No entanto, para o ambiente de teste, você deve usar recursos reduzidos para economizar. Com as condições, você pode definir quais recursos são criados e como eles são configurados para cada tipo de ambiente.
As condições são avaliadas com base em pseudoparâmetros definidos previamente ou valores de parâmetros de entrada que você especifica ao criar ou atualizar uma pilha. Em cada condição, você pode fazer referência a outra condição, a um valor de parâmetro ou a um mapeamento. Depois de definir todas as condições, você pode associá-las a recursos e propriedades de recursos nas seções Resources
e Outputs
de um modelo.
Na criação ou na atualização da pilha, o AWS CloudFormation avalia todas as condições em seu modelo antes de criar qualquer recurso. Recursos associados a uma condição verdadeira são criados. Recursos associados a uma condição falsa são ignorados. O CloudFormation também reavalia essas condições em cada atualização de pilha antes de atualizar qualquer recurso. Recursos ainda associados a uma condição verdadeira são atualizados. Recursos agora associados a uma condição falsa são excluídos.
Importante
Durante uma atualização de pilha, você não pode atualizar as condições por si só. Você pode atualizar condições apenas ao incluir alterações que adicionam, modificam ou excluem recursos.
Como usar condições
Dependendo da entidade que você deseja criar ou configurar condicionalmente, é necessário incluir declarações nas seguintes seções de modelo:
- Seção
Parameters
-
Defina as entradas que você deseja avaliar em suas condições. As condições são avaliadas como "True" ou "False" com base nos valores desses parâmetros de entrada. Se quiser que as condições avaliem pseudoparâmetros, não será necessário definir esses pseudoparâmetros nessa seção; pseudoparâmetros são predefinidos pelo CloudFormation. Para obter mais informações sobre pseudoparâmetros, consulte Referência de pseudoparâmetros.
- Seção
Conditions
-
Defina as condições usando as funções intrínsecas de condições. Essas condições determinam quando o CloudFormation cria os recursos associados. Consulte exemplos em Exemplos de modelo.
- Seções
Resources
eOutputs
-
Associe condições aos recursos ou às saídas que você deseja criar condicionalmente. O CloudFormation cria entidades que são associadas a uma condição verdadeira e ignora entidades que são associadas a uma condição falsa. Use a chave
Condition
e um ID lógico da condição para associá-la a um recurso ou saída. Para especificar uma propriedade condicionalmente, use a funçãoFn::If
. Para ver um exemplo, consulte Associando uma condição.
Sintaxe
A seção Conditions
consiste no nome da chave Conditions
. Cada declaração de condição inclui um ID lógico e funções intrínsecas que são avaliadas ao criar ou atualizar uma pilha. O pseudomodelo a seguir descreve a seção Conditions
:
JSON
"Conditions" : {
"ConditionLogicalID
" : {Intrinsic function
}
}
YAML
Conditions:
ConditionLogicalID
:
Intrinsic function
Funções intrínsecas da condição
Você pode usar as seguintes funções intrínsecas para definir condições:
-
Fn::And
-
Fn::Equals
-
Fn::ForEach
-
Fn::If
-
Fn::Not
-
Fn::Or
Consulte a sintaxe e informações sobre cada função de condição em Funções de condição. Consulte a sintaxe e informações sobre Fn::ForEach
em Fn::ForEach.
nota
Fn::If
só tem suporte no atributo de metadados, no atributo de atualização de política e em valores de propriedade nas seções Resources
e Outputs
de um modelo.
Exemplos
Condição simples
O exemplo de modelo a seguir inclui um parâmetro de entrada EnvType
, onde você pode especificar prod
para criar uma pilha para produção ou test
para criar uma pilha para teste. Para um ambiente de produção, o CloudFormation cria uma instância do Amazon EC2 e anexa um volume à instância. Em um ambiente de teste, o CloudFormation cria apenas a instância do Amazon EC2.
A condição CreateProdResources
será avaliada true
se o parâmetro EnvType
for igual a prod
. No modelo de exemplo, os recursos NewVolume
e MountPoint
estão associados à condição CreateProdResources
. Portanto, os recursos serão criados apenas se o parâmetro EnvType
for igual a prod
.
JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
"EnvType": {
"Description": "Environment type.",
"Default": "test",
"Type": "String",
"AllowedValues": [
"prod",
"test"
],
"ConstraintDescription": "must specify prod or test."
}
},
"Conditions": {
"CreateProdResources": {
"Fn::Equals": [
{
"Ref": "EnvType"
},
"prod"
]
}
},
"Resources": {
"EC2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-0ff8a91507f77f867"
}
},
"MountPoint": {
"Type": "AWS::EC2::VolumeAttachment",
"Condition": "CreateProdResources",
"Properties": {
"InstanceId": {
"Ref": "EC2Instance"
},
"VolumeId": {
"Ref": "NewVolume"
},
"Device": "/dev/sdh"
}
},
"NewVolume": {
"Type": "AWS::EC2::Volume",
"Condition": "CreateProdResources",
"Properties": {
"Size": 100,
"AvailabilityZone": {
"Fn::GetAtt": [
"EC2Instance",
"AvailabilityZone"
]
}
}
}
}
}
YAML
AWSTemplateFormatVersion: 2010-09-09
Parameters:
EnvType:
Description: Environment type.
Default: test
Type: String
AllowedValues:
- prod
- test
ConstraintDescription: must specify prod or test.
Conditions:
CreateProdResources: !Equals
- !Ref EnvType
- prod
Resources:
EC2Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: ami-0ff8a91507f77f867
MountPoint:
Type: 'AWS::EC2::VolumeAttachment'
Condition: CreateProdResources
Properties:
InstanceId: !Ref EC2Instance
VolumeId: !Ref NewVolume
Device: /dev/sdh
NewVolume:
Type: 'AWS::EC2::Volume'
Condition: CreateProdResources
Properties:
Size: 100
AvailabilityZone: !GetAtt
- EC2Instance
- AvailabilityZone
Condição aninhada
O seguinte modelo de exemplo faz referência a uma condição dentro de outra condição. Você pode criar uma pilha que crie um bucket do s3. Para uma pilha implantada em um ambiente de produção, o CloudFormation cria uma política para o bucket do S3.
JSON
{
"Parameters": {
"EnvType": {
"Type": "String",
"AllowedValues": [
"prod",
"test"
]
},
"BucketName": {
"Default": "",
"Type": "String"
}
},
"Conditions": {
"IsProduction": {
"Fn::Equals": [
{
"Ref": "EnvType"
},
"prod"
]
},
"CreateBucket": {
"Fn::Not": [
{
"Fn::Equals": [
{
"Ref": "BucketName"
},
""
]
}
]
},
"CreateBucketPolicy": {
"Fn::And": [
{
"Condition": "IsProduction"
},
{
"Condition": "CreateBucket"
}
]
}
},
"Resources": {
"Bucket": {
"Type": "AWS::S3::Bucket",
"Condition": "CreateBucket"
},
"Policy": {
"Type": "AWS::S3::BucketPolicy",
"Condition": "CreateBucketPolicy",
"Properties": {
"Bucket": {
"Ref": "Bucket"
},
"PolicyDocument": "..."
}
}
}
}
YAML
Parameters:
EnvType:
Type: String
AllowedValues:
- prod
- test
BucketName:
Default: ''
Type: String
Conditions:
IsProduction: !Equals
- !Ref EnvType
- prod
CreateBucket: !Not
- !Equals
- !Ref BucketName
- ''
CreateBucketPolicy: !And
- !Condition IsProduction
- !Condition CreateBucket
Resources:
Bucket:
Type: 'AWS::S3::Bucket'
Condition: CreateBucket
Policy:
Type: 'AWS::S3::BucketPolicy'
Condition: CreateBucketPolicy
Properties:
Bucket: !Ref BucketName
PolicyDocument: ...