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]というように、イコール無しだとエラーになるので注意が必要です。
こういうイレギュラーなのは現時点ではこれだけですが
他パラメータに関してもイコール入れても問題ないので、常に入れておくっていうのも有りかもしれないですね。