[英]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.