SageMaker Studio スペースにタグを付与する

SageMaker Studio スペースにタグを付与する

Clock Icon2024.11.18

はじめに

コンサルティング部の神野です。

SageMaker Studio スペースにコスト配分タグを付与して、対象のスペースにどれぐらい費用が掛かっているのか確認したいケースがあったのですが、コンソール上からはタグを設定できる項目がなく、スペース自体にタグを付与できないのか?と気になりました。

公式ドキュメントを確認すると、タグを伝播させる(補足③を参照)かスペースにタグを付与できると記載があり、GUIではできないが、AWS CLIで設定できるのではと思い試してみました。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/custom-tags-add.html

公式ドキュメントから引用

既存のドメイン、ユーザープロファイル、スペースAddTagsAPIにカスタムタグを追加するには、次のように を使用する必要があります。

タグ付与のコマンド
aws sagemaker add-tags \
--resource-arn resource-arn-to-attach-tags \
--tags Key=key, Value=value  

やってみた

前提

  • ドメイン・タグを付与したいスペースは作成済み
  • コスト配分タグCmBillingGroupを使用

1. 対象SpaceのARNを取得

下記コマンドを実行して、タグを設定したいスペースのARNを確認します。

  • ドメインID:作成したスペースのドメインID
  • スペース名:タグを設定したいスペース名
対象スペースのARN取得コマンド
aws sagemaker describe-space --space-name <スペース名> --domain-id <ドメインID>

取得結果イメージ

SpaceArnで対象スペースのARNが取得可能で、手順2.で使用します。

取得結果のイメージ
{
  "DomainId": "XXX",
  "SpaceArn": "arn:aws:sagemaker:ap-northeast-1:<アカウントID>:space/<ドメインID>/sampleA",
  "SpaceName": "sampleA",
  "Status": "InService",
  "LastModifiedTime": "2024-11-07T22:20:34.087000+00:00",
  "CreationTime": "2024-11-07T22:20:28.818000+00:00",
  "SpaceSettings": {
    "AppType": "JupyterLab",
    "SpaceStorageSettings": {
      "EbsStorageSettings": {
        "EbsVolumeSizeInGb": 5
      }
    }
  },
  "OwnershipSettings": {
    "OwnerUserProfileName": "default-20241108T071632"
  },
  "SpaceSharingSettings": {
    "SharingType": "Private"
  },
  "Url": "https://xxx.studio.ap-northeast-1.sagemaker.aws/jupyterlab/default"
}

2. 対象のスペースにタグを付与

下記コマンドを実行して、対象のスペースにタグを付与します。

  • resource-arn:1. で取得したARN
  • Key:CmBillingGroup
  • Value:設定したい値(ex.space-space名など)
aws sagemaker add-tags --resource-arn <1. で取得したARN> --tags Key=CmBillingGroup,Value=<設定したい値>

取得結果イメージ

実行結果のイメージ
{
  "Tags": [
    {
      "Key": "CmBillingGroup",
      "Value": "space-sampleA"
    }
  ]
}

以上でタグの設定は完了です!実際にコスト配分タグが機能しているか確認してみます。

確認

AWS Cost Explorerからも確認できますが、今回は弊社メンバーズの画面から料金を確認します。

CleanShot 2024-11-11 at 19.21.24@2x

今回スペースを2つ作成し、space-sampleAspace-sampleB をそれぞれタグを付与して料金を可視化してみました!
コスト配分タグが機能していることを確認できました!

おわりに

SageMaker Studio スペースにタグを付与する方法はいかがだったでしょうか。GUIから設定できないのは少し不便ですが、スペース自体にタグを付与することは可能で、コスト配分タグで対象スペースの料金を可視化することができました!

本記事が少しでも参考になったら幸いです!最後までご覧いただきありがとうございました!

補足

①CloudFormationでタグを付与する方法

対象スペースにタグを付与する方法として他にはCloudFormationでスペースを作成する際に、Tagsプロバティを下記のように設定することでタグの付与が可能となります。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html

タグの設定例
JupyterLabSpace:
    Type: AWS::SageMaker::Space
    Properties:
      DomainId: !GetAtt StudioDomain.DomainId
      SpaceName: !Ref SpaceName
      SpaceDisplayName: JupyterLab
      OwnershipSettings:
        OwnerUserProfileName: !Ref UserProfileName
      SpaceSharingSettings:
        SharingType: Private
      SpaceSettings:
        AppType: JupyterLab
        JupyterLabAppSettings:
          DefaultResourceSpec:
            InstanceType: !Ref InstanceType
            SageMakerImageVersionArn: XXX
        SpaceStorageSettings:
          EbsStorageSettings:
            EbsVolumeSizeInGb: !Ref EbsVolumeSizeGb
      # タグを設定可能
      Tags:
        - Key: CmBillingGroup
          Value: space-sampleA

②タグ付与を実行するシェル

タグ付与までの一連の流れを自動化したものが下記シェルとなります。
シェルを実行する前にドメインIDとドメイン名を設定し、実行後はタグのValueにはspace-<space名>が設定されます。

  • DOMAIN_ID:設定したいスペースのドメインID
  • SPACE_NAME:設定したいスペース名

実行し、Completed: Tag verification successfulが表示されたらタグ付与が成功完了です。

タグ付与のサンプルシェル
#!/bin/bash

# 変数定義
## ドメインIDを設定(要設定)
DOMAIN_ID="xxx"
## Space名を設定(要設定)
SPACE_NAME="YYY"
EXPECTED_TAG_KEY="CmBillingGroup"
EXPECTED_TAG_VALUE="space-${SPACE_NAME}"

# Space の情報を取得
echo "Checking space details..."
SPACE_ARN=$(aws sagemaker describe-space \
    --space-name "$SPACE_NAME" \
    --domain-id "$DOMAIN_ID" \
    --query 'SpaceArn' \
    --output text)

if [ -z "$SPACE_ARN" ]; then
    echo "Error: Could not get Space ARN"
    exit 1
fi

# タグを追加
echo "Adding tag..."
aws sagemaker add-tags \
    --resource-arn "$SPACE_ARN" \
    --tags "Key=$EXPECTED_TAG_KEY,Value=$EXPECTED_TAG_VALUE"

# タグが正しく設定されたか確認
echo "Verifying tags..."
TAG_VALUE=$(aws sagemaker list-tags \
    --resource-arn "$SPACE_ARN" \
    --query "Tags[?Key=='$EXPECTED_TAG_KEY'].Value" \
    --output text)

if [ "$TAG_VALUE" == "$EXPECTED_TAG_VALUE" ]; then
    echo "Completed: Tag verification successful"
    echo "Tag Key: $EXPECTED_TAG_KEY"
    echo "Tag Value: $TAG_VALUE"
    exit 0
else
    echo "Error: Tag verification failed"
    echo "Expected: $EXPECTED_TAG_VALUE"
    echo "Got: $TAG_VALUE"
    exit 1
fi

③ドメインやユーザープロファイルのタグを伝播させて、リソースにタグを付与する

下記ブログを参考に、ドメインやユーザープロファイルのタグを伝播させてスペースに反映させることも可能です。
ユーザープロファイルにコスト配分タグを付与して、タグの伝播を有効化することでスペースにユーザープロファイルと同様のタグを付与することも可能です。

タグの伝播を有効にする方法

https://dev.classmethod.jp/articles/SageMakerStudio-per-user-fees-are-not-displayed-in-tags/

ユーザープロファイルにタグを付与する方法

https://dev.classmethod.jp/articles/amazon-sagemaker-studio-cost-allocation-tags/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.