В Clojurescript, как я могу использовать AWS javascript SDK для вывода списка S3? - PullRequest
0 голосов
/ 02 мая 2020

Я только начинаю работать с Clojurescript. Я написал некоторый код clojurescript для использования общего файла учетных данных aws для инициализации клиента S3 и списков. Однако мой код не работает.

(defn -main [arg1 arg2]
  (println "hello")
  (let[ creds (new AWS/SharedIniFileCredentials #js{:profile "superman"}) 
       _ (AWS/config.update creds) 
       ; dump out the accesskey to check if it has the correct profile
       _ (AWS/config.getCredentials (fn [err] (if (nil? err) (do
                                                               (println "its good")
                                                               (println AWS/config.credentials.accessKeyId)))))
       s3 (new (.-S3 AWS ))
       ] (.listBuckets s3 (fn[err buckets] (println "err: " err) (println buckets) )) ))

Приведенный выше AWS / config.getCredentials выбирает правильный профиль, как видно из (println AWS/config.credentials.accessKeyId). Код listbuckets выдает следующую ошибку:

#object[NodeError TypeError [ERR_INVALID_ARG_TYPE]: The "key" argument must be of type string or an instance of Buffer, TypedArray, DataView, or KeyObject. Received undefined]

У меня есть Google AWS SDK S3 clojurescript И является единственной ссылкой , которую я нашел. Я использовал это для настройки клиента S3, но это, похоже, не работает

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 03 мая 2020

Я проверил это, и проблема, кажется, в том, что SDK ожидает, что учетные данные будут установлены прежде, чем создавать экземпляр клиента S3.

Следующее работает для меня в минимальном проекте с shadow-cl js:

(ns server.main
  (:require ["aws-sdk" :as aws]))

(defn main! []
  (println "App loaded...")
  (let [creds (aws/SharedIniFileCredentials. #js {:profile "example-profile"})
        _     (set! (.-credentials aws/config) creds)
        s3    (aws/S3.)]
    (.listBuckets s3 (fn [err data]
                       (if err
                         (println "ERROR:" err)
                         (println "OK:" data))))))

при запуске:

$ node target/main.js

App loaded...
OK: #js {:Buckets #js [#js {:Name dummy-test-bucket, :CreationDate #inst "2019-05-05T17:32:17.000-00:00"} #js {:Name mydomain.com, :CreationDate #inst "2018-06-19T04:16:10.000-00:00"}], :Owner #js {:DisplayName username, :ID f63f30bc25ab3609b8d3b5be6b3a872dd2c9f7947b2d509e2338357d93e74f2}}

Ключ был в этом ответе: { ссылка }

...