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から紐付けて自動デプロイを構築した。
今後改良していくとは思うが、中途半端ではありますがメモとして残しておきます。