- AWS Lambda
- Python programming language (AWS boto library)
- AWS S3 static web site hosting
- AWS API Gateway
- AWS Dynamo DB
- AWS Polly service
2019 оны I сарын байдлаар AWS 16 ширхэг public region-той байна. Өнөөдөр hacknight-р бид Tokyo region дээр ажиллах болно.
Table name: texts primary key: id (String) - Lowercase!
Bucket name must be globally unique! Өөрсдийн нэрээр нэрлэнэ үү.
- Bucket #1: mnhacknight-web (web ажиллах bucket, domain холбох бол www.jiguur001.tk)
- Bucket #2: mnhacknight-mp3 (mp3 file хадгалах bucket)
Make them public
Name: LambdaPolicyForHacknightV1 Type: JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"polly:SynthesizeSpeech",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"sns:Publish",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetBucketLocation",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"*"
]
}
]
}
Name: LambdaRoleForHacknightV1
Choose existing role: LambdaPolicyForHacknightV1
Service: Lambda
Зориулалт
- Орж ирсэн текстийг DynamoDB лүү хадгална
- DynamoDB-с түүнийгээ select хийж Polly service ашиглан mp3 болгоно
- mp3 болгосон file-г S3 bucket дотор хадгална
Python 2.7
Choose an existing role: LambdaRoleForHacknightV1
Use the file name: newtext.py
- Add environment variables
DB_TABLE_NAME: texts
BUCKET_NAME: mnhacknight-mp3 (Section 4 дээр өгсөн нэр) - Add description
- Set time-out to 5 mins
- Test Hello World
{
"voice": "Joanna",
"text": "Hello Amazon Web Services Mongolian Community!"
}
- Check DynamoDB table
Зориулалт: DynamoDB-с утгуудыг query-дэнэ
Python 2.7
Choose an existing role: LambdaRoleForHacknightV1
Use the file name: gettext.py
- Add environment variables DB_TABLE_NAME: texts
- Add function description
- Set time-ut to 5 secs
- Test Hello World
{
"postId": "*"
}
Name: HacknightV1API
- Add GET Method
Integration type: Lambda function
Target: HacknightV1_GetText
Get request-ийн URL-с параметер авахын тулд Mapping хийж өгөх ёстой
Integration request -> Body Mapping Templates -> When there are no templates defined -> application/json гэж бичиж оруулна
{
"postId": "$input.params('postId')"
}
-
Add POST Method Integration type: Lambda function Target: HacknightV1_NewText
-
Click Action -> Enable CORS -> Hit Enable CORS
-
Deploy API Deployment stage: [new stage] other fields all prod
-
Click stage -> prod -> Invoke URL copy-дож авна
scripts.js хамгийн дээр хуулна
Go to S3 and add 2 following files.
echo '<h1>Hello world</h1>' > index.html
index.html error.html
Add policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::REPLACE_BUCKET_NAME_HERE/*"
}
]
}
Make public access on Access control list
Then try deleting index.html
index.html scripts.js styles.css
Select all show dummy data, then delete it from DynamoDB
- bucket name must be same as domain name /N.Virginia/
- Freenom - Request new domain, wait ns /mnhacknight.ml/
- Route53 - create a hosted zone /mnhacknight.ml/
- Fill namespaces in Freenom
- Create cloudfront distribution with s3 bucket /index.html, ~30min/
- request certificate. mnhacknight.ml, validate with DNS, Create record set with Route53
- Edit distribution with SSL certificate
- Invalidate
- edit Route53 a record route to Cloudfront
https://www.facebook.com/groups/awsmongolia/
https://www.facebook.com/MITECMeetUpMongolia/