View a markdown version of this page

コード - Amazon Quick

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コード

Quick Automate のコードアクションを使用すると、Python コードブロックを使用してカスタムロジックを実装でき、標準のオートメーションアクションがサポートする範囲を超えます。複雑なデータ変換や計算に適しており、セキュリティを維持するために制限された Python 環境内で実行されます。

2 種類のコードアクション:

  • 単一行式: 値を返さずに変数を変更する 1 行の高速オペレーション

  • カスタムコードブロック: パラメータと戻り値を含む複雑なロジックの複数行 Python 関数

コードアクションを使用するタイミング:

次の必要がある場合は、コードブロックを使用します。

  • 標準アクションでは利用できない複雑なデータ変換を実行する

  • カスタムビジネスロジックまたは計算を実装する

  • データ構造 (リスト、ディクショナリ、JSON) を処理または操作する

  • 日付、時刻、タイムゾーンをカスタムで操作する

  • 複雑なパターンを持つ文字列を解析またはフォーマットする

  • 複数のアクションを 1 つのコードブロックに統合して自動化パフォーマンスを最適化する

コードアクションを使用しない場合:

次の場合、コードブロックは避けてください。

  • ユースケースの標準オートメーションアクションが既に存在します

  • オペレーションは、組み込みアクションに十分シンプルです。

  • 外部 APIs とやり取りする必要があります (代わりに REST API 統合を使用)

  • ファイルシステムまたはデータベースにアクセスする必要がある (適切な統合を使用)

コードアクションにアクセスする方法:

コードブロックは、複数のインターフェイスを介して使用できます。

  • アクションパネル (推奨):

    • Automation Builder でオートメーションを開く

    • 右側のアクションパネルをクリックします。

    • コードアクションセクションで「カスタムコードブロック」を見つけます。

    • コードブロックをオートメーションワークフローにドラッグアンドドロップする

  • Assistant でビルドする:

    • アシスタントがカスタムコードが必要と判断した場合に、プラン生成時に使用可能

    • アシスタントが複雑なオペレーションのコードブロックを自動的に提案する

    • カスタムロジックのニーズを記述することで、コードブロックをリクエストできます。

利用可能なアクション:

単一行式

単一行式は、値を返さずにオペレーションを実行する 1 行の Python ステートメントを実行します。リストへの追加、ディクショナリの更新、状態を変更する簡単な計算の実行など、既存の変数への迅速な変更に最適です。

プロパティ:

  • 式 (必須): 実行する Python 式 (例: "my_list.append('new item')")

例:

  • リストに追加

    my_list.append("1") my_list.append(new_item)
  • リスト項目の削除

    task_list.remove(completed_task)

カスタムコードブロック

カスタムコードブロックは、複雑なロジックを実行し、パラメータを受け入れ、値を返す複数行の Python 関数です。これらは、標準オートメーションアクションと単一行式がニーズに十分でない場合のフォールバックオプションです。

プロパティ:

  • 関数タイトル (必須): コードブロックの名前識別子 (「Calculate_Total」など)

  • 関数 (必須): カスタムロジックを含む Python コードブロック。

    • ステップ 1: パラメータを定義する

      • 「編集」ボタンをクリックしてコードエディタを開きます。

      • パラメータパネルで、「追加」をクリックして新しいパラメータを作成します。

      • 自動化変数に一致するパラメータ名を入力する

      • パラメータは関数引数として使用できます

    • ステップ 2: Python コードを記述する

  • 戻り値 (オプション): 関数の出力を保存する変数名

    • 必要なコードブロック構造に従う (以下を参照)

    • 関数内にカスタムロジックを実装する

    • 承認されたライブラリと組み込み関数のみを使用する

    • データを出力する必要がある場合は、戻りステートメントを含める

コードブロック構造

すべてのコードブロックは次の特定の形式に従う必要があります。

@code_block() def your_function_name(parameter1, parameter2, parameter3): ------------------------------------------------------------------------------------- """ Optional: Add a docstring describing what your function does """ # Your custom logic here result = parameter1 + parameter2 + parameter3 return result

組み込み Python 関数とインポート

すべての標準 Python 組み込み関数はインポートなしで使用できます (len、str、int など)

承認された標準ライブラリ (セキュリティ制限付き)

コードブロックは、次の標準ライブラリのみをインポートできます。

  • base64 - Base64 エンコード/デコード

  • datetime - 日付と時刻のオペレーション

  • json - JSON 解析と生成

  • math - 数学関数

  • re - 正規表現

  • zoneinfo - タイムゾーン処理

注記
  • 上記のライブラリ以外の標準ライブラリをインポートすることはできません。

  • サードパーティーライブラリをインストールまたはインポートすることはできません。 pip installはコードブロックではサポートされていません。

制限事項

  • ライブラリへのアクセスが制限された制限された Python 環境。実行環境は、Python 3.10 のサブセットである RestrictedPython に基づいています。

  • コードブロックは他のコードブロックやアクションを呼び出すことができません

ベストプラクティス

  • コードブロックをシンプルかつ集中的に維持する

  • わかりやすい関数名を使用する

  • 利用可能な場合は、常に構築済みのアクションを優先する

  • 焦点を絞ったデバッグオプションが制限されているため、コードブロックを徹底的にテストする)

ユースケースの例

  • 数学演算 (円プロパティの計算 - パラメータとしての半径

    def function (radius): return { "radius": radius, "diameter": 2 * radius, "circumference": round(2 * math.pi * radius, 2), "area": round(math.pi * radius ** 2, 2) }
  • 現在の日付/時刻の取得

    def function (): now = datetime.datetime.now() return { "current_date": now.strftime("%Y-%m-%d"), "current_time": now.strftime("%H:%M:%S"), "formatted": now.strftime("%B %d, %Y at %I:%M %p"), "iso_format": now.isoformat(), "timestamp": now.timestamp() }
  • 日付の差の計算 - パラメータとしての開始日と終了日

    def function _(start_date_str, end_date_str): # Parse date strings (format: YYYY-MM-DD)_ start = datetime.datetime.strptime(start_date_str, "%Y-%m-%d") end = datetime.datetime.strptime(end_date_str, "%Y-%m-%d") _# Calculate difference_ difference = end - start return { "days": difference.days, "weeks": difference.days // 7, "start": start_date_str, "end": end_date_str }
  • 正規表現を使用したパターンマッチングとテキスト操作 (E メールアドレス、電話番号の検証など)

    def function (email, phone, zip_code): email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' phone_pattern = r'^\d{3}-\d{3}-\d{4}$' zip_pattern = r'^\d{5}(-\d{4})?$' return { "email_valid": bool(re.match(email_pattern, email)), "phone_valid": bool(re.match(phone_pattern, phone)), "zip_valid": bool(re.match(zip_pattern, zip_code)) }
  • リストオペレーション (フィルターと変換リスト)

    def function (numbers, threshold): # Filter numbers above threshold and calculate statistics filtered = [n for n in numbers if n > threshold] if filtered: return { "filtered_numbers": filtered, "count": len(filtered), "sum": sum(filtered), "average": sum(filtered) / len(filtered), "min": min(filtered), "max": max(filtered) } else: return { "filtered_numbers": [], "count": 0, "message": "No numbers above threshold" }