こんにちは、サイオステクノロジー技術部の武井です。今回は、前回に引き続き、リソース作成者を取得する方法をご案内します。今回はみんな大好き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は楽ちんですね。