Amazon Cloud Directory を使ってみました – Object の作成と Attributes の取得

Amazon Cloud Directory とは

Amazon Cloud Directory (以降 Cloud Directory) は、AWS が新たに提供するフルマネージドのディレクトリサービスです。2017年1月下旬にリリースされました。

directory-service

柔軟性に優れており、複数のディメンションにまたがる階層構造を構築できるところが特長です。Amazon Cognito User Pools や AWS Organizations などのような既存の AWS サービスの一部としても使われており、新しいながらもかなり実績のあるサービスです。また、様々な AWS サービスで活用されていることから、かなり汎用性が高いサービスとも言えるでしょう。

Cloud Directory では Schema や Facet や Object や Policy などと言った色々な単語が出てきます。Cloud Directory を使いこなすには Cloud Directory が持つ考え方を理解する必要があります。とはいえ、使ってみないことには始まりませんので、まずは何も考えず触ってみました。

Cloud Directory を作成する

Cloud Directory は AWS Directory Service の一部として提供されているので、まずは AWS Directory Service のマネジメントコンソールを開きましょう。なお、現在は東京リージョン (ap-northeast-1) では提供されていないので、バージニア (us-east-1) などで開くようにしましょう。

一番上に表示されている「Amazon Cloud Directory」の「Set up directory」を選びます。

directory-service-01

Name を適当に入力し、Schema を選びます。サンプルの Schema として person organization device が用意されています。一番シンプルそうな device を選択してみました。

directory-service-02

Schema のバージョンを決めます。

directory-service-03

Review して Launch すると Directory の一覧で作成されていることが確認できます。

directory-service-04

Directory 詳細を開いて、Directory の ARN と Schema の ARN をメモしておきます。あとで使います。

directory-service-05

Object を作成して、取得してみる

次に、作成した Directory に Object を作成してみましょう。Object の作成は Cloud Directory API を使って行います。今回は AWS CLI を使いました。最新版にアップデートしておきましょう。

$ pip install --upgrade --user awscli

CreateObject という API を使います。この API を叩くため、まずはリクエストのスケルトンを作成しましょう。

$ aws clouddirectory create-object --generate-cli-skeleton > create-object-request.json

必須っぽいところだけ入れます。Schema の各属性値の制約事項についてはこちらに書いてありますので、準拠した値を設定します。

{
    "DirectoryArn": "Directory の ARN", 
    "SchemaFacets": [
        {
            "SchemaArn": "Schema の ARN", 
            "FacetName": "Facet の名前 (devices など)"
        }
    ], 
    "ObjectAttributeList": [
        {
            "Key": {
                "SchemaArn": "Schema の ARN", 
                "FacetName": "Facet の名前 (devices など)", 
                "Name": "キー名"
            }, 
            "Value": {
                "StringValue": "値"
            }
        }
    ]
}

次のコマンドで呼び出します。

$ aws clouddirectory --region us-east-1 create-object --cli-input-json file://create-object-request.json

成功すると次のようなレスポンスが返って来ますので、ObjectIdentifier をコピーしておきます。

{
    "ObjectIdentifier": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

次に、この ObjectIdentifier を使って、先ほど作成した Object の属性情報を取得してみましょう。属性情報の取得は ListObjectAttributes API を使います。

$ aws clouddirectory --region us-east-1 list-object-attributes \
--directory-arn <ディレクトリの ARN> \
--object-reference Selector=$"<ObjectIdentifier>"

ここでのポイントは object-reference というものです。Object を参照するための特定の形式ですが、ObjectIdentifier で特定するには $"<ObjectIdentifier>" という形式で指定する必要があります。

結果、取得することができました。

{
    "Attributes": [
        {
            "Value": {
                "StringValue": "Example Device"
            },
            "Key": {
                "SchemaArn": "<Schema の ARN>",
                "FacetName": "devices",
                "Name": "name"
            }
        }
    ]
}

まとめ

今回は Cloud Directory をまずはサクッと触ってみたい!という目的で、Object を作成するところまでをやってみました。Cloud Directory の作りは奥が深く、とても1記事だけでは語りきれなそうです。

今回取り上げた内容は、Cloud Directory の全体から考えると、氷山の一角をコツンとやったくらいに思っていただけると幸いです。きっと、後続の記事たちが徐々に解き明かしていくことでしょう!

参考ドキュメント

本記事は、下記のドキュメントを参考に執筆しています。