[Home](./index.md) > [bitburner](./bitburner.md) > [Cloud](./bitburner.cloud.md) > [purchaseServer](./bitburner.cloud.purchaseserver.md)
## Cloud.purchaseServer() method
Purchase a cloud server.
**Signature:**
```typescript
purchaseServer(hostname: string, ram: number): string;
```
## Parameters
|
Parameter
|
Type
|
Description
|
|
hostname
|
string
|
Hostname of the cloud server.
|
|
ram
|
number
|
Amount of RAM of the cloud server, in GB. Must be a power of 2 (2, 4, 8, 16, etc.). Maximum value of 1048576 (2^20).
|
**Returns:**
string
The hostname of the new cloud server.
## Remarks
RAM cost: 2.25 GB
Purchase a cloud server with the specified hostname and amount of RAM.
The hostname argument can be any data type, but it will be converted to a string and have whitespace removed. Anything that resolves to an empty string or IP address will cause the function to fail. If there is already a cloud server with the specified hostname, then the function will automatically append a number at the end of the hostname argument value until it finds a unique hostname. For example, if the script calls `purchaseServer(“foo”, 4)` but a server named “foo” already exists, then it will automatically change the hostname to `foo-0`. If there is already a server with the hostname `foo-0`, then it will change the hostname to `foo-1`, and so on.
Note that there is a maximum limit to the amount of cloud servers you can purchase.
Returns the hostname of the new cloud server as a string. If the function fails to purchase a cloud server, then it will return an empty string. The function will fail if the arguments passed in are invalid, if the player does not have enough money to purchase the specified cloud server, or if the player has exceeded the maximum amount of cloud servers.
## Example
```js
// Attempt to purchase 5 cloud servers with 64GB of ram each
const ram = 64;
const prefix = "cloud-server-";
for (let i = 0; i < 5; ++i) {
ns.cloud.purchaseServer(prefix + i, ram);
}
```