はじめに
本投稿は SBCloud Engineers' Blog にも投稿しています。SBCloud Engineers' Blogには日中間接続をはじめ、Alibaba Cloud関連のソリューションや技術ネタを記載していますので、よかったら是非一度アクセスみてください。
私が所属している部署では、Alibaba Cloud利用を検討されているお客様にトレーニングを実施しております。
トレーニング終了後、利用されていたリソースの削除は基本的に講師側が手動で削除していました。リソースの間に依存関係もあり、リソース削除の時に削除順番を気をつけないといけないですし、何よりトレーニング受講者の数が多いほど、リソース削除作業の負担が大きくなります。実は自分も手動で対応したことがありますが、一個ずつアカウントにログインして、削除順番を確認しながらリソースを削除するなんて苦痛で仕方がありません。ですので、簡単にリソースを一括削除できるようにしました。
アーキテクチャ
何をしたかと言いますと、PostmanとCircleCIを利用して、APIコール一発でトレーニングで利用されていたリソースを全部削除できる仕組みを作って、運用開始しました。
アーキテクチャの全体像は以下になりますが、赤線の部分が今回紹介する対象です。
デモ動画
全体の動きについては、下記約3分のデモ動画をご確認ください。
※デモのため、作成したAlibaba Cloudリソースは一部のみになります。
デモ動画 → 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には下記3つの作業が必要です。
1: Personal API Tokensの発行
PostmanからCircleCIのAPIを呼び出すためにはトークンを用いた認証が必要なので、CIrcleCIのUser settingsのPersonal API Tokensページにてトークンを発行します。
2: プロジェクトの追加
対象のGitHubのリポジトリーを指定して、ビルドのプロジェクトを追加します。CircleCIは指定されたリポジトリーからコードを取得して、ジョブを実行します。
3: 環境変数として、Alibaba CloudのAccessKey等の設定
CircleCIのジョブでAccessKeyを利用して、Alibaba Cloud上のリソースを操作する必要があるので、下記のように、対象のプロジェクトに環境変数を設定します。 ${環境変数} で呼び出せます。
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を実行します。
最後
CircleCIとPostmanを利用することで、ローカル環境からAPIコール一発でAlibaba Cloud上のリソースを削除できるようにできました。最終的にはリソース削除の作業とかも全部自動化したいと思っていますので、それを実現できましたら、また皆さんと共有させていただきます。
また、今回はCIサービスを利用して、Alibaba Cloud上のリソースを削除することにしましたが、CI/CDとかもできますので、ご興味ある方は Alibaba CloudとWerckerでCI/CDパイプラインを作ってみた をご確認ください。