> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/roboflow/roboflow-hi/datasets/adding-data/upload-data-from-aws-gcp-and-azure/aws-s3-bucket.md).

# AWS S3 Bucket

{% hint style="warning" %}
AWS S3 के लिए, उपयोग करें [Datasources](/roboflow/roboflow-hi/datasets/adding-data/datasources.md) और Bucket Mirror, जब तक कि आपको स्पष्ट रूप से one-time या ad hoc import की आवश्यकता न हो। Datasources images और metadata को scripts, presigned URLs, या local downloads के बिना sync में रखते हैं।
{% endhint %}

यह पेज केवल one-time या ad hoc uploads के लिए fallback workflows को कवर करता है:

* **Signed URLs**: presigned URLs का उपयोग करके images को सीधे S3 से Roboflow में upload करें, बिना उन्हें पहले local रूप से डाउनलोड किए।
* **CLI Locally**: S3 से images को अपनी local machine पर डाउनलोड करें, फिर उन्हें Roboflow में upload करें। इसका उपयोग तब करें जब upload करने से पहले आपको images को preprocess या inspect करना हो।

यदि आप Roboflow और S3 के बीच एक reusable connection सेट कर रहे हैं, तो यहाँ रुकें और उपयोग करें [Datasources](/roboflow/roboflow-hi/datasets/adding-data/datasources.md) प्लस [AWS S3 Credentials](/roboflow/roboflow-hi/datasets/adding-data/datasources/datasource-credentials/aws-s3.md).

## AWS CLI Setup

स्क्रिप्ट का उपयोग करने से पहले, सुनिश्चित करें कि AWS CLI के पास target bucket तक पहुंच है।

{% hint style="info" %}
local one-time workflows के लिए, अपनी आवश्यक minimum bucket permissions के साथ non-root AWS identity का उपयोग करें। यदि आपका लक्ष्य Roboflow में ongoing S3 ingestion है, तो इस local setup को पुनः उपयोग न करें। इसके बजाय एक Datasource credential बनाएं।
{% endhint %}

* [AWS CLI version 2 इंस्टॉल करना](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)

### AWS CLI को कॉन्फ़िगर करना

1. AWS CLI इंस्टॉल करने के बाद, एक terminal या command prompt खोलें।
2. निम्नलिखित command चलाएँ:

   ```bash
   aws configure
   ```
3. आपसे आपके AWS credentials दर्ज करने के लिए कहा जाएगा:

   ```
   AWS Access Key ID [None]: YOUR_ACCESS_KEY
   AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY
   Default region name [None]: YOUR_PREFERRED_REGION (उदा., us-west-1)
   Default output format [None]: json
   ```

## विकल्प 1: Signed URL के माध्यम से Upload करें

इसका उपयोग केवल one-time या scripted imports के लिए करें, जहाँ आप Datasource नहीं बनाना चाहते।

आप Python में boto3 का उपयोग करके S3 bucket में अपनी images के लिए signed URLs generate कर सकते हैं।

```python
def generate_presigned_url(bucket_name: str, object_name: str, region: str = 'us-east-2') -> str:
    """एक S3 object के लिए presigned URL generate करें."""
    s3 = boto3.client('s3', region_name=region, config=Config(signature_version='s3v4'))
    url = s3.generate_presigned_url('get_object',
                                    Params={'Bucket': bucket_name, 'Key': object_name},
                                    ExpiresIn=3600)
    return url
```

ऊपर दिए गए code snippet में, आपको अपने S3 bucket का नाम, S3 bucket में image का object name, और AWS region चाहिए। image का signed URL generate किया जाता है और वापस किया जाता है।

इस पर आधारित, हम एक complete solution बना सकते हैं जो S3 bucket में उपलब्ध सभी objects को pull करता है, और फिर उन्हें API के माध्यम से Roboflow में upload करता है। इस solution का outline नीचे देखा जा सकता है:

```python
import boto3
import requests
import urllib.parse
from botocore.config import Config

# ************* इन variables को सेट करें *************
S3_BUCKET_NAME = "YOUR_S3_BUCKET_NAME"
ROBOFLOW_API_KEY = "YOUR_ROBOFLOW_API_KEY"
ROBOFLOW_PROJECT_NAME = "YOUR_ROBOFLOW_PROJECT_NAME"
# ***********************************************

def generate_presigned_url(bucket_name: str, object_name: str, region: str = 'us-east-2') -> str:
    """एक S3 object के लिए presigned URL generate करें."""
    s3 = boto3.client('s3', region_name=region, config=Config(signature_version='s3v4'))
    url = s3.generate_presigned_url('get_object',
                                    Params={'Bucket': bucket_name, 'Key': object_name},
                                    ExpiresIn=3600)
    return url

def get_s3_objects(bucket_name: str) -> list:
    """दिए गए S3 bucket में object keys की सूची प्राप्त करें."""
    s3 = boto3.client('s3')
    objects = []
    response = s3.list_objects_v2(Bucket=bucket_name)
    for obj in response['Contents']:
        objects.append(obj['Key'])
    return objects

def upload_to_roboflow(api_key: str, project_name: str, presigned_url: str, img_name='', split="train"):
    """Roboflow में एक image upload करें."""
    API_URL = "https://api.roboflow.com"
    if img_name == '':
        img_name = presigned_url.split("/")[-1]

    upload_url = "".join([
        API_URL + "/dataset/" + project_name + "/upload",
        "?api_key=" + api_key,
        "&name=" + img_name,
        "&split=" + split,
        "&image=" + urllib.parse.quote_plus(presigned_url),
    ])
    response = requests.post(upload_url)

    # response code जाँचें
    if response.status_code == 200:
        print(f"{img_name} को सफलतापूर्वक {project_name} में upload किया गया")
        return True
    else:
        print(f"{img_name} को upload करने में विफल। Error: {response.content.decode('utf-8')}")
        return False

if __name__ == "__main__":
    # उपलब्ध images की सूची प्राप्त करें
    available_images = get_s3_objects(S3_BUCKET_NAME)
    
    # वैकल्पिक: यहाँ images को filter करें
    # उदाहरण के लिए, available_images = [img for img in available_images if "some_condition"]
    
    # Roboflow में images upload करें
    for image in available_images:
        presigned_url = generate_presigned_url(S3_BUCKET_NAME, image)
        upload_to_roboflow(ROBOFLOW_API_KEY, ROBOFLOW_PROJECT_NAME, presigned_url)

```

## विकल्प 2: AWS से Data को स्थानीय रूप से डाउनलोड करें

इसका उपयोग केवल तब करें जब upload से पहले आपको local preprocessing, inspection, या file transformation की आवश्यकता हो। अन्यथा, उपयोग करें [Datasources](/roboflow/roboflow-hi/datasets/adding-data/datasources.md).

AWS से data upload करने के लिए, पहले `awscli` [command line tool](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). इंस्टॉल करें। यह tool आपको command line पर अपने AWS account के साथ interact करने देता है। Command line tool इंस्टॉल हो जाने के बाद, निम्नलिखित command चलाएँ:

```bash
aws s3 sync s3://mybucket/folder_path .
```

को बदलें `mybucket` को अपने bucket के नाम से और `folder_path` को उस folder या file के नाम से जिसे आप export करना चाहते हैं। यह command assets को AWS से आपकी current working directory (`.`).

## Roboflow में Data Upload करें

अब जब हमने data download कर लिया है, हम इसे Roboflow में या तो उपयोग करके upload कर सकते हैं [Upload Web Interface](/roboflow/roboflow-hi/datasets/adding-data.md#upload-data-with-the-web-application) या [Roboflow CLI](/roboflow/roboflow-hi/datasets/adding-data.md#upload-datasets-with-the-command-line).

## इसे भी देखें

* [Datasources (Bucket Mirror)](/roboflow/roboflow-hi/datasets/adding-data/datasources.md) — scripting के बिना S3 से continuous, automatic sync
* [AWS S3 Credentials](/roboflow/roboflow-hi/datasets/adding-data/datasources/datasource-credentials/aws-s3.md) — Datasources के लिए secure AWS setup
* [एक Roboflow project ID प्राप्त करें](https://docs.roboflow.com/api-reference/workspace-and-project-ids)
