[Workshop] Marketplace 製品の導入と管理を学べる「AWS Marketplace: Deploy, govern & analyze spend of third-party software」に参加しました #MKT304 #AWSreInvent

[Workshop] Marketplace 製品の導入と管理を学べる「AWS Marketplace: Deploy, govern & analyze spend of third-party software」に参加しました #MKT304 #AWSreInvent

Clock Icon2024.12.03

中川です。

AWS re:Invent 2024 でワークショップ「AWS Marketplace: Deploy, govern & analyze spend of third-party software」に参加してきました。

会場の雰囲気

ワークショップの時間帯が 12:00 ~ 14:00 ということもあり、会場へランチボックスを持ち込み昼食を取りながら参加している方が多かったです。

IMG_3126.jpg

ワークショップの概要

  • セッション ID:MKT304
  • タイトル:AWS Marketplace: Deploy, govern & analyze spend of third-party software
  • スピーカー:Joseph Shih (Principal Specialist Solutions Architect), Chandrashekar Vishweshwara(AWS Marketplace Solutions Architect)
  • レベル:300

re:Invent 2024 公式サイトのワークショップ概要を翻訳した内容が以下となります。

AWS Marketplace を利用すると、サードパーティのソフトウェア、データ、およびサービスの検索、契約、導入、管理が容易になります。このワークショップでは、AWS Marketplaceについて学び始めたばかりの購入者を対象としたハンズオンラボと、知識の拡大を目指す経験豊富な購入者を対象としたラボのどちらかを選択できます。新規購入者は、AWS Marketplaceでさまざまなタイプのサードパーティ製品を購入し、デプロイする方法を学ぶことができます。経験豊富な購入者は、承認済みの製品のプライベートマーケットプレイスをセットアップし、ライセンスを共有し、支出を分析し、コストを割り当てることで、購入を管理する方法を学ぶことができます。このセッションに参加するには、AWSアカウント(管理者権限)が必要です。参加するには、ノートパソコンを持参する必要があります。

ワークショップの内容

6 つのラボに分かれており 1~5 のでは Marketplace 製品の導入を学びます。6 のラボでは、組織で Marketplace を使うためのガバナンスを効かせた管理方法について学びます。

  1. Deploy a free Amazon Machine Image (AMI)
  2. Deploy a free container product
  3. Deploy a free EKS add-on
  4. Subscribe to a SaaS
  5. Deploy a pre-trained ML model
  6. Govern your third-party purchases

今回は太字のラボを体験しましたので紹介します。

Lab 2. Deploy a free container product

ラボ 2 では、Marketpalce からコンテナ製品(Istio の Tetrate Distro)を調達して、デプロイする流れを試します。

mp_container_deploy.png

用意されたスクリプトを実行して、eksctl、kubectl、helm をインストールします。

$ ./pre-reqs.sh
インストールスクリプト(bashpre-reqs.sh )
echo "..........Installing EKSCTL now ............"
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz" && tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
echo "..........Installing KUBECTL now ............"
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.30.4/2024-09-11/bin/linux/amd64/kubectl
kubectl version --short --client
echo "..........Installing HELM now ............"
wget https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
tar -zxvf helm-v3.16.3-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
helm version
echo "..........EKTCTL, KUBECTL, HELM Installed Successfully!!............"
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
echo "........................Installed Terraform as well................."[cloudshell-user@ip-10-132-84-240 ~]$ 

EKS クラスターを作成します。

$ eksctl create cluster --name mpbuyerlab-mp-container-test-cluster --nodegroup-name mpbuyerlab-mp-container-test-cluster-ng --region us-east-1 --zones=us-east-1a,us-east-1b --version 1.302024-12-02 

kubeconfig の設定を更新します。

$ aws eks update-kubeconfig --name mpbuyerlab-mp-container-test-cluster --region us-east-1

ノードが立ち上がっていることを確認します。

$ kubectl get nodes
NAME                             STATUS   ROLES    AGE     VERSION
ip-192-168-14-221.ec2.internal   Ready    <none>   8m39s   v1.30.6-eks-94953ac
ip-192-168-56-194.ec2.internal   Ready    <none>   7m46s   v1.30.6-eks-94953ac

IAM OIDC Identity プロバイダーを作成し、Amazon EKS クラスターのサービスアカウントに IAM ロールを使用します。

$ eksctl utils associate-iam-oidc-provider --region=us-east-1 --cluster=mpbuyerlab-mp-container-test-cluster --approve

IAM ロールと Kubernetes サービスアカウントを作成します。

$ kubectl create namespace istio-system

$ eksctl create iamserviceaccount \
    --name tid-deployment \
    --namespace istio-system \
    --cluster mpbuyerlab-mp-container-test-cluster \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSMarketplaceMeteringFullAccess \
    --attach-policy-arn arn:aws:iam::aws:policy/AWSMarketplaceMeteringRegisterUsage \
    --attach-policy-arn arn:aws:iam::aws:policy/service-role/AWSLicenseManagerConsumptionPolicy \
    --approve \
    --override-existing-serviceaccounts

Helm チャートは Kubernetes クラスタにデプロイするのに必要なリソースをすべて含んだパッケージ形式です。
ここでは Helm チャートを使用してサードパーティのコンテナ製品を Amazon EKS クラスターにデプロイします。

$ export HELM_EXPERIMENTAL_OCI=1

$ aws ecr get-login-password \
    --region us-east-1 | helm registry login \
    --username AWS \
    --password-stdin 709825985650.dkr.ecr.us-east-1.amazonaws.com

$ mkdir awsmp-chart && cd awsmp-chart

$ helm pull oci://709825985650.dkr.ecr.us-east-1.amazonaws.com/tetrate-io/tetrate-istio --version 1.24.10001

$ tar xf $(pwd)/* && find $(pwd) -maxdepth 1 -type f -delete

$ helm install --generate-name \
    --namespace istio-system ./* \
    --set Helmkeyname2=tid-deployment \
    --set global.hub=709825985650.dkr.ecr.us-east-1.amazonaws.com/tetrate-io/tetrate-istio \
    --set global.tag=1.24.10001-tetrate-v0

Istio の Tetrate Distro が正常にインストールされたことを確認できました

ss_2024-12-02_13_25_41.png

アドオンのステータスを表示するとリソースが正常に起動できていることを確認できます。

ss_2024-12-02_13_25_50.png

Lab 6. Govern your third-party purchases

このラボでは、Private Marketplace の機能を使用して、誰がサブスクライブできるか、どの製品をサブスクライブできるかを制御する方法を学びます。

準備として、管理者とエンドユーザーの 2 つのロールを CloudFormation で展開します。
管理者ロールでは承認済みの製品リストを作成し、エンドユーザーロールでは承認済みの製品を展開と承認されていない製品の要求します。

CloudFormation テンプレート
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "AWS setup private MP",
    "Outputs":
    {
        "MPAdmin":
        {
            "Description": "Use this role for a PrivMP Administrator",
            "Value":
            {
                "Fn::Sub": "https://signin.aws.amazon.com/switchrole?account=${AWS::AccountId}&roleName=${mpadmin}&displayName=mpAdmin"
            }
        },
        "MPAdminLinks":
        {
            "Description": "https://aws.amazon.com/marketplace/privatemarketplace#/ https://aws.amazon.com/marketplace/privatemarketplace/requests https://aws.amazon.com/marketplace/privatemarketplace#/dashboard",
            "Value": "https://aws.amazon.com/marketplace/privatemarketplace#/ https://aws.amazon.com/marketplace/privatemarketplace/requests https://aws.amazon.com/marketplace/privatemarketplace#/dashboard"
        },
        "MPenduser":
        {
            "Description": "Use this role for a PrivMP enduser",
            "Value":
            {
                "Fn::Sub": "https://signin.aws.amazon.com/switchrole?account=${AWS::AccountId}&roleName=${mpenduser}&displayName=mpEndUser"
            }
        }
    },
    "Resources":
    {
        "mpadmin":
        {
            "Properties":
            {
                "AssumeRolePolicyDocument":
                {
                    "Statement":
                   [
                        {
                            "Action":
                           [
                                "sts:AssumeRole"
                           ],
                            "Effect": "Allow",
                            "Principal":
                            {
                                "AWS":
                               [
                                    {
                                        "Ref": "AWS::AccountId"
                                    }
                               ]
                            }
                        }
                   ],
                    "Version": "2012-10-17"
                },
                "ManagedPolicyArns":
               [
                    "arn:aws:iam::aws:policy/AWSPrivateMarketplaceAdminFullAccess",
                    "arn:aws:iam::aws:policy/AWSMarketplaceProcurementSystemAdminFullAccess",
                    "arn:aws:iam::aws:policy/ReadOnlyAccess",
                    "arn:aws:iam::aws:policy/AWSCloudFormationReadOnlyAccess"
               ],
                "Path": "/",
                "Policies":
               [
                    {
                        "PolicyDocument":
                        {
                            "Statement":
                           [
                                {
                                    "Action":
                                   [
                                        "aws-marketplace:Subscribe",
                                        "aws-marketplace:Unsubscribe",
                                        "aws-marketplace:ViewSubscriptions",
                                        "aws-marketplace:StartBuild"
                                   ],
                                    "Effect": "Allow",
                                    "Resource": "*"
                                }
                            ],
                            "Version": "2012-10-17"
                        },
                        "PolicyName": "privmpadmin"
                    },
                ]
            },
            "Type": "AWS::IAM::Role"
        },
        "mpenduser":
        {
            "Properties":
            {
                "AssumeRolePolicyDocument":
                {
                    "Statement":
                    [
                        {
                            "Action":
                            [
                                "sts:AssumeRole"
                            ],
                            "Effect": "Allow",
                            "Principal":
                            {
                                "AWS":
                                [
                                    {
                                        "Ref": "AWS::AccountId"
                                    }
                                ]
                            }
                        }
                    ],
                    "Version": "2012-10-17"
                },
                "ManagedPolicyArns":
                [
                    "arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess",
                    "arn:aws:iam::aws:policy/AWSServiceCatalogEndUserReadOnlyAccess",
                    "arn:aws:iam::aws:policy/AWSPrivateMarketplaceRequests",
                    "arn:aws:iam::aws:policy/AWSCloudFormationReadOnlyAccess"
                ],
                "Path": "/",
                "Policies":
                [
                    {
                        "PolicyDocument":
                        {
                            "Statement":
                            [
                                {
                                    "Action":
                                    [
                                        "aws-marketplace:Subscribe",
                                        "aws-marketplace:Unsubscribe",
                                        "aws-marketplace:ViewSubscriptions",
                                        "aws-marketplace:StartBuild",
                                        "ec2:RunInstances",
                                        "ec2:AuthorizeSecurityGroupIngress",
                                        "ec2:CreateSecurityGroup",
                                        "ec2:DeleteSecurityGroup",
                                        "ec2:DescribeSubnets",
                                        "ec2:DescribeKeyPairs",
                                        "ec2:DescribeSecurityGroups",
                                        "ec2:DescribeVpcs",
                                        "ec2:DescribeInstances",
                                        "ec2:CreateKeyPair",
                                        "ec2:DeleteKeyPair",
                                        "ec2:TerminateInstances"
                                    ],
                                    "Effect": "Allow",
                                    "Resource": "*"
                                }
                           ],
                            "Version": "2012-10-17"
                        },
                        "PolicyName": "privmpenduser"
                    }
               ]
            },
            "Type": "AWS::IAM::Role"
        }
    }
}

スイッチロール運用をしている環境ではスイッチロールに失敗するため、管理者とエンドユーザーのロールそれぞれで信頼ポリシーを更新します。

また、手順にはありませんが、Private Marketplace を管理アカウントで有効にする必要があります。
有効にされていないアカウントの場合は、このタイミングで有効化しましょう。

ss 2024-12-02 15.06.37.png

有効化できたら、作成した管理ロールにスイッチロールします。

Private Marketplace Dashboard のナビゲーションペインから[experience]を開き、[Create experience]をクリックします。

ss_2024-12-02_15_16_00.png

Experience title を入力し、[Create experience]をクリックします。

ss 2024-12-02 15.16.06.png

作成した Experience「DevOps」を開き、Products > All AWS Marketplace products とクリックします。
検索欄に "WordPress Certified by Bitnami and Automattic" と入力して、対象にチェックしたら[Add]をクリックします。

ss_2024-12-02_15_26_40.png

次に、オーディエンスを作成して Experience と関連付けることで、組織やアカウントを管理できるようになります。
Assosiation audience タブの[Add additional audience]より、アカウントを追加することで、そのアカウント上で WordPress Certified by Bitnami and Automattic を利用できるようになります。

ss_2024-12-03_1_08_14.png

ここまでで管理側の作業が完了しました。
エンドユーザーのロールにスイッチロールして、Marketplace のサブスクライブをできるか確認します。

WordPress Certified by Bitnami and Automattic のページからサブスクライブして、ネットワークやセキュリティグループなどの設定を行います。

ss 2024-12-02 12.26.19.png

ss_2024-12-02_12_26_50.png

EC2 が起動し、パブリック DNS 名から HTTP 接続するとブログページを表示できました。

ss 2024-12-03 0.48.09.png

最後に同じエンドユーザーのロールを使って、未承認の製品をサブスクライブしてみようと思います。
製品の一覧から未承認の「LAMP packaged by Bitnami」を検索してクリックします。

ss 2024-12-03 1.01.09.png

上部に未承認であることのエラーが表示されました。
続けて、エラーメッセージの右側にある[Request product]をクリックします。

ss_2024-12-03_1_01_26.png

Private Marketplace 対してリクエストを投げられますので、理由を入力してリクエストを投げます。

ss 2024-12-03 1.02.43.png

もう一度、管理のロールに戻り、Experience の Product を確認すると、リクエストした製品がペンディングになっていることを確認できました。

ss 2024-12-03 1.04.00.png

これにてワークショップは終了になります。

さいごに

本ワークショップを通じて、Marketplace を通じてサードパーティのソフトウェアを導入するときの流れを確認できました。
今回はワークショップの手順通り進めましたが、製品ページにも導入手順が記載されており、スムーズに導入できそうでした。
また、Private Marketplace の基本的な機能を試すことができ、組織として Marketplace を管理したいときの操作を体験できました。
組織でサードパーティ製品のガバナンスを効かせたいときに活用したいです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.