Linux
curl
deploy
CI
z.com

z.com APIを用いてのデプロイ

Z.com のセキュリティグループをAPIで変更してデプロイ

Z.comとは

https://z.com/jp/
GMOグループが去年始めた企業向け(?)クラウドサービス
基本的な機能は抑えて有り、料金もお手頃。
管理画面からインスタンス作成から削除等、使い方も簡単だがリリースして日が浅いからか痒い部分に手がとどかない
最近はブロックチェーン用のサービスも展開しており、今後の展開が面白そう

経緯

仕事で使った際に、CircleCIからの自動デプロイで手間取ったので備忘録兼、誰かの手助けになればと思い簡単にメモ
インフラ初心者なのと、メモ書き程度なので間違っていたりしても許してください

問題点

AWSへのCircleCIからのデプロイの場合、CodeDeployや、aws cliを用いてセキュリティグループに自IPを追加してのデプロイかと思われるのだが、
Z.comにはそのような機能は無く、あるのは豊富なAPI群
https://cloud.z.com/sg/ja/cloud/docs/

z.comクラウドのAPI利用方法

// トークン発行

curl -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"【ID】","password":"【パスワード】"},"tenantId":"【テナントID】"}}' \
https://identity.jpt1.cloud.z.com/v2.0/tokens | jq .

// セキュリティグループ一覧取得

curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
https://networking.jpt1.cloud.z.com/v2.0/security-groups | jq .

// セキュリティグループ作成

 curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
-d '{"security_group": {"name": "【作りたいセキュリティグループ名】"}}' \
https://networking.jpt1.cloud.z.com/v2.0/security-groups | jq .

// セキュリティグループルール追加

curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv4", "security_group_id": "【対象セキュリティグループID】", "port_range_min": "1", "port_range_max": "65535", "protocol": "tcp", "remote_ip_prefix": "【対象CIDER】"}}' \
https://networking.jpt1.cloud.z.com/v2.0/security-group-rules | jq .

// IP指定なし

curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv4", "security_group_id": "【対象セキュリティグループID】", "port_range_min": "22", "port_range_max": "22", "protocol": "tcp"}}' \
https://networking.jpt1.cloud.z.com/v2.0/security-group-rules | jq .

// セキュリティグループルール削除

curl -X DELETE \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
https://networking.jpt1.cloud.z.com/v2.0/security-group-rules/【対象セキュリティグループルールID】 | jq .

// セキュリティグループ削除

curl -X DELETE \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
https://networking.jpt1.cloud.z.com/v2.0/security-groups/【対象セキュリティグループID】 | jq .

// ポート情報

curl -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
https://networking.jpt1.cloud.z.com/v2.0/ports | jq .

// 割当

curl -X PUT \
-H "Accept: application/json" \
-H "X-Auth-Token: 【発行したトークン】" \
-d '{"port": {"security_groups": ["【割り当てたいセキュリティグループID】", "【複数入力可能】"]}}' \
https://networking.jpt1.cloud.z.com/v2.0/ports/【対象ポートID】 | jq .

自分の場合はpushに紐付けてデプロイ先のインスタンスのセキュリティグループの許可群にデプロイ元のIPを追加→デプロイ→セキュリティグループ削除
というのを行うスクリプトを設置して、git pushから紐付けて自動デプロイを構築した。

今後改良していくとは思うが、中途半端ではありますがメモとして残しておきます。