Mercurial > public > tweet-analysis
comparison README.md @ 14:6794343ad76d
Change info files
author | Dennis <dennis@denniscm.com> |
---|---|
date | Fri, 11 Aug 2023 19:00:06 +0000 |
parents | 6f34b658af3c |
children | 41ae8f322e79 |
comparison
equal
deleted
inserted
replaced
13:6f34b658af3c | 14:6794343ad76d |
---|---|
1 # tweet-analysis [ARCHIVED] | |
2 Serverless application to fetch & analyse tweets using AWS Comprehend. | |
3 | 1 |
4 ## Structure | 2 # tweet-analysis |
5 | 3 |
6 - src - Code for the application's Lambda function. | 4 Serverless app to fetch & analyse tweets using AWS Comprehend. |
7 - events - Invocation events that you can use to invoke the function. | |
8 - tests - Unit and integration tests for the application code. | |
9 - template.yaml - A template that defines the application's AWS resources. | |
10 | 5 |
11 The application uses several AWS resources, including Lambda functions and an API Gateway API. | 6 - Docs: <https://denniscm.com/proj/tweet-analysis.html> |
12 These resources are defined in the `template.yaml` file in this project. You can update the template to add AWS | 7 - Main repo on SourceHut: <https://git.sr.ht/~denniscmartin/tweet-analysis> |
13 resources through the same deployment process that updates your application code. | 8 - Mirrors: |
9 - Github: <https://github.com/denniscmartin/tweet-analysis> | |
10 - Gitlab: <https://gitlab.com/denniscmartin/tweet-analysis> | |
14 | 11 |
15 ## Secrets | |
16 There are some process that must be made manually, such us secrets creation in AWS Secrets Manager. Before deploying | |
17 the application do the following: | |
18 | |
19 **Create Twitter keys**: | |
20 - Go to AWS Secrets Manager Console | |
21 - Create `Other type of secrets` | |
22 - Create two keys called `KEY` and `BEARER` | |
23 - Add the values for each one | |
24 - Name the secret `tweet-analysis-keys` | |
25 | |
26 ## Deploy the application | |
27 | |
28 The Serverless Application Model Command Line Interface (SAM CLI) is an extension of the AWS CLI that adds functionality | |
29 for building and testing Lambda applications. It uses Docker to run your functions in an Amazon Linux environment that | |
30 matches Lambda. It can also emulate your application's build environment and API. | |
31 | |
32 To use the SAM CLI, you need the following tools. | |
33 | |
34 * SAM CLI - | |
35 [Install the SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) | |
36 * [Python 3 installed](https://www.python.org/downloads/) | |
37 * Docker - [Install Docker community edition](https://hub.docker.com/search/?type=edition&offering=community) | |
38 | |
39 To build and deploy your application for the first time, run the following in your shell: | |
40 | |
41 ```bash | |
42 sam build --use-container | |
43 sam deploy --guided | |
44 ``` | |
45 | |
46 The first command will build the source of your application. The second command will package and deploy your application | |
47 to AWS, with a series of prompts: | |
48 | |
49 * **Stack Name**: The name of the stack to deploy to CloudFormation. This should be unique to your account and region, | |
50 and a good starting point would be something matching your project name. | |
51 * **AWS Region**: The AWS region you want to deploy your app to. | |
52 * **Confirm changes before deploy**: If set to yes, any change sets will be shown to you before execution for manual | |
53 review. If set to no, the AWS SAM CLI will automatically deploy application changes. | |
54 * **Allow SAM CLI IAM role creation**: Many AWS SAM templates, including this example, create AWS IAM roles required | |
55 for the AWS Lambda function(s) included to access AWS services. By default, these are scoped down to minimum required | |
56 permissions. To deploy an AWS CloudFormation stack which creates or modifies IAM roles, the `CAPABILITY_IAM` value for | |
57 `capabilities` must be provided. If permission isn't provided through this prompt, to deploy this example you must | |
58 explicitly pass `--capabilities CAPABILITY_IAM` to the `sam deploy` command. | |
59 * **Save arguments to `samconfig.toml`**: If set to yes, your choices will be saved to a configuration file inside the | |
60 project, so that in the future you can just re-run `sam deploy` without parameters to deploy changes to your application. | |
61 | |
62 You can find your API Gateway Endpoint URL in the output values displayed after deployment. | |
63 | |
64 **If a certificate in AWS Certificate Manager is created with the template, you have to create manually the DNS | |
65 validation record to issue the certificate** | |
66 | |
67 ## Use the SAM CLI to build and test locally | |
68 | |
69 Build your application with the `sam build --use-container` command. | |
70 | |
71 ```bash | |
72 tweet-analysis$ sam build --use-container | |
73 ``` | |
74 | |
75 The SAM CLI installs dependencies defined in `src/requirements.txt`, creates a deployment package, and saves it in the | |
76 `.aws-sam/build` folder. | |
77 | |
78 Test a single function by invoking it directly with a test event. An event is a JSON document that represents the input | |
79 that the function receives from the event source. Test events are included in the `events` folder in this project. | |
80 | |
81 Run functions locally and invoke them with the `sam local invoke` command. | |
82 | |
83 ```bash | |
84 tweet-analysis$ sam local invoke HelloWorldFunction --event events/sentiment_event.json | |
85 ``` | |
86 | |
87 The SAM CLI can also emulate your application's API. Use the `sam local start-api` to run the API locally on port 3000. | |
88 | |
89 ```bash | |
90 tweet-analysis$ sam local start-api | |
91 tweet-analysis$ curl http://localhost:3000/ | |
92 ``` | |
93 | |
94 The SAM CLI reads the application template to determine the API's routes and the functions that they invoke. The | |
95 `Events` property on each function's definition includes the route and method for each path. | |
96 | |
97 ```yaml | |
98 Events: | |
99 HelloWorld: | |
100 Type: Api | |
101 Properties: | |
102 Path: /hello | |
103 Method: get | |
104 ``` | |
105 | |
106 ## Add a resource to your application | |
107 The application template uses AWS Serverless Application Model (AWS SAM) to define application resources. AWS SAM is an | |
108 extension of AWS CloudFormation with a simpler syntax for configuring common serverless application resources such as | |
109 functions, triggers, and APIs. For resources not included in | |
110 [the SAM specification](https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md), | |
111 you can use standard | |
112 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) | |
113 resource types. | |
114 | |
115 ## Fetch, tail, and filter Lambda function logs | |
116 | |
117 To simplify troubleshooting, SAM CLI has a command called `sam logs`. `sam logs` lets you fetch logs generated by your | |
118 deployed Lambda function from the command line. In addition to printing the logs on the terminal, this command has | |
119 several nifty features to help you quickly find the bug. | |
120 | |
121 `NOTE`: This command works for all AWS Lambda functions; not just the ones you deploy using SAM. | |
122 | |
123 ```bash | |
124 tweet-analysis$ sam logs -n HelloWorldFunction --stack-name tweet-analysis --tail | |
125 ``` | |
126 | |
127 You can find more information and examples about filtering Lambda function logs in the | |
128 [SAM CLI Documentation](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-logging.html). | |
129 | |
130 ## Tests | |
131 | |
132 Tests are defined in the `tests` folder in this project. Use PIP to install the test dependencies and run tests. | |
133 | |
134 ```bash | |
135 tweet-analysis$ pip install -r tests/requirements.txt --user | |
136 # unit test | |
137 tweet-analysis$ python -m pytest tests/unit -v | |
138 # integration test, requiring deploying the stack first. | |
139 # Create the env variable AWS_SAM_STACK_NAME with the name of the stack we are testing | |
140 tweet-analysis$ AWS_SAM_STACK_NAME=<stack-name> python -m pytest tests/integration -v | |
141 ``` | |
142 | |
143 ## Cleanup | |
144 | |
145 To delete the sample application that you created, use the AWS CLI. Assuming you used your project name for the stack | |
146 name, you can run the following: | |
147 | |
148 ```bash | |
149 aws cloudformation delete-stack --stack-name tweet-analysis | |
150 ``` | |
151 | |
152 ## Resources | |
153 | |
154 See the [AWS SAM developer guide](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) | |
155 for an introduction to SAM specification, the SAM CLI, and serverless application concepts. | |
156 | |
157 Next, you can use AWS Serverless Application Repository to deploy ready to use Apps that go beyond hello world samples | |
158 and learn how authors developed their applications: | |
159 [AWS Serverless Application Repository main page](https://aws.amazon.com/serverless/serverlessrepo/) |