

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用创建应用程序 AWS CLI
<a name="mlflow-app-create-app-cli"></a>

您可以使用创建应用程序， AWS CLI 以实现更精细的安全自定义。

## 先决条件
<a name="mlflow-app-create-app-cli-prereqs"></a>

要使用创建应用程序 AWS CLI，必须具备以下条件：
+ **可以访问终端。**这可能包括本地 IDE、Amazon EC2 实例或 AWS CloudShell。
+ **可以进入开发环境。**这可能包括 Studio IDEs 或 Studio Classic 中的本地或 Jupyter 笔记本环境。
+ **已配置的 AWS CLI 安装**。有关更多信息，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
+ **具有适当权限的 IAM 角色**。以下步骤要求环境具有 `iam:CreateRole`、`iam:CreatePolicy`、`iam:AttachRolePolicy` 和 `iam:ListPolicies` 权限。运行本用户指南中的步骤所使用的角色需要这些权限。本指南中的说明创建了一个用作应用程序执行角色的 IAM 角色，以便 MLflow 应用程序可以访问您的 Amazon S3 存储桶中的数据。此外，还会创建一项策略，为通过 MLflow SDK 与应用程序交互的用户的 IAM 角色授予调用权限 MLflow APIs。有关更多信息，请参阅[修改角色权限策略（管理控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)。

  如果使用 SageMaker Studio 笔记本，请使用这些 IAM 权限更新您的 Studio 用户个人资料的服务角色。要更新服务角色，请导航到 SageMaker AI 控制台并选择您正在使用的域。然后，在域下选择正在使用的用户配置文件。您将看到服务角色在此列出。导航至 IAM 管理控制台，在**角色**下搜索服务角色，然后使用允许 `iam:CreateRole`、`iam:CreatePolicy`、`iam:AttachRolePolicy` 和 `iam:ListPolicies` 操作的策略更新角色。

## 设置 AWS CLI 模型
<a name="mlflow-app-create-app-cli-setup"></a>

在终端中按照以下命令行步骤设置 AWS CLI 适用于 Amazon SageMaker AI 的 MLflow。

1. 安装更新版本的 AWS CLI。有关更多信息，请参阅《AWS CLI User Guide》**中的 [Install or update to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 使用以下命令验证 AWS CLI 是否已安装：

   ```
   aws sagemaker help
   ```

   按 `q` 键退出提示。

   有关问题排查帮助，请参阅[排除常见设置问题](mlflow-troubleshooting.md)。

## 设置 MLflow 基础架构
<a name="mlflow-create-app-cli-infra-setup"></a>

以下部分向您展示如何设置 MLflow 应用程序以及该应用程序所需的 Amazon S3 存储桶和 IAM 角色。

### 创建 S3 存储桶
<a name="mlflow-infra-setup-s3-bucket"></a>

在终端中，使用以下命令创建一个通用的 Amazon S3 存储桶：

**重要**  
当您为项目商店提供 Amazon S3 URI 时，请确保 Amazon S3 存储桶与您的 MLflow 应用程序 AWS 区域 相同。**不支持跨区域构件存储**。

```
bucket_name=bucket-name
  region=valid-region
  
  aws s3api create-bucket \
    --bucket $bucket_name \
    --region $region \
    --create-bucket-configuration LocationConstraint=$region
```

该输出值应该类似于以下内容：

```
{
      "Location": "/bucket-name"
  }
```

### 设置 IAM 信任策略
<a name="mlflow-app-create-app-cli-trust-policy"></a>

使用以下步骤创建 IAM 信任策略。有关角色和信任策略的更多信息，请参阅《AWS Identity and Access Management 用户指南》中的[角色术语和概念](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)。

1. 在终端中，使用以下命令创建名为 `mlflow-trust-policy.json` 的文件。

   ```
   cat <<EOF > /tmp/mlflow-trust-policy.json
     {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": [                     
                           "sagemaker.amazonaws.com"
                      ]
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
     EOF
   ```

1. 在终端中，使用以下命令创建名为 `custom-policy.json` 的文件。

   ```
   cat <<EOF > /tmp/custom-policy.json
     {
         "Version": "2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "s3:Get*",
                     "s3:Put*",
                     "sagemaker:AddTags",
                     "sagemaker:CreateModelPackageGroup",
                     "sagemaker:CreateModelPackage",
                     "sagemaker:DescribeModelPackageGroup",
                     "sagemaker:UpdateModelPackage",
                     "s3:List*"
                 ],
                 "Resource": "*"
             }
         ]
     }
     EOF
   ```

1. 使用信任策略文件创建角色。然后，附加允许 MLflow 在您的账户中访问 Amazon S3 和 SageMaker 模型注册表的 IAM 角色策略。 MLflow 必须有权访问 Amazon S3 才能访问应用程序的工件存储区，并有权访问 SageMaker 模型注册表才能自动注册模型。
**注意**  
如果您要更新现有角色，请使用以下命令：`aws iam update-assume-role-policy --role-name $role_name --policy-document file:///tmp/mlflow-trust-policy.json`。

   ```
   role_name=role-name
     
     aws iam  create-role \
       --role-name $role_name \
       --assume-role-policy-document file:///tmp/mlflow-trust-policy.json
     
     aws iam put-role-policy \
       --role-name $role_name \
       --policy-name custom-policy \
       --policy-document file:///tmp/custom-policy.json
     
     role_arn=$(aws iam get-role --role-name  $role_name --query 'Role.Arn' --output text)
   ```

## 创建 MLflow 应用程序
<a name="mlflow-app-create-app-cli-create"></a>

在您的终端中，使用 `create-mlflow-app` API 创建您选择 AWS 区域 的应用程序。此步骤通常需要大约 2-3 分钟。

以下命令创建一个启用了自动模型注册功能的新应用程序。要停用自动模型注册，请指定 `--no-automatic-model-registration`。

创建应用程序后，您可以启动 MLflow 界面。有关更多信息，请参阅 [使用预先指定的 URL 启动 MLflow 用户界面](mlflow-launch-ui.md)。

**注意**  
最多可能需要 2-3 分钟才能完成应用程序创建。如果应用程序的创建时间超过 3 分钟，请检查您是否拥有必要的 IAM 权限。成功创建应用程序后，它会自动启动。

默认情况下，创建的应用程序是最新版本，并将自动更新。

```
app_name=app-name
  region=valid-region
  version=valid-version        
  
  
  aws sagemaker create-mlflow-app \
   --name $app_name \
   --artifact-store-uri s3://$bucket_name \
   --role-arn $role_arn \
   --automatic-model-registration \
   --region $region
```

此输出应当类似于如下所示：

```
{
      "AppArn": "arn:aws:sagemaker:region:123456789012:mlflow-app/app-name"
  }
```

**重要**  
**记下应用程序 ARN 以备日后使用。**您还需要 `$bucket_name` 来完成清理步骤。