<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Snapshot &#8211; Blog of Kliment Andreev &#8211; A place so I won&#039;t forget things</title>
	<atom:link href="https://blog.andreev.it/tag/snapshot/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.andreev.it</link>
	<description></description>
	<lastBuildDate>Mon, 02 Nov 2020 13:48:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>AWS: Snapshot Clean Up script in Lambda</title>
		<link>https://blog.andreev.it/2019/02/148-aws-lambda-snapshot-clean-up-script/</link>
					<comments>https://blog.andreev.it/2019/02/148-aws-lambda-snapshot-clean-up-script/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Wed, 13 Feb 2019 20:02:05 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[AMI]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[Snapshot]]></category>
		<guid isPermaLink="false">https://blog.andreev.it/?p=4467</guid>

					<description><![CDATA[I have several scripts that I use to do some maintenance on my servers&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>I have several scripts that I use to do some maintenance on my servers (snapshots, backups, cleanups etc) and they are all scattered on different servers. I&#8217;ve decided to consolidate them and use AWS Lambda to do the scheduling and execution for me. So, in this post I&#8217;ll explain how to create simple snapshot clean up script that deletes some old AWS snapshots and runs once a day. In addition, I&#8217;ll do the same Lambda script, but this time using the <a href="https://serverless.com" target="_blank" rel="noopener noreferrer">serverless</a> framework.</p>
<div style="border: 1px solid red; padding: 16px;">
<p style="text-align: center;"><strong><span style="color: #800000;">NOTE ABOUT SNAPSHOTS</span> </strong><br />
<i>The Lambda function deletes snapshots only. If the snapshot is associated with an AMI, you&#8217;ll get a message that the snapshot is in use.</i></p>
</div>
<p>The setup below requires Full Access to AWS.</p>
<h1>SNS</h1>
<p>First, let&#8217;s configure SNS that we&#8217;ll use to send us the notifications from the script. Go to <strong>SNS </strong>and click on <strong>Create topic</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-01.png"><img fetchpriority="high" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-01.png" alt="" width="411" height="315" class="aligncenter size-full wp-image-8445" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-01.png 411w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-01-300x230.png 300w" sizes="(max-width: 411px) 100vw, 411px" /></a><br />
Name your topic and click on <strong>Create topic</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-02.png"><img decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-02.png" alt="" width="419" height="313" class="aligncenter size-full wp-image-8446" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-02.png 419w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-02-300x224.png 300w" sizes="(max-width: 419px) 100vw, 419px" /></a><br />
Once there, click on <strong>Create subscription</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-03.png"><img decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-03.png" alt="" width="276" height="208" class="aligncenter size-full wp-image-8447" /></a><br />
In my case, I want to receive an e-mail. Click on <strong>Create subscription</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-04.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-04.png" alt="" width="865" height="339" class="aligncenter size-full wp-image-8448" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-04.png 865w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-04-300x118.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-04-768x301.png 768w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-04-585x229.png 585w" sizes="(max-width: 865px) 100vw, 865px" /></a><br />
If you check your e-mail, you&#8217;ll see that you have to confirm the subscription. Click on <strong>Confirm subscription</strong> in the e-mail and you are done with this part.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-05.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-05.png" alt="" width="490" height="324" class="aligncenter size-full wp-image-8449" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-05.png 490w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-05-300x198.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-05-263x175.png 263w" sizes="(max-width: 490px) 100vw, 490px" /></a></p>
<h1>Lambda function</h1>
<p>We are ready to deploy the script now. Go to <strong>Lambda </strong>and click on <strong>Create a function</strong>. Fill out the form so it looks like this.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-06.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-06.png" alt="" width="1123" height="678" class="aligncenter size-full wp-image-8450" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-06.png 1123w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-06-300x181.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-06-1024x618.png 1024w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-06-768x464.png 768w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-06-585x353.png 585w" sizes="(max-width: 1123px) 100vw, 1123px" /></a><br />
Once you select <strong>Create a custom role</strong> a new window will pop up.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-07.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-07.png" alt="" width="509" height="294" class="aligncenter size-full wp-image-8451" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-07.png 509w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-07-300x173.png 300w" sizes="(max-width: 509px) 100vw, 509px" /></a><br />
Click <strong>Allow </strong>and the window will close. You&#8217;ll be back to the initial screen. Click <strong>Create function</strong> here.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-08.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-08.png" alt="" width="1119" height="303" class="aligncenter size-full wp-image-8452" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-08.png 1119w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-08-300x81.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-08-1024x277.png 1024w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-08-768x208.png 768w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-08-585x158.png 585w" sizes="(max-width: 1119px) 100vw, 1119px" /></a><br />
If you scroll down a bit, you&#8217;ll see a placeholder for a Python code. I already have my function ready, so I&#8217;ll just delete what&#8217;s in there and paste my script. Make sure you change the values in line numbers 8 and 10. Line number 8 is your AWS account and line number 10 is the amount of days that you want your snapshots to be kept. Also, if you have any snapshots that you want to keep no matter how many days they are old, you can specify their IDs in line 6. They&#8217;ll be skipped. Anything older than <em>diff_time</em> days will be deleted. Also, if your SNS topic was named differently, change the line number 53.</p>
<pre class="brush: python; title: ; notranslate">
import json, boto3, datetime

def lambda_handler(event, context):

    # Do not delete these snaps
    snap_ignore = &#x5B;'snap-12718f7046cc2add6','snap-0e738d4c47b2d6e14']    
    # Enter the AWS account number here
    accountId = '123456789012'
    # Delete snapshots older than diff_time days   
    diff_time = 30
    # Constant string
    no_snap = 'No snaps were found for clean up.'  
    # Constant string
    skip_str = 'was skipped because it is in use.'
    # Leave it empty
    mail_body = ''

    
    ec2 = boto3.resource('ec2')
    sns = boto3.client('sns')

    # Get all the snaps from the account
    snaps = ec2.snapshots.filter(OwnerIds=&#x5B;accountId])
    # Get the current time
    now_time = datetime.datetime.now().date()
    # Iterate through the snaps
    for snap in snaps:
        # Check for protected snaps, e.g the ones that we have to skip and ignore
        if (snap.id in snap_ignore): 
            continue
        # Get the creation time of the snap
        snap_time = snap.start_time.date()
        # Get the current time
        now_time = datetime.datetime.now().date()
        # Calculate the difference
        snapage_time = (now_time - snap_time).days
        # If the creation time is older than the required difference
        if(snapage_time &gt; diff_time):
            try:
                # Delete the snap
                snap.delete(snap.id)
                # Print the snap that will be deleted
                print(snap.id,'created on',snap_time,'was deleted')
                mail_body = mail_body + snap.id + ' created on ' + str(snap_time) + ' was deleted.\n'
            # Catch an exception if the snap is in use
            except:
                print(snap.id, skip_str)
                mail_body = mail_body + snap.id + ' ' + skip_str + '\n'
                continue
    if (mail_body == ''):
        mail_body = no_snap
    response = sns.publish(
        TopicArn = 'arn:aws:sns:us-east-1:' + accountId + ':topSnapCleanUp',
        Message = mail_body,
        Subject = 'Snapshot Clean up ' + str(now_time)
    )
</pre>
<p>Click <strong>Save </strong>in the upper right corner and click <strong>Test</strong>. Enter something for the Event name and click <strong>Create</strong>. Click <strong>Test </strong>again. You&#8217;ll get an error at the top of the screen.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-09.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-09.png" alt="" width="1083" height="423" class="aligncenter size-full wp-image-8453" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-09.png 1083w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-09-300x117.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-09-1024x400.png 1024w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-09-768x300.png 768w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-09-585x228.png 585w" sizes="(max-width: 1083px) 100vw, 1083px" /></a><br />
The error means that we don&#8217;t have rights. So, we have to add a policy to our role that we created earlier.</p>
<h1>IAM Roles and Policies</h1>
<p>If you go to the IAM service and search for the role that you&#8217;ve created, you&#8217;ll see that it&#8217;s there and that there is a simple Lambda policy attached.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-10.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-10.png" alt="" width="696" height="522" class="aligncenter size-full wp-image-8454" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-10.png 696w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-10-300x225.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-10-585x439.png 585w" sizes="(max-width: 696px) 100vw, 696px" /></a><br />
If you look at the policy, you&#8217;ll see that this policy gives access to CloudWatch logs. What we need in the policy is access to snapshots and SNS. Click on <strong>Edit policy</strong> and copy and paste this one. Replace your account number in line 16.</p>
<pre class="brush: bash; title: ; notranslate">
{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: &#x5B;
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: &#x5B;
                &quot;ec2:DeleteSnapshot&quot;,
                &quot;ec2:DescribeVolumes&quot;,
                &quot;ec2:DescribeSnapshots&quot;
            ],
            &quot;Resource&quot;: &quot;*&quot;
        },
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: &quot;sns:Publish&quot;,
            &quot;Resource&quot;: &quot;arn:aws:sns:us-east-1:123456789012:topSnapCleanUp&quot;
        }
    ]
}
</pre>
<p>If you save the policy and run the Lambda function, you&#8217;ll see that everything works as expected. But, we want to go a step further and automate the execution of the script.</p>
<h1>CloudWatch</h1>
<p>First, we need to decide when we want this script to start. In my case, I want the script to run at 1AM in the morning. Go to <strong>CloudWatch</strong>, click on <strong>Rules </strong>on the left side and click on <strong>Create rule</strong> button.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-11.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-11.png" alt="" width="425" height="321" class="aligncenter size-full wp-image-8455" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-11.png 425w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-11-300x227.png 300w" sizes="(max-width: 425px) 100vw, 425px" /></a><br />
Click on <strong>Cron expression</strong> and enter <em>0 1 * * ? *</em>. If you don&#8217;t know what this means, it&#8217;s a cron syntax. Google it and you&#8217;ll figure it out. It&#8217;s easy. On the right side, under <strong>Targets</strong>, choose our Lambda function from the drop-down. Then click <strong>Configure details</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-12.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-12.png" alt="" width="1060" height="653" class="aligncenter size-full wp-image-8456" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-12.png 1060w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-12-300x185.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-12-1024x631.png 1024w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-12-768x473.png 768w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-12-585x360.png 585w" sizes="(max-width: 1060px) 100vw, 1060px" /></a><br />
Under Step 2, enter the rule name, description and click on <strong>Create rule</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-13.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-13.png" alt="" width="1058" height="361" class="aligncenter size-full wp-image-8457" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-13.png 1058w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-13-300x102.png 300w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-13-1024x349.png 1024w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-13-768x262.png 768w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-13-585x200.png 585w" sizes="(max-width: 1058px) 100vw, 1058px" /></a><br />
In case your function times out because you have way too many snapshots, you can increase the time-out settings for the function from the main Lambda screen.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/02/P125-14.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/02/P125-14.png" alt="" width="417" height="347" class="aligncenter size-full wp-image-8458" srcset="https://blog.andreev.it/wp-content/uploads/2019/02/P125-14.png 417w, https://blog.andreev.it/wp-content/uploads/2019/02/P125-14-300x250.png 300w" sizes="(max-width: 417px) 100vw, 417px" /></a><br />
You are all set.</p>
<h1>Serverless</h1>
<p>You can deploy the same solution without even logging to the console. All you need is the <a href="https://serverless.com/" target="_blank" rel="noopener noreferrer">serverless </a>framework. I won&#8217;t explain how to install and configure serverless, so once you are done, let&#8217;s create our first serverless project.</p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate">
sls create -t aws-python3 -p SnapCleanUp
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in &quot;/home/klimenta/SnapCleanUp&quot;
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.37.1
 -------'

Serverless: Successfully generated boilerplate for template: &quot;aws-python3&quot;
</pre>
<p>Serverless will generate the skeleton code and YAML config file for you. If you go to that directory, you&#8217;ll see two files: <strong>handler.py</strong> which is our Python function and <strong>serverless.yml</strong> which is the AWS config written in YAML. You can take a look at the generic files to see what&#8217;s going on. In our case we&#8217;ll replace these two files with ours. So, here is the <strong>handler.py</strong> file. As you can see it&#8217;s pretty much the same as the Python file that we used initially.</p>
<pre class="brush: python; title: ; notranslate">
import json, boto3, datetime

def snapcleanup(event, context):

    # Do not delete these snaps
    snap_ignore = &#x5B;'snap-12718f7046cc2add6','snap-0e738d4c47b2d6e14']
    # Enter the AWS account number here
    accountId = '123456789012'
    # Delete snapshots older than diff_time days
    diff_time = 30
    # Constant string
    no_snap = 'No snaps were found for clean up.'
    # Constant string
    skip_str = 'was skipped because it is in use.'
    # Leave it empty
    mail_body = ''

    ec2 = boto3.resource('ec2')
    sns = boto3.client('sns')

    # Get all the snaps from the account
    snaps = ec2.snapshots.filter(OwnerIds=&#x5B;accountId])
    # Get the current time
    now_time = datetime.datetime.now().date()
    # Iterate through the snaps
    for snap in snaps:
        # Check for protected snaps, e.g the ones that we have to skip and ignore
        if (snap.id in snap_ignore):
            continue
        # Get the creation time of the snap
        snap_time = snap.start_time.date()
        # Get the current time
        now_time = datetime.datetime.now().date()
        # Calculate the difference
        snapage_time = (now_time - snap_time).days
        # If the creation time is older than the required difference
        if(snapage_time &gt; diff_time):
            try:
                # Delete the snap
                snap.delete(snap.id)
                # Print the snap that will be deleted
                print(snap.id,'created on',snap_time,'was deleted')
                mail_body = mail_body + snap.id + ' created on ' + str(snap_time) + ' was deleted.\n'
            # Catch an exception if the snap is in use
            except:
                print(snap.id, skip_str)
                mail_body = mail_body + snap.id + ' ' + skip_str + '\n'
                continue
    if (mail_body == ''):
        mail_body = no_snap
    response = sns.publish(
        TopicArn = 'arn:aws:sns:us-east-1:' + accountId + ':topSnapCleanUp',
        Message = mail_body,
        Subject = 'Snapshot Clean up ' + str(now_time)
    )
</pre>
<p>And here is the YAML file that does the heavy lifting of creating and gluing everything for you.</p>
<pre class="brush: xml; title: ; notranslate">
service: SnapCleanUp

provider:
  name: aws
  runtime: python3.7
  timeout: 10
  stage: prod
  region: us-east-1
  iamRoleStatements:
    - Effect: &quot;Allow&quot;
      Action:
      - ec2:DeleteSnapshot
      - ec2:DescribeVolumes
      - ec2:DescribeSnapshots
      Resource: &quot;*&quot;
    - Effect: Allow
      Action: sns:Publish
      Resource: {&quot;Ref&quot; : &quot;SNSTopic&quot;}

functions:
  snapcleanup:
    handler: handler.snapcleanup
    description: Deletes snaps older than XX days
    events:
      - schedule: cron(* 1 * * ? *)
        enabled: true
resources:
  Resources:
    SNSTopic:
      Type: AWS::SNS::Topic
      Properties:
        DisplayName: 'Snap Clean'
        TopicName: topSnapCleanUp

    SNSSubscription:
      Type: AWS::SNS::Subscription
      Properties:
        Endpoint: klimenta@iandreev.com
        Protocol: email
        TopicArn: {&quot;Ref&quot; : &quot;SNSTopic&quot;}
</pre>
<p>Here is a brief description. In the <strong>provider </strong>section you specify that you&#8217;ll use Python 3, the timeout for the execution will be 10 seconds and the region is us-east-1. We also have the role defined here. If you look the initial JSON script for the role, well, this is the same, except it&#8217;s in YAML. You can use any online converter to translate JSON to YAML. The <strong>function </strong>section is where I specify the name of the function and I also create the CloudWatch rule so the script runs at 1AM every day. Finally in the <strong>resources </strong>section I create the SNS topic and the subscription. For more information about the syntax, see the docs on the serverless site.<br />
Anyway, we can deploy the function now.</p>
<pre class="brush: bash; title: ; notranslate">
sls deploy -v
</pre>
<p>It takes about a minute for all resources to be completed. Once deployed, check your e-mail and look for the confirmation e-mail. You have to confirm your subscription. And pretty much that&#8217;s it. If you take a look at the console (Lambda, IAM roles, CLoudWatch rules and logs), you&#8217;ll see that pretty much every AWS resource looks the same as our first manual try.</p>
<h1>Helpful tips</h1>
<p>If you have to make a change in the function (handler.py), you don&#8217;t have to redeploy the whole solution. You can just deploy the function itself.</p>
<pre class="brush: bash; title: ; notranslate">
sls deploy function -f snapcleanup
</pre>
<p>Also, we have a scheduled that runs the function at a specified interval, but you can run the script manually.</p>
<pre class="brush: bash; title: ; notranslate">
sls invoke -f snapcleanup -l
</pre>
<p>Check the logs of the function in real-time.</p>
<pre class="brush: bash; title: ; notranslate">
sls logs -f snapcleanup -t
</pre>
<p>If you want to remove all resources and delete the function, use the remove parameter.</p>
<pre class="brush: bash; title: ; notranslate">
sls remove
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2019/02/148-aws-lambda-snapshot-clean-up-script/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
