Cloud Record

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 42

KGISL INSTITUTE OF TECHNOLOGY REG.

NO:711721243030
EXP. NO: 01 CREATING ACCOUNT IN AWS
DATE:

AIM:

Create a Cloud Organization in AWS/Google Cloud/or any equivalent Open-Source cloud


softwares like Openstack, Eucalyptus, OpenNebula with Role-based access control.

PROCEDURE:

Creating an AWS account

1. Open the Amazon Web Services home page .

2. Choose Create an AWS account.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


3. Enter your account information, and then choose Verify email address. This will send a verification code

to your specified email address.

4. Enter your verification code, and then choose Verify.

5. Enter a strong password for your root user, confirm it, and then choose Continue. AWS requires that
your password meet the following conditions:

a. It must have a minimum of 8 characters and a maximum of 128 characters.

b. It must include a minimum of three of the following mix of character types: uppercase,

lowercase, numbers, and ! @ # $ % ^ & * () <> [] {} | _+-= symbols.

c. It must not be identical to your AWS account name or email address.

6. Choose Business or Personal. Personal accounts and business accounts have the same features and

functions.

7. Enter your personal information.

8. Read and accept the AWS Customer Agreement. Be sure that you read and understand the terms of the

AWS Customer Agreement.

9. Choose Continue. At this point, you'll receive an email message to confirm that your AWS account is

ready to use. You can sign in to your new account by using the email address and password you

provided during sign up. However, you can't use any AWS services until you finish activating your

account.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


10. Enter the information about your payment method, and then choose Verify and Continue. If you want to

use a different billing address for your AWS billing information, choose Use a new address.

You can't proceed with the sign-up process until you add a valid payment method.

11. Enter your country or region code from the list, and then enter a phone number where you can be

reached in the next few minutes.

12. Enter the code displayed in the CAPTCHA, and then submit.

13. When the automated system contacts you, enter the PIN you receive and then submit.

14. Select one of the available AWS Support plans and choose Complete sign up. A confirmation page

appears that indicates that your account is being activated.

15. Check your email and spam folder for an email message that confirms your account was activated.

Activation usually takes a few minutes but can sometimes take up to 24 hours.

After you receive the activation message, you have full access to all AWS services.

RESULT:

Create a Cloud Organization in AWS/Google Cloud/or any equivalent Open-Source cloud softwares like
Openstack, Eucalyptus, OpenNebula with Role-based access control is executed successfully and the output
is verified.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


EXP. NO: 02 CREATING A WEB APPLICATION USING AWS
DATE:

AIM:

To Create a Cost-model for a web application using various services and do Cost-benefit
analysis.

PROCEDURE:

Application architecture

The diagram below provides a visual representation of the services used in this exercise and
how they are connected. This application uses AWS Amplify, Amazon API Gateway, AWS
Lambda, Amazon DynamoDB, and AWS Identity and Access Management (IAM).

1. Create an AWS S3 bucket to store static web application resources.


2. Build Serverless Function : Build a serverless function using AWS Lambda.
3. Link Serverless Function to Web App: Deploy your serverless function with API Gateway.
4. Create Data Table: Persist data in an Amazon DynamoDB table.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


5. Add Interactivity to Web App: Modify your web app to invoke your API.
6. Clean Up Resources: Clean up resources used in this exercise

Step 1: Create a Web App

a) Create a Web App

1. Open your favorite text editor on your computer. Create a new file and paste the following
HTML in it:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
Hello World
</body>
</html>

2. Save the file as index.html.

3. ZIP (compress) only the HTML file.

4. In a new browser window, log into the Amplify console. Note: We will be using the
Oregon (us-west-2) Region for this tutorial.

5. In the Get Started section, under Host your web app, choose the orange Get started button.

6. Select Deploy without Git provider. This is what you should see on the screen:

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


7. Choose the Continue button.

8. In the App name field, enter GettingStarted.

9. For Environment name, enter dev.

10. Select the Drag and drop method. This is what you should see on your screen:

11. Choose the Choose files button.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


12. Select the ZIP file you created in Step 3.

13. Choose the Save and deploy button.

14. After a few seconds, you should see the message Deployment successfully completed.

b) Test your web app

1. Select Domain Management in the left navigation menu.

2. Copy and paste the URL displayed in the form into your browser.

Step 2: Build a Serverless Function

a) Create and configure Lambda function:

In a new browser tab, log in to the AWS Lambda console.

Make sure you create your function in the same Region in which you created the web app in the
previous module. You can see this at the very top of the page, next to your account name.

Choose the orange Create function button.

Under Function name, enter HelloWorldFunction.

Select Python 3.8 from the runtime dropdown and leave the rest of the defaults unchanged.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


6. Choose the orange Create function button.

7. You should see a green message box at the top of your screen with the following
message "Successfully created the function HelloWorldFunction."

8. Under Code source, replace the code in lambda_function.py with the following:

# import the JSON utility package since we will be working with a JSON object
import json
# define the handler function that the Lambda service will use as an entry point
def lambda_handler(event, context):
# extract values from the event object we got from the Lambda service
name = event['firstName'] +' '+ event['lastName']
# return a properly formatted JSON object
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda, ' + name)
}

9. Save by going to the file menu and selecting Save to save the changes.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


10. Choose Deploy to deploy the changes.

11. Let's test our new function. Choose the orange Test button to create a test event by
selecting Configure test event.

12. Under Event name, enter HelloWorldTestEvent.

13. Copy and paste the following JSON object to replace the default one:

{
"firstName": "Ada",
"lastName": "Lovelace"
}

14. Choose the Save button at the bottom of the page.

b)Test your Lambda function

1. Under the HelloWorldFunction section at the top of the page, select Test tab.
2. You should see a light green box at the top of the page with the following text: Execution
result: succeeded. You can choose Details to see the event the function returned.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step 3: Link a Serverless Function to a Web App

a)Create REST API

1. Log in to the API Gateway console.


2. In the Choose an API type section, find the REST API card and choose the Build button
on the card.
3. Under Choose the protocol, select REST.
4. Under Create new API, select New API.
5. In the API name field, enter HelloWorldAPI.
6. Select Edge optimized from the Endpoint Type dropdown. (Note: Edge-optimized
endpoints are best for geographically distributed clients. This makes them a good
choice for public services being accessed from the internet. Regional endpoints are
typically used for APIs that are accessed primarily from within the same AWS Region.)
7. Choose the blue Create API button. Your settings should look like the accompanying
screenshot.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


b) Create a new resource and method

1. In the left navigation pane, select Resources under API: HelloWorldAPI.


2. Ensure the "/" resource is selected.
3. From the Actions dropdown menu, select Create Method.
4. Select POST from the new dropdown that appears, then select the checkmark.
5. Select Lambda Function for the Integration type.
6. Select the Lambda Region you used when making the function (or else you will see a
warning box reading "You do not have any Lambda Functions in...").
7. Enter HelloWorldFunction in the Lambda Function field.
8. Choose the blue Save button.
9. You should see a message letting you know you are giving the API you are
creating permission to call your Lambda function. Choose the OK button.
10. With the newly created POST method selected, select Enable CORS from
the Action dropdown menu.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


11. Leave the POST checkbox selected and choose the blue Enable CORS and
replace existing CORS headers button.

c) Deploy API

1. In the Actions dropdown list, select Deploy API.


2. Select [New Stage] in the Deployment stage dropdown list.
3. Enter dev for the Stage Name.
4. Choose Deploy.
5. Copy and save the URL next to Invoke URL

d) Validate API

1. In the left navigation pane, select Resources.


2. The methods for our API will now be listed on the right. Choose POST.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


3. Choose the small blue lightning bolt.
4. Paste the following into the Request Body field:

{
"firstName":"Grace",
"lastName":"Hopper"
}

5. Choose the blue Test button.

6. On the right side, you should see a response with Code 200.

Great! We have built and tested an API that calls our Lambda function.

Step 4: Create a Data Table

a) Create a DynamoDB table


1. log in to the Amazon DynamoDB console.
2. Make sure you create your table in the same Region in which you created the web app in
the previous module. You can see this at the very top of the page, next to your account
name.
3. Choose the orange Create table button.
4. Under Table name, enter HelloWorldDatabase.
5. In the Partition key field, enter ID. The partition key is part of the table's primary key.
6. Leave the rest of the default values unchanged and choose the orange Create table button.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


7. In the list of tables, select the table name, HelloWorldDatabase.
8. In the General information section, show Additional info by selecting the down arrow.

9. Copy the Amazon Resource Name (ARN). You will need it later.

b) Create and add IAM policy to Lambda function


1. Now that we have a table, let's edit our Lambda function to be able to write data to it.
In a new browser window, open the AWS Lambda console.
2. Select the function we created in module two (if you have been using our examples, it
will be called HelloWorldFunction). If you don't see it, check the Region dropdown in
the upper right next to your name to ensure you're in the same Region you created the
function in.
3. We'll be adding permissions to our function so it can use the DynamoDB service, and we
will be using AWS Identity and Access Management (IAM) to do so.
4. Select the Configuration tab and select Permissions from the right side menu.
5. In the Execution role box, under Role name, choose the link. A new browser tab will
open.
6. In the Permissions policies box, open the Add permissions dropdown and select Create
inline policy.
7. Select the JSON tab.
8. Paste the following policy in the text area, taking care to replace your table's ARN
in the Resource field in line 15:

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",

"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:UpdateItem"
],
"Resource": "YOUR-TABLE-ARN"
}
]
}

9. This policy will allow our Lambda function to read, edit, or delete items, but restrict it
to only be able to do so in the table we created.
10. Choose the blue Review Policy button.

11. Next to Name, enter HelloWorldDynamoPolicy.

12. Choose the blue Create Policy button.

13. You can now close this browser tab and go back to the tab for your Lambda function.

c) Modify Lambda function to write to DynamoDB table

1. Select the Code tab and select your function from the navigation pane on the left
side of the code editor.
2. Replace the code for your function with the following:

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


# import the json utility package since we will be working with a JSON object

import json
# import the AWS SDK (for Python the package name is boto3)
import boto3
# import time
import time
# import two packages to help us with dates and date formatting
# create a DynamoDB object using the AWS SDK
dynamodb = boto3.resource('dynamodb')
# use the DynamoDB object to select our table

table = dynamodb.Table('HelloWorldDatabase')
# define the handler function that the Lambda service will use as an entry point
def lambda_handler(event, context):
# Get the current GMT time
gmt_time = time.gmtime()
# store the current time in a human readable format in a variable
# Format the GMT time string
now = time.strftime('%a, %d %b %Y %H:%M:%S +0000', gmt_time)
# extract values from the event object we got from the Lambda service and store in a variable
name = event['firstName'] +' '+ event['lastName']
# write name and time to the DynamoDB table using the object we instantiated and save
response in a variable
response = table.put_item(
Item={
'ID': name,
'LatestGreetingTime':now
})
# return a properly formatted JSON object
return {

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


'statusCode': 200,
'body': json.dumps('Hello from Lambda, ' + name)
}

3. Choose the Deploy button at the top of the code editor

d)Test your changes

1. Choose the orange Test button.


2. You should see an Execution result: succeeded message with a green background.
3. In a new browser tab, open the DynamoDB console.
4. In the left-hand navigation pane, select Tables > Explore items.
5. Select HelloWorldDatabase, which we created earlier in this module.
6. Select the Items tab on the right.
7. Items matching your test event appear under Items returned. If you have been using our
examples, the item ID will be Hello from Lambda, Ada Lovelace or Ada Lovelace.
8. Every time your Lambda function executes, your DynamoDB table will be updated. If the
same name is used, only the time stamp will change.

Step 5: Add Interactivity to Your Web App

a) Update Web app with Amplify console:

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


1. Open the index.html file you created in module one.
2. Replace the existing code with the following:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<!-- Add some CSS to change client UI -->
<style>
body {
background-color: #232F3E;
}
label, button {
color: #FF9900;
font-family: Arial, Helvetica, sans-serif;
font-size: 20px;
margin-left: 40px;
}

input {
color: #232F3E;
font-family: Arial, Helvetica, sans-serif;
font-size: 20px;
margin-left: 20px;
}
</style>
<script>
// define the callAPI function that takes a first name and last name as parameters
var callAPI = (firstName,lastName)=>{
// instantiate a headers object

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


var myHeaders = new Headers();
// add content type header to object
myHeaders.append("Content-Type", "application/json");
// using built in JSON utility package turn object to string and store in a variable
var raw = JSON.stringify({"firstName":firstName,"lastName":lastName});
// create a JSON object with parameters for API call and store in a variable
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
// make API call with parameters and use promises to get
response fetch("YOUR-API-INVOKE-URL", requestOptions)
.then(response => response.text())
.then(result => alert(JSON.parse(result).body))
.catch(error => console.log('error', error));
}
</script>
</head>
<body>
<form>
<label>First Name :</label>

<input type="text" id="fName">


<label>Last Name :</label>
<input type="text" id="lName">
<!-- set button onClick method to call function we defined passing input values as
parameters -->

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


<button type="button"
onclick="callAPI(document.getElementById('fName').value,document.getElementById('lNa
me').value)">Call API</button>
</form>
</body>
</html>

3. Make sure you add your API Invoke URL on Line 41 (from module three). Note: If you do
not have your API's URL, you can get it from the API Gateway console by selecting your API
and choosing stages.

4. Save the file.

5. ZIP (compress) only the HTML file.

6. Open the Amplify console.

7. Choose the web app created in module one.

8. Choose the white Choose files button.

9. Select the ZIP file you created in Step 5.

10. When the file is uploaded, a deployment process will automatically begin. Once you see
a green bar, your deployment will be complete.

b) Test the updated App:

1. Choose the URL under Domain.


2. Your updated web app should load in your browser.
3. Fill in your name (or whatever you prefer) and choose the Call API button.
4. You should see a message that starts with Hello from Lambda followed by the text
you filled in.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


RESULT:

Create a Cost-model for a web application using various services and do Cost-benefit analysis
has been executed successfully and the output is verified.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


EXP. NO: 03 BILLING ALERT
DATE:

AIM:

To Create Billing alerts for your Cloud Organization.

PROCEDURE:

a) Set Billing Preferences

Step-1: Go to the AWS console and login using your credentials. After that, go to the My
Billing Dashboard menu.

Step-2: Go to the Billing Preferences and check on Receive PDF Invoice by Email and Receive
Billing Alerts. Also, check on Receive Free Tier Usage Alerts and input your email if you are
using AWS Free Tier.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step-3: Click Save Preferences, after that you will receive email notifications when your
charges reach a specified threshold.

b) Create a Billing Alarm Using Amazon CloudWatch

Amazon CloudWatch is basically a monitoring service, so you can monitor your AWS
services and trigger an alarm when something unexpected happens.

Step-1: Search CloudWatch on the search bar

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step-2: Go to the billing menu and click create alarm

Step-3: You can set up the condition. For example, if you are using AWS free tier, you
can set the value to 0. So you will get an alert if your estimated charges are greater than
$0. After you finished setting up the condition, click next.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step-4: When an alarm is triggered we want to create a new topic. So you can select in
alarm trigger, select create a new topic for the SNS topic, input the topic name, input
your email that will receive the notification, click create topic and click next

Step-5: Input alarm name. For example, Billing alert. After that, click next.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step-6: You can preview everything that you have input. If you are satisfied, click create
alarm

If successful, you will see an alert “Successfully created alarm” and the billing alarm is
created ,

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


RESULT:
Create Billing alerts for your Cloud Organization has been created executed successfully and
the output is verified.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


EXP. NO: 04 SETTING UP BUDGET ALERT

DATE:

AIM:

To Create alerts for usage of Cloud resources.

PROCEDURE:

Budget Alerts

Step-1 : Go to the billing section, explore details like EC2 usage, instance types, and data
transfer metrics to understand the diverse usage measurements (hours vs. GB).

Step-2 : Head back to the budget section and click on "Create budget." and Select
"Usage Budget" and proceed to set up the budget details.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step-3 : Define the budget name (e.g., "Monthly EC2 Usage Budget") and specify the
usage limit (e.g., 100 hours for EC2 instances) and the monitoring period (e.g., monthly).

Step-4 : opt for a recurring budget starting from a chosen month (e.g. March).

Step-5 : Define the usage type (e.g., EC2 running hours) and set the budget amount (e.g.,
100 hours).

Step-6 : Configure the threshold for alerts (e.g., 80% of the defined budget) and Add
email recipients for alerts.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step-7 : Review the budget summary. Click on "Create" to establish the usage budget alert
successfully.

Verify the created usage budget in the AWS Cost Explorer and check other details.

RESULT:

Create alerts for usage of Cloud resources has been executed successfully and the output is
verified.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


EXP. NO: 05 DEPLOYING A WEB APPLICATION USING S3

DATE:

AIM:

To Deploy a Web Application using S3.

PROCEDURE:

S3:

Deploying a web application on AWS S3 involves creating a bucket for resources,


uploading files, configuring static web hosting, managing access controls, and verifying
functionality through the provided endpoint URL.

Overview:

1.) Create an AWS S3 bucket to store static web application resources.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


2.) Upload HTML, CSS, JavaScript, and other static files constituting the web application to
the designated S3 bucket.
3.) Configure the S3 bucket for static website hosting to allow direct access to the web
application files via an endpoint URL.
4.) Fine-tune access controls and permissions within the S3 bucket to manage user access
and security settings for the deployed web application.
5.) Verify the deployment by accessing the web application through the provided endpoint
URL to ensure proper functionality and accessibility.

Step 1: Create an AWS S3 bucket:

1.) In a new browser tab, log in to the AWS console.

2.) In there search for S3 and click the link with S3 with description of scalable storage in
the cloud.

3.) In that UI you will see the Buckets section.

4.) In that section click “Create Bucket”.

5.) After clicked create bucket button, you will see the UI for configuration.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


6.) Choose a unique bucket name (it must be globally unique), select your preferred AWS
region (Leave it default).

7.) Under Block public access section make sure to untick the checkbox showing block all
public access

8.) And tick the checkbox inside the alert box saying “I acknowledge that the current settings
might result in this bucket and the objects within becoming public”.
9.) Now click create bucket button in the bottom.
10.) Now you can see this alert like “successfully created” and you can also view details of
your bucket by clicking view details button.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


Step 2: Upload Files into Bucket:

1.) Under the list of your buckets. Click the bucket you have now created.
2.) Then it will show the objects section. In this section we gonna upload web files for
hosting and deploying.
3.) Open any code editor and create three files name it as “index.html”, “style.css”.
4.) Add this code in html file:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Recording</title>

<link rel="stylesheet" href="main.css">

</head>

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


<body>

<div class="center">

SUCCESSFULLY DEPLOYED IN <span>"AWS"</span> S3 BUCKET

</div>

</body>

</html>

5.) Add this following code in your css file:

@import url(https://fonts.googleapis.com/css?family=Agbalumo);

@import url(https://fonts.googleapis.com/css?family=Nunito);

margin: 0;

padding: 0;

box-sizing: border-box;

.center{

margin-left: auto;

margin-right: auto;

background-color: hsl(119, 40%, 51%);

color: rgb(41, 37, 37);

width: max-content;

height: 5rem;

font-size: 2em;

padding: 5em;

font-family: 'Agbalumo';

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


}

.center span{

color: white;

font-family: 'Nunito';

6.) Come to S3 object space and click upload button and click “Add files” and then select the
html and css files and click upload.
7.) After uploading the files you will see this success box.

8.) Now you can see the files that you uploaded.

Step 3: Configure S3 bucket for static web hosting:

1) In your S3 bucket, go to the "Properties" tab.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


2) Scroll down to the "Static website hosting" section.

3) Click the "Edit" button.


4) Select “Enable” for “Use this bucket to host a website.”
5) Set the "Index document" to the name of your HTML file (e.g., "index.html").

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


6) Click "Save."
7) You will see this alert message.

Step 4: Access controls and permissions within S3 bucket:

1.) Go to the Permissions section of your Bucket (Next to properties tab).

2.) Ensure that block public access is in off state.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


3.) Under that there will be Bucket policy.
4.) Click on “edit”.

5.) Add these following lines to that policy content section

"Version": "2012-10-17",

"Statement": [

"Sid": "PublicReadGetObject",

"Effect": "Allow",

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::your-bucket-name/*"

6.) Change the “your-bucket-name” with your actual bucket name.


7.) Click “save”. you will see this alert.

Step 5: Verify the deployment by endpoint URL:

1.) In the properties section scroll down to reach “Static website hosting”.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030


2.) There will be a link for your deployed website.
3.) Click that to verify your deployment.

That’s it you’ve deployed a website in cloud (S3).

RESULT:

Create a Web Application using S3 has been executed successfully and the output is verified.

KGISL INSTITUTE OF TECHNOLOGY REG.NO:711721243030

You might also like