Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Object storage (S3) can be configured to send notifications when objects are created , modified or listeddeleted. The notifications can be sent to

...

Topic can be created following: 

Code Block
languagepy
#!/usr/bin/python3

import boto3

access_key_id = 'xx' # stored in Cypher
secret_access_key = 'xx' # stored in Cypher
ceph_endpoint = 'https://s3.waw3-1.cloudferro.com'
region_name = 'waw3-1' # required by boto3, any value works
endpoint = "http://vm-name.tenancy-name.s/f.ewcloud.host" # your own http endpoint
topic_name = 'example-topic'

s3 = boto3.client('sns',
                     region_name=region_name,
                     endpoint_url= ceph_endpoint,
                     aws_access_key_id=access_key_id,
                     aws_secret_access_key=secret_access_key)

s3.create_topic(Name=topic_name, Attributes={'persistent': 'True', 'push-endpoint': endpoint})

...

Code Block
languagepy
#!/usr/bin/python3
import boto3

access_key_id='xx' # from Cypher
secret_access_key='xx'  # from Cypher 
ceph_endpoint = "https://s3.waw3-1.cloudferro.com"
region = 'waw3-1'  # required by boto3, any value works 

bucket_name = "reflectivity.composite.opera.hdf5"

s3 = boto3.client('s3',
                endpoint_url=ceph_endpoint ,
                aws_access_key_id=access_key_id,
                aws_secret_access_key=secret_access_key)

# Create notification configuration
response = s3.put_bucket_notification_configuration(
    Bucket=bucket_name,
    NotificationConfiguration={
        'TopicConfigurations': [
            {
                'Id': 'test-http-topic',
                'TopicArn': 'arn:aws:sns:waw3-1::example-topic',
                'Events': ['s3:ObjectCreated:*']
            }
        ]
    }
)

TopicArn follows pattern arn:aws:sns:{region}::{topic-name}

Most typical event types are:

  • s3:ObjectCreated:*
  • s3:ObjectRemoved:*

Please consult S3 Bucket Notifications Compatibility — Ceph Documentation for details.

Note, that one can also add filters for objects, e.g.: 

Code Block
#!/usr/bin/python3
import boto3

access_key_id='xx' # from Cypher
secret_access_key='xx'  # from Cypher 
ceph_endpoint = "https://s3.waw3-1.cloudferro.com"
region = 'waw3-1'  # required by boto3, any value works 

bucket_name = "reflectivity.composite.opera.hdf5"

s3 = boto3.client('s3',
                endpoint_url=ceph_endpoint ,
                aws_access_key_id=access_key_id,
                aws_secret_access_key=secret_access_key)

# Create notification configuration
response = s3.put_bucket_notification_configuration(
    Bucket=bucket_name,
    NotificationConfiguration={
        'TopicConfigurations': [
            {
                'Id': 'test-http-topic',
                'TopicArn': 'arn:aws:sns:waw3-1::example-topic',
                'Events': ['s3:ObjectCreated:*'],
                'Filter': {
                    'Key': {
                        'FilterRules': [
                            {
                                'Name': 'suffix',
                                'Value': 'reflectivity-composite-opera.h5'
                            }
                        ]
                    }
                }             
            }
        ]
    }
)

See Bucket Operations — Ceph Documentation for more detailed documentation.

List topics

Available topics can be listed following:

Code Block
languagepy
#!/usr/bin/python3

import boto3

access_key_id = 'xx' # stored in Cypher
secret_access_key = 'xx' # stored in Cypher

ceph_endpoint = 'https://s3.waw3-1.cloudferro.com'
region_name = 'waw3-1' # required by boto3, any value works

s3 = boto3.client('sns',
region_name=region_name,
endpoint_url= ceph_endpoint,
aws_access_key_id=access_key_id,
aws_secret_access_key=secret_access_key)

response = s3.list_topics()

# Print the Topic ARNs
print('All topics:')
for topic in response['Topics']:
print(' -'+topic['TopicArn'])

Delete topics

Topics can be deleted following:

Code Block
python
python
#!/usr/bin/python3
import boto3

access_key_id='xx' # from Cypher
secret_access_key='xx'  # from Cypher 
ceph_endpoint = "https://s3.waw3-1.cloudferro.com"
region = 'waw3-1'  # required by boto3, any value works 

arn = 'arn:aws:sns:waw3-1::example-topic'

sns = boto3.client('sns',
                   region_name=region,
                   endpoint_url=ceph_endpoint ,
                   aws_access_key_id=access_key_id,
                   aws_secret_access_key=secret_access_key)

# Delete the SNS topic
response = sns.delete_topic(TopicArn=arn)