Получение информации о роли IAM программно с помощью Scala

#amazon-web-services #scala #amazon-iam

#amazon-web-services #scala #amazon-iam

Вопрос:

Я хочу получить информацию о роли для имени роли. Например, получение точного идентификатора ARN.

Каким-то образом этот приведенный ниже код не работает. К сожалению, в cloudwatch нет сообщения об ошибке

 import software.amazon.awssdk.services.iam.*;

import com.amazonaws.services.identitymanagement.model._
import com.amazonaws.services.identitymanagement.{AmazonIdentityManagementClient, AmazonIdentityManagement, AmazonIdentityManagementClientBuilder}
// ....

val iamClient = AmazonIdentityManagementClient
    .builder()
    .withRegion("eu-central-1")
    .build()

val roleRequest = new GetRoleRequest();
roleRequest.setRoleName("InfrastructureStack-StandardRoleD-HBLE12VPTWQ")

val result = iamClient.getRole(roleRequest) // <-- Nothing happens after this line
println("wont execute this println statement")
 

Другие службы, такие как CognitoIdentityProvider, работают отлично.

Я также попробовал шаблон builder для GetRoleRequest и IamClient.

Комментарии:

1. Я протестирую этот код с помощью AWS SDK для Java V2 и опубликую результаты. Ваш импорт использует как V2, так и V1. Рекомендую вам использовать только версию V2.

Ответ №1:

У меня этот код IAM V2 работает нормально. Как указано в моем комментарии, настройте среду разработки на использование AWS SDK для Java V2.

 package com.example.iam;

import software.amazon.awssdk.services.iam.model.*;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.iam.IamClient;


public class GetRole {

    public static void main(String[] args) {

        final String USAGE = "n"  
                "Usage:n"  
                "    <policyArn> nn"  
                "Where:n"  
                "    policyArn - a policy ARN that you can obtain from the AWS Management Console. nn" ;

    //    if (args.length != 1) {
    //        System.out.println(USAGE);
    ////        System.exit(1);
    //    }

        String roleName =  "DynamoDBAutoscaleRole" ; //args[0];
        Region region = Region.AWS_GLOBAL;
        IamClient iam = IamClient.builder()
                .region(region)
                .build();

        getRoleInformation(iam, roleName);
        System.out.println("Done");
        iam.close();
    }

    public static void getRoleInformation(IamClient iam, String roleName) {

        try {

            GetRoleRequest roleRequest = GetRoleRequest.builder()
                    .roleName(roleName)
                    .build();

            GetRoleResponse response = iam.getRole(roleRequest) ;
            System.out.println("The ARN of the role is "  response.role().arn());

        } catch (IamException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
 

Вывод:

введите описание изображения здесь