在 Clojurescript 中,如何使用 AWS javascript SDK 列出 S3 存储桶?
In Clojurescript, how do I use AWS javascript SDK to list S3 buckets?
我刚刚开始使用 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 clojuresript 并且是 only link 我找到的。我用它来配置 S3 客户端,但似乎不起作用
如有任何帮助,我将不胜感激。
我检查了一下,问题似乎是 SDK 希望在实例化 S3 客户端之前先设置凭据。
以下内容适用于我使用 shadow-cljs 的最小项目:
(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}}
关键在于这个答案:
我刚刚开始使用 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 clojuresript 并且是 only link 我找到的。我用它来配置 S3 客户端,但似乎不起作用
如有任何帮助,我将不胜感激。
我检查了一下,问题似乎是 SDK 希望在实例化 S3 客户端之前先设置凭据。
以下内容适用于我使用 shadow-cljs 的最小项目:
(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}}
关键在于这个答案: