リソース作成者の取得方法(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は楽ちんですね。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です