我认为我了解获取AWS Quicksight仪表板的嵌入URL所需的所有步骤,并且已经能够通过AWS docs中所述的AWS CLI获得有效的URL。
但是,我似乎无法通过AWS Java SDK(特别是v2)使它正常工作。似乎没有一个很好的例子。
有谁知道使用Java(或Groovy)最好使用Spring Boot(或Grails 3或4)的良好工作示例吗?
最佳答案
我终于弄明白了。这是一个有效的Groovy/Grails sample project,它使用AWS Java SDK v2获取Quicksight仪表板URL。
摘要
我遵循了AWS文档here中流程概述的修改版本。文档说让您的服务帐户承担用户的IAM角色,然后使用IdentityType.IAM
要求仪表板作为最终用户。但是,我提出了获取该URL作为服务帐户的请求,而没有承担用户的角色,并在API调用中指定了最终用户的ARN和IdentityType.QUICKSIGHT
。
代码(full code)
import software.amazon.awssdk.services.quicksight.QuickSightClient
import software.amazon.awssdk.services.quicksight.model.*
class ApplicationController {
String roleName = "embed-dashboard"
String namespace = "default"
String awsAccountId
String dashboardId
QuickSightClient quickSightClient
def index(String awsAccountId, String email, String dashboardId) {
//unimportant code removed
String url = fetchEmbedUrl(email)
render "<a href='$url' target='_blank'>Dashboard</a>"
}
private String fetchEmbedUrl(String email) {
// look up the user by email address
// if we don't find the user register them
User user = fetchUser(email) ?: registerUser(email)
// get the dashboard URL
String embedUrl = quickSightClient.getDashboardEmbedUrl(GetDashboardEmbedUrlRequest.builder()
.awsAccountId(awsAccountId)
.dashboardId(dashboardId)
.userArn(user.arn)
.identityType(IdentityType.QUICKSIGHT)
.sessionLifetimeInMinutes(600L)
.build()
).embedUrl
log.info("URL:\n$embedUrl")
return embedUrl
}
private User fetchUser(String email) {
return quickSightClient.listUsers(ListUsersRequest.builder()
.awsAccountId(awsAccountId)
.namespace(namespace)
.build()
).userList().find { it.email() == email }
}
private User registerUser(String email) {
String roleArn = "arn:aws:iam::$awsAccountId:role/$roleName"
return quickSightClient.registerUser(RegisterUserRequest.builder()
.awsAccountId(awsAccountId)
.namespace(namespace)
.identityType(IdentityType.IAM)
.iamArn(roleArn)
.userRole("READER")
.email(email)
.sessionName(email)
.build()
).user()
}
}
关于amazon-web-services - 如何使用Java SDK获取AWS Quicksight仪表板的嵌入URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619725/