Alibaba Cloud CLI で ECS を作成

こんにちは。
ネクストスケープの開發@mamikaihatsu)です。

今回は、実際に Alibaba Cloud CLI で簡単なWEBサーバを構築する事を想定して作成します。

ECSを作成するには、配置場所である仮想ネットワークはもちろんの事ですが
仮想スイッチ、セキュリティグループ、パブリックIPが必要になります。
これらに該当する Alibaba Cloud のプロダクトも含めて、下記を順に作成します。

  • VPC(仮想ネットワーク)
  • VSwitch(仮想スイッチ)
  • Security Group(セキュリティグループ)
  • ECS(仮想マシン)
  • EIP(パブリックIP)

まずは基礎から学びたい方は、先に以下の過去記事をご参考にしてください。

Alibaba Cloud CLIをインストールして動かしてみた
これだけは覚えておきたい Alibaba Cloud CLI の基本的な使い方
Alibaba Cloud CLI で ID確認


では、作成していきましょう。
各インスタンスの作成については、コマンド、パラメーターの一覧、作成後の返り値をそれぞれ記載致します。

VCPの作成

$ aliyun vpc CreateVpc --RegionId ap-northeast-1 --CidrBlock 10.0.0.0/8 --VpcName sample-vpc

CidrBlockを指定しなかった場合は、デフォルト値である 172.16.0.0/12 になります。

Parameters:
  --RegionId        String  Required
  --CidrBlock       String  Optional
  --ClientToken     String  Optional
  --Description     String  Optional
  --EnableIpv6      Boolean Optional
  --Ipv6CidrBlock   String  Optional
  --ResourceGroupId String  Optional
  --UserCidr        String  Optional
  --VpcName         String  Optional

返り値:

{"RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx","ResourceGroupId":"rg-xxxx","RouteTableId":"vtb-xxxx","VpcId":"vpc-xxxx","VRouterId":"vrt-xxxx"}

作成されたVCPのIDである「VpcId」が発行されます。
また、今回は触れませんが、RouteTableが自動で作成されます。


VSwitchの作成

$ aliyun ecs CreateVSwitch --VpcId vpc-xxxx --ZoneId ap-northeast-1a --CidrBlock 10.0.0.0/24 --VSwitchName sample-vsw
Parameters:
  --CidrBlock   String  Required
  --VpcId       String  Required
  --ZoneId      String  Required
  --ClientToken String  Optional
  --Description String  Optional
  --RegionId    String  Optional
  --VSwitchName String  Optional

返り値:

{"RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx","VSwitchId":"vsw-xxxx"}

作成されたVSwitchのIDである「VSwitchId」が発行されます。


Security Groupの作成

$ aliyun ecs CreateSecurityGroup --RegionId=ap-northeast-1 --VpcId vpc-xxxx --SecurityGroupName sample-sg
Parameters:
  --RegionId          String  Required
  --ClientToken       String  Optional
  --Description       String  Optional
  --ResourceGroupId   String  Optional
  --SecurityGroupName String  Optional
  --Tag.n.Key         String  Optional
  --Tag.n.Value       String  Optional
  --Tag.n.key         String  Optional
  --Tag.n.value       String  Optional
  --VpcId             String  Optional

返り値:

{"SecurityGroupId":"sg-xxxx","RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx"}

作成されたSecurityGroupのIDである「SecurityGroupId」が発行されます。


Security Groupに受信ルール追加

Webサーバとして利用するので80番ポートを開いておきます。
後は必要に応じてHTTPS(443),社内IPなど特定のIPで制限をかけてWindowsはRDP(3389)、Linuxの場合はSSH(22)などルールを追加してください。

$ aliyun ecs AuthorizeSecurityGroup --SecurityGroupId=sg-xxxx --SourceCidrIp=0.0.0.0/0 --IpProtocol=tcp --PortRange=80/80 --NicType=intranet --Policy=accept
Parameters:
  --IpProtocol              String  Required
  --PortRange               String  Required
  --RegionId                String  Required
  --SecurityGroupId         String  Required
  --ClientToken             String  Optional
  --Description             String  Optional
  --DestCidrIp              String  Optional
  --Ipv6DestCidrIp          String  Optional
  --Ipv6SourceCidrIp        String  Optional
  --NicType                 String  Optional
  --Policy                  String  Optional
  --Priority                String  Optional
  --SourceCidrIp            String  Optional
  --SourceGroupId           String  Optional
  --SourceGroupOwnerAccount String  Optional
  --SourceGroupOwnerId      Long    Optional
  --SourcePortRange         String  Optional

返り値:

{"RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx"}


ECSの作成


今回、課金タイプ(InstanceChargeType)は従量課金(PostPaid)で、インスタンスタイプ(InstanceType)は汎用タイプファミリ(ecs.n4.large)のイメージ(ImageId)は Windows Server 2016 日本語版で作成します。
ImageIdやInstanceTypeの種類を確認したい場合は、コチラの記事をご参考にしてください。

$ aliyun ecs CreateInstance --RegionId ap-northeast-1 --ZoneId ap-northeast-1a --ImageId win2016_64_dtc_1607_ja-jp_40G_alibase_20181220.vhd --VSwitchId vsw-xxxx --PrivateIpAddress 10.0.0.10 --InstanceType ecs.n4.large --SecurityGroupId sg-xxxx --InstanceChargeType PostPaid --InstanceName sample-ecs
Parameters:
  --ImageId                       String  Required
  --InstanceType                  String  Required
  --RegionId                      String  Required
  --AutoRenew                     Boolean Optional
  --AutoRenewPeriod               Integer Optional
  --ClientToken                   String  Optional
  --ClusterId                     String  Optional
  --CreditSpecification           String  Optional
  --DataDisk.n.Category           String  Optional
  --DataDisk.n.DeleteWithInstance Boolean Optional
  --DataDisk.n.Description        String  Optional
  --DataDisk.n.Device             String  Optional
  --DataDisk.n.DiskName           String  Optional
  --DataDisk.n.Encrypted          Boolean Optional
  --DataDisk.n.Size               Integer Optional
  --DataDisk.n.SnapshotId         String  Optional
  --DedicatedHostId               String  Optional
  --DeletionProtection            Boolean Optional
  --DeploymentSetId               String  Optional
  --Description                   String  Optional
  --DryRun                        Boolean Optional
  --HostName                      String  Optional
  --HpcClusterId                  String  Optional
  --InnerIpAddress                String  Optional
  --InstanceChargeType            String  Optional
  --InstanceName                  String  Optional
  --InternetChargeType            String  Optional
  --InternetMaxBandwidthIn        Integer Optional
  --InternetMaxBandwidthOut       Integer Optional
  --IoOptimized                   String  Optional
  --KeyPairName                   String  Optional
  --NodeControllerId              String  Optional
  --Password                      String  Optional
  --PasswordInherit               Boolean Optional
  --Period                        Integer Optional
  --PeriodUnit                    String  Optional
  --PrivateIpAddress              String  Optional
  --RamRoleName                   String  Optional
  --ResourceGroupId               String  Optional
  --SecurityEnhancementStrategy   String  Optional
  --SecurityGroupId               String  Optional
  --SpotInterruptionBehavior      String  Optional
  --SpotPriceLimit                Float   Optional
  --SpotStrategy                  String  Optional
  --SystemDisk.Category           String  Optional
  --SystemDisk.Description        String  Optional
  --SystemDisk.DiskName           String  Optional
  --SystemDisk.Size               Integer Optional
  --Tag.n.Key                     String  Optional
  --Tag.n.Value                   String  Optional
  --Tag.n.key                     String  Optional
  --Tag.n.value                   String  Optional
  --UseAdditionalService          Boolean Optional
  --UserData                      String  Optional
  --VSwitchId                     String  Optional
  --VlanId                        String  Optional
  --ZoneId                        String  Optional

返り値:

{"InstanceId":"i-xxxx","RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx"}

作成されたECSインスタンスのIDである「InstanceId」が発行されます。


Elastic IPの作成

$ aliyun vpc AllocateEipAddress --RegionId ap-northeast-1  --Bandwidth 10 --InternetChargeType  PayByTraffic --InstanceChargeType PostPaid
Parameters:
  --RegionId           String  Required
  --AutoPay            Boolean Optional
  --Bandwidth          String  Optional
  --ClientToken        String  Optional
  --ISP                String  Optional
  --InstanceChargeType String  Optional
  --InternetChargeType String  Optional
  --Netmode            String  Optional
  --Period             Integer Optional
  --PricingCycle       String  Optional
  --ResourceGroupId    String  Optional

返り値:

{"ResourceGroupId":"rg-xxxx","RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx","EipAddress":"xx.xx.xx.xx","AllocationId":"eip-xxxx"}

作成されたEIPのIDである「AllocationId」と、パブリックIPのアドレス「EipAddress」が発行されます。
作成しただけではまだECSに繋がらないので、次にEIPをECSにバインドさせます。

EIPをECSへバインド

$ aliyun vpc AssociateEipAddress --AllocationId eip-xxxx --InstanceId i-xxxx

返り値:

{"RequestId":"xxxx-xxxx-xxxx-xxxx-xxxx"}

これで作成自体は完了です。
今の状態では、まだECSは停止しているので起動させます。


ECSを起動

$ aliyun ecs StartInstance --InstanceId i-xxxx


WEBサーバですので後は、IISやApacheなどのWebサーバソフトウェアをインストールして設定等するだけですね。


まとめ

確認も兼ねて1つ1つコマンドを作成しましたが、何度も同じ構成を作成する場合は
変数に入れるなどまとめてしまった方がとても楽に作成できます。

Tags:,