背景
AWSのIaCのCloudFormationでループ処理ができるようになっていたらしい(2023/07くらい)
CloudFormationでIamユーザーを複数作る際に似たような処理を何回も記載するのは面倒だったけど、これで一気に作成できる
CloudFormation yml
ymlで記載
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::LanguageExtensions'
Description: Template for creating Initial IAM
Parameters:
UserNames:
Type: List<String>
Default: user01, user02, user03
Resources:
IAMGrouopInitialTest:
Type: 'AWS::IAM::Group'
DeletionPolicy: Retain
Properties:
GroupName: "test-user-group-01"
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/ReadOnlyAccess'
'Fn::ForEach::CreateUserLoopName':
- username
- !Ref UserNames
- 'IAMUserInitial${username}':
Type: 'AWS::IAM::User'
DeletionPolicy: Retain
Properties:
UserName: !Ref username
Groups:
- "test-user-group-01"
Outputs:
'Fn::ForEach::OutputUserLoopName':
- username
- !Ref UserNames
- 'UserNames${username}':
Description: Information about User name
Value: !Sub "IAMUserInitial${username}"
'PasswordSettingURL${username}':
Description: Please create a password at the URL
Value: !Join
- ''
- - 'https://'
- console.aws.amazon.com/iam/home?region=
- !Ref 'AWS::Region'
- '#/users/'
- !Ref username
- '?section=security_credentials'
LoginURL:
Description: Information about console login URL
Value: !Join
- ''
- - 'https://'
- !Ref 'AWS::AccountId'
- .signin.aws.amazon.com/console
ポイントは2つ. 1つ目はParameters
でstringのlistを作成. ここでユーザー名の一覧を記載.
2つ目はFn::ForEach::CreateUserLoopName
でループを定義.
'Fn::ForEach::CreateUserLoopName':
- username
- !Ref UserNames
- 'IAMUserInitial${username}':
usernameの部分でループ変数を定義している.
- username
- !Ref UserNames
あとはこれを普通cloudformation通りに実行してstackを作成すれば良い.
実行すると、ymlで指定したユーザーグループ、test-user-group-01
にユーザーが複数作成されていた.