Open coding-to-music opened 3 years ago
https://aws.github.io/chalice/samples/media-query/index.html
https://github.com/aws/chalice/tree/master/docs/source/samples/media-query/code/
Once the application is deployed, use the AWS CLI to
aws cloudformation describe-stacks --stack-name media-query \
--query "Stacks[0].Outputs[?OutputKey=='MediaBucketName'].OutputValue" \
--output text
media-query-mediabucket-9rbalpyrst24
chalice url
https://n4dkhj8yqg.execute-api.us-east-1.amazonaws.com/api/
http https://n4dkhj8yqg.execute-api.us-east-1.amazonaws.com/api/
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument subcommand: Invalid choice, valid choices are:
ls | website
cp | mv
rm | sync
mb | rb
presign
aws s3 ls media-query-mediabucket-9rbalpyrst24
2021-07-12 23:03:39 111370 architecture.jpg
2021-07-12 23:03:49 111347 othersample.jpg
2021-07-12 23:03:18 111232 sample.jpg
2021-07-12 23:04:05 111288 sample.mp4
https://github.com/coding-to-music/coding-to-music.github.io/issues/162
With chalice now installed, it is time to create your first Chalice application.
Run the chalice new-project command to create a project called workshop-intro:
chalice new-project workshop-intro
A new workshop-intro directory should have been created on your behalf. Inside of the workshop-intro directory, you should have two files: an app.py file and a requirements.txt file:
ls workshop-intro
app.py requirements.txt
mine
drwxr-xr-x 3 root root 4096 Jul 13 20:36 ./
drwxr-xr-x 22 root root 4096 Jul 13 20:36 ../
drwxr-xr-x 2 root root 4096 Jul 13 20:36 .chalice/
-rw-r--r-- 1 root root 37 Jul 13 20:36 .gitignore
-rw-r--r-- 1 root root 739 Jul 13 20:36 app.py
-rw-r--r-- 1 root root 0 Jul 13 20:36 requirements.txt
Let’s create our first Lambda function and deploy it using Chalice.
cd workshop-intro
from chalice import Chalice
app = Chalice(app_name='workshop-intro')
from chalice import Chalice
app = Chalice(app_name='workshop-intro')
@app.lambda_function()
def hello_world(event, context):
return {'hello': 'world'}
chalice deploy
Creating deployment package.
Creating IAM role: workshop-intro-dev
Creating lambda function: workshop-intro-dev-hello_world
Resources deployed:
- Lambda ARN: arn:aws:lambda:us-east-1:708090526287:function:workshop-intro-dev-hello_world
Run the chalice invoke command to invoke your newly deployed hello_world Lambda function:
$ chalice invoke -n hello_world
{"hello": "world"}
Lambda functions accept two parameters: an event and a context parameter. The event parameter is used to provide data to the Lambda function. It is typically a dictionary, but may be a list, string, integer, float, or None. The context parameter provides information about the runtime to the Lambda function. This step will create a Lambda function that will use data from event passed to it to affect its return value.
@app.lambda_function()
def hello_name(event, context):
name = event['name']
return {'hello': name}
Your app.py file should now consist of the following lines:
from chalice import Chalice
app = Chalice(app_name='workshop-intro')
@app.lambda_function()
def hello_world(event, context):
return {'hello': 'world'}
@app.lambda_function()
def hello_name(event, context):
name = event['name']
return {'hello': name}
chalice deploy
Creating deployment package.
Updating policy for IAM role: workshop-intro-dev
Updating lambda function: workshop-intro-dev-hello_world
Creating lambda function: workshop-intro-dev-hello_name
Resources deployed:
- Lambda ARN: arn:aws:lambda:us-east-1:708090526287:function:workshop-intro-dev-hello_world
- Lambda ARN: arn:aws:lambda:us-east-1:708090526287:function:workshop-intro-dev-hello_name
$ echo '{"name": "Kyle"}' | chalice invoke -n hello_name
{"hello": "Kyle"}
chalice invoke -n hello_name
Traceback (most recent call last):
File "/var/task/chalice/app.py", line 901, in __call__
return self.func(event, context)
File "/var/task/app.py", line 12, in hello_name
name = event['name']
KeyError: 'name'
Error: Unhandled exception in Lambda function, details above.
Now with an understanding of the basics of AWS Lambda and Chalice, let’s clean up this introduction application by deleting it remotely.
$ chalice delete
Deleting function: arn:aws:lambda:us-east-1:708090526287:function:workshop-intro-dev-hello_name
Deleting function: arn:aws:lambda:us-east-1:708090526287:function:workshop-intro-dev-hello_world
Deleting IAM role: workshop-intro-dev```
### Validation
Try running chalice invoke on the previously deployed Lambda functions:
```python
$ chalice invoke -n hello_world
Could not find invokable resource with name: hello_world
$ chalice invoke -n hello_name
Could not find invokable resource with name: hello_name
You should no longer be able to invoke both Lambda functions as they have been deleted.
export MEDIA_BUCKET_NAME='media-query-mediabucket-9rbalpyrst24'
(chalice-env) root@docker-ubuntu-s-1vcpu-2gb-nyc1-01:~/ap/workshop-intro# history | grep detect
1289 aws rekognition detect-labels --image-bytes fileb://chalice-workshop/code/media-query/final/assets/sample.jpg
1291 aws rekognition detect-labels --image-bytes fileb://code/media-query/final/assets/sample.jpg
1294 aws rekognition detect-labels --image-bytes fileb://code/media-query/final/assets/sample.jpg
1296 aws rekognition detect-labels --image-bytes fileb://code/media-query/final/assets/sample.jpg
1306 JOB_ID=$(aws rekognition start-label-detection --video S3Object="{Bucket=$MEDIA_BUCKET_NAME,Name=sample.mp4}" --query JobId --output text)
1308 JOB_ID=$(aws rekognition start-label-detection --video S3Object="{Bucket=$MEDIA_BUCKET_NAME,Name=sample.mp4}" --query JobId --output text)
1310 JOB_ID=$(aws rekognition start-label-detection --video S3Object="{Bucket=$MEDIA_BUCKET_NAME,Name=sample.mp4}" --query JobId --output text)
1316 JOB_ID=$(aws rekognition start-label-detection --video S3Object="{Bucket=$MEDIA_BUCKET_NAME,Name=sample.mp4}" --query JobId --output text)
1325 JOB_ID=$(aws rekognition start-label-detection --video S3Object="{Bucket=$MEDIA_BUCKET_NAME,Name=sample.mp4}" --query JobId --output text)
1326 aws rekognition get-label-detection --job-id $JOB_ID
1483 history | grep detect
1307 MEDIA_BUCKET_NAME=media-query-mediabucket-9rbalpyrst24
(chalice-env) root@docker-ubuntu-s-1vcpu-2gb-nyc1-01:~/ap/workshop-intro# printenv | grep MEDIA_BUCKET_NAME
MEDIA_BUCKET_NAME=media-query-mediabucket-9rbalpyrst24
(chalice-env) root@docker-ubuntu-s-1vcpu-2gb-nyc1-01:~/ap/workshop-intro# aws s3 ls $MEDIA_BUCKET_NAME
2021-07-12 23:03:39 111370 architecture.jpg
2021-07-12 23:03:49 111347 othersample.jpg
2021-07-12 23:03:18 111232 sample.jpg
2021-07-13 06:03:46 5178235 sample.mp4
AWS Summary - Chalice
Create a virtualenv and install Chalice¶
To start using Chalice, you will need a new virtualenv with Chalice installed.
Instructions
Make sure you have Python 3 installed. See the env-setup page for instructions on how to install Python.
Create a new virtualenv called chalice-env by running the following command:
Activate your newly created virtualenv:
Install chalice using pip:
Verification
To check that chalice was installed, run:
The version of chalice must be version 1.6.0 or higher and the version of Python should be 3.7.