簡體   English   中英

CloudFormation 條件 EMR 實例

[英]CloudFormation conditional EMR instances

我在 CF 模板中使用條件語句時遇到了一些困難,我想以最簡潔的方式有條件地指定 EMR 集群實例組或隊列。

這構建沒有錯誤。 如果是 prod,它會選擇使用實例組,如果不是 prod,它會選擇使用實例隊列,使用兩個單獨的條件:

Parameters:
  EnvironmentName:
    Type: String
    Description: 'Example: ci, qa, stage, prod'
      
Conditions:
  IsPreProd: !Or
    [!Equals [!Ref EnvironmentName, ci], !Equals [!Ref EnvironmentName, qa]]
  IsProd: !Or
    [!Equals [!Ref EnvironmentName, stage], !Equals [!Ref EnvironmentName, prod]]
    
Resources:
  EMRCluster:
    Type: 'AWS::EMR::Cluster'
    Properties:
      Instances:
        CoreInstanceGroup:
          !If 
            - IsProd
            - InstanceCount: 1
              InstanceType: m5.8xlarge
              Market: ON_DEMAND
              Name: CoreInstance
            - !Ref "AWS::NoValue"     
        CoreInstanceFleet:
          !If 
            - IsPreProd
            - InstanceTypeConfigs:
                - InstanceType: m5.8xlarge
              TargetOnDemandCapacity: 1
              TargetSpotCapacity: 1
              LaunchSpecifications:
                SpotSpecification:
                  TimeoutAction: SWITCH_TO_ON_DEMAND
                  TimeoutDurationMinutes: 10
            - !Ref "AWS::NoValue" 

  

我只想使用一個條件,如下所示,除了構建失敗告訴我“如果”所在的行上的“YAML 格式不正確”。 如果我像上面那樣實現它,我最終會得到四個單獨的條件,因為我還必須添加主實例組或隊列。 是否有可能將這一切作為一個條件?

Parameters:
  EnvironmentName:
    Type: String
    Description: 'Example: ci, qa, stage, prod'
      
Conditions:
  IsProd: !Or
    [!Equals [!Ref EnvironmentName, stage], !Equals [!Ref EnvironmentName, prod]]
    
Resources:
  EMRCluster:
    Type: 'AWS::EMR::Cluster'
    Properties:
      Instances:
        - !If 
            - IsProd
            - CoreInstanceGroup:
                InstanceCount: 1
                InstanceType: m5.8xlarge
                Market: ON_DEMAND
                Name: CoreInstance
            - CoreInstanceFleet:
                InstanceTypeConfigs:
                  - InstanceType: m5.8xlarge
                TargetOnDemandCapacity: 1
                TargetSpotCapacity: 1
                LaunchSpecifications:
                  SpotSpecification:
                    BlockDurationMinutes: 60
                    TimeoutAction: SWITCH_TO_ON_DEMAND
                    TimeoutDurationMinutes: 10   

Instances不是一個列表 你不需要- before !If

Resources:
  EMRCluster:
    Type: 'AWS::EMR::Cluster'
    Properties:
      Instances:
         !If 
            - IsProd
            - CoreInstanceGroup:
                InstanceCount: 1
                InstanceType: m5.8xlarge
                Market: ON_DEMAND
                Name: CoreInstance
            - CoreInstanceFleet:
                InstanceTypeConfigs:
                  - InstanceType: m5.8xlarge
                TargetOnDemandCapacity: 1
                TargetSpotCapacity: 1
                LaunchSpecifications:
                  SpotSpecification:
                    BlockDurationMinutes: 60
                    TimeoutAction: SWITCH_TO_ON_DEMAND
                    TimeoutDurationMinutes: 10  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM