amazon-web-services - 如何使用Java SDK获取AWS Quicksight仪表板的嵌入URL

标签 amazon-web-services grails aws-java-sdk amazon-quicksight

我认为我了解获取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/

相关文章:

amazon-web-services - AWS Web 服务在互联网上不可用

amazon-web-services - AWS : how to import a SSL certificate in PFX format into AWS?

amazon-web-services - VPC 中的 Elastic Beanstalk

java - 读取S3对象并写入InMemory Buffer

amazon-web-services - 如何通过java sdk执行 "cloudformation package"命令?

amazon-web-services - 在 AWS 上重用 VPC 的最佳实践是什么?

mongodb - 适用于grails 2.2.x的mongodb gorm插件的最佳版本?

grails - grails 中的资源插件在文件删除时出错?

java - NullPointerException 只有在我为 GoogleCredential 对象设置了 setServiceAccountUser() 之后 (Grails/Java)

Java Lambda 函数在连接到 Informix DB 时超时