この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
サポート情報にAPIアクセスする
世の中にある様々な商品やサービスのサポート情報へのアクセスは、電話・メール・対面など、何かしら人が対応する必要があり、多少の工数追加は仕方ないと思う方も多いのではないでしょうか。AWSは、全てのリソースへのアクセスにAPIを用意するという理念の下(私が勝手に想像しましたw )、あらゆるサービスにAPIを用意しています。このたび、AWSサポートのビジネスとエンタープライズ向けにAWSサポート関連の情報へアクセスするためにAPIが用意されました!
用意されているAPI
現在公開されているAWSサポート情報アクセスのAPIはいかになります。
- Support Case Management
- AWS Trusted Advisor
Support Case Management
- サポートケースをオープン
- 一覧と詳細の表示
- 解決済みを含む、日付や文字列による検索
- やり取りしたり、連絡先のメールアドレスを記述
- サポートケースを解決
AWS Trusted Advisor
- チェック項目と名前の取得
- アカウントとリソースに対してチェックを依頼
- サマリーや詳細情報を取得
- チェックの更新依頼
- それぞれのチェックのステータスを取得
サポートケースに関するAPI
サービスとカテゴリ一覧
サポートケースを作成する際に、サービス名とカテゴリを指定します。どんなものが指定できるのか確認してみましょう。
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.Category;
import com.amazonaws.services.support.model.DescribeServicesRequest;
import com.amazonaws.services.support.model.DescribeServicesResult;
import com.amazonaws.services.support.model.Service;
public class AWSSupportApp {
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
DescribeServicesRequest request = new DescribeServicesRequest();
request.withLanguage("ja");
DescribeServicesResult result = support.describeServices(request);
for (Service service : result.getServices()) {
System.out.println("サービス名 : " + service.getName() + "(" + service.getCode() + ")");
for (Category category : service.getCategories()){
System.out.println(" カテゴリ名 : " + category.getName() + "(" + category.getCode() + ")");
}
}
}
}
実行結果は以下です。(件数が多いため省略して表示しています。)
・・・
サービス名 : Elastic Compute Cloud (EC2 - Linux)(amazon-elastic-compute-cloud-linux)
カテゴリ名 : その他(other)
カテゴリ名 : 新機能・改善のご要望(feature-request)
カテゴリ名 : APIs(apis)
カテゴリ名 : 一般的なご質問(general-guidance)
カテゴリ名 : インスタンス関連(instance-issue)
カテゴリ名 : Apache(apache)
カテゴリ名 : ディスクの設定(disk-configurations)
カテゴリ名 : Eメールサービス(email-services)
カテゴリ名 : FTP(ftp)
カテゴリ名 : MySQL(mysql)
カテゴリ名 : VPNソリューション(vpn-solutions)
カテゴリ名 : 予定されたイベント(scheduled-event)
・・・
優先順位
サポートケースを登録する際に指定する優先順位の一覧です。
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.DescribeSeverityLevelsRequest;
import com.amazonaws.services.support.model.DescribeSeverityLevelsResult;
import com.amazonaws.services.support.model.SeverityLevel;
public class AWSSupportApp {
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
DescribeSeverityLevelsRequest request = new DescribeSeverityLevelsRequest();
request.withLanguage("ja");
DescribeSeverityLevelsResult result = support.describeSeverityLevels(request);
for (SeverityLevel level : result.getSeverityLevels()) {
System.out.println("優先順位 : " + level.getName() + "(" + level.getCode() + ")");
}
}
}
実行結果は以下です。
優先順位 : 低(low)
優先順位 : 標準(normal)
優先順位 : 高(high)
優先順位 : 緊急(urgent)
サポートケースの新規作成
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.CreateCaseRequest;
import com.amazonaws.services.support.model.CreateCaseResult;
public class AWSSupportApp {
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
CreateCaseRequest request = new CreateCaseRequest()
.withServiceCode("amazon-elastic-compute-cloud-linux")
.withCategoryCode("feature-request")
.withLanguage("ja")
.withCcEmailAddresses("hogehoge@example.com")
.withCommunicationBody("test support api from java programming")
.withSubject("TEST SUPPORT")
.withSeverityCode("low");
CreateCaseResult result = support.createCase(request);
System.out.println("ケースID : "+ result.getCaseId());
}
}
実行結果は以下です。
ケースID : case-XXXXXXXXXXXX-mjja-2013-8e1b13345c3bXXXX
サポートケースの一覧
import java.util.List;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.CaseDetails;
import com.amazonaws.services.support.model.DescribeCasesRequest;
import com.amazonaws.services.support.model.DescribeCasesResult;
public class AWSSupportApp {
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
DescribeCasesRequest request = new DescribeCasesRequest()
.withLanguage("ja")
.withIncludeResolvedCases(true);
DescribeCasesResult result = support.describeCases(request);
List<CaseDetails> caseDetailsList = result.getCases();
for (CaseDetails caseDetails : caseDetailsList) {
System.out.println("ケースID : " + caseDetails.getCaseId());
System.out.println(" 表示ID : " + caseDetails.getDisplayId());
System.out.println(" ステータス : " + caseDetails.getStatus());
System.out.println(" 題名 : " + caseDetails.getSubject());
}
}
}
実行結果は以下です。
ケースID : case-XXXXXXXXXXXX-mjja-2013-8e1b13345c3bXXXX
表示ID : 4369823
ステータス : resolved
題名 : ホゲホゲについて1
ケースID : case-XXXXXXXXXXXX-mjja-2013-8e1b13345c3bYYYY
表示ID : 4369833
ステータス : resolved
題名 : ホゲホゲについて2
・・・
サポートケースを解決済みにする
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.ResolveCaseRequest;
import com.amazonaws.services.support.model.ResolveCaseResult;
public class AWSSupportApp {
private static String caseId = "case-XXXXXXXXXXXX-mjja-2013-8e1b13345c3bXXXX";
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
ResolveCaseRequest request = new ResolveCaseRequest()
.withCaseId(caseId);
ResolveCaseResult result = support.resolveCase(request);
System.out.println("Initial case status: " + result.getInitialCaseStatus());
System.out.println("Final case status: " + result.getFinalCaseStatus());
}
}
実行結果は以下です。
Initial case status: reopened
Final case status: resolved
Trusted Advisorに関するAPI
Trusted Advisorがチェックする項目一覧
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.DescribeTrustedAdvisorChecksRequest;
import com.amazonaws.services.support.model.DescribeTrustedAdvisorChecksResult;
import com.amazonaws.services.support.model.TrustedAdvisorCheckDescription;
public class AWSSupportApp {
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
DescribeTrustedAdvisorChecksRequest request = new DescribeTrustedAdvisorChecksRequest()
.withLanguage("ja");
DescribeTrustedAdvisorChecksResult checks = support
.describeTrustedAdvisorChecks(request);
for (TrustedAdvisorCheckDescription check : checks.getChecks()) {
System.out.println("ID : " + check.getId());
System.out.println(" カテゴリ : " + check.getCategory());
System.out.println(" 名前 : " + check.getName());
System.out.println(" メタデータ : " + check.getMetadata());
}
}
}
実行結果は以下です。
ID : 1MoPEMsKx6
カテゴリ : cost_optimizing
名前 : EC2 リザーブドインスタンスの最適化
メタデータ : [リージョン/AZ, インスタンスタイプ, OS, 有効なRI数(1年か3年), 先月のインスタンス利用数 最大/平均/最小, 1年間RI台数のお勧め, 請求の見積もり(本AZにおいてのみ), 前払い, 予想請求額(最適なRI数), 月毎の予想割引, リージョン/AZ, インスタンスタイプ, OS, 有効なRI数(1年か3年), 先月のインスタンス利用数 最大/平均/最小, 3年間RI台数のお勧め, 請求の見積もり(本AZにおいてのみ), 前払い, 予想請求額(最適なRI数), 月毎の予想割引]
ID : HCP4007jGY
カテゴリ : security
名前 : セキュリティグループ - 開かれたポート
メタデータ : [リージョン, セキュリティグループ名, セキュリティグループID, プロトコル, ステータス, ポート]
ID : iqdCTZKCUp
カテゴリ : fault_tolerance
名前 : Elastic Load Balancer の最適化
メタデータ : [リージョン, ELB名, ゾーン数, ゾーン a 内インスタンス, ゾーン b 内インスタンス, ゾーン c 内インスタンス, ゾーン d 内インスタンス, ゾーン e 内インスタンス, ステータス, 理由]
・・・
Trusted Advisorのチェック結果
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.DescribeTrustedAdvisorCheckResultRequest;
import com.amazonaws.services.support.model.DescribeTrustedAdvisorCheckResultResult;
import com.amazonaws.services.support.model.TrustedAdvisorCheckResult;
public class AWSSupportApp {
private static String checkId = "iqdCTZKCUp";
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
DescribeTrustedAdvisorCheckResultRequest checkResultRequest = new DescribeTrustedAdvisorCheckResultRequest()
.withCheckId(checkId);
DescribeTrustedAdvisorCheckResultResult checkResult = support
.describeTrustedAdvisorCheckResult(checkResultRequest);
TrustedAdvisorCheckResult result = checkResult.getResult();
System.out.println("チェックID : " + result.getCheckId());
System.out.println(" ステータス : " + result.getStatus());
System.out.println(" カテゴリーサマリー : "
+ result.getCategorySpecificSummary());
System.out.println(" リソースサマリー : " + result.getResourcesSummary());
System.out.println(" リソース詳細 : " + result.getFlaggedResources());
}
}
実行結果は以下です。
チェックID : iqdCTZKCUp
ステータス : warning
カテゴリーサマリー : {CostOptimizing: {EstimatedMonthlySavings: 0.0,EstimatedPercentMonthlySavings: 0.0}}
リソースサマリー : {ResourcesProcessed: 2,ResourcesFlagged: 2,ResourcesIgnored: 0,ResourcesSuppressed: 0}
リソース詳細 : [{Status: warning,Region: ap-northeast-1,ResourceId: hpieQxCif67yD9jZpxC1--7Ccy80smINC0pXf2C82fs,IsSuppressed: false,Metadata: [ap-northeast-1, awseb-e-h-AWSEBLoa-S59KFWFPRRR1, 3, 0, 1, 0, 0, 0, Yellow, Single AZ]}, {Status: warning,Region: ap-northeast-1,ResourceId: Q9lZLAh_vTFu_D7AVBdSEQY4WjQNZTpskIgOis70Gok,IsSuppressed: false,Metadata: [ap-northeast-1, jmeter, 1, 0, 1, 0, 0, 0, Yellow, Single AZ]}]
Trusted Advisorによるチェック進捗
import java.util.List;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.support.AWSSupportClient;
import com.amazonaws.services.support.model.DescribeTrustedAdvisorCheckRefreshStatusesRequest;
import com.amazonaws.services.support.model.DescribeTrustedAdvisorCheckRefreshStatusesResult;
import com.amazonaws.services.support.model.TrustedAdvisorCheckRefreshStatus;
public class AWSSupportApp {
private static String checkId = "iqdCTZKCUp";
public static void main(String[] args) {
AWSCredentialsProvider credentialsProvider = new ClasspathPropertiesFileCredentialsProvider();
AWSSupportClient support = new AWSSupportClient(credentialsProvider);
DescribeTrustedAdvisorCheckRefreshStatusesRequest request =
new DescribeTrustedAdvisorCheckRefreshStatusesRequest()
.withCheckIds(checkId);
DescribeTrustedAdvisorCheckRefreshStatusesResult result =
support.describeTrustedAdvisorCheckRefreshStatuses(request);
List<TrustedAdvisorCheckRefreshStatus> list = result.getStatuses();
for (TrustedAdvisorCheckRefreshStatus status : list) {
System.out.println("チェックID : " + status.getCheckId());
System.out.println(" ステータス : " + status.getStatus());
System.out.println(" 次の更新まで : "
+ status.getMillisUntilNextRefreshable());
}
}
}
実行結果は以下です。
チェックID : iqdCTZKCUp
ステータス : success
次の更新まで : 115049
まとめ
AWSサポートが画面で提供しているSupport CaseとTrusted Advisorの機能に関して、ほぼ全ての情報にアクセスできることが分かりました。これでサポートに関してシステム間連携もできますね。そのうち、よくある質問内容に関してコード番号が振られて、AWSサポートの方々が手作業でチェックしなくても、自動で確認して回答できるようになるのではと期待しています。