📝

小ネタ:あのボタンの移行時にDSNを一括でタグ登録する

2024/05/22に公開

これは

あのボタンをしろボタンに移行した手順のメモの補足として、移行したボタンのDSNを一括でタグ登録する方法を書きました。

準備

以下のものを準備します。

DSNとIMSIの一覧

移行申請をすると、サポートチームから「DSN:移行後のIMSI」という形の一覧が送られてきます。これを適当なファイル(ここではdsn-imsi.txt)に保存しておきます。

DSN1:IMSI1
DSN2:IMSI2
...

スクリプトの準備

以下のスクリプトを作成し、dsn2tag.shという名前で保存します。chmod +x dsn2tag.shで実行権限もつけておきましょう。

#!/bin/bash
sims=$(soracom sims list)
while IFS=: read -r dsn imsi
do
        echo "$dsn -> $imsi"
        soracom sims put-tags --body "[{\"tagName\":\"DSN\",\"tagValue\": \"$dsn\"}]" --sim-id $(echo $sims | jq -r --arg imsi "$imsi" '.[] | select(.profiles[].subscribers[].imsi == $imsi) | .simId')
done

実行

あとは実行します。

cat dsn-imsi.txt | ./dsn2tag.sh

AWS IoT 1-click

AWS IoT 1-clickのattributeを取得してSORACOM CLIでタグを設定する際のJSONの形式にするには以下のようにすると良いでしょう。

#!/bin/bash

project_name="YOUR_PROJECT_NAME"
region="YOUR_REGION"
json_input=$(aws --region $region iot1click-projects list-placements --project-name $project_name)

placement_count=$(echo "$json_input" | jq '.placements | length')

for i in $(seq 0 $((placement_count - 1))); do
  placement_name=$(echo "$json_input" | jq -r ".placements[$i].placementName")
  placement_json=$(aws --region $region iot1click-projects describe-placement --project-name "$project_name" --placement-name "$placement_name")
  echo $placement_json | jq '[.placement.attributes | to_entries[] | {tagName: .key, tagValue: .value}]' > ${placement_name}.json
done

あとは

plaement_name:imsi

のような形式でplacement-imsi.txtを準備さえできれば、先ほどのスクリプトを変更した以下のものを使って一括でタグ登録できるかと思います(未検証)。

#!/bin/bash
sims=$(soracom sims list)
while IFS=: read -r placement imsi
do
        echo "$placement -> $imsi"
        soracom sims put-tags --body @$placement.json --sim-id $(echo $sims | jq -r --arg imsi "$imsi" '.[] | select(.profiles[].subscribers[].imsi == $imsi) | .simId')
done

なお、こちらはplacement.jsonが作れるところまでは確認していますがタグを設定するところまでは確認していません。

まとめ

SORACOM CLIを使い、シェルスクリプトで一括でタグを指定する方法を書いてみました。

皆さんのお役に立てれば幸いです。

GitHubで編集を提案

Discussion