「Prefect Cloud + Fargateでバッチ処理のワークフローを作成するまで」にあるように、私はPrefectの実行環境を整えていて、GitHub ActionsによるCI/CD処理の自動化を試みています。
Prefect 2で、GitHub ActionsからS3のStorageを利用してデプロイする処理を実装したく、次のように PREFECT_API_KEY
を利用してデプロイする実装をしていました。
.github/workflows/deploy.yml
# 本当はPythonのインストール等があるが省略
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: ${{ env.AWS_ROLE }}
role-session-name: github-deploy
aws-region: ${{ env.AWS_REGION }}
- name: Sample
env:
PREFECT_API_KEY: ${{ secrets.PREFECT_API_KEY }}
run: |
prefect deployment build sample_flow:sample_flow -n sample_flow -sb s3/sample_storage -t sample_tag
prefect deployment apply 'sample_flow-deployment.yaml'
ところが、次のように「S3のblock typeに、(作成したはずの)sample_storageが存在しない」というエラーが出てしまいました。PCから prefect cloud login
を利用した場合は、同様のコマンドを実施すると問題なくデプロイできる状態だったので不思議に思ってました。
ValueError: Unable to find block document named sample_storage for block type s3
これは明示的に環境変数で PREFECT_API_URL
を指定すると問題なくデプロイできるようになりました。おそらくworkspaceが特定できていなかったものだと思います。
.github/workflows/deploy.yml
- name: Sample
env:
PREFECT_API_KEY: ${{ secrets.PREFECT_API_KEY }}
+ PREFECT_API_URL: "https://api.prefect.cloud/api/accounts/${{ secrets.PREFECT_ACCOUNT_ID }}/workspaces/${{ secrets.PREFECT_WORKSPACE_ID }}"
run: |
prefect deployment build sample_flow:sample_flow -n sample_flow -sb s3/sample_storage -t sample_tag
prefect deployment apply 'sample_flow-deployment.yaml'
AWSではなくGCEを使っている実装例ですが、こちらの実装を参考にしました。