【问题标题】:How to Get Embed URLs for AWS Quicksight Dashboards using Java SDK如何使用 Java SDK 获取 AWS Quicksight 仪表板的嵌入 URL
【发布时间】:2020-01-06 22:16:18
【问题描述】:

我认为我了解获取 AWS Quicksight 仪表板的嵌入 URL 所需的所有步骤,并且我已经能够通过 AWS docs 中所述的 AWS CLI 获取有效 URL。

但是,我似乎无法通过 AWS Java SDK(特别是 v2)让它工作。似乎在任何地方都没有一个很好的例子。

有没有人知道使用 Java(或 Groovy)最好使用 Spring Boot(或 Grails 3 或 4)的一个很好的工作示例?

【问题讨论】:

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


    【解决方案1】:

    我终于明白了。这是一个有效的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()
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2020-12-22
      • 2022-01-27
      相关资源
      最近更新 更多