我使用 iam.Role 创建了一个角色,然后尝试使用子流程库找到该角色。我看到该角色已成功创建,但无法在使用 subprocess 执行的命令的输出中找到该角色。请在下面找到代码。
任何人都可以指出问题所在,并根据 CDK 中的角色名称/Id 建议获取任何角色的 Arn 的最佳方法
类 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 生成 CloudFormation 模板。因此,当 CLI 运行您的代码时,结果是一个模板。仅当此模板上传到 AWS 并执行(执行此操作)时,才会创建您的角色cdk deploy
。
此外,从您的 CDK 代码进行网络调用(尤其是 SDK 调用)也不是一个好主意。最佳实践是使您的 CDK 代码具有确定性——即每次都合成到同一个模板,而不依赖于网络。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句