

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 重新整理 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 中使用 **Apache Airflow v2** 和 Python 3.1[1](https://peps.python.org/pep-0664/) ****中使用此頁面的程式碼範例。 [https://peps.python.org/pep-0619/](https://peps.python.org/pep-0619/)

## 先決條件
<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/*"
  }
  ```
+ 呼叫 CodeArtifact [https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html) API 操作需要 `sts:GetServiceBearerToken`動作。此操作會傳回權杖，在`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` 資料夾[新增或更新 DAGs](configuring-dag-folder.md)。
+ 進一步了解如何在此範例中將`plugins.zip`檔案上傳至 中的 Amazon S3 儲存貯體[安裝自訂外掛程式](configuring-dag-import-plugins.md)。