:py:mod:`airflow.providers.google.cloud.transfers.s3_to_gcs`
============================================================

.. py:module:: airflow.providers.google.cloud.transfers.s3_to_gcs


Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.transfers.s3_to_gcs.S3ToGCSOperator




.. py:class:: S3ToGCSOperator(*, bucket, prefix='', delimiter='', aws_conn_id='aws_default', verify=None, gcp_conn_id='google_cloud_default', dest_gcs=None, delegate_to=None, replace=False, gzip=False, google_impersonation_chain = None, **kwargs)

   Bases: :py:obj:`airflow.providers.amazon.aws.operators.s3.S3ListOperator`

   Synchronizes an S3 key, possibly a prefix, with a Google Cloud Storage
   destination path.

   .. seealso::
       For more information on how to use this operator, take a look at the guide:
       :ref:`howto/operator:S3ToGCSOperator`

   :param bucket: The S3 bucket where to find the objects. (templated)
   :param prefix: Prefix string which filters objects whose name begin with
       such prefix. (templated)
   :param delimiter: the delimiter marks key hierarchy. (templated)
   :param aws_conn_id: The source S3 connection
   :param verify: Whether or not to verify SSL certificates for S3 connection.
       By default SSL certificates are verified.
       You can provide the following values:

       - ``False``: do not validate SSL certificates. SSL will still be used
                (unless use_ssl is False), but SSL certificates will not be
                verified.
       - ``path/to/cert/bundle.pem``: A filename of the CA cert bundle to uses.
                You can specify this argument if you want to use a different
                CA cert bundle than the one used by botocore.
   :param gcp_conn_id: (Optional) The connection ID used to connect to Google Cloud.
   :param dest_gcs: The destination Google Cloud Storage bucket and prefix
       where you want to store the files. (templated)
   :param delegate_to: Google account to impersonate using domain-wide delegation of authority,
       if any. For this to work, the service account making the request must have
       domain-wide delegation enabled.
   :param replace: Whether you want to replace existing destination files
       or not.
   :param gzip: Option to compress file for upload
   :param google_impersonation_chain: Optional Google service account to impersonate using
       short-term credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account (templated).


   **Example**:

   .. code-block:: python

      s3_to_gcs_op = S3ToGCSOperator(
          task_id="s3_to_gcs_example",
          bucket="my-s3-bucket",
          prefix="data/customers-201804",
          gcp_conn_id="google_cloud_default",
          dest_gcs="gs://my.gcs.bucket/some/customers/",
          replace=False,
          gzip=True,
          dag=my_dag,
      )

   Note that ``bucket``, ``prefix``, ``delimiter`` and ``dest_gcs`` are
   templated, so you can use variables in them if you wish.

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['bucket', 'prefix', 'delimiter', 'dest_gcs', 'google_impersonation_chain']

      

   .. py:attribute:: ui_color
      :annotation: = #e09411

      

   .. py:method:: execute(context)

      This is the main method to derive when creating an operator.
      Context is the same dictionary used as when rendering jinja templates.

      Refer to get_template_context for more context.



