リソース作成者の取得方法(Java SDK編)

こんにちは、サイオステクノロジー技術部の武井です。今回は、前回に引き続き、リソース作成者を取得する方法をご案内します。今回はみんな大好きJavaのSDKを使ってやってみます。

前回のようにRest APIでもいいのですが、やっぱり生JSONは面倒です。SDK使ったほうが、楽チンです。Java SDKを使えば、取得したデータをオブジェクトに詰め込んでくれますし。

では、早速ですが、取得方法を説明いたします。

Java SDKはgitに上がっています。AzureのJava SDKはMaven Central Repositoryに上がっているので、インストールも楽ちんなのですが、アクティビティログを取得するSDKだけはPreviewということで、Maven Central Repositoryにないです。自分でビルドするしかなさそうです。Previewなのですが、きっちり動くようです。マイクロソフトサポートの人もおすすめしていました。なので、多分大丈夫かと思いますが、なにせPreviewなので、自己責任でお願い致しますm(_ _)m

SDKをgitから落としてきます。

$ git clone https://github.com/Azure/azure-sdk-for-java.git

アクティビティログを取得するSDKだけでなく、全てのSDKを落としてくるので、すごく時間がかかります。

次にアクティビティログを取得するSDKのあるディレクトリに移動します。

$ cd azure-sdk-for-java/azure-mgmt-monitor

ビルドします。Mavenがインストールされていることが前提です。

$ mvn clean package

targetフォルダのなかに「azure-mgmt-monitor-バージョン番号.jar」というのが出来上がります。これをクラスパスの通るところに置きます。

以下のコードを書いて実行すれば、標準出力にリソース作成者が表示されます。ただし、下記のコードは、リソースの種別がリソースグループの場合です。

public class ResourceOwner {
private static final String client = "[前回取得したクライアントID]"; // クライアントID
private static final String tenant = "[前回取得したディレクトリID]"; // ディレクトリID
private static final String key = "[前回取得したキー]"; // キー
private static final String subscriptionId = "[リソースが存在するサブスクリプション]"; // サブスクリプションID
private static final String resourceId = "[任意のリソースのリソースID]"; // 作成者を取得したいリソースのID
public static void main(String[] args) {
ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(client, tenant, key,
AzureEnvironment.AZURE);
// Azure Monitor APIへの認証を行う
MonitorManager manager = MonitorManager.authenticate(credentials, subscriptionId);
// 90日前のログしか取れないので、現在日付から90日前の日付を生成する
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -90);
String startTimeStamp = sdf.format(cal.getTime());
// 作成者を取得したいリソースのIDを指定してAPIをコールする
PagedList eventDataInners = manager.innerEx().activityLogs().list(
"eventTimestamp ge '" + startTimeStamp + "' and resourceId eq '" + resourceId + "'",
"caller,operationName,subStatus");
// 取得した結果をループで回して、OperationNameとSubStatusが以下に一致するもののcallerがリソースの作成者とする
// OperationName:Microsoft.Resources/subscriptions/resourcegroups/write
// SubStatus:Created
for (EventDataInner eventDataInner : eventDataInners) {
if (eventDataInner.operationName().value().equals("Microsoft.Resources/subscriptions/resourcegroups/write")
&& eventDataInner.subStatus().value().equals("Created")) {
System.out.println(eventDataInner.caller());
}
}
}
}

以上で終わりです。やっぱりSDKは楽ちんですね。

Be the first to comment

コメント投稿

Your email address will not be published.


*