{"library":"prefect-aws","title":"Prefect AWS Integration","description":"Prefect AWS is an integration library for Prefect, a data workflow orchestration and observability platform. It provides battle-tested blocks, tasks, and infrastructure components for seamless interaction with various Amazon Web Services, including ECS, S3, Secrets Manager, Lambda, Batch, and Glue. The current version is 0.7.7 and it receives frequent updates, often aligning with the Prefect core library's release cycle. [1, 4, 24]","language":"python","status":"active","last_verified":"Wed May 13","install":{"commands":["pip install prefect-aws"],"cli":{"name":"prefect","version":"3.7.1"}},"imports":["from prefect_aws import AwsCredentials","from prefect_aws.s3 import S3Bucket","from prefect_aws.s3 import s3_download","from prefect_aws import SecretsManager"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom prefect import flow, task\nfrom prefect_aws import AwsCredentials\nfrom prefect_aws.s3 import S3Bucket, s3_upload, s3_download\n\n# NOTE: For a real application, create and save the AwsCredentials block in the Prefect UI\n# or programmatically (as shown below, but typically saved once).\n# os.environ.get is used here to prevent hardcoding sensitive credentials.\n\n@flow\ndef create_and_save_aws_credentials_block():\n    \"\"\"Example flow to create and save an AwsCredentials block.\"\"\"\n    aws_credentials = AwsCredentials(\n        aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID', 'YOUR_ACCESS_KEY_ID'),\n        aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY', 'YOUR_SECRET_ACCESS_KEY'),\n        region_name=os.environ.get('AWS_REGION', 'us-east-1')\n    )\n    # Replace 'my-aws-credentials' with your desired block name\n    aws_credentials.save('my-aws-credentials', overwrite=True)\n    print(\"AwsCredentials block 'my-aws-credentials' saved.\")\n\n@task\nasync def upload_file_to_s3(bucket_name: str, key: str, content: str):\n    aws_credentials_block = await AwsCredentials.load('my-aws-credentials')\n    await s3_upload(\n        bucket=bucket_name,\n        key=key,\n        text=content,\n        aws_credentials=aws_credentials_block\n    )\n    print(f\"Uploaded '{key}' to s3://{bucket_name}\")\n\n@task\nasync def download_file_from_s3(bucket_name: str, key: str) -> str:\n    aws_credentials_block = await AwsCredentials.load('my-aws-credentials')\n    downloaded_content = await s3_download(\n        bucket=bucket_name,\n        key=key,\n        aws_credentials=aws_credentials_block\n    )\n    print(f\"Downloaded '{key}' from s3://{bucket_name}\")\n    return downloaded_content\n\n@flow\nasync def s3_interaction_flow(bucket_name: str = \"your-test-bucket\"): # Replace with a real bucket name\n    test_key = \"prefect-test-file.txt\"\n    test_content = \"Hello from Prefect AWS!\"\n\n    # Make sure credentials block exists\n    if not await AwsCredentials.exists('my-aws-credentials'):\n        print(\"AwsCredentials block not found. Run create_and_save_aws_credentials_block() first.\")\n        return\n\n    await upload_file_to_s3(bucket_name, test_key, test_content)\n    downloaded = await download_file_from_s3(bucket_name, test_key)\n    print(f\"Content verification: {downloaded == test_content}\")\n\nif __name__ == \"__main__\":\n    # First, ensure your AWS credentials block is saved (run this once or use Prefect UI)\n    # os.environ['AWS_ACCESS_KEY_ID'] = '...' # Set actual credentials\n    # os.environ['AWS_SECRET_ACCESS_KEY'] = '...' # Set actual credentials\n    # os.environ['AWS_REGION'] = '...' # Set actual region\n    create_and_save_aws_credentials_block()\n    \n    # Then run the S3 interaction flow (replace 'your-test-bucket' with an actual S3 bucket name)\n    import asyncio\n    asyncio.run(s3_interaction_flow(bucket_name='your-test-bucket'))\n","lang":"python","description":"This quickstart demonstrates how to create and save an `AwsCredentials` block, which is essential for authenticating with AWS services. It then shows how to use this block with `prefect-aws.s3` tasks to upload and download a file from an S3 bucket within a Prefect flow. Remember to replace placeholder values with actual AWS credentials and an existing S3 bucket name. For production, save credentials securely in Prefect Cloud/Server or via environment variables and IAM roles. [1, 4, 8, 13]","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-13","installed_version":"0.6.0","pypi_latest":"0.7.8","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":27.1,"avg_import_s":7.04,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":7.67,"mem_mb":67.1,"disk_size":"289.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.35,"mem_mb":66.4,"disk_size":"277.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":30.4,"import_time_s":6.4,"mem_mb":67.1,"disk_size":"291M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.62,"mem_mb":66.4,"disk_size":"280M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":8.09,"mem_mb":72.1,"disk_size":"313.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.75,"mem_mb":71.3,"disk_size":"301.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":28.3,"import_time_s":7.4,"mem_mb":72.1,"disk_size":"316M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.32,"mem_mb":71.3,"disk_size":"304M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":7.21,"mem_mb":70.9,"disk_size":"302.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.66,"mem_mb":70,"disk_size":"290.3M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":22.7,"import_time_s":7.26,"mem_mb":70.9,"disk_size":"305M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.06,"mem_mb":70,"disk_size":"294M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":7.02,"mem_mb":71.5,"disk_size":"299.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.3,"mem_mb":70.6,"disk_size":"287.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":21.3,"import_time_s":7.13,"mem_mb":71.5,"disk_size":"302M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.93,"mem_mb":70.6,"disk_size":"291M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.79,"mem_mb":65.2,"disk_size":"221.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.74,"mem_mb":65.2,"disk_size":"220.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":32.6,"import_time_s":4.98,"mem_mb":65.2,"disk_size":"225M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"prefect-aws","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.1,"mem_mb":65.1,"disk_size":"223M"}]}}