如何在CloudFormation中获取AWS Connect实例的安全与路由配置文件ARN?
解决方法
AWS Connect在创建实例时会自动生成默认的管理员安全配置文件和默认路由配置文件,这些资源的ARN遵循固定格式,你可以通过CloudFormation内置函数直接构造出对应的ARN,无需依赖!GetAtt或外部API/CLI调用。
构造ARN的具体方式
- 管理员安全配置文件ARN格式:
arn:aws:connect:<区域>:<账号ID>:instance/<实例ID>/security-profile/Admin - 默认路由配置文件ARN格式:
arn:aws:connect:<区域>:<账号ID>:instance/<实例ID>/routing-profile/Default
你可以通过!Split和!Select从实例ARN中提取实例ID,再结合!Sub函数拼接出完整的目标ARN。修改后的CloudFormation用户资源定义如下:
ConnectUserAdmin: Type: AWS::Connect::User Properties: IdentityInfo: FirstName: admin LastName: user Username: adminuser InstanceArn: !GetAtt AmazonConnectInstance.Arn # 构造默认路由配置文件ARN RoutingProfileArn: !Sub - "arn:aws:connect:${AWS::Region}:${AWS::AccountId}:instance/${InstanceId}/routing-profile/Default" - InstanceId: !Select [2, !Split ["/", !GetAtt AmazonConnectInstance.Arn]] # 构造管理员安全配置文件ARN SecurityProfileArns: - !Sub - "arn:aws:connect:${AWS::Region}:${AWS::AccountId}:instance/${InstanceId}/security-profile/Admin" - InstanceId: !Select [2, !Split ["/", !GetAtt AmazonConnectInstance.Arn]] Password: '1234567890'
原理说明
实例ARN的格式为arn:aws:connect:<区域>:<账号ID>:instance/<实例ID>,通过!Split ["/", !GetAtt AmazonConnectInstance.Arn]可以将ARN拆分为数组,其中索引为2的元素就是实例ID,再通过!Sub替换到固定ARN模板中即可得到目标资源的ARN。
原始问题
我编写了如下CloudFormation脚本来创建一个简单的AWS Connect实例:
Resources: AmazonConnectInstance: Type: AWS::Connect::Instance Properties: Attributes: InboundCalls: YES OutboundCalls: YES IdentityManagementType: CONNECT_MANAGED InstanceAlias: 'my-demo-1234fhy49d'
现在我希望在同一个脚本中创建一个管理员用户:
... ConnectUserAdmin: Type: AWS::Connect::User Properties: IdentityInfo: FirstName: admin LastName: user Username: adminuser InstanceArn: !GetAtt AmazonConnectInstance.Arn RoutingProfileArn: ????? SecurityProfileArns: [?????] Password: '1234567890'
但我找不到获取该实例的安全配置文件或路由配置文件的方法,例如类似!GetAtt AmazonConnectInstance.AdminProfileArn或!GetAtt AmazonConnectInstance.DefaultRoutingProfileArn的方式会很有用。请问我该如何实现(不使用自定义资源)?
重要提示:我不是指使用GET API或aws connect CLI来获取实例的安全配置文件或路由配置文件。
内容的提问来源于stack exchange,提问作者fade2black
相关产品推荐
相关产品推荐

