Skip to main content

动手实践

方案介绍

Service Workbench on AWS 是一个基于云计算的自服务式开源平台,便于IT团队为研究人员提供协作研究的解决方案。

  • 它集成了多个AWS 服务,例如 Amazon CloudFront、AWS Lambda、AWS Step Functions 等。您可以使用 Service Workbench 创建自定义的研究环境模板并与其他组织共享这些模板。
  • 同时,为了控制研究成本,Service Workbench 已与 AWS Cost Explorer 和 AWS Budgets 集成。您可以快速访问仪表板(dashboard),参照预算查看您当前 AWS 服务的使用成本。
  • Service Workbench 已与第三方服务提供商集成,以便在需要时启用。
  • Service Workbench 还可以模拟本地环境中用户已知的概念,从而更轻松地切换到云技术。

Service Workbench on AWS 的详细介绍请参考Service Workbench

参考下面的架构图了解 Service Workbench 方案的具体架构:

前提条件

  • 准备AWS账户,本次动手实践将在 cn-northwest-1 区域或 ap-east-1 区域进行,请确保已开通中国区 AWS 账户或全球区域 AWS 账户并启用香港区域

  • 确保账户在 cn-northwest-1ap-east-1 区域至少还可以创建一个VPC

  • 启用AWS成本管理器,请参考AWS 账户准备

  • 准备一个由 Amazon Route 53 管理的ICP许可域名, 如果是 Isengard 确保申请了ICP exception.

    tip

    本步骤仅对中国区域是必须的。 本步骤完成后,请保存hostedZoneIddomainName,在部署Service Workbench时需要。

  • 准备 OIDC 供应商, 目前方案支持AuthingKeyCloak on AWSOkta 作为IdP 供应商,推荐使用 Authing 为OIDC 供应商进行,请参考Authing申请 创建一个 Authing applicationroot user

    tip

    本步骤完成后,请保存App IDIssuerEmailGiven NameFamily Name的值,在部署Service Workbench时需要。

Step 1:准备部署Service Workbench的工作环境

Service Workbench是一个开源的解决方案,通过shell脚本进行安装,您需要为此准备一个工作环境,将 Github 上的 Service Workbench 源代码下载到此工作环境,并在此工作环境上安装一些所需的软件。 由于网络原因,无论您准备在 cn-northwest-1 区域或 ap-east-1 区域部署Service Workbench,都推荐您在Standard 区域创建EC2 instance工作环境,譬如ap-east-1 区域。

  • 进入ap-east-1 AWS EC2 Console 启动一个Linux EC2 Instance

    • AMI选择 Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
    • 类型: t3.large
    • EBS size: 建议40 GB
  • 创建IAM user,并授权AdministratorAccess 权限,保存Access key ID 和 Secret access key。 此IAM user为 Service Workbench所部署区域的IAM user,与EC2 instance工作环境无关。

  • 使用 ec2-user SSH 到 EC2 Instance工作环境, 执行下面命令配置aws config 和 credentials, 其中Default region name 请填入 Service Workbench 所部署区域。

    aws configure

  • 安装必要的软件

    • 安装nvm

      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
      source ~/.bashrc
      tip

      如果工作环境在 cn-northwest-1 区域,上面命令可能会因为网络原因执行失败,请重复执行,或者使用镜像站替代:

      wget -qO- https://raw.staticdn.net/nvm-sh/nvm/v0.35.3/install.sh | bash
      source ~/.bashrc
    • 安装nodejs,pnpm,serverless 和 hygen

      nvm install 14
      npm install -g pnpm@5.18.9
      npm install -g serverless hygen
    • 安装 golang

      sudo yum install -y golang
    • 验证软件是否安装成功

      node --version
      pnpm --version
      serverless -v
      go version

Step 2:部署 Service Workbench

使用 ec2-user SSH 到 EC2 Instance 工作环境,按下列步骤执行:

  • 安装git

    sudo yum install -y git
  • 获取 Service Workbench 源码

    cd ~
    git clone https://github.com/awslabs/service-workbench-on-aws-cn.git
    tip

    如果工作环境在 cn-northwest-1 区域,上面命令可能会因为网络原因执行失败,请重复执行,或者使用镜像站替代:

    git clone https://gitee.com/mirrors_awslabs/service-workbench-on-aws-cn.git
  • 准备Stage Name环境变量:

    Stage name 用于允许来自同一帐户的多个 Service Workbench 部署, 它代表配置文件的名称。您可以选择自己的stage name, 但是不得超过五个字符。在本次实践中,我们将Stage name定义为 dev

    echo 'export STAGE_NAME=dev' >> ~/.bashrc
    source ~/.bashrc
  • cn-northwest-1 区域准备Stage配置文件:

    cd ~/service-workbench-on-aws-cn/main/config/settings
    cp workshop-cn.yml ${STAGE_NAME}.yml
    • 编辑 ${STAGE_NAME}.yml 文件,设定如下配置:

      oidcClientId: xxx
      oidcIssuer: xxx
      rootUserEmail: xxx
      rootUserFirstName: xxx
      rootUserLastName: xxx

      hostedZoneId:
      domainName:
      • oidcClientId, oidcIssuer, rootUserEmail, rootUserFirstNamerootUserLastName 分别对应 前提条件 步骤中保存的 App IDIssuerEmailGiven NameFamily Name

      • hostedZoneIddomainName前提条件 步骤中保存的hostedZoneIddomainName

  • ap-east-1 区域准备Stage配置文件:

    cd ~/service-workbench-on-aws-cn/main/config/settings
    cp workshop-hk.yml ${STAGE_NAME}.yml
    • 设定OIDC的相关配置,编辑 ${STAGE_NAME}.yml 文件,设定下列配置项:

      oidcClientId: xxx
      oidcIssuer: xxx
      rootUserEmail: xxx
      rootUserFirstName: xxx
      rootUserLastName: xxx
      • oidcClientId, oidcIssuer, rootUserEmail, rootUserFirstNamerootUserLastName 分别对应 前提条件 步骤中保存的 App IDIssuerEmailGiven NameFamily Name

        tip

        对于香港区域,方案部署完成后会提供可以直接访问的Cloudfront域名,如果需要使用本账户的Route 53管理域名,请按照下面步骤配置 hostedZoneIddomainNameACM证书,如果不需要自定义域名,可直接开始部署Service Workbench阶段

        如果需要使用Rstudio workspace,域名是必须的。

    • 配置域名及证书:

      • 在 Amazon ACM 中生成证书,此证书提供给CloudFront,需要在us-east-1创建:

        • 访问Amazon Certificate Manager, 创建一个证书。 在Fully qualified domain name添加 Service Workbench Domain.
        • 点击进入证书,点击 Create records in Route 53 按钮
        • 等待证书状态变成已颁发状态
      • 编辑 ${STAGE_NAME}.yml 文件,底部添加下列配置项:

        hostedZoneId: 
        domainName:
        certificateArn:
        • hostedZoneIddomainName前提条件 步骤中保存的hostedZoneIddomainNamecertificateArn 为在Amazon ACM中生成的证书的ARN。
  • 部署Service Workbench:执行下面命令开始Service Workbench的部署

    cd ~/service-workbench-on-aws-cn
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct
    ./scripts/environment-deploy.sh ${STAGE_NAME}

    部署大概15 ~ 20分钟,如果出现下面的输出,代码Service Workbench部署完成

    部署完成后访问Website URL 域名,并忽略HTTPS证书无效的错误。随后,如果出现下面登录页面则代表部署成功:

Step 3:使用 Service Workbench

  • 导入内置的Sagemaker 工作区类型

    • 选择导入SageMaker Notebook 工作区类型, 左侧菜单导航到 工作区类型,选择SageMaker Notebook 导入。
    • 点击 添加配置, 根据页面提示对工作区类型进行基本配置
    • 输入参数部分没有预设的字段为InstancetypeAutoStopIdleTimeInMinutes,根据页面提示填入相应的值
    • 导入完成后左侧菜单导航到 工作区类型工作区类型列表 中会出现 SageMaker Notebook,选择批准
  • 创建一个数据集和上传数据,参考Studies

  • 添加一个Researcher 用户,参考添加一个用户.

tip

请确保Username是电子邮件格式, UserRole选择 researcher, 选择 项目

深入体验Service Workbench

以上为Service Workbench的基本功能,后面可以继续深入体验Service Workbench的其他功能,主要包括:

  • 生成自定义的AMIs

  • 创建和启动 Rstudio Workspace

  • 导入自定义的 workspace 模版

    如果不继续深入体验Service Workbench的其他功能,可直接跳至删除Service Workbench 清理Service Workbench的相关资源

Step 4: 生成自定义的AMIs,创建EC2 Windows 和 EC2 Linux 工作区类型

本章节介绍如何通过 packer生成AMIs,包括 EC2 Linux和 EC2 Windows,详细说明参考安装AMIs

  • 安装 Packer
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install packer
  • 生成 AMIs,大约需要10~15分钟
cd ~/service-workbench-on-aws-cn/main/solution/machine-images
pnpx sls build-image -s ${STAGE_NAME}

Step 5: 创建 Rstudio Workspace

RStudio workspace type 使用了AWS合作伙伴提供的模版和AMI,详细内容请Rstudio Workspace

  • 获取 Rstudio 代码
cd ~
git clone https://github.com/RLOpenCatalyst/Service_Workbench_Templates.git
cd ~/Service_Workbench_Templates/RStudio/machine-images/config/infra/files/rstudio
vi secret.txt
  • Build Rstudio AMI

    • 安装 packer, 参考Install Packer

      sudo yum install -y yum-utils
      sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
      sudo yum -y install packer
    • 配置~/Service_Workbench_Templates/RStudio/machine-images/config/infra/configuration.json 中的下列配置项

          "aws_access_key": "xxx",
      "aws_secret_key": "xxx",
      "awsRegion": "xxx",
      "vpcId": "xxx",
      "subnetId": "xxx",
      "amiName": "Rstudio",
      "awsProfile": "default",
      "stageName": "dev"

      其中vpcId和subnetId填入default的VPC和Subnet即可。

    • Build Rstudio AMI

      cd ~/Service_Workbench_Templates/RStudio/machine-images/config/infra
      nohup packer build -var-file=configuration.json packer-ec2-rstudio-workspace.json >> ~/nohup.log 2>&1 &
      tail -f ~/nohup.log
  • 将Rstudio workspace template导入到Service Workbench中

    • 拷贝 ~/service-workbench-on-aws-cn/main/config/settings/$STAGE_NAME.yml~/Service_Workbench_Templates/RStudio/machine-images/config/infra
      cp ~/service-workbench-on-aws-cn/main/config/settings/$STAGE_NAME.yml ~/Service_Workbench_Templates/RStudio/machine-images/config/infra
    • 访问 cn-northwest-1 service Catalog Portfolioap-east-1 service Catalog Portfolio 获取在部署Service Workbench过程中生成的dev-nx-workshopdev-hk-workshop Portfolio Id.
    • 添加portfolioIdawsProfile~/Service_Workbench_Templates/RStudio/machine-images/config/infra/$STAGE_NAME.yml 的最后,内容如下:
      portfolioId: port-xxx
      awsProfile: default
    • 导入 Rstudio workspace template
      cd ~/Service_Workbench_Templates/RStudio/machine-images/config/infra/
      pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
      python3 create-rstudio.py
      访问 cn-northwest-1 service Catalog Portfolioap-east-1 service Catalog Portfolio, 查看EC2-RStudio-Server是否已经添加成功
  • 配置Rstudio Workspace type

    • 为Rstudio创建 ACM 证书,此证书将与RStudio workspace 的 application loadbalancer关联,需要在Service Workbench所在区域创建
    • 参考 导入 Workspace type,将EC2-RStudio-Server Workspace type导入,并配置Workspace Type, 需要填入下列配置:
      ACMSSLCertARN
      AmiId
      InstanceType

Step 6: 导入自定义的 workspace 模版

Service Workbench 除了内置的workspace template以外,还支持客户自定义workspace template,本章节介绍如何添加一个自定义的workspace template。 跟随手动实践创建一个内置反欺诈实验的Sagemaker Workspace Type

  • 准备定制的workspace 模版

    • 准备模版中需要的反欺诈 Jupyter Notebook 脚本

      cd ~
      git clone https://github.com/awslabs/realtime-fraud-detection-with-gnn-on-dgl.git
      cp -r ~/realtime-fraud-detection-with-gnn-on-dgl/src/sagemaker ~/service-workbench-on-aws-cn/main/solution/post-deployment/config/environment-files/
    • 准备为SageMaker Notebook中提前预设环境所需要的脚本,在~/service-workbench-on-aws-cn/main/solution/post-deployment/config/environment-files/ 路径下创建 customize.sh 文件,内容如下:

      #!/bin/bash
      set -e
      sudo -u ec2-user -i <<'EOF'
      cp -rf /usr/local/share/workspace-environment/sagemaker ~/SageMaker/
      cd ~/SageMaker/
      echo 'DGL == 0.6.*
      SageMaker >= 2.40.0, < 3.0.0
      awscli >= 1.18.140
      torch >= 1.6.0, < 1.7.0
      pandas
      sklearn
      matplotlib' >> requirements.txt

      nohup pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt &
      EOF
    • 以内置的SageMaker Workspace type为基础创建定制模版

      cd ~/service-workbench-on-aws-cn/addons/addon-base-raas/packages/base-raas-cfn-templates/src/templates/service-catalog/
      cp sagemaker-notebook-instance.cfn.yml sagemaker-notebook-instance-customize.cfn.yml
    • 添加定制的内容到sagemaker-notebook-instance-customize.cfn.yml

      • OnStart: section 中添加定制内容, 包括下载上面创建的customize.sh脚本以及执行该脚本:

                      aws s3 cp --region "${AWS::Region}" "${EnvironmentInstanceFiles}/customize.sh" "/tmp"
        chmod 500 "/tmp/customize.sh"
        /tmp/customize.sh
      • 在sagemaker-notebook-instance-customize.cfn.yml模版授权role必要的权限

        • 添加下面权限给InstanceRolePermissionBoundary

                    - Effect: Allow
          Action: 'ecr:*'
          Resource: '*'
        • 授权 IAMRole 权限, 创建下面的policy

                  - PolicyName: !Join ['-', [Ref: Namespace, 'customize-policy']]
          PolicyDocument:
          Version: '2012-10-17'
          Statement:
          - Effect: 'Allow'
          Action: 's3:*'
          Resource: !Sub 'arn:${AWS::Partition}:s3:::aws-gcr-solutions-assets/*'
          - Effect: 'Allow'
          Action: 'ecr:GetAuthorizationToken'
          Resource: '*'
          - Effect: 'Allow'
          Action: 'ecr:BatchGetImage'
          Resource: '*'
  • 将模版导入Service Catalog

    • 将模版添加到Service Workbench 配置文件中

      cd ~/service-workbench-on-aws-cn/addons/addon-base-raas/packages/base-raas-post-deployment/lib/steps/
      vi create-service-catalog-portfolio.js

      内容如下到 productsToCreate 列表中:

        {
      filename: 'sagemaker-notebook-instance-customize',
      displayName: 'Sagemaker Customize',
      description: `An Amazon SageMaker Jupyter Notebook \n* Realtime Fraud Detection with Gnn On Dgl`,
      },
    • 执行部署Service Workbench脚本,将新创建的导入到Service Workbench中

      cd ~/service-workbench-on-aws-cn
      ./scripts/environment-deploy.sh ${STAGE_NAME}

      部署完成之后以Admin的身份访问Service Workbench, 进入Workspace Types, 如果页面显示Sagemaker Customize Workspace type, 代表定制的模版已经部署到了Service Workbench,参考 导入 Workspace type 导入workspace type 进行即可。

Step 7: 删除 Service Workbench

参考卸载 Service Workbench 卸载Service Workbench