AWS CLI コマンドに ISO 8601 日付/時刻を追加します。

AWS CLI コマンドに ISO 8601 日付/時刻を追加します。

面白い追加プロジェクトとして、AWSでサーバーレスTodoアプリケーションを構築しています。私は端末で多くのことをしていますが、私の知識は非常に基本的です。

AWS CLI(v2.3.4)を介してDynamoDBテーブルにエントリを追加するコマンドは次のとおりです。

aws dynamodb put-item \
    --table-name tasks \
    --item \
        '{"task_id": {"S": "3495353e-726f-4e0e-b290-8014c03be971"}, "user_id": {"S": "aae30f8e-aabe-4e38-918f-0f5a2223f589"}, "created_at": {"S": "2022-09-09T12:51:05Z"}, "content": {"S": "Clean car"}, "is_done": {"BOOL": false}}' \
    --profile personal

created_atISO-8601日付を文字列として手動で入力しました。

LinuxでISO-8601形式のUTC日付/時刻を取得するには、次のことを実行する必要があることがわかりました。

date -u +"%Y-%m-%dT%H:%M:%SZ"

私の質問は、Linuxシステムからput-item自動/動的にインポートするようにDynamoDBコマンドにこれを入力する方法です。created_at

私が試したこと:

date次の値を使用して、DynamoDBコマンドにコマンドを挿入してみましたcreated_at

aws dynamodb put-item \
    --table-name tasks \
    --item \
        '{"task_id": {"S": "3495353e-726f-4e0e-b290-8014c03be971"}, "user_id": {"S": "aae30f8e-aabe-4e38-918f-0f5a2223f589"}, "created_at": {"S": date -u +"%Y-%m-%dT%H:%M:%SZ"}, "content": {"S": "Clean car"}, "is_done": {"BOOL": false}}' \
    --profile personal

しかし、これはうまくいきません。コマンドエラーが発生し、以下が返されます。

Error parsing parameter '--item': Invalid JSON: Expecting value: line 1 column 138 (char 137)
JSON received: {"task_id": {"S": "3495353e-726f-4e0e-b290-8014c03be971"}, "user_id": {"S": "aae30f8e-aabe-4e38-918f-0f5a2223f589"}, "created_at": {"S": date -u +"%Y-%m-%dT%H:%M:%SZ"}, "content": {"S": "Clean car"}, "is_done": {"BOOL": false}}

修正する:

私はMarcusが提案した方法を試しましたが、$(command)まだ間違ったJSONエラーが発生します。

aws dynamodb put-item \
    --table-name tasks \
    --item \
        '{"task_id": {"S": "3495353e-726f-4e0e-b290-8014c03be971"}, "user_id": {"S": "aae30f8e-aabe-4e38-918f-0f5a2223f589"}, "created_at": {"S": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"}, "content": {"S": "Clean car"}, "is_done": {"BOOL": false}}' \
    --profile personal

ベストアンサー1

jq以下を使用して、jsonオブジェクトに日付を挿入できます。

aws dynamodb put-item \
    --table-name tasks \
    --item "$(
      jq -c '.created_at.S=(now|todate)' << 'EOF'
        {
          "task_id": {
            "S": "3495353e-726f-4e0e-b290-8014c03be971"
          },
          "user_id": {
            "S": "aae30f8e-aabe-4e38-918f-0f5a2223f589"
          },
          "created_at": {"S":""},
          "content": {
            "S": "Clean car"
          },
          "is_done": {
            "BOOL": false
          }
        }
EOF
     )" --profile personal

また、以下を呼び出さずにzshで日付形式を指定することもできますdate

${(%):-%D{%FT%TZ}}この形式の現在時刻に拡張されますが、TZ=UTC0実際のZulu時間を取得するには設定する必要があります。モジュールstrftimeには組み込み関数もありますzsh/datetime

おすすめ記事