Aliyun Swift API based on Perfect. All implementations are based on Alibaba Cloud REST API.
All structures are JSON convertible.
let access = AcsCredential()
access.id = "an easy name to remember the key"
access.key = "Your AccessKeyId"
access.secret = "Your AccessKeySecret"let ecs = ECS(access: access)
ecs.describeRegions { regions in
}
// where regions is [Region]
// region.id is the actual usable RegionId
// region.name is a Chinese descriptionecs.describeSecurityGroups(region: "RegionId") { securityGroups, message in
}Callback parameter securityGroups is [SecurityGroup], with properties mapping as below:
| Property | Alibaba Cloud Official Document Name |
|---|---|
| id | SecurityGroupId |
| name | SecurityGroupName |
| remark | Description |
| tags | Tags |
| creationTime | CreationTime |
| availableInstanceAmount | AvailableInstanceAmount |
| vpcId | VpcId |
ecs.createKeyPair(region: "RegionId",
name: "Name of the Key Pair, will be useful for instance creation") { keyPair, msg in
// should save the keyPair.key immediately as a .pem file with 400 mod.
}Where keyPair is a AcsKeyPair class:
| Property | Alibaba Cloud Official Document Name |
|---|---|
| name | KeyPairName |
| fingerPrint | KeyPairFingerPrint |
| key | PrivateKeyBody |
let keypairs = ["keypair1 to delete", "keypair2 name", ... ]
ecs.deleteKeyPairs(region: "RegionId", keyNames: keypairs) {
success, message in
// success should be true to confirm the deletion.
}Note not all instance types are available throughout the regions. ecs.describeImageSupportInstanceTypes() may help a bit, but still not 100% guarantee the availabilities.
ecs.describeImageSupportInstanceTypes(region: "cn-hongkong",
imageId: "ubuntu_16_0402_64_40G_base_20170222.vhd") {
types, msg in
}It will return an array like [InstanceType], with information properties below:
| Property | Alibaba Cloud Official Document Name |
|---|---|
| id | InstanceTypeId |
| typeFamily | InstanceTypeFamily |
| cpu | CpuCoreCount |
| memory | MemorySize |
let ecs = ECS(access: access)
let tags = ["Perfect":"1"]
// you have to pick out the security group id
// by the above security group method before creating instances.
let sid = "sg-j6c58xjb4po9jq2hsc0u"
ecs.createInstance(region: "cn-hongkong", securityGroupId: sid, name: "PT-01", description: "PerfectTemplate Test Instance", keyPair: "TestKey", tags: tags) {
instanceId, msg in
}ecs.allocateIP(instanceId: id) {
ipAddress, msg in
if let ip = ipAddress {
print("ssh -i /path/to/keypair.pem root@\(ip)")
}
Even a successful instance creation with an instanceId returned, the status would not be available in the first 5 seconds after the creation.
ecs.loadInstances(region: "cn-hongkong", tags: ["Perfect":"1"]) {
instanses, msgs in
}The instances array [Instance] described as below:
| Property | Alibaba Cloud Official Document Name | Property | Alibaba Cloud Official Document Name |
|---|---|---|---|
| id | InstanceId | name | InstanceName |
| remark | Description | imageId | ImageId |
| region | RegionId | zone | ZoneId |
| cpu | CPU | memory | Memory |
| type | InstanceType | typeFamily | InstanceTypeFamily |
| host | HostName | status | Status |
| securityGroups | SecurityGroupIds | ipPublic | PublicIpAddress.ipAddress |
| maxBandwidthIn | InternetMaxBandwidthIn | maxBandwidthOut | InternetMaxBandwidthOut |
| chargeTypeInternet | InternetChargeType | chargeTypeInstance | InstanceChargeType |
| creationTime | CreationTime | ipPrivate | InnerIpAddress.ipAddress |
| networkType | InstanceNetworkType | operationLocks | OperationLocks |
| deviceAvailable | DeviceAvailable | ioOptimized | IoOptimized |
| expiration | ExpiredTime | keyPairName | KeyPairName |
ecs.startInstance(instanceId: id) {
success, message in
// success will be true if the instance started.
}Check source code AcsRequest and you can easily extend this class to all Alibaba cloud REST API