在AWS CloudFormation模板中,如何将EC2实例放置在由Spot Fleet确定的子网中?

时间:2016-02-04 18:40:04

标签: amazon-web-services amazon-ec2 amazon-cloudformation

我已在CloudFormation模板中指定了具有动态子网和(按需)EC2实例的Spot Fleet ,如下所示:

@Override
protected void onHandleIntent(Intent intent)
{
    g = Globals.getInstance();
    context = this;


    locationProvider = LocationServices.FusedLocationApi;
    googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    locationRequest = new LocationRequest();
    locationRequest.setInterval(60000);
    locationRequest.setFastestInterval(15000);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    googleApiClient.connect();
}


@Override
public void onConnected(Bundle bundle) 
{
    LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}

我的每个子网都位于不同的可用区中,例如"Resources": { "myInstance": { "Type": "AWS::EC2::Instance", "Properties": { ... } }, "myFleet": { "Type": "AWS::EC2::SpotFleet", "Properties" : { "SpotFleetRequestConfigData" : { ... "LaunchSpecifications": [ { ... "SubnetId": "subnet-1a1a1a, subnet-2b2b2b, subnet-3c3c3c" } ] } } } } 位于subnet-1a1a1aus-east-1a位于subnet-2b2b2b等。

我想将us-east-1b放在同一子网中作为我的现货车队的实例,以避免支付跨越可用区的网络流量,但我不是确定如何做到这一点:

myInstance

看起来我"myInstance": { "Type": "AWS.::EC2::Instance", "Properties": { ... "SubnetId": ???? // WHAT GOES HERE? } } 上的Fn::GetAtt看起来并不正常,即使我myFleet取决于myInstance,我仍然不确定如何查看Spot Fleet的位置结果。

我能完成这个吗?谢谢!

1 个答案:

答案 0 :(得分:0)

在您的现货车队配置中,如果您执行以下操作:

"SubnetId": "subnet-1a1a1a, subnet-2b2b2b, subnet-3c3c3c"

然后你告诉现场舰队将现场实例放在这三个子网的任何中。点实例可能同时位于所有3个子网中。

由于您只有一个EC2实例,因此无法保证您的EC2实例与所有现场实例位于同一子网中。

您的EC2实例只能存在于一个子网中,您必须指定该子网,或让AWS为您决定。

所以你可以选择:

  1. 为EC2实例指定三个子网中的一个,这样,实例(希望)与某些现货船队在同一个AZ中,或者
  2. 将您的现货车队减少到一个子网