Как получить встроенные URL-адреса для AWS Quicksight Dashboards с помощью Java SDK - PullRequest
0 голосов
/ 07 января 2020

Я думаю, что понимаю все шаги, необходимые для получения URL-адреса для встраивания для панели управления AWS Quicksight, и я смог получить действительный URL-адрес через CLI AWS, как описано в AWS документы .

Однако я не могу заставить его работать через AWS Java SDK (в частности, v2). Кажется, нигде нет хорошего примера.

Кто-нибудь знает хороший рабочий пример использования Java (или Groovy), предпочтительно с использованием Spring Boot (или Grails 3 или 4)?

1 Ответ

0 голосов
/ 07 января 2020

Я наконец понял это. Вот рабочий пример Groovy / Grails , который получает URL-адреса панели управления Quicksight с использованием AWS Java SDK v2.

Сводка

I следовал измененной версии схемы процесса в AWS документах, здесь . В документах говорится, что ваша учетная запись службы принимает на себя роль IAM пользователя, а затем запрашивает панель мониторинга в качестве конечного пользователя, используя IdentityType.IAM. Однако я сделал запрос на получение URL-адреса в качестве учетной записи службы, не принимая на себя роль пользователя, и указал ARN конечного пользователя и IdentityType.QUICKSIGHT в вызове API.

Код ( полный код )

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()
    }

}
...