環境
- Kotlin 1.5.21
- AWS ADK for Java 2.17.71
build.grade.ktsの編集
build.grade.ktsを編集して、dependenciesに以下の2行を追加する。
dependencies {
implementation(platform("software.amazon.awssdk:bom:2.17.71")) // 追加
implementation("software.amazon.awssdk:s3") // 追加
}
S3の署名付きURLを取得するコード
S3の署名付きURLを取得するコードは下記のようになる。(エラーチェックは省略している)
ドキュメントでは、アクセスキーとシークレットキーはcredentialsファイルに保存するように書かれている(Configure credentials)が、今回は関数に引数として渡している。
fun generateUrl(
region: Region,
bucketName: String,
keyName: String,
accessKey: String,
secretKey: String
): URL? {
val presigner = S3Presigner.builder()
.region(region)
.credentialsProvider(StaticCredentialsProvider.create(object : AwsCredentials {
override fun accessKeyId(): String {
return accessKey
}
override fun secretAccessKey(): String {
return secretKey
}
}))
.build()
val getObjectRequest = GetObjectRequest.builder()
.bucket(bucketName)
.key(keyName)
.build()
val getObjectPresignRequest = GetObjectPresignRequest.builder()
.signatureDuration(Duration.ofMinutes(10))
.getObjectRequest(getObjectRequest)
.build()
val presignedGetObjectRequest = presigner.presignGetObject(getObjectPresignRequest)
val url = presignedGetObjectRequest.url()
presigner.close()
return url
}