mcpField
A
alibabacloud-oss-manage-cron-upload

alibabacloud-oss-manage-cron-upload

github.com/aliyunクラウド・DevOps281259 回インストール1 日前に更新
リポジトリ

alibabacloud-oss-manage-cron-upload について

`aliyun` CLI と OS のスケジューラーを使い、ローカルフォルダーから Alibaba Cloud OSS へ定期アップロードするスキルです。パラメーター検証、バケット確認、アップロード、スケジュール設定を扱います。

主な機能

  1. 01ローカルフォルダーを OSS へ定期アップロード
  2. 02統合された `aliyun ossutil` コマンドを利用
  3. 03バケット、パス、スケジュール入力を検証
  4. 04cron または Windows Task Scheduler を設定
  5. 05バケットとアップロード済みオブジェクトを確認

活用シーン

  1. 01ローカルフォルダーを OSS に定期バックアップ
  2. 02アップロード設定前に OSS バケットを確認
  3. 03Linux、macOS、Windows で定期アップロードを設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-oss-manage-cron-upload

インストール後、Claude Code で/alibabacloud-oss-manage-cron-uploadを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
acceptance-criteria.md
cli-installation-guide.md
ram-policies.md
related-apis.md
verification-method.md

詳細

OSS 定期ローカル同期

aliyun CLI を優先するワークフローで、ローカルフォルダーから OSS への定期アップロードを計画し、検証します。

シナリオの説明

このスキルでは、時間の経過とともに内容が変化するローカルフォルダーを、定期的なスケジュールで OSS にアップロードするケースを扱います。

アーキテクチャ: ローカルフォルダー + aliyun CLI(統合された ossutil)+ cron/Task Scheduler + OSS バケット

機能の分担:

  • [aliyun CLI] インストールの確認、プロファイルの検証、コマンドの検索、OSS 側の検証、統合された aliyun ossutil のアップロード/一覧表示コマンド。
  • [OS-local] cron または Windows Task Scheduler の設定。
  • [Manual/Console] RAM ポリシーの割り当てと、OSS Console での任意の目視確認。

インストール

事前確認:Aliyun CLI >= 3.3.3 が必要です aliyun version を実行して、バージョンが >= 3.3.3 であることを確認してください。未インストールの場合、またはバージョンが古い場合は、 インストール手順について references/cli-installation-guide.md を参照してください。 続いて、aliyun configure set --auto-plugin-install true を実行してください。 Core Workflow の開始時(CLI を呼び出す前)に実行してください。 [必須] AI-Mode を有効にする — Agent Skill の実行には AI-mode が必要です。 CLI を呼び出す前に、以下のコマンドを実行してください。

aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload"

[必須] すべての終了時に AI-Mode を無効にする — どのような理由であっても、最終応答を返す前に必ず最初に AI-mode を無効にしてください。これはワークフローの成功、ワークフローの失敗、エラー/例外、ユーザーによるキャンセル、セッションの終了、その他 CLI コマンドをこれ以上実行しないあらゆる状況など、すべての終了パスに適用されます。 AI-mode は Agent Skill の呼び出しシナリオでのみ使用するものであり、スキルの実行終了後も有効なままにしてはなりません。

aliyun configure ai-mode disable

[必須] CLI User-Agent — aliyun CLI コマンドを呼び出すたびに、次の値を指定する必要があります。 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

必要なローカルツール:

ツール必須用途確認方法
aliyun CLIはい認証情報の確認、コマンドの検索、統合された ossutil によるアップロード/一覧表示aliyun version および aliyun ossutil --help
cron または schtasksはいローカルでの定期実行crontab -l または schtasks /Query /TN "OSS Scheduled Sync"

CLI のインストールとプラグインの設定には、references/cli-installation-guide.md のみを使用してください。このスキルでは、統合された aliyun ossutil コマンドを使用してください。スタンドアロンの ossutil のインストールや、単独の ossutil コマンドは必要ありません。

環境変数

すでに設定済みの Alibaba Cloud プロファイル以外に、クラウド固有の環境変数は必要ありません。

サンプルで使用する任意のローカル変数:

変数必須/任意説明デフォルト値
ALIBABA_CLOUD_PROFILE任意事前設定済みの Alibaba Cloud CLI プロファイルを選択しますCLI の現在のプロファイル
ALIYUN_BIN任意PATH に aliyun がない場合に、その絶対パスを指定しますaliyun
OSS_SYNC_LOG任意定期実行のログファイルパスOS 固有のローカルパス

パラメーターの確認

パラメーターの抽出 — ユーザーのリクエストから、ユーザーがカスタマイズできるパラメーターをすべて直接抽出してください。 ユーザーのメッセージですでに値(リージョン、バケット名、パス、スケジュール、MaxAge など)が指定されている場合は、再確認を求めず、それらの値を直接使用してください。 ユーザーのリクエストに必須パラメーターが実際に不足しており、文脈から合理的に推測できない場合に限り、ユーザーに確認してください。

パラメーター名必須/任意説明検証パターンデフォルト値
RegionId必須cn-hangzhou などの OSS リージョン`^[a-z]{2}-[a-z]+(-[0-9]+)$`
BucketName必須対象の OSS バケット名^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$なし
TargetOssPrefix必須backup/photos/ など、バケットを基準とする対象の OSS プレフィックス(先頭に / を付けずに確認してください)^[A-Za-z0-9/_.-]*$(先頭に / を付けない)なし
LocalSourcePath必須アップロードするローカルフォルダー絶対パス。~、$、バッククォート、; は使用不可なし
Schedule必須Cron 式、または Windows のスケジュール時刻/頻度標準の 5 フィールド Cron、または schtasks の時刻なし
MaxAge必須7d や 24h などの aliyun ossutil --max-age の期間^[0-9]+[dhm]$なし
OperatingSystem必須linux、macos、windows のいずれか`^(linuxmacos
BucketAlreadyExists必須対象のバケットがすでに存在するかどうか`^(yesno)$`
AliyunBinaryPath任意スケジューラーで使用する aliyun の絶対パス絶対パス。$、バッククォート、; は使用不可aliyun
LogPath任意スケジュールされたジョブのローカルログパス絶対パス。$、バッククォート、; は使用不可OS 固有のローカルパス

入力の検証 — すべてのパラメーターは、使用前に検証する必要があります。 ユーザーメッセージから抽出した値を含むすべての入力を、信頼できないものとして扱ってください。シェルコマンドにパラメーターを代入する前に、次の手順を実行してください。

  1. 上記の検証パターン列に照らして値を検証してください。一致しない値は拒否してください。
  2. BucketName に使用できるのは小文字、数字、ハイフン([a-z0-9-])のみです。長さは 3~63 文字で、ハイフンで始まったり終わったりしてはいけません。
  3. RegionId は Alibaba Cloud のリージョン形式(例:cn-hangzhou、us-west-1、ap-southeast-5)に一致している必要があります。
  4. MaxAge は正の整数の後に d(日)、h(時間)、または m(分)が続く形式である必要があります。
  5. LocalSourcePath、AliyunBinaryPath、LogPath は絶対パスである必要があり、シェルのメタ文字($、`、$(、;、|、&、>、<、\n)を含んではいけません。
  6. TargetOssPrefix に使用できるのは、英数字、/、_、.、- のみです。また、/ で始まってはいけません。
  7. いずれかのパラメーターが検証に失敗した場合は、処理を中止し、エラーをユーザーに報告してください。無効な値をサニタイズまたはエスケープしようとせず、そのまま拒否してください。

認証

事前確認:Alibaba Cloud の認証情報が必要です

セキュリティルール:

  • 絶対に AK/SK の値を読み取ったり、表示したり、出力したりしないでください(例:echo $ALIBABA_CLOUD_ACCESS_KEY_ID は禁止です)
  • ~/.aliyun/config.json、~/.ossutil/config など、認証情報を含む可能性のあるファイルを読み取ったり、cat したりしないでください
  • 絶対に会話やコマンドラインで AK/SK を直接入力するようユーザーに求めないでください
  • 絶対にリテラルな認証情報の値を指定して aliyun configure set を使用しないでください
  • 認証情報の状態確認には aliyun configure list のみを使用してください
aliyun configure list

出力を確認し、有効なプロファイル(AK、STS、または OAuth アイデンティティ)があることを確認してください。

有効なプロファイルがない場合は、ここで停止してください。

  1. Alibaba Cloud Console から認証情報を取得します
  2. このセッション外で認証情報を設定します(ターミナルで aliyun configure を実行するか、シェルプロファイルで環境変数を設定します)
  3. aliyun configure list に有効なプロファイルが表示されたら戻り、再実行します

すべての aliyun ossutil コマンドでは、アクティブな CLI プロファイルを再利用してください。シークレットを出力したり、ハードコードしたりしないでください。このゲートを ossutil config やその他のシークレット入力方法に置き換えないでください。

RAM ポリシー

デフォルトのワークフローでは、バケットの検出、バケットメタデータの検証、確認済みプレフィックスへのオブジェクトのアップロードに必要な最小権限が必要です。

スコープ必要なアクション
アカウントレベルの検証oss:ListBuckets
対象バケットの検証oss:GetBucketInfo
対象プレフィックスへの増分アップロードoss:PutObject、oss:GetObject、oss:ListObjects
オプションのテスト後のクリーンアップoss:DeleteObject

ポリシー JSON とプレフィックスをスコープとするリソースの例については、references/ram-policies.md を使用してください。

デフォルトの最小権限セットを oss:AbortMultipartUpload を中心に再定義しないでください。このスキルのデフォルトの最小権限パスは、バケットの検出、バケットメタデータの検証、プレフィックスをスコープとするアップロード/一覧表示/読み取りアクションを基本とします。マルチパートクリーンアップ権限は、ユーザーが明示的に求めた場合に限り、追加対応として扱います。

コアワークフロー

ドキュメントに記載するだけでなく、実行してください。 各ステップのコマンドを環境内で直接実行してください。解決策のドキュメントやスクリプトを書くだけではなく、ライブ環境に対して aliyun version、aliyun configure list、aliyun ossutil cp などを実際に実行してください。

ユーザーのリクエストから RegionId、BucketName、TargetOssPrefix、LocalSourcePath、Schedule、MaxAge、OperatingSystem、BucketAlreadyExists を抽出してください。必須パラメーターが本当に不足している場合に限り、ユーザーに確認してください。

ステップ 1:CLI と認証情報の確認 [aliyun CLI]
aliyun version
aliyun configure list
aliyun configure ai-mode enable

次を確認してください。

  • aliyun のバージョンが >= 3.3.3 である
  • 有効なプロファイルが 1 つ以上存在する
  • AI セーフティモードが有効になっている(危険な操作はブロックされます)

バージョンが古すぎる場合、または aliyun が見つからない場合は、references/cli-installation-guide.md を参照してください。CLI が見つからないときに、単体の ossutil または aliyun ossutil sync に切り替えて回避しないでください。

ステップ 2:バケットの前提条件を確認または作成する [aliyun CLI]

候補バケットの一覧を必ず最初に確認してください。

aliyun ossutil api list-buckets --output-format json \
  --read-timeout 60 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

BucketAlreadyExists=yes の場合は、選択したバケットを明示的に確認してください。

aliyun ossutil stat "oss://${BucketName}" --region "${RegionId}" --output-format json \
  --read-timeout 60 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

リージョンをまたぐ場合の注意:アクティブな CLI プロファイルのリージョン(aliyun configure list で表示)と対象バケットの RegionId が異なる場合は、stat、ls、cp コマンドに --region "${RegionId}" を追加する必要があります。--endpoint だけでは不十分です。リクエストの署名リージョンも一致させる必要があるためです。--region フラグを使うと、エンドポイントと署名リージョンを一度に指定できます。

確認する項目:

  • アカウントの一覧にバケット名が存在すること
  • バケットのリージョンが RegionId と一致すること
  • アクティブなプロファイルでバケットにアクセスできること
  • 同じバックアップ先として利用できる既存バケットが複数ある場合は、バックアップの安全性を高めるため、バージョニングが有効なバケットが望ましいとユーザーに伝えてもかまいません。ただし、これは推奨事項にすぎず、確認済みの既存バケットの利用を妨げるものではありません

BucketAlreadyExists=no の場合は、冪等性を保つ「確認してから実行する」パターンを使用してください。

  1. まず list-buckets(上記)を実行し、アカウントにバケットが本当に存在しないことを確認します。すでに存在する場合は、作成を省略し、stat による確認に進みます。
  2. バケットが存在しないことを確認できた場合に限り、このスキルに記載されている既存の作成フローに従って作成します。
  3. 作成後、すぐに stat を再実行して確認します。
aliyun ossutil stat "oss://${BucketName}" --region "${RegionId}" --output-format json \
  --read-timeout 60 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

バックアップを定期的に行う場合の任意の推奨事項:

  • 候補バケットが複数あり、そのうちの 1 つでバージョニングがすでに有効になっている場合は、バックアップをロールバックする際の安全性を高めるため、そのバケットが望ましいと伝えてください。
  • 確認済みの既存バケットでバージョニングが有効になっていなくても、このワークフローで引き続き利用できます。バージョニングの有効化は任意の強化策であり、前提条件ではありません。

アップロードや確認に使う cp、ls、stat などのコマンドでは、aliyun ossutil を標準として使用してください。バケットの作成では、ここで新しいコマンド群を考案するのではなく、このスキルにすでに記載されている既存の作成フローに従ってください。前提条件の不足を補うために、成功したと偽ったり、追加のデプロイファイルや架空のローカル成果物を捏造したりしないでください。

ステップ 3:正式な増分アップロードテストを実行する [aliyun CLI / integrated ossutil]

実際のスケジュール済みアップロードジョブには、公式のデータプレーンコマンドファミリーである aliyun ossutil を使用します。

aliyun ossutil cp "${LocalSourcePath}" "oss://${BucketName}/${TargetOssPrefix}" \
  -r -u \
  --max-age "${MaxAge}" \
  --region "${RegionId}" \
  --read-timeout 300 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

このコマンドの主なルール:

  • -u は必須です。ターゲットオブジェクトが存在しない場合、またはソースファイルが既存の OSS オブジェクトより新しい場合にのみアップロードします
  • -r -u --max-age は正式なフラグセットとして、常に一緒に指定してください
  • --region "${RegionId}" により、エンドポイントと署名リージョンの両方が正しく設定されます
  • --read-timeout 300 --connect-timeout 30 により、コマンドが無期限にハングするのを防ぎます。非常に大きなファイルでは、必要に応じて --read-timeout を大きくしてください
  • -f は、無人実行(cron、Task Scheduler、CI)の場合にのみ追加してください
  • LocalSourcePath には絶対パスを使用してください(~ は使用しないでください)
  • TargetOssPrefix は先頭の / を付けずに正規化してください
  • 単独の ossutil、aliyun ossutil sync、または Cache-Control メタデータの書き換えで代用しないでください

TargetOssPrefix が空の場合は、末尾にスラッシュを付けて oss://${BucketName}/ を使用します。それ以外の場合は、プレフィックスを正規化した後に oss://${BucketName}/${TargetOssPrefix} を使用します。

現在の環境(コンテナや CI ランナーなど)に LocalSourcePath が存在しない場合は、現在の作業ディレクトリ内に小さなテストファイルを作成し、そのパスに対してアップロードコマンドを実行した後、aliyun ossutil ls で確認してください。これにより、アップロード経路がエンドツーエンドで機能することを検証できます。ディレクトリが存在しないという理由でアップロードテストを省略しないでください。ディレクトリを作成し、接続性、権限、コマンドの正しさを検証してください。

mkdir -p "${LocalSourcePath}" && echo "test" > "${LocalSourcePath}/test.txt"
aliyun ossutil cp "${LocalSourcePath}" "oss://${BucketName}/${TargetOssPrefix}" \
  -r -u --max-age "${MaxAge}" --region "${RegionId}" \
  --read-timeout 300 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload
aliyun ossutil ls "oss://${BucketName}/${TargetOssPrefix}" --region "${RegionId}" \
  --read-timeout 60 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload
ステップ 4:アップロードをローカルスクリプトで実行する [aliyun CLI + OS-local]

最小限のスクリプトテンプレート:

#!/usr/bin/env bash
set -euo pipefail

ALIYUN_BIN="${ALIYUN_BIN:-aliyun}"
LOCAL_SOURCE_PATH="${LocalSourcePath}"   # MUST be an absolute path, never use ~
BUCKET_NAME="${BucketName}"
TARGET_OSS_PREFIX="${TargetOssPrefix#/}"
MAX_AGE="${MaxAge}"
REGION_ID="${RegionId}"
LOG_FILE="${OSS_SYNC_LOG:-$HOME/oss-sync.log}"
READ_TIMEOUT="${READ_TIMEOUT:-600}"
CONNECT_TIMEOUT="${CONNECT_TIMEOUT:-30}"

# --- Input validation ---
[[ "${BUCKET_NAME}" =~ ^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$ ]] || { echo "ERROR: Invalid BucketName: ${BUCKET_NAME}" >&2; exit 1; }
[[ "${REGION_ID}" =~ ^[a-z]{2}-[a-z]+(|-[0-9]+)$ ]]          || { echo "ERROR: Invalid RegionId: ${REGION_ID}" >&2; exit 1; }
[[ "${MAX_AGE}" =~ ^[0-9]+[dhm]$ ]]                           || { echo "ERROR: Invalid MaxAge: ${MAX_AGE}" >&2; exit 1; }
[[ "${TARGET_OSS_PREFIX}" =~ ^[A-Za-z0-9/_.-]*$ ]]            || { echo "ERROR: Invalid TargetOssPrefix: ${TARGET_OSS_PREFIX}" >&2; exit 1; }
[[ "${LOCAL_SOURCE_PATH}" == /* ]]                             || { echo "ERROR: LocalSourcePath must be absolute: ${LOCAL_SOURCE_PATH}" >&2; exit 1; }

TARGET_URI="oss://${BUCKET_NAME}/"

if [ -n "${TARGET_OSS_PREFIX}" ]; then
  TARGET_URI="oss://${BUCKET_NAME}/${TARGET_OSS_PREFIX}"
fi

"${ALIYUN_BIN}" ossutil cp "${LOCAL_SOURCE_PATH}" "${TARGET_URI}" \
  -r -u -f \
  --max-age "${MAX_AGE}" \
  --region "${REGION_ID}" \
  --read-timeout "${READ_TIMEOUT}" --connect-timeout "${CONNECT_TIMEOUT}" \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload >> "${LOG_FILE}" 2>&1

注:スクリプトテンプレートには -f フラグが含まれています。これは、対話型プロンプトによってジョブがブロックされないよう、無人での cron/Task Scheduler 実行を想定しているためです。--endpoint よりも --region フラグが推奨されます。エンドポイントと署名リージョンの両方を正しく設定できるため、CLI プロファイルのデフォルトリージョンがターゲットバケットのリージョンと異なる場合に必要です。

ステップ 5:スケジューラーを設定する [OS-local]

Linux/macOS の cron:

このスキルの Linux/macOS 向けデフォルトでは、ドキュメントに記載するスケジューラーとして cron/crontab を使用してください。ユーザーが launchd 固有の方法を明示的に求めない限り、回答を黙って launchd に切り替えないでください。

crontab が見つからない場合:コンテナや最小構成の環境では、crontab がインストールされていないことがあります。最初に cronie パッケージをインストールしてください。

  • CentOS/Alibaba Cloud Linux/RHEL:yum install -y cronie
  • Debian/Ubuntu:apt-get install -y cron

systemctl start crond が失敗する場合(コンテナに systemd がない場合など)でも、crontab を使って cron エントリを追加できます。cron デーモンはエントリの登録には必須ではなく、実際の実行にのみ必要です。そのような場合は、本番ホストでユーザーが設定する cron エントリを記載し、デーモンがないことを理由にワークフローの残りを妨げないでください。

crontab -e

エントリの例(非対話型でインストールする場合は echo ... | crontab - を使用してください):

0 3 * * * /usr/local/bin/oss-sync-upload.sh >> /var/log/oss-sync-cron.log 2>&1

Windows Task Scheduler(ローカル CLI 経由):

schtasks /Create /SC DAILY /ST 03:00 /TN "OSS Scheduled Sync" /TR "C:\tools\oss-sync-upload.bat"

このステップが OS ローカルの操作であることを明確に示してください。Alibaba Cloud API の操作ではありません。スケジューラーの出力は最小限で、すぐに実行できる内容にしてください。ユーザーから明示的に求められない限り、このステップを追加の README ファイル、XML エクスポート、PowerShell ラッパー、デモ用ペイロードなどの補助成果物にまで広げないでください。

ステップ 6:アップロード先を確認する [aliyun CLI / integrated ossutil]

アップロード後(ステップ 3 のテストアップロードを含む)は、必ずこの確認を実行してください。

aliyun ossutil ls "oss://${BucketName}/${TargetOssPrefix}" --region "${RegionId}" \
  --read-timeout 60 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

想定されるオブジェクトが対象プレフィックス配下にあることを確認してください。このステップを省略しないでください。エンドツーエンドの接続と権限を確認するために必要です。

ユーザーが目視で手動確認したい場合は、[Manual/Console] と明記し、OSS コンソールで対象プレフィックスを確認してください。

ステップ 7:機能の境界を明確に伝える

該当する場合は、以下の制限事項を必ず伝えてください。

  • 実際の増分同期ステップは aliyun ossutil を通じて実行します。 このスキルは aliyun CLI の範囲内で動作し、独立した ossutil のインストールは必要ありません。
  • スケジューラーの設定は OS ごとに行います。 Cron とタスクスケジューラはホスト OS 上で設定するもので、Alibaba Cloud API を通じて設定するものではありません。
  • RAM ポリシーのアタッチは通常、手動で行うか、ユーザーが既に使用している IAM ワークフローに従います。
  • 対象バケットが存在しない場合は、スケジュールされたアップロードの前にバケットを作成してください。 この前提条件については、このスキルの既存の作成フローに従ってください。
  • 同等の既存バケットが複数ある場合は、バックアップの安全性を高めるため、バージョニングが有効なバケットを優先するようユーザーに伝えて構いません。 バージョニングされたバケットがない場合は、ワークフローを中断せず、確認済みの既存バケットを使用してください。
  • OSS コンソールでの任意の確認は手動で行います。
  • 成功したように装わないでください。 前提条件が満たされていない場合は、偽のローカルテストデータ、実行ログを装ったもの、追加のパッケージ成果物を作成せず、その旨を明確に伝えてください。

成功の確認方法

正式なチェックリストとして references/verification-method.md を使用してください。

最低限、以下の条件を満たす必要があります。

  1. aliyun configure list に有効なプロファイルが表示される。
  2. aliyun ossutil cp --help が成功する。
  3. 正規の aliyun ossutil cp ... -r -u --max-age ... --region ... コマンドが、権限エラーやエンドポイントエラーなしで完了する。
  4. aliyun ossutil ls ... --region ... に、確認済みのプレフィックス配下にある想定のアップロード済みオブジェクトが表示される。
  5. アップロードコマンドに -u が指定されている。これにより、対象オブジェクトが存在しない場合、またはローカルのソースファイルが既存の OSS オブジェクトより新しい場合にのみアップロードされます。
  6. ローカルのスケジューラーエントリが crontab -l またはタスクスケジューラーの履歴/クエリで確認できる。現在の環境で crontab を利用できない場合は、ユーザー向けに記録されている。

クリーンアップ

このスキルは定期的な同期を目的としているため、クリーンアップは任意ですが、テスト成果物やスケジューラーエントリは安全に削除できます。

Linux/macOS の cron [OS-local]:

  • crontab -e で cron の行を削除します
  • ユーザーがロールバックを明示的に希望した場合に限り、ローカルのスクリプトとログファイルを削除します

Windows タスクスケジューラ [OS-local]:

schtasks /Delete /TN "OSS Scheduled Sync" /F

任意の OSS テストのクリーンアップ [aliyun CLI / integrated ossutil]:

aliyun ossutil rm "oss://${BucketName}/${TargetOssPrefix}test-object.txt" --region "${RegionId}" \
  --read-timeout 60 --connect-timeout 30 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-oss-manage-cron-upload

ユーザーがその範囲のクリーンアップを明示的に希望しない限り、バケットや本番オブジェクトを削除しないでください。

AI セーフティモードを無効にする [aliyun CLI]:

すべてのタスクの完了後、通常の CLI の動作に戻すため、AI セーフティモードを無効にしてください。

aliyun configure ai-mode disable

API とコマンドの表

コマンド一覧、OSS の機能に関する注記、検証に関する注記については、references/related-apis.md を参照してください。このファイルは参照用のメタデータのみを含みます。

ベストプラクティス

  1. 事前チェック、コマンドの確認、バケットの検証には aliyun を使用し、実際の定期アップロードには、統合された aliyun ossutil cp を使用してください。
  2. すべての aliyun ossutil コマンド(stat、cp、ls、rm)で --region "${RegionId}" を指定し、エンドポイントと署名リージョンの両方が正しいことを確認してください。CLI プロファイルのデフォルトリージョンが対象バケットのリージョンと異なる場合は、特に重要です。--endpoint だけに頼らないでください。署名リージョンは上書きされないため、リージョンをまたいで STS トークンを使用すると、「Invalid signing region in Authorization header」エラーが発生します。
  3. スケジューラのステップには OS ローカルであることを明記し、Alibaba Cloud API の範囲外であるとユーザーが理解できるようにしてください。
  4. 可能な限り権限を絞った RAM ポリシーを使用してください。バケット一覧の取得はアカウントスコープ、バケット情報の取得は対象バケット、オブジェクトのアップロードは確認済みのプレフィックスのみを対象にします。
  5. 実際に実行する前に、対象マシンで aliyun version と aliyun configure list を実行してください。
  6. AK/SK の値を出力したり、スクリプトにハードコードしたり、~/.aliyun/config.json などの認証情報ファイルを読み込んだりしないでください。また、認証情報の確認をインラインでのシークレット処理に置き換えないでください。
  7. バケットが存在しない場合は、定期アップロードを設定する前に作成してください。同じバックアップ先として使える既存バケットが複数ある場合は、バックアップの安全性を高めるため、バージョニングが有効なバケットが望ましいとユーザーに案内しても構いません。ただし、そのようなバケットがない場合は、確認済みの既存バケットを使用してください。
  8. コマンドやスクリプトでは、LocalSourcePath に必ず絶対パスを使用してください。チルダ(~)は引用符で囲まれた文字列内では展開されず、「not a directory」エラーの原因になることがあるため、使用しないでください。
  9. cron またはタスクスケジューラ向けの生成スクリプトには、無人実行を妨げる対話型の確認プロンプトを防ぐため、-f フラグを含めてください。

参考リンク

参考資料説明
references/cli-installation-guide.md作成者のスキルアセットからコピーされた、必須の CLI インストールガイド
references/verification-method.md事前チェック、アップロード、スケジューラ、手動検証のチェックリスト
references/related-apis.mdOSS API との対応を含む、aliyun および統合 ossutil コマンド一覧
references/ram-policies.md検証とアップロードに関する最小権限 RAM ポリシーのガイダンス
references/acceptance-criteria.mdこのシナリオにおける正しいコマンドパターンと誤ったコマンドパターン

コメント