:doc:`EBS <../../ebs>` / Client / put_snapshot_block

******************
put_snapshot_block
******************



.. py:method:: EBS.Client.put_snapshot_block(**kwargs)

  

  Writes a block of data to a snapshot. If the specified block contains data, the existing data is overwritten. The target snapshot must be in the ``pending`` state.

   

  Data written to a snapshot must be aligned with 512-KiB sectors.

   

  .. note::

    

    You should always retry requests that receive server ( ``5xx``) error responses, and ``ThrottlingException`` and ``RequestThrottledException`` client error responses. For more information see `Error retries <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html>`__ in the *Amazon Elastic Compute Cloud User Guide*.

    

  

  See also: `AWS API Documentation <https://docs.aws.amazon.com/goto/WebAPI/ebs-2019-11-02/PutSnapshotBlock>`_  


  **Request Syntax**
  ::

    response = client.put_snapshot_block(
        SnapshotId='string',
        BlockIndex=123,
        BlockData=b'bytes'|file,
        DataLength=123,
        Progress=123,
        Checksum='string',
        ChecksumAlgorithm='SHA256'
    )
    
  :type SnapshotId: string
  :param SnapshotId: **[REQUIRED]** 

    The ID of the snapshot.

     

    .. warning::

       

      If the specified snapshot is encrypted, you must have permission to use the KMS key that was used to encrypt the snapshot. For more information, see `Using encryption <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebsapis-using-encryption.html>`__ in the *Amazon Elastic Compute Cloud User Guide*..

      

    

  
  :type BlockIndex: integer
  :param BlockIndex: **[REQUIRED]** 

    The block index of the block in which to write the data. A block index is a logical index in units of ``512`` KiB blocks. To identify the block index, divide the logical offset of the data in the logical volume by the block size (logical offset of data/ ``524288``). The logical offset of the data must be ``512`` KiB aligned.

    

  
  :type BlockData: bytes or seekable file-like object
  :param BlockData: **[REQUIRED]** 

    The data to write to the block.

     

    The block data is not signed as part of the Signature Version 4 signing process. As a result, you must generate and provide a Base64-encoded SHA256 checksum for the block data using the **x-amz-Checksum** header. Also, you must specify the checksum algorithm using the **x-amz-Checksum-Algorithm** header. The checksum that you provide is part of the Signature Version 4 signing process. It is validated against a checksum generated by Amazon EBS to ensure the validity and authenticity of the data. If the checksums do not correspond, the request fails. For more information, see `Using checksums with the EBS direct APIs <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-accessing-snapshot.html#ebsapis-using-checksums>`__ in the *Amazon Elastic Compute Cloud User Guide*.

    

  
  :type DataLength: integer
  :param DataLength: **[REQUIRED]** 

    The size of the data to write to the block, in bytes. Currently, the only supported size is ``524288`` bytes.

     

    Valid values: ``524288``

    

  
  :type Progress: integer
  :param Progress: 

    The progress of the write process, as a percentage.

    

  
  :type Checksum: string
  :param Checksum: **[REQUIRED]** 

    A Base64-encoded SHA256 checksum of the data. Only SHA256 checksums are supported.

    

  
  :type ChecksumAlgorithm: string
  :param ChecksumAlgorithm: **[REQUIRED]** 

    The algorithm used to generate the checksum. Currently, the only supported algorithm is ``SHA256``.

    

  
  
  :rtype: dict
  :returns: 
    
    **Response Syntax**

    
    ::

      {
          'Checksum': 'string',
          'ChecksumAlgorithm': 'SHA256'
      }
      
    **Response Structure**

    

    - *(dict) --* 
      

      - **Checksum** *(string) --* 

        The SHA256 checksum generated for the block data by Amazon EBS.

        
      

      - **ChecksumAlgorithm** *(string) --* 

        The algorithm used by Amazon EBS to generate the checksum.

        
  
  **Exceptions**
  
  *   :py:class:`EBS.Client.exceptions.AccessDeniedException`

  
  *   :py:class:`EBS.Client.exceptions.ValidationException`

  
  *   :py:class:`EBS.Client.exceptions.ResourceNotFoundException`

  
  *   :py:class:`EBS.Client.exceptions.RequestThrottledException`

  
  *   :py:class:`EBS.Client.exceptions.ServiceQuotaExceededException`

  
  *   :py:class:`EBS.Client.exceptions.InternalServerException`

  