📝
小ネタ:あのボタンの移行時にDSNを一括でタグ登録する
これは
あのボタンをしろボタンに移行した手順のメモの補足として、移行したボタンのDSNを一括でタグ登録する方法を書きました。
準備
以下のものを準備します。
- SORACOM CLI
- jq
- bash
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を使い、シェルスクリプトで一括でタグを指定する方法を書いてみました。
皆さんのお役に立てれば幸いです。
Discussion