Service Catalogのチュートリアルをやってみたメモ。
チュートリアル
以下の手順どおりに実施。
ステップ 1: AWS CloudFormation テンプレートのダウンロード
テンプレートを以下からダウンロードする。
見やすいようにYAMLに変えると以下の内容。EC2インスタンスを一つ立ち上げるテンプレート。
AWSTemplateFormatVersion: '2010-09-09' Description: AWS Service Catalog sample template. Creates an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example creates an EC2 security group for the instance to give you SSH access. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template. Parameters: KeyName: Description: Name of an existing EC2 key pair for SSH access to the EC2 instance. Type: AWS::EC2::KeyPair::KeyName InstanceType: Description: EC2 instance type. Type: String Default: t2.micro AllowedValues: - t2.micro - t2.small - t2.medium - m3.medium - m3.large - m3.xlarge - m3.2xlarge SSHLocation: Description: The IP address range that can SSH to the EC2 instance. Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2}) ConstraintDescription: Must be a valid IP CIDR range of the form x.x.x.x/x. Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: Instance configuration Parameters: - InstanceType - Label: default: Security configuration Parameters: - KeyName - SSHLocation ParameterLabels: InstanceType: default: 'Server size:' KeyName: default: 'Key pair:' SSHLocation: default: 'CIDR range:' Mappings: AWSRegionArch2AMI: us-east-1: HVM64: ami-08842d60 us-west-2: HVM64: ami-8786c6b7 us-west-1: HVM64: ami-cfa8a18a eu-west-1: HVM64: ami-748e2903 ap-southeast-1: HVM64: ami-d6e1c584 ap-northeast-1: HVM64: ami-35072834 ap-southeast-2: HVM64: ami-fd4724c7 sa-east-1: HVM64: ami-956cc688 cn-north-1: HVM64: ami-ac57c595 eu-central-1: HVM64: ami-b43503a9 Resources: EC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: Ref: InstanceType SecurityGroups: - Ref: InstanceSecurityGroup KeyName: Ref: KeyName ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - HVM64 InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: '22' ToPort: '22' CidrIp: Ref: SSHLocation Outputs: PublicDNSName: Description: Public DNS name of the new EC2 instance Value: Fn::GetAtt: - EC2Instance - PublicDnsName PublicIPAddress: Description: Public IP address of the new EC2 instance Value: Fn::GetAtt: - EC2Instance - PublicIp
ステップ 2: キーペアを作成する
キーペアは既にある物を使う。
ステップ 3: AWS Service Catalog のポートフォリオを作成する
Service Catalogコンソールでポートフォリオを作成する。
項目 | 値 | 備考 |
---|---|---|
ポートフォリオ名 | Engineering Tools | |
説明 | Sample portfolio that contains a single product. | |
所有者 | IT (it@example.com) |
ステップ 4: AWS Service Catalog 製品を作成する
ポートフォリオの詳細ページから「新しい製品のアップロード」する。CloudFormationテンプレートをアップロードするか、URLを指定する。
項目 | 値 | 備考 |
---|---|---|
製品名 | Linux Desktop | |
説明 | Cloud development environment configured for engineering staff. Runs AWS Linux. | |
所有者 | IT | |
ディストリビューター | ||
方法の選択 | CloudFormationテンプレートの使用 | |
CloudFormationテンプレートの使用 | https://awsdocs.s3.amazonaws.com/servicecatalog/development-environment.template | |
バージョンタイトル | v1.0 | |
ガイダンス | なし | |
説明 | Base Version | |
連絡先Eメール | ITSupport@example.com | |
サポートリンク | https://wiki.example.com/IT/support | |
サポートの説明 | Contact the IT department for issues deploying or connecting to this product. |
ステップ 5: テンプレート制約を追加してインスタンスサイズを制限する
ポートフォリオの詳細ページの「制約」タブから「制約を作成」する。テンプレート制約によって、テンプレートのパラメータにさらに制約を加えることができる。制約のルールはインタラクティブエディタか、テキストで入力する。
項目 | 値 | 備考 |
---|---|---|
製品 | Linux Desktop | |
制約タイプ | テンプレート | |
メソッド | テキストエディタ | |
制約の説明 | Small instance sizes |
{ "Rules": { "Rule1": { "Assertions": [ { "Assert" : {"Fn::Contains": [["t2.micro", "t2.small"], {"Ref": "InstanceType"}]}, "AssertDescription": "Instance type should be t2.micro or t2.small" } ] } } }
ステップ 6: IAM ロールを割り当てる起動制約を追加する
起動制約を使うと、CloudFormationを実行するIAMロールを指定することができる。
まずIAMコンソールで以下のIAMポリシーをlinuxDesktopPolicy
という名前で作成する。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStacks", "cloudformation:GetTemplateSummary", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:UpdateStack", "ec2:*", "s3:GetObject", "servicecatalog:*", "sns:*" ], "Resource": "*" } ] }
続いて作成したIAMポリシーをアタッチしたIAMロールをlinuxDesktopLaunchRole
という名前で作成する。ユースケースはService Catalogを選択する。
ポートフォリオの詳細ページから、「制約を作成」する。
項目 | 値 | 備考 |
---|---|---|
製品 | Linux Desktop | |
制約タイプ | 起動 | |
メソッド | IAMロールを検索 | |
IAMロールのリスト | linuxDesktopLaunchRole |
ステップ 7: ポートフォリオへのアクセス権限のエンドユーザーへの付与
テスト用にロールを作る。自アカウントからスイッチロール可能なtestServiceCatalogUserRole
を作成し、AWSServiceCatalogEndUserFullAccess
のポリシーをアタッチする。
ポートフォリオの詳細ページで「グループ、ロール、およびユーザー」タブから、「グループ、ロール、またはユーザーの追加」を行う。testServiceCatalogUserRole
をチェックして「アクセス権を追加」する。
ステップ 8: エンドユーザーのエクスペリエンスをテストする
testServiceCatalogUserRole
にスイッチロールして、Service Catalogコンソールを開く。
このロールに許可された製品が確認できた。
製品を起動する。
項目 | 値 | 備考 |
---|---|---|
名前 | Linux-Desktop | |
バージョン | v1.0 | |
Server size | t2.micro | |
Key pair | <作成済みのキーペア> | |
CIDR | 0.0.0.0/0 |
しばらくすると起動が完了。
別のAWSアカウントへの共有
共有する側
ポートフォリオの詳細ページの「共有タブ」から、「新しいアカウントとの共有」を行う。
Organizationのマスターアカウントの場合は組織のノードを指定して共有ができるようだ。
今回はマスターアカウントではないのでアカウントIDを指定して共有する。
共有される側ではポートフォリオIDが必要になるのでメモしておく。
共有された側
共有された側は、ポートフォリオのインポートが必要。ポートフォリオの「インポートした」タブから、「アクション」の「ポートフォリオをインポート」する。
ここではポートフォリオIDを指定する。
インポートしただけだと使えない。
インポートしたポートフォリオに「グループ、ロール、またはユーザーの」追加を行うことができるが、起動制約が設定されている場合は、設定されているIAMロールが共有元のIAMロールなので問題がある。起動すると共有元の方にスタックが作られてしまう。なので、共有目的の場合は共有する側のポートフォリオでは起動制約は設定しない方がよいと思われる。起動制約がない場合は、サービスカタログの利用者の権限でCloudFormationが実行される。
起動制約を上書きしたい場合は、共有された側でもポートフォリオを作り、インポートしたポートフォリオ内の製品をローカルのポートフォリオに追加する必要がある。
まず、共有された側のAWSアカウントに別のポートフォリオを作成する。
項目 | 値 | 備考 |
---|---|---|
ポートフォリオ名 | Engineering Tools | |
説明 | Sample portfolio that contains a single product. | |
所有者 | Development |
インポートしたポートフォリオ内の製品ページを開き、「アクション」から「ポートフォリオへの製品の追加」を実行する。
ローカルのポートフォリオを選択して製品を追加する。ローカルのポートフォリオができたので、起動制約やテンプレート制約が追加できる。また、このローカルのポートフォリオが参照しているのは共有元の製品なので、共有元の製品の更新に追従できる。
共有されたアカウントでも、共有元と同様にlinuxDesktopPolicy
ポリシーとlinuxDesktopLaunchRole
ロールを作成する。
ローカルのポートフォリオでも、共有元と同様にテンプレート制約と起動制約を作成する。この場合、起動制約は上書き、テンプレート制約は追加になる。
まとめると、起動制約を設定する場合、共有される側では以下が必要。