[英]In Clojurescript, how do I use AWS javascript SDK to list S3 buckets?
I am just getting started with Clojurescript.我刚刚开始使用 Clojurescript。 I wrote some clojurescript code to use the shared aws credentials file to initialize S3 client and list buckets.
我编写了一些 clojurescript 代码来使用共享的 aws 凭证文件来初始化 S3 客户端并列出存储桶。 However my code does not work.
但是我的代码不起作用。
(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) )) ))
The AWS/config.getCredentials in the above does pick up the correct profile as seen from (println AWS/config.credentials.accessKeyId)
.上面的 AWS/config.getCredentials 确实选择了正确的配置文件,如
(println AWS/config.credentials.accessKeyId)
所示。 The listbuckets code throws the following error: 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]
I have Google AWS SDK S3 clojuresript AND is the only link I found.我有 Google AWS SDK S3 clojuresript 并且是我找到的唯一链接。 I used that to configure the S3 client but that does not seem to work
我用它来配置 S3 客户端,但这似乎不起作用
I would appreciate any help.我将不胜感激任何帮助。
I checked it and the problem seems to be that SDK expects the credentials to be set before anything else, before instantiating the S3 client.我检查了它,问题似乎是 SDK 希望在实例化 S3 客户端之前先设置凭据。
The following works for me on a minimal project with shadow-cljs:以下适用于我使用 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))))))
when I run it:当我运行它时:
$ 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}}
The key was on this answer: https://stackoverflow.com/a/33175424/483566关键在于这个答案: https://stackoverflow.com/a/33175424/483566
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.