CircleCI、Postmanを使って、Alibaba Cloud上のリソース一括削除

## はじめに

本投稿は [SBCloud Engineers' Blog](https://techblog.sbcloud.co.jp/) にも投稿しています。SBCloud Engineers' Blogには日中間接続をはじめ、Alibaba Cloud関連のソリューションや技術ネタを記載していますので、よかったら是非一度アクセスみてください。

私が所属している部署では、Alibaba Cloud利用を検討されているお客様にトレーニングを実施しております。

トレーニング終了後、利用されていたリソースの削除は基本的に講師側が手動で削除していました。リソースの間に依存関係もあり、リソース削除の時に削除順番を気をつけないといけないですし、何よりトレーニング受講者の数が多いほど、リソース削除作業の負担が大きくなります。実は自分も手動で対応したことがありますが、一個ずつアカウントにログインして、削除順番を確認しながらリソースを削除するなんて苦痛で仕方がありません。ですので、簡単にリソースを一括削除できるようにしました。



## アーキテクチャ
何をしたかと言いますと、PostmanとCircleCIを利用して、APIコール一発でトレーニングで利用されていたリソースを全部削除できる仕組みを作って、運用開始しました。

アーキテクチャの全体像は以下になりますが、赤線の部分が今回紹介する対象です。
![alt](https://techblog.sbcloud.co.jp/assets/2018/12/account.jpg)


## デモ動画
全体の動きについては、下記約3分のデモ動画をご確認ください。
<font color="red">※デモのため、作成したAlibaba Cloudリソースは一部のみになります。</font>

**デモ動画** → https://youtu.be/YlIA3-yebdM

デモ動画の流れは以下になります。

1: 利用されているリソースを確認する(デモ動画ですと、ECS、SLB、RDS、OSS)
2: PostmanでCircleCIのAPIを呼び出す
3: CircleCIは指定されているGitHubリポジトリーからコードを取得し、(リソース削除)のジョブを実行する
4: リソースを全部されたかどうかを確認する


## 利用するサービスと諸設定
上記のアーキテクチャには、GitHub, Aliyun CLI, RAM(Alibaba Cloud), CircleCI, Postmanを利用しています。諸サービスの詳細設定は割愛させていただきますが、簡単にどういった作業があるかを説明させていただきます。

### GitHub
GitHubの説明は割愛させていただきます。今回利用するシェルスクリプトをSB Cloudの aliyun_resource_management というリポジトリーに格納しました。

このあとで紹介するCircleCIは指定されたGitHub上にあるコードを取得して、実行します。

### Aliyun CLI
Aliyun Command Line Interface (Aliyun CLI)はAlibaba Cloud上のリソースを操作する管理ツール(Goベース)で、GitHubの aliyun-cli に公開されています。

pythonベースのAliyun CLIもありますが、開発が止まっており、利用を推奨しません。

今回はAliyun CLIを使ってリソース一括削除のシェルを作成しました。

### RAM
Training AccountにはManagement Accountから呼び出せるUserRoleを作成します。Management AccountにはTraining AccountのUserRoleに対してAssumeRoleできるRAM UserおよびそのユーザーのAccessKeyを作成します。

AssumeRoleについては以前投稿した ユーザーロールでの一時的な認証アクセスについて  にてご確認いただければと思います。簡単に言いますと、アカウントへの一時的な認証アクセスです。

作成したRAM UserにはAssumeRoleの権限を付与することが必要です。

### CircleCI
流行りのCIサービスです。無料プランもあって、非常に助かっています。

DroneやWerckerも検討していましたが、RoleのARNやRegionの情報などを渡したいので、今回はパラメーターを自由に渡せるCircleCIを利用することにしました。

CircleCIには下記３つの作業が必要です。

1: Personal API Tokensの発行
PostmanからCircleCIのAPIを呼び出すためにはトークンを用いた認証が必要なので、CIrcleCIのUser settingsのPersonal API Tokensページにてトークンを発行します。

2: プロジェクトの追加
対象のGitHubのリポジトリーを指定して、ビルドのプロジェクトを追加します。CircleCIは指定されたリポジトリーからコードを取得して、ジョブを実行します。

3: 環境変数として、Alibaba CloudのAccessKey等の設定
CircleCIのジョブでAccessKeyを利用して、Alibaba Cloud上のリソースを操作する必要があるので、下記のように、対象のプロジェクトに環境変数を設定します。 ${環境変数} で呼び出せます。
![alt](https://techblog.sbcloud.co.jp/assets/2018/12/tmp2.jpg)


### Postman
API開発やテストに非常に便利なツールです。今回はCircleCIのAPIを呼び出すに利用します。

CircleCIの公式ページ「Using the API to Trigger Jobs」を参考して、下記のようにHeadersにはContent-Typeとcircle-tokenを、Bodyにはbuild_parametersとしてリージョンの情報、実行するシェルの名前、AsumeRoleのARNを設定し、```https://circleci.com/api/v1.1/project/<vcs-type>/<org>/<repo>/tree/<branch>```に対してPOSTを実行します。
![alt](https://techblog.sbcloud.co.jp/assets/2018/12/tmp3.jpeg)
![alt](https://techblog.sbcloud.co.jp/assets/2018/12/tmp4.jpeg)


## 最後
CircleCIとPostmanを利用することで、ローカル環境からAPIコール一発でAlibaba Cloud上のリソースを削除できるようにできました。最終的にはリソース削除の作業とかも全部自動化したいと思っていますので、それを実現できましたら、また皆さんと共有させていただきます。

また、今回はCIサービスを利用して、Alibaba Cloud上のリソースを削除することにしましたが、CI/CDとかもできますので、ご興味ある方は [Alibaba CloudとWerckerでCI/CDパイプラインを作ってみた](https://techblog.sbcloud.co.jp/2017/06/23/cicd-with-alibabacloud-and-wercker/) をご確認ください。