diff --git a/DevOps/AWS/AWS_Api_Gateway.md b/DevOps/AWS/AWS_API_Gateway.md similarity index 100% rename from DevOps/AWS/AWS_Api_Gateway.md rename to DevOps/AWS/AWS_API_Gateway.md diff --git a/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation.md b/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation.md index c55ee3a..1d7f2fb 100644 --- a/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation.md +++ b/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation.md @@ -25,7 +25,7 @@ Beneath this we have a code editor with the handler function with a basic boiler Next we need to add a [trigger](/DevOps/AWS/AWS_Lambda/Lambda_triggers.md) that execute the handler. -We will do this using [AWS API Gateway](/DevOps/AWS/AWS_Api_Gateway.md). We select "Add trigger" from the dashboard view and input basic settings: +We will do this using [AWS API Gateway](/DevOps/AWS/AWS_API_Gateway.md). We select "Add trigger" from the dashboard view and input basic settings: ![](/_img/api-gateway-trigger.png) diff --git a/DevOps/AWS/AWS_SAM/AWS_SAM.md b/DevOps/AWS/AWS_SAM/AWS_SAM.md new file mode 100644 index 0000000..68b9a06 --- /dev/null +++ b/DevOps/AWS/AWS_SAM/AWS_SAM.md @@ -0,0 +1,115 @@ +--- +categories: + - DevOps + - Backend +tags: [AWS] +--- + +# AWS SAM + +SAM stands for **serverless application model**. It is a framework developed by AWS to simplify the process of building, deploying and managing serverless applications. It provides a concise syntax for defining the components of a serverless application, such as [Lambda functions](/DevOps/AWS/AWS_Lambda/Lambda_programming_model.md), [API gateway](/DevOps/AWS/AWS_API_Gateway.md) and database tables. + +The SAM infrastructure is defined in a YAML file which is then deployed to AWS. SAM syntax gets transformed into CloudFormation during the deployment process. (CloudFormation is a broader and more robust AWS tool for large, highly scaleable infrastructures). + +## Key features of SAM + +- Single deployment configuration +- Integration with development tools +- Local testing and debugging +- Built on AWS CloudFormation + +## Main technologies required + +### Docker + +Whilst SAM can be used to create a deployable file for AWS it can also be run as a container for local development with Docker. + +### AWS CLI + +This is installed using Python and allows you to interact directly with AWS via the command-line. + +### AWS SAM CLI + +See [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) + +## Setting up credentials for the AWS CLI + +``` +aws configure +AWS Access Key ID [None]: AK******* +AWS Secret Access Key [None]: ukp****** +Default region name [None]: +Default output format [None]: +``` + +This information can be found in the Security Credentials section of the given [IAM](/DevOps/AWS/AWS_User_management_and_roles.md#iam) user: + +![](/_img/access-key-aws.png) + +## Starting a SAM project + +First create a directory for your project which will serve as the repository: + +```sh +mkdir aws-sam-learning +cd aws-sam-learning +``` + +Then we can use the `sam` cli to bootstrap the project: + +```sh +sam init --runtime nodejs16.x +``` + +We can just click through and accept the basic HelloWorld Lambda. + +This will create the Lambda as well as an API Gateway trigger URL. + +### `template.yaml` + +This is autogenerated and details the main constituents of the project. There are lots of fields but the most important are the following: + +```yaml +HelloWorldFunction: + Type: AWS::Serverless::Function + Properties: + CodeUri: hello-world/ + Handler: app.lambdaHandler + Runtime: nodejs16.x + Architectures: + - x86_64 + Events: + HelloWorld: + Type: Api + Properties: + Path: /hello + Method: get +``` + +This details the location of the [handler function](/DevOps/AWS/AWS_Lambda/Lambda_handler_function.md) which is contained at the path `hello-world/app.js`: + +```js +exports.lambdaHandler = async (event, context) => { + try { + // const ret = await axios(url); + response = { + statusCode: 200, + body: JSON.stringify({ + message: "hello world", + // location: ret.data.trim() + }), + }; + } catch (err) { + console.log(err); + return err; + } + + return response; +}; +``` + +It also lists the `get` event that we can use to call API Gateway and trigger the Lambda. + +The full template is below: + +![](/_img/sam-template-yaml.png) diff --git a/DevOps/AWS/Developing_AWS_projects_locally.md b/DevOps/AWS/Developing_AWS_projects_locally.md new file mode 100644 index 0000000..8e29361 --- /dev/null +++ b/DevOps/AWS/Developing_AWS_projects_locally.md @@ -0,0 +1,15 @@ +--- +categories: + - DevOps +tags: [AWS] +--- + +# Developing AWS projects locally + +To develop AWS projects locally the following core tools can be used to set up a local development environment that simulates AWS services: + +- AWS CLI + - Interact with AWS services from your local machine +- AWS SDK + - Integrate AWS services into your given programming language and application code +- [AWS SAM](/DevOps/AWS/AWS_SAM/AWS_SAM.md) diff --git a/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md b/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md index bdf3833..d8d86cb 100644 --- a/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md +++ b/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md @@ -6,7 +6,7 @@ tags: [physics, electricity] # Cells and batteries -Cells are a [voltage source](/Electronics_and_Hardware/Analogue_circuits/Voltage.md#chemicals-cells-and-batteries) that generate a difference of potential via a positive and negative electrode separated by an electrolytic solution. The electrolytes pull free electrons from one of the materials which creates a positive charge. The other material gains the free electrons creating a negative charge. +Cells are a [voltage source](/Electronics_and_Hardware/Analogue_circuits/Voltage.md) that generate a difference of potential via a positive and negative electrode separated by an electrolytic solution. The electrolytes pull free electrons from one of the materials which creates a positive charge. The other material gains the free electrons creating a negative charge. > A battery is a combination of two or more cells. diff --git a/_img/access-key-aws.png b/_img/access-key-aws.png new file mode 100644 index 0000000..d6ce20f Binary files /dev/null and b/_img/access-key-aws.png differ diff --git a/_img/sam-template-yaml.png b/_img/sam-template-yaml.png new file mode 100644 index 0000000..c394ea5 Binary files /dev/null and b/_img/sam-template-yaml.png differ