原文鏈接:《AWS SDK for Java(Developer Guide)》
譯文部分↓↓↓
這部分提供了使用Java的AWS開發工具包對Amazon EC2進行編程的示例。
Topics:
·教程:啓動EC2實例
·使用IAM角色授予對Amazon EC2上的資源的訪問權
·教程:Amazon EC2競價型實例
·教程:高級Amazon EC2競價請求管理
·管理Amazon EC2實例
·在Amazon EC2中使用彈性IP地址
·使用地域和可用區域
·使用Amazon EC2的密鑰對
·在Amazon EC2中使用安全組
教程:啓動EC2實例
本教程演示如何利用SDK編程來啓動EC2實例。
在開始之前,請確保已經創建AWS賬戶並設置AWS憑證。
創建Amazon EC2安全組
創建一個安全組,作爲虛擬防火牆來控制一個或多個EC2實例。默認情況下,Amazon EC2將您的實例與不允許入站流量(inbound traffic)的安全組關聯。您可以創建允許EC2實例接收特定流量的安全組。例如,如果需要連接到Linux實例,就必須將安全組配置爲允許SSH流量。可以通過Amazon EC2控制檯或者Java的AWS SDK來創建安全組。
您可以創建在EC2-Classic或者EC2-VPC中使用的安全組。更多信息請參閱支持的平臺(在Amazon EC2用戶指南(用於Linux實例)中)。
更多關於使用Amazon EC2控制檯創建安全組的信息,請參閱Amazon EC2安全組(在Amazon EC2用戶指南(用於Linux實例)中)。
創建安全組
CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest();
csgr.withGroupName("JavaSecurityGroup").withDescription("My security group");
在初始化Amazon EC2客戶端時,必須確保安全組名稱在您的AWS區域是唯一的。安全組名稱和描述需要使用US-ASCII字符。
CreateSecurityGroupResult createSecurityGroupResult = amazonEC2Client.createSecurityGroup(csgr);
如果您創建的安全組與已存在的安全組重名,createSecurityGroup會拋出異常。
對安全組傳入進行授權
1.創建並初始化IpPermission實例。使用withIpv4Ranges方法設置傳入授權的IP地址範圍,withIpProtocol方法設置IP協議。使用withFromPort和withToPort方法可以指定授權傳入的端口範圍。如下所示:
IpPermission ipPermission = new IpPermission();
IpRange ipRange1 = new IpRange().withCidrIp("111.111.111.111/32");
IpRange ipRange2 = new IpRange().withCidrIp("150.150.150.150/32");
ipPermission.withIpv4Ranges(Arrays.asList(new IpRange[] {ipRange1, ipRange2}))
.withIpProtocol("tcp")
.withFromPort(22)
.withToPort(22);
必須滿足IpPermission對象指定的所有條件,才能允許傳入。
使用CIDR表示法指定IP地址。如果指定TCP/UDP協議,必須提供源端口和目標端口。只有當指定TCP或UDP時才能授權端口。
2.創建並初始化一個AuthorizeSecurityGroupIngressRequest實例。使用withGroupName方法指定安全組名稱,並將之前初始化的IpPermission對象傳給withIpPermission方法,如下所示:
AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest =
new AuthorizeSecurityGroupIngressRequest();
authorizeSecurityGroupIngressRequest.withGroupName("JavaSecurityGroup")
.withIpPermissions(ipPermission);
3.將請求對象傳遞給authorizeSecurityGroupIngress方法,如下所示:
amazonEC2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
如果使用已授權傳入的IP地址調用authorizeSecurityGroupIngress,該方法會拋出異常。在調用AuthorizeSecurityGroupIngress之前,創建並初始化新的IpPermission對象,對不同的IP、端口和協議進行傳入授權。
創建密鑰對
啓動EC2時必須指定密鑰對,然後在連接實例時指定密鑰對的私有密鑰。您可以創建密鑰對,也可以使用在啓動其他實例時使用的現有的密鑰對。更多信息,請參閱Amazon EC2密鑰對(在Amazon EC2用戶指南(用於Linux實例)中)。創建密鑰對和保存私有密鑰
1.創建並初始化CreateKeyPairRequest實例。使用withKeyName方法設置密鑰對名稱,如下所示:CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest();
createKeyPairRequest.withKeyName(keyName);
·提示
密鑰對名稱必須唯一。如果嘗試創建的密鑰對與現有密鑰對相同,將會引發異常。
2.向createKeyPair方法傳遞請求對象。該方法將返回一個CreateKeyPairResult實例。如下所示:
CreateKeyPairResult createKeyPairResult = amazonEC2Client.createKeyPair(createKeyPairRequest);
3.調用結果對象的getKeyPair方法來獲得KeyPair對象。調用KeyPair對象的getKeyMaterial方法,以獲取未加密的PEM編碼私有密鑰,如下所示:
KeyPair keyPair = new KeyPair();
keyPair = createKeyPairResult.getKeyPair();
String privateKey = keyPair.getKeyMaterial();
運行Amazon EC2實例
使用以下過程從同一個系統映像(AMI)啓動一個或多個具有相同配置的EC2實例。在創建EC2實例後,可以檢查其狀態。在您的EC2實例運行後,可以連接到它們。
啓動EC2實例
1.創建並初始化RunInstanceRequest實例。確保您指定的AMI、密鑰對以及安全組在您創建客戶端對象時指定的區域中存在。
RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
runInstancesRequest.withImageId("ami-4b814f22")
.withInstanceType("m1.small")
.withMinCount(1)
.withMaxCount(1)
.withKeyName("my-key-pair")
.withSecurityGroups("my-security-group");
說明:
·withImageId
AMI的ID。有關Amazon提供的公用AMI列表,請參閱Amazon系統映像(Amazon Machine Images)。
·withInstanceType
與指定的AMI兼容的實例類型。更多信息,請參閱實例類型(在Amazon EC2用戶指南(用於Linux實例)中)。
·withMinCount
待啓動的EC2實例的最小數量。如果此數量大於目標可用區中可以啓動的實例數,則EC2不會啓動任何實例。
·withMaxCount
待啓動的EC2實例的最大數量。如果此數量大於目標可用區中可以啓動的實例數,則EC2會啓動MinCount之上最大數量的實例。您可以啓動的實例數介於1和您允許爲該實例類型啓動的最大實例數之間。更多信息,請參閱Amazon EC2常見問題的“我可以在Amazon EC2中運行多少實例”。
·withKeyName
EC2密鑰對的名稱。如果在未指定密鑰對的情況下啓動實例,將無法連接到該實例。更多信息,請參閱創建密鑰對(上一小節)。
·withSecurityGroups
一個或多個安全組。更多信息,請參考創建Amazon EC2安全組(第一小節)。
2.通過將請求對象傳遞給runInstances方法來啓動實例。該方法返回一個RunInstancesResult對象,如下所示:
RunInstancesResult result = amazonEC2Client.runInstances(runInstancesRequest);
在實例運行後,可以使用密鑰對進行連接。更多信息,請參閱連接Linux實例(在Amazon EC2用戶指南(用於Linux實例)中)。