Alibaba CloudShell の Aliyun CLI で 一括プロダクト作成(not terraform)

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

過去の記事で、Alibaba Cloud CLI の基本的な使い方実際にECSインスタンスを作成したりしました。
私の場合ですが、テンプレート化した構成をサクッっと作りたい時は、terraform。
ちょっとネットワークだけ作りたい。セキュリティーグループに追加したいって時は、Aliyun CLIをたたいています。

ただ、Aliyun CLIは VPC作成 ⇒ VPCのIDをコピー ⇒ VSwitchを作成 ⇒ VSwitchのIDをコピー ⇒(略)
1つ1つコマンド走らせてコピーって面倒ですよね。
クライアント側でインストールしたAliyunを使用する場合は、jqが利用できるので作成されたプロダクトのIDを変数に入れる事が出来ますが
CloudShellを利用する時はjqが使えません。

CloudShellを使いたい!
1つ1つプロダクト作成してIDコピペとかやってられない!
そんな方の為に、いつも私がCloudShellで使用しているコマンドを紹介します。

※追記
CloudShellを使って、日本サイトから日本リージョン以外にプロダクトを作成する場合、以下コマンドでリージョンを切り替える必要があります。
AccessKeyやSecretKeyは空白のまま進めてOKです。
最後にKeyは入れてくださいというメッセージが出ますが、リージョンは切り替わっているので問題ありません(サポート確認済)

$ aliyun configure

Aliyun CLI

#!/bin/bash

# prefix
pre="sample"

# Region/Zone
RegionId="ap-northeast-1"
ZoneId="ap-northeast-1a"

# CreateVpc
VpcCidrBlock="172.18.0.0/16"
VpcName=$pre"-vpc"
res=$(aliyun vpc CreateVpc --RegionId $RegionId --CidrBlock $VpcCidrBlock --VpcName $VpcName)
VpcId=$(echo $res | sed 's/^.*"VpcId":"\([^"]*\)".*$/\1/')

# CreateVSwitch
VSwitchCidrBlock="172.18.0.0/24"
VSName=$pre"-vsw"
res=$(aliyun ecs CreateVSwitch --VpcId $VpcId --ZoneId $ZoneId --CidrBlock $VSwitchCidrBlock --VSwitchName $VSName)
VSwitchId=$(echo $res | sed 's/^.*"VSwitchId":"\([^"]*\)".*$/\1/')

# CreateSecurityGroup 
SGName=$pre"-sg"
res=$(aliyun ecs CreateSecurityGroup --RegionId=$RegionId --VpcId $VpcId --SecurityGroupName $SGName)
SecurityGroupId=$(echo $res | sed 's/^.*"SecurityGroupId":"\([^"]*\)".*$/\1/')

# AuthorizeSecurityGroup/Ping
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId $SecurityGroupId --SourceCidrIp 0.0.0.0/0 --IpProtocol icmp --PortRange=-1/-1

SourceCidrIp="0.0.0.0/0"

# AuthorizeSecurityGroup/HTTP
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId $SecurityGroupId --SourceCidrIp $SourceCidrIp --IpProtocol tcp --PortRange 80/80 --NicType intranet --Policy accept
# AuthorizeSecurityGroup/HTTPS
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId $SecurityGroupId --SourceCidrIp $SourceCidrIp --IpProtocol tcp --PortRange 443/443 --NicType intranet --Policy accept
# AuthorizeSecurityGroup/SSH
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId $SecurityGroupId --SourceCidrIp $SourceCidrIp --IpProtocol tcp --PortRange 22/22 --NicType intranet --Policy accept
# AuthorizeSecurityGroup/RDP
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId $SecurityGroupId --SourceCidrIp $SourceCidrIp --IpProtocol tcp --PortRange 3389/3389 --NicType intranet --Policy accept
# AuthorizeSecurityGroup/FTP
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId $SecurityGroupId --SourceCidrIp $SourceCidrIp --IpProtocol tcp --PortRange 20/21 --NicType intranet --Policy accept

まとめ

セキュリティグループの設定で、IPプロトコルがICMPの場合は
PortRange の指定は [–PortRange=-1/-1]になります。
[–PortRange -1/-1]というように、イコール無しだとエラーになるので注意が必要です。
こういうイレギュラーなのは現時点ではこれだけですが
他パラメータに関してもイコール入れても問題ないので、常に入れておくっていうのも有りかもしれないですね。