2

使用控制台创建 Spot 实例时,不必选择子网。我可以...

Subnet: No preference (default subnet in any Availability Zone)

但是在使用 cloudformation 模板创建 Spot 实例时,我需要选择一个子网,我不确定选择哪一个以最优惠的价格。这是否意味着使用 Web 界面比使用 cloudformation 模板(针对现场实例)更好?

4

2 回答 2

1

需求及相应的分配策略

我将您的“最佳价格”要求解释为获得配置用于成本优化的 SpotFleet [1]。AWS 在文档 [2] 中描述了如何创建成本优化的 Spot 队列:

要优化您使用 Spot 实例的成本,请指定最低价格分配策略,以便 Spot 队列根据当前 Spot 价格自动部署最便宜的实例类型和可用区组合。

您已经在上面评论中提供的 CloudFormation 模板中为此案例指定了正确的分配策略。 lowestPriceAWS 将这种分配策略描述为:

Spot 实例来自价格最低的池。这是默认策略。

什么是 Spot 实例池?

Spot 实例池是一组未使用的 EC2 实例,它们具有相同的实例类型(例如 m5.large)、操作系统、可用网络平台[即 EC2-Classic 或 EC2-VPC,请参阅 [3]]。

Spot 队列根据您的 Spot 队列请求中包含的启动规范和Spot 队列请求的配置 [在我们的例子中是最低价格],选择用于满足请求的 Spot 实例池。[2]

这回答了您问题的一部分:

不,子网不直接决定现货价格。决定价格的是可用区,即相同实例类型、操作系统和网络平台的实例,如果它们位于同一可用区,则它们总是具有相同的现货价格。由于子网不能跨越多个可用区,因此特定子网中实例的现货价格始终相同 - 即(可用区、实例类型、操作系统、网络平台)组合的价格。

自动子网和可用区选择

您在问题中声明您必须选择一个子网。那不是真的。LaunchSpecification [4]的NetworkInterfaces属性是可选的。如果您省略它,CloudFormation 的行为与 AWS 管理控制台完全相同。您可以在文档 [5] 的Spot Fleet 示例部分中了解它:

示例 1:使用区域中价格最低的可用区或子网启动 Spot 实例

以下示例指定没有可用区或子网的单个启动规范。Spot 队列在具有默认子网的价格最低的可用区中启动实例。您支付的价格不超过按需价格。

{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}

如果您确实需要为您的实例分配 NetworkInterface(例如,因为您需要公共 IP 地址),[5] 中还列出了一个解决方案:

      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "InstanceType": "m3.medium",
          "NetworkInterfaces": [
              {
                  "DeviceIndex": 0,
                  "SubnetId": "subnet-1a2b3c4d",
                  "Groups": [ "sg-1a2b3c4d" ],
                  "AssociatePublicIpAddress": true
              }
          ],
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::880185128111:instance-profile/my-iam-role"
          }
      }

据我所知,这正是您在 CloudFormation 模板中实现的。AWS 声明了这种方法:

Spot 服务在价格最低的可用区中的任何子网中启动实例。

您不能在 Spot 队列请求中指定来自同一可用区的不同子网。

这意味着,您应该为要在其中分布实例的每个可用区创建一个启动规范。这些启动规范中的每一个都应因 SubnetId 而异:

[...]
  LaunchSpecifications: [
      {
          [...]
          "NetworkInterfaces": [
              {
                  "DeviceIndex": 0,
                  "SubnetId": "subnet-1a2b3c4d",  // choose a subnet from AZ a
                  "Groups": [ "sg-1a2b3c4d" ],
                  "AssociatePublicIpAddress": true
              }
          ],
          [...]
      },
      {
          [...]
          "NetworkInterfaces": [
              {
                  "DeviceIndex": 0,
                  "SubnetId": "subnet-xxxxxxxx",  // choose a subnet from AZ b
                  "Groups": [ "sg-1a2b3c4d" ],
                  "AssociatePublicIpAddress": true
              }
          ],
          [...]
      },
      [... etc. for each AZ]
  ],
[...]

参考

[1] https://docs.aws.amazon.com/de_de/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html
[2] https://docs.aws.amazon.com/AWSEC2/latest /UserGuide/spot-fleet.html#spot-fleet-allocation-strategy
[3] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-classic-platform.html
[4] https:// /docs.aws.amazon.com/de_de/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces
[5] https://docs .aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-examples.html#fleet-config1

于 2019-07-31T12:50:57.200 回答
1

Spot 实例定价取决于EC2 实例的长期供需趋势,而不是您选择在哪个子网中启动 Spot 实例。

为您的每个 AWS 解决方案开发一个cloudformation模板总是有益的。这与“基础设施即代码”的口号相一致,它带来了许多积极的好处,例如重用、通过修订控制跟踪更改的能力、牛而不是宠物等。

关于默认子网:对于您的账户,每个区域都有一个默认 VPC,其中包含每个可用区的默认子网。这是 AWS 提供的一项便利功能,因此您可以快速启动实例。这些默认子网是公共子网,如果您在其中启动实例,这些实例将获得公共 ip 并暴露于互联网。为了更好的安全性,开发一个私有子网并将实例启动到私有子网中并通过堡垒主机访问它们。

于 2019-06-10T21:42:46.857 回答