

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

# 刷新 CodeArtifact 令牌
<a name="samples-code-artifact"></a>

如果您使用 CodeArtifact 来安装 Python 依赖项，则 Amazon MWAA 需要有效的令牌。要允许 Amazon MWAA 在运行时访问 CodeArtifact 存储库，您可以使用[启动脚本](using-startup-script.md)并使用令牌设置 [https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-extra-index-url](https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-extra-index-url)。

以下主题介绍如何创建启动脚本，该脚本使用 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/codeartifact.html#CodeArtifact.Client.get_authorization_token](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/codeartifact.html#CodeArtifact.Client.get_authorization_token) CodeArtifact API 操作在每次环境启动或更新时检索新令牌。

**Topics**
+ [版本](#samples-code-artifact-version)
+ [先决条件](#samples-code-artifact-prereqs)
+ [权限](#samples-code-artifact-permissions)
+ [代码示例](#samples-code-artifact-code)
+ [接下来做什么？](#samples-code-artifact-next-up)

## 版本
<a name="samples-code-artifact-version"></a>

您可以在 [Python 3.10](https://peps.python.org/pep-0619/) 中将本页上的代码示例与 **Apache Airflow v2** 一起使用，在 [Python 3.11](https://peps.python.org/pep-0664/) 中与 **Apache Airflow v3** 一起使用。

## 先决条件
<a name="samples-code-artifact-prereqs"></a>

要使用本页上的示例代码，您需要以下内容：
+ [Amazon MWAA 环境](get-started.md)。
+ [CodeArtifact 存储库](https://docs.aws.amazon.com/codeartifact/latest/ug/create-repo.html)，用于存储环境的依赖项。

## 权限
<a name="samples-code-artifact-permissions"></a>

要刷新 CodeArtifact 令牌并将结果写入 Amazon S3，Amazon MWAA 的执行角色必须具有以下权限。
+ 该 `codeartifact:GetAuthorizationToken` 操作允许 Amazon MWAA 从 CodeArtifact 中检索新令牌。以下策略为您创建的每个 CodeArtifact 域授予权限。您可以通过修改语句中的资源值并仅指定您希望环境访问的域来进一步限制对所有域的访问。

  ```
  {
    "Effect": "Allow",
    "Action": "codeartifact:GetAuthorizationToken",
    "Resource": "arn:aws:codeartifact:us-west-2:*:domain/*"
  }
  ```
+ 该 `sts:GetServiceBearerToken` 操作是调用 CodeArtifact [https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html) API 操作所必需的。此操作返回一个令牌，在将程序包管理器（例如 `pip`）与 CodeArtifact 配合使用时，必须使用该令牌。要将程序包管理器与 CodeArtifact 存储库配合使用，环境的执行角色必须允许 `sts:GetServiceBearerToken`，如以下策略声明所列。

  ```
  {
    "Sid": "AllowServiceBearerToken",
    "Effect": "Allow",
    "Action": "sts:GetServiceBearerToken",
    "Resource": "*"
  }
  ```

## 代码示例
<a name="samples-code-artifact-code"></a>

以下步骤描述了如何创建用于更新 CodeArtifact 令牌的启动脚本。

1. 复制以下代码示例的内容，并在本地另存为 `code_artifact_startup_script.sh`。

   ```
   #!/bin/sh
   
   # Startup script for MWAA, refer to https://docs.aws.amazon.com/mwaa/latest/userguide/using-startup-script.html
   
   set -eu
   
   # setup code artifact endpoint and token
   # https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-0
   # https://docs.aws.amazon.com/mwaa/latest/userguide/samples-code-artifact.html
   DOMAIN="amazon"
   DOMAIN_OWNER="112233445566"
   REGION="us-west-2"
   REPO_NAME="MyRepo"
   echo "Getting token for CodeArtifact with args: --domain $DOMAIN --region $REGION --domain-owner $DOMAIN_OWNER"
   TOKEN=$(aws codeartifact get-authorization-token --domain $DOMAIN --region $REGION --domain-owner $DOMAIN_OWNER | jq -r '.authorizationToken')
   echo "Setting Pip env var for '--index-url' to point to CodeArtifact"
   export PIP_EXTRA_INDEX_URL="https://aws:$TOKEN@$DOMAIN-$DOMAIN_OWNER.d.codeartifact.$REGION.amazonaws.com/pypi/$REPO_NAME/simple/"
   echo "CodeArtifact startup setup complete"
   ```

1. 导航到保存该脚本的文件夹。在新提示窗口中使用 `cp` 将脚本上传到存储桶。用您的信息替换 *amzn-s3-demo-bucket*。

   ```
   aws s3 cp code_artifact_startup_script.sh s3://amzn-s3-demo-bucket/code_artifact_startup_script.sh
   ```

   如果成功，Amazon S3 会输出该对象的 URL 路径：

   ```
   upload: ./code_artifact_startup_script.sh to s3://amzn-s3-demo-bucket/code_artifact_startup_script.sh
   ```

   上传脚本后，环境会在启动时更新并运行脚本。

## 接下来做什么？
<a name="samples-code-artifact-next-up"></a>
+ 要了解如何使用启动脚本自定义环境，请参阅 [在 Amazon MWAA 中使用启动脚本](using-startup-script.md)。
+ 要了解如何将本示例中的 DAG 代码上传到 Amazon S3 存储桶的 `dags` 文件夹，请参阅 [添加或更新 DAG](configuring-dag-folder.md)。
+ 要了解如何将本示例中的 `plugins.zip` 文件上传到 Amazon S3 存储桶，请参阅 [安装自定义插件](configuring-dag-import-plugins.md)。