用于 ec2 实例中的现场请求的 aws cloudformation 模板

Posted

技术标签:

【中文标题】用于 ec2 实例中的现场请求的 aws cloudformation 模板【英文标题】:aws cloudformation template for spot request in ec2 instance 【发布时间】:2021-12-08 08:16:45 【问题描述】:

在 AWS 中预置 ec2 实例时,我需要一个示例云形成模板来添加现场请求。我曾尝试使用控制台来预置现场实例,但我找不到在 ec2 中添加现场请求的任何确切模板

【问题讨论】:

【参考方案1】:

您需要创建 Spot-fleet 资源。

例子:

"SpotFleet": 
  "Type": "AWS::EC2::SpotFleet",
  "Properties": 
    "SpotFleetRequestConfigData": 
     "IamFleetRole":  "Fn::GetAtt": [ "IAMFleetRole", "Arn"] ,
     "SpotPrice": "1000",
     "TargetCapacity":  "Ref": "TargetCapacity" ,
     "LaunchSpecifications": [
     
         "EbsOptimized": "false",
         "InstanceType":  "Ref": "InstanceType" ,
         "ImageId":  "Fn::FindInMap": [ "AWSRegionArch2AMI",  "Ref": "AWS::Region" ,
                       "Fn::FindInMap": [ "AWSInstanceType2Arch",  "Ref": "InstanceType" , "Arch" ] 
                     ],
          "SubnetId":  "Ref": "Subnet1" ,
          "WeightedCapacity": "8"
     ,
     
         "EbsOptimized": "true",
         "InstanceType":  "Ref": "InstanceType" ,
         "ImageId":  "Fn::FindInMap": [ "AWSRegionArch2AMI",  "Ref": "AWS::Region" ,
                       "Fn::FindInMap": [ "AWSInstanceType2Arch",  "Ref": "InstanceType" , "Arch" ] 
                     ],
          "Monitoring":  "Enabled": "true" ,
          "SecurityGroups": [  "GroupId":  "Fn::GetAtt": [ "SG0", "GroupId" ]   ],
          "SubnetId":  "Ref": "Subnet0" ,
          "IamInstanceProfile":  "Arn":  "Fn::GetAtt": [ "RootInstanceProfile", "Arn" ]  ,
          "WeightedCapacity": "8"
         
         ]
     
   

更多细节可以在这个链接中找到: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html

【讨论】:

谢谢!但在 azure 中,我们可以使用 3 个参数制作现场实例,例如 "priority": "Spot", "evictionPolicy": "Deallocate", "billingProfile": "maxPrice": -1 docs.microsoft.com/en-us/azure/virtual-machines/linux/… 在aws中我们可以做到吗?跨度> 在 aws 中是否有 ec2 车队选项我可能知道优势docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… @aryabraj,我猜这 3 个是可以添加的附加属性。完整的 json 示例格式在这 3 个参数下方的同一链接中给出(大一个!!)。我想您需要该示例格式才能在 azure 中创建现场实例。此外,这一切都取决于您使用的云平台。云平台的模板会与其他平台不同。 从这个请求中我得到了作为队列的 Spot 请求,我需要创建 Spot 实例意味着 Spot 请求类型作为实例,通过控制台我们可以在配置实例时启用 Spot 请求类型,同样的方式有任何cloudformation 模板中可用的参数【参考方案2】:

您可以创建 SpotFleet 资源,这是一个示例

SpotFleet:
 Type: AWS::EC2::SpotFleet
 Properties:
   SpotFleetRequestConfigData:
     IamFleetRole: !GetAtt [IAMFleetRole, Arn]
     SpotPrice: '1000'
     TargetCapacity:
       Ref: TargetCapacity
     LaunchSpecifications:
     - EbsOptimized: 'false'
       InstanceType:
         Ref: InstanceType
     ImageId:
       Fn::FindInMap:
       - AWSRegionArch2AMI
       - Ref: AWS::Region
       - Fn::FindInMap:
         - AWSInstanceType2Arch
         - Ref: InstanceType
         - Arch
     SubnetId:
       Ref: Subnet1
     WeightedCapacity: '8'
   - EbsOptimized: 'true'
     InstanceType:
       Ref: InstanceType
     ImageId:
       Fn::FindInMap:
       - AWSRegionArch2AMI
       - Ref: AWS::Region
       - Fn::FindInMap:
       - AWSInstanceType2Arch
       - Ref: InstanceType
       - Arch
     Monitoring:
       Enabled: 'true'
       SecurityGroups:
        - GroupId:
            Fn::GetAtt:
            - SG0
            - GroupId
      SubnetId:
         Ref: Subnet0
      IamInstanceProfile:
        Arn:
        Fn::GetAtt:
        - RootInstanceProfile
        - Arn
      WeightedCapacity: '8'

【讨论】:

以上是关于用于 ec2 实例中的现场请求的 aws cloudformation 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何处理我的 AWS EC2 实例上的多个 Python 请求?

AWS 安全组难题

用于自动启动和停止 AWS EC2 实例的脚本

AWS CloudFormation:Application Load Balancer 的目标组不适用于多个 EC2 实例

AWS:将S3 Bucket安装到EC2实例。 (后来的FTP隧道)

在某些情况下,AWS ELB 不会将请求分发到 Auto Scaling 组 EC2 实例