func (aws *RealAWSService) RunInstances(idef *InstancesDefinition) ([]string, error) { count := int64(idef.Count) rs := int64(20) vt := "gp2" rdn := "/dev/xvda" ud, err := encodeUserData(idef.UserData) if err != nil { return []string{}, err } if idef.RootSizeGB != 0 { rs = int64(idef.RootSizeGB) } root := ec2.BlockDeviceMapping{ DeviceName: &rdn, Ebs: &ec2.EbsBlockDevice{ DeleteOnTermination: &True, VolumeSize: &rs, VolumeType: &vt, }, } if idef.EncryptedRoot { root.Ebs.Encrypted = &idef.EncryptedRoot // leave nil otherwise } bdm := []*ec2.BlockDeviceMapping{&root} for _, bd := range idef.BlockDevices { vt := strings.ToLower(bd.Type.String()) nbd := &ec2.BlockDeviceMapping{ DeviceName: &bd.Name, Ebs: &ec2.EbsBlockDevice{ DeleteOnTermination: &bd.DeleteOnTermination, Encrypted: &bd.Encrypted, Iops: &bd.Iops, SnapshotId: &bd.SnapshotID, VolumeSize: &bd.Size, VolumeType: &vt, }, } bdm = append(bdm, nbd) } ri := ec2.RunInstancesInput{ ImageId: &idef.AMI, MinCount: &count, MaxCount: &count, KeyName: &idef.Keypair, InstanceType: &idef.Type, BlockDeviceMappings: bdm, UserData: &ud, } if idef.GetPublicIP { devindx := int64(0) ri.NetworkInterfaces = []*ec2.InstanceNetworkInterfaceSpecification{&ec2.InstanceNetworkInterfaceSpecification{ AssociatePublicIpAddress: &True, Groups: []*string{&idef.SecurityGroup}, DeviceIndex: &devindx, SubnetId: &idef.Subnet, }} } else { ri.SubnetId = &idef.Subnet ri.SecurityGroupIds = []*string{&idef.SecurityGroup} } r, err := aws.ec2.RunInstances(&ri) if err != nil { return []string{}, err } instances := []string{} for _, inst := range r.Instances { instances = append(instances, *(inst.InstanceId)) } return instances, nil }