簡體   English   中英

跨多個子網啟動 EC2 隊列

[英]Launching an EC2 Fleet across multiple subnets

我正在嘗試跨多個子網啟動一個包含約 2000 個實例的EC2隊列,每個子網位於不同的可用區,以最大程度地減少實例之間的命運共享。 我們正在使用覆蓋配置中的子網列表創建隊列,但它從該列表中選擇一個子網並嘗試啟動該子網中的所有實例。

我如何配置隊列,以便它可以在提供的子網中傳播它啟動的實例?

使用AWS Node.js SDK ,這是我嘗試用於啟動隊列的代碼:

/**
 * Launch an EC2 fleet.
 *
 * @param {object} params Params.
 * @param {number} params.count Number of instances to launch.
 * @param {string} params.launchTemplateName Name of template to launch.
 * @param {string} params.launchTemplateVersion Version of template to launch.
 * @param {string[]} params.subnetIds Array of subnets to launch the instances on.
 * @returns {Promise<PromiseResult<EC2.CreateFleetResult, AWSError>>}
 */
function launchFleet({ count, launchTemplateName, launchTemplateVersion, subnetIds }) {
  const ec2 = new AWS.EC2();
  const subnetId = subnetIds.join(',');
  return ec2
    .createFleet({
      TargetCapacitySpecification: {
        TotalTargetCapacity: count,
        OnDemandTargetCapacity: count,
        SpotTargetCapacity: 0,
        DefaultTargetCapacityType: 'on-demand',
      },
      LaunchTemplateConfigs: [
        {
          LaunchTemplateSpecification: {
            LaunchTemplateName: launchTemplateName,
            Version: launchTemplateVersion,
          },
          Overrides: [
            {
              SubnetId: subnetId,
            },
          ],
        },
      ],
      ExcessCapacityTerminationPolicy: 'no-termination',
      ReplaceUnhealthyInstances: false,
      Type: 'maintain',
    })
    .promise();
}

我建議使用 Auto Scaling 組而不是 EC2 隊列,因為跨可用區平衡實例是一個關鍵要求。 使用AWS 開發工具包,這應該是一個簡單的改變。

我建議的另一件事是使用 Spot 實例而不是按需實例或兩者的混合來優化成本。 這可以通過MixedInstancesPolicy屬性實現,作為最佳實踐,您可以使用多種實例類型和容量優化作為SpotAllocationStrategy以允許 ASG 從最可用的實例池中選擇容量。

此外,ASG 將能夠通過替換任何中斷的 Spot 實例,將實例數量保持在所需的容量。

暫無
暫無

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

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