AWS CDK:无法找到使用子进程创建的 IAM 角色

AWS CDK : Unable to find IAM Role created using subprocess

我使用 iam.Role 创建了一个角色,然后尝试使用子进程库找到该角色。我看到角色创建成功,但无法在使用子进程执行的命令的输出中找到角色。请在下面找到代码。

任何人都可以指出问题所在,并建议根据 CDK

中的角色 name/Id 获得任何角色的 Arn 的最佳方法是什么

class CdkTestStack(堆栈):

def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
    super().__init__(scope, construct_id, **kwargs)

    #Create role        
    role = iam.Role(self, role_name='cdk-test-role', 
              id='cdk-test-role',
              assumed_by=iam.CompositePrincipal(iam.ServicePrincipal('lambda.amazonaws.com')),
              max_session_duration=aws_cdk.Duration.seconds(10000),
              path='/test-cdk/')

    print('Created role with name: '+str(role.role_name))

    #Get list of all policies
    roles_output=subprocess.run(['aws', 'iam', 'list-roles', '--path-prefix', '/test-cdk/'], capture_output=True, text=True)
    roles = str(roles_output.stdout)
    roles_cli = json.loads(roles)

    for roles_cli_key in roles_cli:
        roles_arr = roles_cli[roles_cli_key]
        
        for rol in roles_arr:
            rol_nam = rol['RoleName']
            
            if(rol_nam == 'cdk-test-role'):
                role_id = rol['RoleId']
                role_arn = rol['Arn']
                imported_role = iam.Role.from_role_arn(id=role_id,scope=self,role_arn=role_arn)
                
                print('Found imported role: '+str(imported_role.role_name))

您可以使用 CDK 输出按名称从堆栈中获取角色 arn。

https://docs.aws.amazon.com/cdk/api/v1/docs/@aws-cdk_core.CfnOutput.html

CDK 生成 CloudFormation 模板。因此,当 CLI 运行您的代码时,结果是一个模板。只有当此模板上传到 AWS 并执行时才会创建您的角色(cdk deploy 这样做)。

此外,从您的 CDK 代码进行网络调用,尤其是 SDK 调用不是一个好主意。最佳实践是使您的 CDK 代码具有确定性 - 即每次合成相同的模板而不依赖于网络。