Как я могу отправить конвейер KFP в реестр VertexAI с помощью действий GitHubPython

Программы на Python
Ответить
Anonymous
 Как я могу отправить конвейер KFP в реестр VertexAI с помощью действий GitHub

Сообщение Anonymous »

Это код, который я использую:

Код: Выделить всё

pipeline_func = time_series_pipeline
pipeline_filename = 'time_series_pipeline.yaml'

print("compiling pipeline...")
compiler.Compiler().compile(
pipeline_func=pipeline_func, package_path=pipeline_filename
)

parser = argparse.ArgumentParser(description='GCP access token.')
parser.add_argument('access_token', type=str, help='GCP access token')
args = parser.parse_args()
access_token = args.access_token

creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)

impersenated_creds = google.auth.impersonated_credentials.Credentials(
source_credentials=environ['GOOGLE_APPLICATION_CREDENTIALS'],
target_principal='gh-action@[project].iam.gserviceaccount.com'
)

registry = RegistryClient(
host='https://europe-west3-kfp.pkg.dev/project_id/vertex-pipeline-registry',
# auth=impersenated_creds
)

print("uploading pipeline...")
templateName, versionName = registry.upload_pipeline(
file_name=pipeline_filename,
tags=["v1", "latest"],
extra_headers={"description":"This is an example pipeline template."})
Ниже приведена ошибка, возвращаемая GitHub Actions:

Код: Выделить всё

Traceback (most recent call last):
compiling pipeline...
File "/home/runner/work/project/project/vertex-pipeline/pipeline.py", line 112, in 
creds.refresh(auth_req)
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/google/auth/external_account.py", line 401, in refresh
self._impersonated_credentials.refresh(request)
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/google/auth/impersonated_credentials.py", line 235, in refresh
self._update_token(request)
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/google/auth/impersonated_credentials.py", line 267, in _update_token
self.token, self.expiry = _make_iam_token_request(
^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/google/auth/impersonated_credentials.py", line 83, in _make_iam_token_request
raise exceptions.RefreshError(_REFRESH_ERROR, response_body)
google.auth.exceptions.RefreshError: ('Unable to acquire impersonated credentials', '{\n  "error": {\n    "code": 400,\n    "message": "Request contains an invalid argument.",\n    "status": "INVALID_ARGUMENT"\n  }\n}\n')
Учетная запись службы gh-action имеет следующие разрешения:

Код: Выделить всё

AI Platform Admin
Artifact Registry Administrator
BigQuery Admin
BigQuery Data Editor
Cloud Functions Developer
Cloud Functions Invoker
Cloud Run Invoker
Editor
Eventarc Event Receiver
Pub/Sub Admin
Secret Manager Secret Accessor
Service Account Token Creator
Storage Admin
Storage Object User
Storage Transfer Admin
Storage Transfer agent
Storage Transfer Service service agent
Vertex AI administrator
Я попытался передать токен служебной учетной записи в параметр аутентификации RegistryClient(), передать файл учетных данных в параметр auth_file, попытался выдать себя за другую учетную запись, но возникла та же ошибка. Передача токена с помощью ApiAuth() в параметр auth возвращает другую ошибку, связанную с разрешениями, описанными ниже. Я не уверен, нужно ли мне добавлять конкретное разрешение, которого нет в описанных выше:

Код: Выделить всё

  File "/home/runner/work/project/project/vertex-pipeline/pipeline.py", line 114, in 
templateName, versionName = registry.upload_pipeline(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/kfp/registry/registry_client.py", line 352, in upload_pipeline
response.raise_for_status()
File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/requests/models.py", line 1024, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://europe-west3-kfp.pkg.dev/***/vertex-pipeline-registry
Рабочий процесс действий Github выглядит следующим образом:

Код: Выделить всё

env:
PROJECT_ID: ${{ secrets.PROJECT_ID }}
TF_BACKEND: ${{ secrets.TF_BACKEND }}
TF_VAR_gh_token: ${{ secrets.TF_VAR_gh_token }}
TF_IN_AUTOMATION: "true"

jobs:
terraform-apply:
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'

steps:
- name: Checkout repository
uses: 'actions/checkout@v3'

- id: 'auth'
uses: 'google-github-actions/auth@v2'
with:
token_format: 'access_token'
workload_identity_provider: ${{ secrets.WIF_PROVIDER_NAME }}
service_account: ${{ secrets.SERVICE_ACCOUNT_EMAIL }}

- uses: 'google-github-actions/setup-gcloud@v2'
with:
install_components: "beta,terraform-tools,gsutil,core"

- uses: 'actions/setup-python@v5'
if: steps.changes.outputs.vertex == 'true'
with:
python-version: 3.12

- name: Install python dependencies
if: steps.changes.outputs.vertex == 'true'
run: |
echo "Changed files in vertex-pipeline"
python -m pip install --upgrade pip
pip install -r vertex-pipeline/requirements.txt

- name: Run vertex pipeline
if: steps.changes.outputs.vertex == 'true'
run: python vertex-pipeline/pipeline.py ${{steps.auth.outputs.access_token}}
Изменить: пытался использовать id_token и auth_token для аутентификации с помощью ApiAuth(), но не сработало. Не удалось получить выдающиеся учетные данные.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ub-actions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»