From 3027c4b5c0641f940af12b764c92de9688b2bb7a Mon Sep 17 00:00:00 2001 From: Mike Deck Date: Sun, 24 Jan 2016 22:39:29 -0600 Subject: [PATCH 001/115] Grammar, usage and formatting updates --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 61f3b57..103a812 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ # AWS Lambda Reference Architecture: Real-time File Processing -The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that utilizes [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. This simple architecture is described in this [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) and [blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/). This sample applicaton demonstrates a Markdown conversion application where Lambda is used to convert Markdown files to HTML and plain text. +The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. This simple architecture is described in this [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) and ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) on the AWS Compute Blog. This sample application demonstrates a Markdown conversion application where Lambda is used to convert Markdown files to HTML and plain text. ## Running the Example -The provided [AWS CloudFormation template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) can be used to launch a stack that demonstrates the Lambda file processing reference architecture. Detailed information about the this template can be found in the CloudFormation Template Details section below. +You can use the provided [AWS CloudFormation template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *CloudFormation Template Resources* section of this document. -**Important:** Because the AWS CloudFormation stack name is used in the name of the S3 buckets, that stack name must only contain lowercase letters. Please use lowercase letters when typing the stack name. The provided CloudFormation template retreives its Lambda code from a bucket in the us-east-1 region. To launch this sample in another region, please modify the template and upload the Lambda code to a bucket in that region. +**Important** Because the AWS CloudFormation stack name is used in the name of the Amazon Simple Storage Service (Amazon S3) buckets, that stack name must only contain lowercase letters. Use lowercase letters when typing the stack name. The provided CloudFormation template retrieves its Lambda code from a bucket in the us-east-1 region. To launch this sample in another region, please modify the template and upload the Lambda code to a bucket in that region. -Use the button below to launch the stack via the AWS Console. +Choose **Launch Stack** to launch the template in the us-east-1 region in your account: -[![Launch into Lambda ETL into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) Alternatively, you can use the following command to launch the stack using the AWS CLI. This assumes you have already [installed the AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). @@ -22,9 +22,9 @@ aws cloudformation create-stack \ --capabilities CAPABILITY_IAM ``` -## Testing +## Testing the Example -Once you have created the stack using the provided template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. The README.md file in this repository can be used as an example file. Once the file has been uploaded, you can see the resulting HTML and plain text files in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. +After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use this README.md file in the repository as an example file. After the file has been uploaded, you can see the resulting HTML and plain text files in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. @@ -33,50 +33,50 @@ BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-pro aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md ``` -After the file has been uploaded to the input bucket you can inspect the output bucket to see the rendered HTML and plain text output files created by the Lambda functions. +After the file has been uploaded to the input bucket, you can inspect the output bucket to see the rendered HTML and plain text output files created by the Lambda functions. You can also view the CloudWatch logs generated by the Lambda functions. -## Cleaning Up +## Cleaning Up the Example Resources -To tear down the deployed resources you must complete the following steps: +To remove all resources created by this example, do the following: 1. Delete all objects in the input and output buckets. 1. Delete the CloudFormation stack. -1. Delete the CloudWatch Log groups that contain the execution logs for the two processor functions. +1. Delete the CloudWatch log groups that contain the execution logs for the two processor functions. ## CloudFormation Template Resources ### Parameters -- *CodeBucket*: Name of the S3 bucket in the stack's region that contains the code for the two Lambda functions, ProcessorFunctionOne and ProcessorFunctionTwo. Defaults to the managed bucket 'awslambda-reference-architectures'. +- **CodeBucket** - Name of the S3 bucket in the stack's region that contains the code for the two Lambda functions, ProcessorFunctionOne and ProcessorFunctionTwo. Defaults to the managed bucket `awslambda-reference-architectures`. -- *CodeKeyPrefix*: The key prefix for the Lambda function code relative to `CodeBucket`. Defaults to 'file-processing'. +- **CodeKeyPrefix** - The key prefix for the Lambda function code relative to `CodeBucket`. Defaults to `file-processing`. ### Resources [The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) creates the following resources: -- *InputBucket*: An Amazon Simple Storage Service (Amazon S3) bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger both processing functions. +- **InputBucket** - An S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger both processing functions. -- *OutputBucket*: An Amazon S3 bucket that is populated by the processor functions with the transformed files. +- **OutputBucket** - An S3 bucket that is populated by the processor functions with the transformed files. -- *InputNotificationTopic*: An Amazon Simple Notification Service (Amazon SNS) topic used to invoke multiple Lambda functions in response to each object creation notification. +- **InputNotificationTopic** - An Amazon Simple Notification Service (Amazon SNS) topic used to invoke multiple Lambda functions in response to each object creation notification. -- *NotificationPolicy*: An Amazon SNS topic policy which permits `InputBucket` to call the `Publish` action on the topic. +- **NotificationPolicy** - An Amazon SNS topic policy which permits `InputBucket` to call the `Publish` action on the topic. -- *ProcessorFunctionOne*: An AWS Lambda function that converts Markdown files to HTML. The deployment package for this function must be located at s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip. +- **ProcessorFunctionOne** - An AWS Lambda function that converts Markdown files to HTML. The deployment package for this function must be located at `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`. -- *ProcessorFunctionTwo*: An AWS Lambda function that converts Markdown files to plain text. The deployment package for this function must be located at s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip. +- **ProcessorFunctionTwo** - An AWS Lambda function that converts Markdown files to plain text. The deployment package for this function must be located at `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`. -- *LambdaExecutionRole*: An AWS Identity and Access Management (IAM) role used by the two Lambda functions. +- **LambdaExecutionRole** - An AWS Identity and Access Management (IAM) role used by the two Lambda functions. -- *RolePolicy*: An IAM policy associated with `LambdaExecutionRole` that allows the functions to get objects from `InputBucket`, put object to `OutputBucket` and log to Amazon CloudWatch. +- **RolePolicy** - An IAM policy associated with **LambdaExecutionRole** that allows the functions to get objects from `InputBucket`, put object to `OutputBucket` and log to Amazon CloudWatch. -- *LambdaInvokePermissionOne*: A policy that enables Amazon SNS to invoke ProcessorFunctionOne based on notifications from InputNotificationTopic. +- **LambdaInvokePermissionOne** - A policy that enables Amazon SNS to invoke ProcessorFunctionOne based on notifications from InputNotificationTopic. -- *LambdaInvokePermissionTwo*: A policy that enables Amazon SNS to invoke ProcessorFunctionTwo based on notifications from InputNotificationTopic. +- **LambdaInvokePermissionTwo** - A policy that enables Amazon SNS to invoke ProcessorFunctionTwo based on notifications from InputNotificationTopic. ## License From 0b328b55fdd101a1e33e6dd6cd5d2305602813e5 Mon Sep 17 00:00:00 2001 From: aaronkao Date: Thu, 31 Mar 2016 10:31:48 -0700 Subject: [PATCH 002/115] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 103a812..61526ac 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AWS Lambda Reference Architecture: Real-time File Processing +# Serverless Reference Architecture: Real-time File Processing The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. This simple architecture is described in this [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) and ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) on the AWS Compute Blog. This sample application demonstrates a Markdown conversion application where Lambda is used to convert Markdown files to HTML and plain text. From 2832ee162d35310624530be84f1ac1a38f027ae5 Mon Sep 17 00:00:00 2001 From: Aaron Kao Date: Thu, 2 Jun 2016 21:58:05 -0700 Subject: [PATCH 003/115] Added translated READMEs --- README.md | 3 ++ README/README-CN.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-DE.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-ES.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-FR.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-IT.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-JP.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-KR.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-PT.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-RU.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ README/README-TW.md | 84 +++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 843 insertions(+) create mode 100644 README/README-CN.md create mode 100644 README/README-DE.md create mode 100644 README/README-ES.md create mode 100644 README/README-FR.md create mode 100644 README/README-IT.md create mode 100644 README/README-JP.md create mode 100644 README/README-KR.md create mode 100644 README/README-PT.md create mode 100644 README/README-RU.md create mode 100644 README/README-TW.md diff --git a/README.md b/README.md index 61526ac..a2dd6e7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # Serverless Reference Architecture: Real-time File Processing +README Languages: [DE](README/README-DE.md) | [ES](README/README-ES.md) | [FR](README/README-FR.md) | [IT](README/README-IT.md) | [JP](README/README-JP.md) | [KR](README/README-KR.md) | +[PT](README/README-PT.md) | [RU](README/README-RU.md) | +[CN](README/README-CN.md) | [TW](README/README-TW.md) The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. This simple architecture is described in this [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) and ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) on the AWS Compute Blog. This sample application demonstrates a Markdown conversion application where Lambda is used to convert Markdown files to HTML and plain text. diff --git a/README/README-CN.md b/README/README-CN.md new file mode 100644 index 0000000..23ac454 --- /dev/null +++ b/README/README-CN.md @@ -0,0 +1,84 @@ +# 无服务器参考架构:实时文件处理 + +实时文件处理参考架构是一个受事件驱动的通用并行数据处理架构,使用 [AWS Lambda](https://aws.amazon.com/lambda)。该架构非常适合需要某个对象的多种衍生数据的工作负载。此 [示意图](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) 以及 AWS 计算博客上的 ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) 中介绍了这个简单架构。这个示例应用程序演示了一个 Markdown 转换应用程序,该应用程序使用 Lambda 来将 Markdown 文件转换为 HTML 和纯文本。 + +## 运行示例 + +您可以使用提供的 [AWS CloudFormation 模板](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) 启动一个堆栈,该堆栈演示了 Lambda 文件处理参考架构。在本文档的 *CloudFormation 模板资源* 部分中提供了有关通过该模板创建的资源的详细信息。 + +**重要提示** 由于 AWS CloudFormation 堆栈名称在 Amazon Simple Storage Service (Amazon S3) 存储桶的名称中使用,该堆栈名称只能包含小写字母。在键入堆栈名称时,使用小写字母。提供的 CloudFormation 模板会从 us-east-1 区域的存储桶中检索其 Lambda 代码。要在另一个区域中启动此示例,请修改模板并将 Lambda 代码上传到该区域的存储桶中。 + + +选择 **Launch Stack** 以在您账户的 us-east-1 区域中启动模板: + +[![使用 CloudFormation 在北弗吉尼亚区域中启动 Lambda 文件处理](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +此外,您可以通过 AWS CLI 使用以下命令来启动堆栈。这假设您已 [安装 AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)。 + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## 测试示例 + +在您使用 CloudFormation 模板创建堆栈后,可以通过将 Markdown 文件上传到已在堆栈中创建的 InputBucket 来测试系统。您可以使用存储库中的此 README.md 文件作为示例文件。在上传该文件后,您可以在堆栈的输出存储桶中看到生成的 HTML 和纯文本文件。您还可以在 CloudWatch 日志中查看每个函数,以便了解函数执行的详细信息。 + +您可以使用下面的命令,将示例文件从提供的 S3 存储桶复制到您堆栈的输入存储桶中。 + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +在将该文件上传到输入存储桶后,您可以检查输出存储桶,查看 Lambda 函数创建的 HTML 和纯文本格式的输出文件。 + +您还可以查看 Lambda 函数生成的 CloudWatch 日志。 + +## 清理示例资源 + +要删除此示例创建的所有资源,请执行以下操作: + +1.删除输入和输出存储桶中的所有对象。 +1.删除 CloudFormation 堆栈。 +1.删除包含两个处理程序函数的执行日志的 CloudWatch 日志组。 + + + +## CloudFormation 模板资源 + +### 参数 +- **CodeBucket** - 堆栈区域中的 S3 存储桶的名称,该区域包含两个 Lambda 函数 ProcessorFunctionOne 和 ProcessorFunctionTwo 的代码。默认为托管存储桶 `awslambda-reference-architectures`。 + +- **CodeKeyPrefix** - 与 `CodeBucket` 相关的 Lambda 函数代码的键前缀。默认为 `file-processing`。 + +### 资源 +使用 [提供的模板](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +可创建以下资源: + +- **InputBucket** - 一个保存原始 Markdown 文件的 S3 存储桶。将文件上传到此存储桶时,将同时触发两个处理函数。 + +- **OutputBucket** - 一个 S3 存储桶,该存储桶由处理程序函数使用转换的文件填充。 + +- **InputNotificationTopic** - 一个 Amazon Simple Notification Service (Amazon SNS) 主题,该主题用于调用多个 Lambda 函数来响应各个对象创建通知。 + +- **NotificationPolicy** - 一个 Amazon SNS 主题策略,该策略允许 `InputBucket` 对主题调用 `Publish` 操作。 + +- **ProcessorFunctionOne** - 一个用于将 Markdown 文件转换为 HTML 的 AWS Lambda 函数。此函数的部署程序包必须位于 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip` 中。 + +- **ProcessorFunctionTwo** - 一个用于将 Markdown 文件转换为纯文本的 AWS Lambda 函数。此函数的部署程序包必须位于 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip` 中。 + +- **LambdaExecutionRole** - 一个 AWS Identity and Access Management (IAM) 角色,该角色由这两个 Lambda 函数使用。 + +- **RolePolicy** - 一个与 **LambdaExecutionRole** 关联的 IAM 策略,该策略允许函数从 `InputBucket` 获取对象,将对象置入 `OutputBucket`,并记录到 Amazon CloudWatch。 + +- **LambdaInvokePermissionOne** - 一个策略,该策略允许 Amazon SNS 根据来自 InputNotificationTopic 的通知调用 ProcessorFunctionOne。 + +- **LambdaInvokePermissionTwo** - 一个策略,该策略允许 Amazon SNS 根据来自 InputNotificationTopic 的通知调用 ProcessorFunctionTwo。 + + +## 许可证 + +此示例参考架构已获得 Apache 2.0 许可。 diff --git a/README/README-DE.md b/README/README-DE.md new file mode 100644 index 0000000..cc73f50 --- /dev/null +++ b/README/README-DE.md @@ -0,0 +1,84 @@ +# Serverlose Referenzarchitektur: Dateiverarbeitung in Echtzeit + +Die Referenzarchitektur zur Dateiverarbeitung in Echtzeit ist eine ereignisgesteuerte Architektur zur parallelen Datenverarbeitung für allgemeine Zwecke, die [AWS Lambda](https://aws.amazon.com/lambda) verwendet. Die Architektur eignet sich optimal für Arbeitslasten, die mehr als eine Datenableitung eines Objekts benötigen. Diese einfache Architektur wird in diesem [Diagramm](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) und [im Blogpost "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) auf dem AWS Compute-Blog beschrieben. Diese Beispielanwendung zeigt eine Markdown-Konvertierungsanwendung in Fällen, in denen Lambda zur Markdown-Dateikonvertierung von HTML in Nur-Text verwendet wird. + +## Ausführen der Beispielanwendung + +Mithilfe der bereitgestellten [AWS CloudFormation-Vorlage](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) können Sie einen Stapel starten, der die Referenzarchitektur für die Lambda-Dateiverarbeitung zeigt. Details über die mithilfe dieser Vorlage erstellen Ressourcen finden Sie im Abschnitt *Ressourcen der CloudFormation-Vorlage* in diesem Dokument. + +**Wichtig** Da der AWS CloudFormation-Stapelname im Namen des Amazon Simple Storage Service (Amazon S3)-Buckets verwendet wird, darf dieser Stapelname nur aus Kleinbuchstaben bestehen. Verwenden Sie daher Kleinbuchstaben für den Stapelnamen. Die bereitgestellte CloudFormation-Vorlage ruft den Lambda-Code aus einem Bucket für die Region "us-east-1" ab. Um dieses Beispiel in einer anderen Region zu starten, ändern Sie die Vorlage und laden Sie den Lambda-Code in einen Bucket für diese Region hoch. + + +Wählen Sie **Launch Stack**, um die Vorlage für die Region "us-east-1" in Ihrem Konto zu starten: + +[![Starten der Lambda-Dateiverarbeitung mit CloudFormation in Nord-Virginia](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +Alternativ können Sie den Stapel mit dem folgenden Befehl und mithilfe von AWS CLI starten. Dies setzt jedoch voraus, dass Sie [die AWS CLI bereits installiert haben](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## Testen der Beispielanwendung + +Nachdem Sie den Stapel mithilfe der CloudFormation-Vorlage erstellt haben, können Sie das System testen, indem Sie eine Markdown-Datei in den im Stapel erstellten "InputBucket" hochladen. Sie können die README.md-Datei im Repository als Beispieldatei verwenden. Nachdem die Datei hochgeladen wurde, können Sie die resultierenden HTML- und Nur-Text-Dateien im Ausgabe-Bucket des Stapels sehen. Sie können ebenfalls CloudWatch-Protokolle für die einzelnen Funktionen aufrufen, um Details zu ihrer Ausführung anzuzeigen. + +Mithilfe der folgenden Befehle können Sie eine Beispieldatei vom bereitgestellten S3-Bucket in den Empfangs-Bucket des Stapels kopieren. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +Nachdem die Datei in den Empfangs-Bucket hochgeladen wurde, können Sie den Ausgabe-Bucket überprüfen, um die gerenderten HTML- und Nur-Text-Ausgabedateien zu sehen, die von den Lambda-Funktionen erstellt wurden. + +Ebenfalls können Sie die von den Lamda-Funktionen generierten CloudWatch-Protokolle aufrufen. + +## Bereinigen der Beispielressourcen + +Gehen Sie wie folgt vor, um alle in diesem Beispiel erstellten Ressourcen zu entfernen: + +1. Löschen Sie alle Objekte in den Empfangs- und Ausgabe-Buckets. +1. Löschen Sie den CloudFormation-Stapel. +1. Löschen Sie die CloudWatch-Protokollgruppen, die die Ausführungsprotokolle der zwei Prozessorfunktionen enthalten. + + + +## Ressourcen der CloudFormation-Vorlage + +### Parameter +- **CodeBucket** – Name des S3-Buckets in der Region des Stapels, der den Code für die zwei Lambda-Funktionen, "ProcessorFunctionOne" und "ProcessorFunctionTwo", enthält. Verwendet standardmäßig den verwalteten Bucket "awslambda-reference-architectures". + +- **CodeKeyPrefix** – Schlüsselpräfix für den Lambda-Funktionscode, der sich auf "CodeBucket" bezieht. Verwendet standardmäßig "file-processing". + +### Ressourcen +[Die bereitgestellte Vorlage](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +erstellt die folgenden Ressourcen: + +- **InputBucket** – ein S3-Bucket, der die Markdown-Dateien mit den Rohdaten enthält. Das Hochladen einer Datei in diesen Bucket löst beide Verarbeitungsfunktionen aus. + +- **OutputBucket** – ein S3-Bucket, den die Verarbeitungsfunktionen mit den transformierten Dateien auffüllen. + +- **InputNotificationTopic** – ein Amazon Simple Notification Service (Amazon SNS)-Thema, das verwendet wird, um mehrere Lambda-Funktionen als Reaktion auf die einzelnen Objekterstellungsbenachrichtigungen aufzurufen. + +- **NotificationPolicy** – eine Amazon SNS-Themenrichtlinie, die gestattet, dass "InputBucket" die Aktion "Veröffentlichen" für das Thema aufruft. + +- **ProcessorFunctionOne** – eine AWS Lambda-Funktion, die Markdown-Dateien in HTML umwandelt. Das Bereitstellungspaket für diese Funktion muss sich unter "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip" befinden. + +- **ProcessorFunctionTwo** – eine AWS Lambda-Funktion, die Markdown-Dateien in Nur-Text umwandelt. Das Bereitstellungspaket für diese Funktion muss sich unter "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip" befinden. + +- **LambdaExecutionRole** – eine AWS Identity and Access Management (IAM)-Rolle, die von den zwei Lambda-Funktionen verwendet wird. + +- **RolePolicy** – eine mit **LambdaExecutionRole** verknüpfte IAM-Richtlinie, die ermöglicht, dass Funktionen Objekte aus "InputBucket" abrufen, Objekte in "OutputBucket" platzieren und Protokolle an Amazon CloudWatch ausgeben. + +- **LambdaInvokePermissionOne** – eine Richtlinie, die es Amazon SNS ermöglicht, "ProcessorFunctionOne" basierend auf Benachrichtigungen von "InputNotificationTopic" aufzurufen. + +- **LambdaInvokePermissionTwo** – eine Richtlinie, die es Amazon SNS ermöglicht, "ProcessorFunctionTwo" basierend auf Benachrichtigungen von "InputNotificationTopic" aufzurufen. + + +## Lizensierung + +Dieses Beispiel einer Referenzarchitektur ist unter Apache 2.0 lizensiert. diff --git a/README/README-ES.md b/README/README-ES.md new file mode 100644 index 0000000..80644a5 --- /dev/null +++ b/README/README-ES.md @@ -0,0 +1,84 @@ +# Arquitectura de referencia sin servidor: Procesamiento de archivos en tiempo real + +La arquitectura de referencia Procesamiento de archivos en tiempo real es una arquitectura de procesamiento de datos en paralelo controlada por eventos de propósito general que usa [AWS Lambda](https://aws.amazon.com/lambda). Esta arquitectura es ideal para cargas de trabajo que necesitan obtener más de un dato de un objeto. Esta arquitectura sencilla se describe en este [diagrama](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) y en la [entrada de blog "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) del blog AWS Compute. Esta aplicación de ejemplo muestra una aplicación de conversión de Markdown en la que se utiliza Lambda para convertir archivos Markdown en HTML y texto sin formato. + +## Ejecución del ejemplo + +Puede usar la [plantilla de AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) proporcionada para lanzar una pila que muestre la arquitectura de referencia de procesamiento de archivos con Lambda. En la sección *Recursos de la plantilla de CloudFormation* de este documento encontrará información detallada sobre los recursos creados por esta plantilla. + +**Importante** Como el nombre de la pila de AWS CloudFormation se usa en el nombre de los buckets de Amazon Simple Storage Service (Amazon S3), ese nombre de pila solo debe contener letras en minúscula. Use letras en minúscula cuando escriba el nombre de la pila. La plantilla de CloudFormation proporcionada recupera su código Lambda de un bucket de la región us-east-1. Para ejecutar este ejemplo en otra región, modifique la plantilla y cargue el código Lambda en un bucket de esa región. + + +Elija **Launch Stack** para lanzar la plantilla en la región us-east-1 de su cuenta: + +[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +También puede usar el siguiente comando para lanzar la pila mediante el CLI de AWS. Se presupone que ya ha [instalado AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## Probar el ejemplo + +Una vez creada la pila mediante la plantilla de CloudFormation, puede probar el sistema cargando un archivo Markdown en el InputBucket que se creó en la pila. Puede usar este archivo README.md del repositorio como archivo de ejemplo. Después de cargar el archivo, puede ver los archivos HTML y de texto sin formato resultantes en el bucket de salida de la pila. También puede ver los logs de CloudWatch de cada una de las funciones si desea obtener información detallada de la ejecución. + +Puede usar los siguientes comandos para copiar un archivo de ejemplo del bucket de S3 proporcionado en el bucket de entrada de la pila. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +Después de cargar el archivo en el bucket de entrada, puede examinar el bucket de salida para ver los archivos de salida HTML y de texto sin formato resultantes creados por las funciones Lambda. + +También puede ver los logs de CloudWatch generados por las funciones Lambda. + +## Borrado de los recursos del ejemplo + +Para eliminar todos los recursos creados por este ejemplo, proceda del modo siguiente: + +1. Elimine todos los objetos de los buckets de entrada y salida. +1. Elimine la pila de CloudFormation. +1. Elimine los grupos de logs de CloudWatch que contienen los logs de ejecución de las dos funciones de procesamiento. + + + +## Recursos de la plantilla de CloudFormation + +### Parámetros +- **CodeBucket**: nombre del bucket de S3 de la región de la pila que contiene el código de las dos funciones Lambda, ProcessorFunctionOne y ProcessorFunctionTwo. Está establecido de forma predeterminada en el bucket administrado `awslambda-reference-architectures`. + +- **CodeKeyPrefix**: el prefijo de clave del código de la función Lambda correspondiente a `CodeBucket`. De forma predeterminada es `file-processing`. + +### Recursos +[La plantilla proporcionada](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +crea los recursos siguientes: + +- **InputBucket**: un bucket de S3 que almacena los archivos Markdown sin formato. Al cargar un archivo en este bucket se desencadenarán ambas funciones de procesamiento. + +- **OutputBucket**: un bucket de S3 que rellenan las funciones de procesamiento con los archivos convertidos. + +- **InputNotificationTopic**: un tema de Amazon Simple Notification Service (Amazon SNS) usado para invocar a varias funciones Lambda en respuesta a cada notificación de creación de un objeto. + +- **NotificationPolicy**: una política de tema de Amazon SNS que permite a `InputBucket` llamar a la acción `Publish` en el tema. + +- **ProcessorFunctionOne**: una función de AWS Lambda que convierte archivos Markdown en HTML. El paquete de implementación de esta función debe estar ubicado en `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`. + +- **ProcessorFunctionTwo**: una función de AWS Lambda que convierte archivos Markdown en texto sin formato. El paquete de implementación de esta función debe estar ubicado en `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`. + +- **LambdaExecutionRole**: un rol de AWS Identity and Access Management (IAM) usado por las dos funciones Lambda. + +- **RolePolicy**: una política de IAM asociada a **LambdaExecutionRole** que permite que las funciones obtengan objetos de `InputBucket`, coloquen objetos en `OutputBucket` y creen un log en Amazon CloudWatch. + +- **LambdaInvokePermissionOne**: una política que permite a Amazon SNS invocar a ProcessorFunctionOne a partir de las notificaciones de InputNotificationTopic. + +- **LambdaInvokePermissionTwo**: una política que permite a Amazon SNS invocar a ProcessorFunctionTwo a partir de las notificaciones de InputNotificationTopic. + + +## Licencia + +Este ejemplo de arquitectura de referencia tiene licencia de Apache 2.0. diff --git a/README/README-FR.md b/README/README-FR.md new file mode 100644 index 0000000..fc6ec40 --- /dev/null +++ b/README/README-FR.md @@ -0,0 +1,84 @@ +# Architecture de référence sans serveur : Traitement de fichier en temps réel + +L'architecture de référence de traitement de fichier en temps réel est une architecture à visée générale de traitement de données en parallèle piloté par les événements qui utilise [AWS Lambda](https://aws.amazon.com/lambda). Cette architecture est idéale pour les charges de travail qui ont besoin de plusieurs dérivés de données d'un objet. Cette architecture simple est décrite dans ce [diagramme](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) et le [billet de blog « Fanout S3 Event Notifications to Multiple Endpoints »](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) sur le blog de calcul AWS. Cet exemple d'application illustre une application de conversion Markdown dans laquelle Lambda est utilisé pour convertir des fichiers Markdown en HTML et en texte brut. + +## Exécution de l'exemple + +Vous pouvez utiliser le [template AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) fourni pour lancer une stack qui illustre l'architecture de référence de traitement de fichier Lambda. Vous trouverez des détails sur les ressources créées par ce template dans la section *Ressources de template CloudFormation* de ce document. + +**Important** Comme le nom de stack AWS CloudFormation est utilisé dans le nom des buckets (compartiments) Amazon Simple Storage Service (Amazon S3), le nom de stack ne doit contenir que des lettres minuscules. Utilisez des lettres minuscules lorsque vous tapez le nom de stack. Le template CloudFormation fourni extrait son code Lambda d'un bucket dans la région us-east-1. Pour lancer cet exemple dans une autre région, veuillez modifier le template et charger le code Lambda dans un bucket de cette région. + + +Sélectionnez **Launch Stack** pour lancer le template dans la région us-east-1 dans votre compte : + +[![Lancement de Lambda de traitement de fichier en Virginie du Nord) avec CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +Sinon, vous pouvez utiliser la commande suivante pour lancer la stack à l'aide de l'interface de ligne de commande AWS CLI. Cela présume que vous avez déjà [installé AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## Test de l'exemple + +Une fois que vous avez créé la stack à l'aide du template CloudFormation, vous pouvez tester le système en chargeant un fichier Markdown dans le bucket (compartiment) InputBucket créé dans la stack. Vous pouvez utiliser ce fichier README.md dans le référentiel comme exemple de fichier. Une fois que le fichier a été chargé, vous pouvez afficher les fichiers HTML et en texte brut dans le bucket de sortie de votre stack. Vous pouvez également afficher les journaux CloudWatch pour chacune des fonctions pour voir les détails de leur exécution. + +Vous pouvez utiliser les commandes suivantes pour copier un exemple de fichier depuis le bucket (compartiment) S3 fourni vers le bucket d'entrée de votre stack. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +Une fois que le fichier a été chargé dans le bucket (compartiment) d'entrée, vous pouvez inspecter le bucket de sortie pour afficher les fichiers HTML et en texte brut de sortie créés par les fonctions Lambda. + +Vous pouvez également afficher les journaux CloudWatch générés par les fonctions Lambda. + +## Nettoyage des ressources de l'exemple + +Pour supprimer toutes les ressources créées par cet exemple, procédez comme suit : + +1. Supprimez tous les objets des buckets (compartiments) d'entrée et de sorties. +1. Supprimez la stack CloudFormation. +1. Supprimez les groupes de journaux qui contiennent les journaux d'exécution pour les deux fonctions de traitement. + + + +## Ressources du template CloudFormation + +### Paramètres +- **CodeBucket** - Nom du bucket (compartiment) S3 dans la région de la stack qui contient le code des deux fonctions Lambda, ProcessorFunctionOne et ProcessorFunctionTwo. Par défaut, il s'agit du bucket opéré par `awslambda-reference-architectures`. + +- **CodeKeyPrefix** - Le préfixe de clé pour le code de fonction Lambda relatif à `CodeBucket`. La valeur par défaut est `file-processing`. + +### Ressources +[Le template fourni](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +crée les ressources suivantes : + +- **InputBucket** - Un bucket (compartiment) S3 qui contient les fichiers Markdown bruts. Le chargement d'un fichier dans ce bucket déclenchera les deux fonctions de traitement. + +- **OutputBucket** - Un bucket S3 alimenté par les fonctions de traitement avec les fichiers transformés. + +- **InputNotificationTopic** - Une rubrique Amazon Simple Notification Service (Amazon SNS) utilisée pour appeler plusieurs fonctions Lambda en réponse à chaque notification de création d'objet. + +- **NotificationPolicy** - Une politique de rubrique Amazon SNS qui autorise `InputBucket` à appeler l'action `Publish` sur la rubrique. + +- **ProcessorFunctionOne** - Une fonction AWS Lambda qui convertit des fichiers Markdown en HTML. Le package de déploiement pour cette fonction doit être situé dans `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`. + +- **ProcessorFunctionTwo** - Une fonction AWS Lambda qui convertit des fichiers Markdown en texte brut. Le package de déploiement pour cette fonction doit être situé dans `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`. + +- **LambdaExecutionRole** - Un rôle AWS Identity and Access Management (IAM) utilisé par les deux fonctions Lambda. + +- **RolePolicy** - Une politique IAM associée à **LambdaExecutionRole** qui autorise les fonctions à extraire des objets de `InputBucket`, à les mettre dans `OutputBucket` et à se connecter à Amazon CloudWatch. + +- **LambdaInvokePermissionOne** - Une politique qui permet à Amazon SNS d'appeler ProcessorFunctionOne en fonction de notifications d'InputNotificationTopic. + +- **LambdaInvokePermissionTwo** - Une politique qui permet à Amazon SNS d'appeler ProcessorFunctionTwo en fonction de notifications d'InputNotificationTopic. + + +## Licence + +Cet exemple d'architecture de référence est fourni sous licence sous Apache 2.0. diff --git a/README/README-IT.md b/README/README-IT.md new file mode 100644 index 0000000..b529e19 --- /dev/null +++ b/README/README-IT.md @@ -0,0 +1,84 @@ +# Architettura di riferimento senza server: elaborazione dei file in tempo reale + +L'architettura di riferimento per l'elaborazione dei file in tempo reale è un'architettura di elaborazione dati parallela, basata sugli eventi e destinata a scopi generici che utilizza [AWS Lambda](https://aws.amazon.com/lambda). Tale architettura è ideale per i carichi di lavoro che necessitano di più di un derivato dati di un oggetto. Questa architettura semplice è descritta in questo [diagramma](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) e nel [post "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) del blog AWS Compute. L'architettura esempio mostra un'applicazione di conversione Markdown in cui Lambda viene utilizzato per convertire file Markdown in HTML e testo semplice. + +## Esecuzione dell'esempio + +È possibile utilizzare il [modello AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) fornito, per avviare uno stack che mostra l'architettura di riferimento per l'elaborazione dei file Lambda. I dettagli sulle risorse create da questo modello sono disponibili nella sezione *CloudFormation Template Resources* di questo documento. + +**Important** Poiché il nome dello stack di AWS CloudFormation è utilizzato nel nome dei bucket di Amazon Simple Storage Service (Amazon S3), il nome di tale stack deve contenere solo lettere minuscole. Utilizzare lettere minuscole durante la digitazione del nome dello stack. Il modello di CloudFormation fornito recupera il suo codice Lambda da un bucket nella regione Stati Uniti orientali 1. Per avviare questo esempio in un'altra regione, modificare il modello e caricare il codice Lambda in un bucket di quella regione. + + +Selezionare **Launch Stack** per avviare il modello nella regione Stati Uniti orientali 1 nell'account personale: + +[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +In alternativa, è possibile utilizzare il comando seguente per avviare lo stack tramite AWS CLI. Ciò presuppone l'[installazione di AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## Test dell'esempio + +Dopo aver creato lo stack tramite il modello di CloudFormation, è possibile eseguire il test del sistema caricando un file Markdown nell'InputBucket creato nello stack. È possibile utilizzare il file README.md nel repository come file di esempio. Una volta caricato il file, è possibile visualizzare i risultanti file HTML e di testo semplice nel bucket di output dello stack. È possibile visualizzare anche i registri di CloudWatch di ciascuna funzione per vedere i dettagli della loro esecuzione. + +È possibile utilizzare i comandi seguenti per copiare un file di esempio dal bucket S3 fornito nel bucket di input dello stack. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +Una volta caricato il file nel bucket di input, è possibile ispezionare il bucket di output per vedere la resa dei file di output HTML e di testo semplice creati dalle funzioni di Lambda. + +È possibile visualizzare anche i registri di CloudWatch generati dalle funzioni di Lambda. + +## Eliminazione delle risorse dell'esempio + +Per eliminare tutte le risorse create da questo esempio, effettuare i seguenti passaggi: + +1. Eliminare tutti gli oggetti nei bucket di input e output. +1. Eliminare lo stack di CloudFormation. +1. Eliminare i gruppi di registro di CloudWatch che contengono i registri di esecuzione per le due funzioni del processore. + + + +## Risorse dei modelli di CloudFormation + +### Parametri +- **CodeBucket**: nome del bucket S3 nella regione dello stack che contiene il codice per le due funzioni di Lambda, ProcessorFunctionOne e ProcessorFunctionTwo. Impostazioni predefinite sul bucket gestito "awslambda-reference-architectures". + +- **CodeKeyPrefix**: prefisso della chiave per il codice delle funzioni di Lambda relativo a "CodeBucket". Impostazioni predefinite su "file-processing". + +### Risorse +[Il modello fornito](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +crea le risorse seguenti: + +- **InputBucket**: bucket S3 che contiene i file Markdown non elaborati. Il caricamento di un file in questo bucket attiva entrambe le funzioni di elaborazione. + +- **OutputBucket**: bucket S3 popolato dalle funzioni del processore con i file trasformati. + +- **InputNotificationTopic**: argomento di Amazon Simple Notification Service (Amazon SNS) utilizzato per richiamare più funzioni di Lambda in risposta alla notifica della creazione di ciascun oggetto. + +- **NotificationPolicy**: policy dell'argomento di Amazon SNS che permette a "InputBucket" di richiedere l'azione "Publish" all'argomento. + +- **ProcessorFunctionOne**: funzione di AWS Lambda che converte i file Markdown in HTML. Il pacchetto di distribuzione per questa funzione deve essere collocato in "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip". + +- **ProcessorFunctionTwo**: funzione di AWS Lambda che converte i file Markdown in testo semplice. Il pacchetto di distribuzione per questa funzione deve essere collocato in "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip". + +- **LambdaExecutionRole**: ruolo di AWS Identity and Access Management (IAM) utilizzato dalle due funzioni di Lambda. + +- **RolePolicy**: policy di IAM associata a **LambdaExecutionRole** che consente alle funzioni di prendere oggetti da "InputBucket", posizionare oggetti in "OutputBucket" e accedere ad Amazon CloudWatch. + +- **LambdaInvokePermissionOne**: policy che consente ad Amazon SNS di richiamare ProcessorFunctionOne in base alle notifiche di InputNotificationTopic. + +- **LambdaInvokePermissionTwo**: policy che consente ad Amazon SNS di richiamare ProcessorFunctionTwo in base alle notifiche di InputNotificationTopic. + + +## Licenza + +La licenza di questo esempio di architettura di riferimento è fornita con Apache 2.0. diff --git a/README/README-JP.md b/README/README-JP.md new file mode 100644 index 0000000..90a140c --- /dev/null +++ b/README/README-JP.md @@ -0,0 +1,84 @@ +# サーバーレスリファレンスアーキテクチャ: リアルタイムのファイル処理 + +リアルタイムのファイル処理リファレンスアーキテクチャは、[AWS Lambda](https://aws.amazon.com/lambda) を使用する、汎用でイベント駆動型の並列データ処理アーキテクチャです。このアーキテクチャは、オブジェクトの複数のデータ派生物を必要とするワークロードに最適です。このシンプルなアーキテクチャについては、この [図](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) および AWS コンピューティングブログの ["Fanout S3 Event Notifications to Multiple Endpoints" ブログの投稿](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) で説明しています。このサンプルアプリケーションは、Markdown ファイルを HTML とプレーンテキストに変換するために Lambda を使用する Markdown 変換アプリケーションを示しています。 + +## 例の実行 + +用意された [AWS CloudFormation テンプレート](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) を使用して、Lambda ファイル処理のリファレンスアーキテクチャを示すスタックを起動できます。このテンプレートで作成されるリソースの詳細は、このドキュメントの「*CloudFormation テンプレートのリソース*」セクションで説明しています。 + +**重要** AWS CloudFormation スタック名が Amazon Simple Storage Service (Amazon S3) バケット名で使用されるため、そのスタック名には小文字のみを含める必要があります。スタック名を入力するときは小文字を使用してください。用意された CloudFormation テンプレートは、us-east-1 region リージョンのバケットからその Lambda コードを取得します。別のリージョンでこのサンプルを起動するには、テンプレートを変更し、そのリージョンのバケットに Lambda コードをアップロードします。 + + +[**Launch Stack**] を選択して、アカウントで us-east-1 リージョンにテンプレートを起動します。 + +[![CloudFormation を使用して Lambda ファイル処理を北バージニアに起動する](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +代わりに、次のコマンドで、AWS CLI を使用してスタックを起動できます。この例では、すでに [AWS CLI をインストール済み](http://docs.aws.amazon.com/cli/latest/userguide/installing.html) であることを前提としています。 + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## 例のテスト + +CloudFormation テンプレートを使用してスタックを作成したら、スタックで作成された InputBucket に Markdown ファイルをアップロードしてシステムをテストできます。レポジトリ内のこの README.md ファイルは、サンプルファイルとして使用できます。ファイルがアップロードされたら、生成される HTML とプレーンテキストファイルをスタックの出力バケットで表示できます。各関数の CloudWatch ログを表示して、実行の詳細を確認することもできます。 + +次のコマンドを使用して、用意された S3 バケットからスタックの入力バケットにサンプルファイルをコピーすることができます。 + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +ファイルが入力バケットにアップロードされたら、出力バケットを検査し、Lambda 関数によって作成され、レンダリングされた HTML およびプレーンテキスト出力ファイルを表示できます。 + +Lambda 関数によって生成された CloudWatch ログを表示することもできます。 + +## リソース例のクリーンアップ + +この例で作成されたすべてのリソースを削除するには、次の操作を行います。 + +1.入出力バケットのすべてのオブジェクトを削除します。 +1.CloudFormation スタックを削除します。 +1.2 つのプロセッサ関数の実行ログを含む CloudWatch ロググループを削除します。 + + + +## CloudFormation テンプレートのリソース + +### パラメーター +- **CodeBucket** - 2 つの Lambda 関数 (ProcessorFunctionOne および ProcessorFunctionTwo) のコードを含む、スタックのリージョンの S3 バケットの名前。デフォルトはマネージドバケット `awslambda-reference-architectures` です。 + +- **CodeKeyPrefix** - `CodeBucket` に相対的な Lambda 関数コードのキープレフィックス。デフォルトは `file-processing` です。 + +### リソース +[用意されたテンプレート](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + では以下のリソースが作成されます。 + +- **InputBucket** - Markdown の raw ファイルを保持する S3 バケット。このバケットにファイルをアップロードすると、両方の処理関数がトリガーされます。 + +- **OutputBucket** - プロセッサ関数によって、変換されたファイルが入力される S3 バケット。 + +- **InputNotificationTopic** - 各オブジェクトの作成通知に応答して複数の Lambda 関数を呼び出すために使用される Amazon Simple Notification Service (Amazon SNS) トピック。 + +- **NotificationPolicy** - トピックで `Publish` アクションを呼び出す `InputBucket` を許可する Amazon SNS トピックポリシー。 + +- **ProcessorFunctionOne** - Markdown ファイルを HTML に変換する AWS Lambda 関数。この関数のデプロイパッケージは `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip` にあります。 + +- **ProcessorFunctionTwo** - Markdown ファイルをプレーンテキストに変換する AWS Lambda 関数。この関数のデプロイパッケージは `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip` にあります。 + +- **LambdaExecutionRole** - 2 つの Lambda 関数によって使用される AWS Identity and Access Management (IAM) ロール。 + +- **RolePolicy** - 関数が `InputBucket` からオブジェクトを取得し、オブジェクトを `OutputBucket` に配置して、Amazon CloudWatch に記録できるようにする **LambdaExecutionRole** に関連付けられた IAM ポリシー。 + +- **LambdaInvokePermissionOne** - Amazon SNS が InputNotificationTopic からの通知に基づいて ProcessorFunctionOne を呼び出せるようにするポリシー。 + +- **LambdaInvokePermissionTwo** - Amazon SNS が InputNotificationTopic からの通知に基づいて ProcessorFunctionTwo を呼び出せるようにするポリシー。 + + +## ライセンス + +このリファレンスアーキテクチャサンプルは Apache 2.0 でライセンスされています。 diff --git a/README/README-KR.md b/README/README-KR.md new file mode 100644 index 0000000..c63e05c --- /dev/null +++ b/README/README-KR.md @@ -0,0 +1,84 @@ +# 서버 없는 레퍼런스 아키텍처: 실시간 파일 처리 + +실시간 파일 처리 레퍼런스 아키텍처는 이벤트 중심의 범용 병렬 데이터 처리 아키텍처이며 [AWS Lambda](https://aws.amazon.com/lambda)를 사용합니다. 이 아키텍처는 객체의 데이터 파생이 하나 이상 필요한 워크로드에 적합합니다. 이 간단한 아키텍처는 이 [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) 및 AWS Compute 블로그의 ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/)에 설명되어 있습니다. 이 단순한 애플리케이션은 Lambda를 사용하여 Markdown 파일을 HTML 및 일반 텍스트로 변환하는 Markdown 변환 애플리케이션을 보여줍니다. + +## 예제 실행 + +제공된 [AWS CloudFormation template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template)을 사용하여 Lambda 파일 처리 레퍼런스 아키텍처를 보여주는 스택을 시작할 수 있습니다. 이 템플릿을 통해 생성된 리소스에 대한 세부 정보는 본 문서의 *CloudFormation 템플릿 리소스* 단원에서 제공됩니다. + +**중요** AWS CloudFormation 스택 이름은 Amazon Simple Storage Service(Amazon S3) 버킷에서 사용되므로 이 스택 이름은 소문자만 포함해야 합니다. 스택 이름을 입력할 때는 소문자만 사용하십시오. 제공된 CloudFormation 템플릿은 us-east-1 리전의 버킷에서 Lambda 코드를 가져옵니다. 이 샘플을 다른 리전에서 시작하려면 템플릿을 수정하고 Lambda 코드를 해당 리전의 버킷에 업로드하십시오. + + +**Launch Stack**을 선택하여 계정의 us-east-1 리전에서 템플릿을 시작합니다. + +[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +그 밖에도 다음 명령을 사용하여 AWS CLI를 사용하여 스택을 시작할 수 있습니다. 이 단계를 실행하기 위해 이미 [installed the AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)를 완료했다고 가정합니다. + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## 예제 테스트 + +CloudFormation 템플릿을 사용하여 스택을 만든 후 Markdown 파일을 스택에 만들어진 InputBucket으로 업로드하여 시스템을 테스트할 수 있습니다. 리포지토리의 이 README.md 파일을 예제 파일로 사용할 수 있습니다. 파일을 업로드한 후 스택의 출력 버킷에서 결과 HTML과 일반 텍스트 파일을 확인할 수 있습니다. 각 함수의 CloudWatch 로그를 통해 각각의 실행 세부 정보를 볼 수도 있습니다. + +다음 명령을 사용하여 제공된 S3 버킷에서 샘플 파일을 스택의 입력 버킷으로 복사할 수 있습니다. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +파일을 입력 버킷으로 업로드한 후 출력 버킷을 검사하여 렌더링된 HTML과 Lambda 함수에 의해 생성된 일반 텍스트 출력 파일을 확인할 수 있습니다. + +Lambda 함수에 의해 생성된 CloudWatch 로그도 볼 수 있습니다. + +## 예제 리소스 정리 + +이 예제에서 생성된 모든 리소스를 제거하려면 다음을 수행합니다. + +1. 입력 및 출력 버킷에서 모든 객체를 삭제합니다. +1. CloudFormation 스택을 삭제합니다. +1. 두 프로세서 함수에 대한 실행 정보가 포함된 CloudWatch 로그 그룹을 삭제합니다. + + + +## CloudFormation 템플릿 리소스 + +### 파라미터 +- **CodeBucket** - 스택의 리전에 있는 S3 버킷의 이름이며 두 Lambda 함수(ProcessorFunctionOne 및 ProcessorFunctionTwo)에 대한 코드가 포함되어 있습니다. 관리형 버킷 `awslambda-reference-architectures`의 기본값입니다. + +- **CodeKeyPrefix** - `CodeBucket`과 관련된 Lambda 함수 코드의 키 접두사입니다. `file-processing`의 기본값입니다. + +### 리소스 +[The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template)은 +다음 리소스를 만듭니다. + +- **InputBucket** - 원시 Markdown 파일이 저장된 S3 버킷입니다. 이 버킷에 파일을 업로드하면 두 처리 함수가 트리거됩니다. + +- **OutputBucket** - 변형된 파일이 있는 프로세서 함수에 의해 채워지는 S3 버킷입니다. + +- **InputNotificationTopic** - 각 객체 생성 알림에 대한 응답으로 여러 Lambda 함수를 호출하는 Amazon Simple Notification Service(Amazon SNS) 주제입니다. + +- **NotificationPolicy** - `InputBucket`이 주제에 대한 `Publish` 작업을 호출할 수 있도록 허용하는 Amazon SNS 주제 정책입니다. + +- **ProcessorFunctionOne** - Markdown 파일을 HTML로 변환하는 AWS Lambda 함수입니다. 이 함수의 배포 패키지가 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`에 있어야 합니다. + +- **ProcessorFunctionTwo** - Markdown 파일을 일반 텍스트로 변환하는 AWS Lambda 함수입니다. 이 함수의 배포 패키지가 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`에 있어야 합니다. + +- **LambdaExecutionRole** - 두 Lambda 함수에서 사용하는 AWS Identity and Access Management(IAM) 역할입니다. + +- **RolePolicy** - **LambdaExecutionRole**과 연결된 IAM 정책이며 함수가 `InputBucket`으로부터 객체를 얻고, `OutputBucket`에 객체를 추가하고 Amazon CloudWatch에 로그를 기록할 수 있도록 허용합니다. + +- **LambdaInvokePermissionOne** - Amazon SNS가 InputNotificationTopic의 알림을 기반으로 ProcessorFunctionOne을 호출할 수 있게 하는 정책입니다. + +- **LambdaInvokePermissionTwo** - Amazon SNS가 InputNotificationTopic의 알림을 기반으로 ProcessorFunctionTwo를 호출할 수 있게 하는 정책입니다. + + +## 라이선스 + +이 레퍼런스 아키텍처 샘플은 Apache 2.0에서 라이선스가 부여되었습니다. diff --git a/README/README-PT.md b/README/README-PT.md new file mode 100644 index 0000000..e84ee94 --- /dev/null +++ b/README/README-PT.md @@ -0,0 +1,84 @@ +# Arquitetura de referência sem servidor: processamento de arquivos em tempo real + +A arquitetura de referência de Processamento de arquivos em tempo real é uma arquitetura de processamento de uso geral, com base em evento e com dados paralelos que usa [AWS Lambda](https://aws.amazon.com/lambda). Esta arquitetura é ideal para cargas de trabalho que precisam de mais de um derivado de dados de um objeto. Esta arquitetura simples está descrita neste [diagrama](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) e em [postagem do blog "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) no Blog de computação da AWS. Esta aplicação da amostra demonstra uma aplicação de conversão Markdown em que o Lambda é usado para converter arquivos Markdown para HTML e texto sem formatação. + +## Executando o exemplo + +Você pode usar o [modelo AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) fornecido para iniciar uma pilha que demonstra a arquitetura de referência de processamento de arquivo Lambda. Os detalhes sobre os recursos criados por este modelo são fornecidos na seção *Recursos do modelo do CloudFormation* deste documento. + +**Importante** Como o nome da pilha do AWS CloudFormation é usado no nome dos buckets Amazon Simple Storage Service (Amazon S3), o nome da pilha deve conter apenas letras minúsculas. Use letras minúsculas ao digitar o nome da pilha. O modelo do CloudFormation fornecido recupera seu código do Lambda de um bucket na região us-east-1. Para iniciar esta amostra em outra região, modifique o modelo e faça o upload do código do Lambda em um bucket nessa região. + + +Escolha **Launch Stack** para iniciar o modelo na região us-east-1 em sua conta: + +[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +Alternativamente, você pode usar o seguinte comando para iniciar a pilha usando o AWS CLI. Isso pressupõe que você já [instalou o AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## Testando o exemplo + +Depois de ter criado a pilha usando o modelo CloudFormation, você pode testar o sistema de upload de um arquivo Markdown para o InputBucket que foi criado na pilha. Você pode usar esse arquivo README.md no repositório como um arquivo de exemplo. Depois que o arquivo foi carregado, você pode ver os arquivos HTML e os textos sem formatação resultantes do bucket de saída da pilha. Você também pode visualizar os registros de CloudWatch para cada uma das funções, a fim de ver os detalhes da sua execução. + +Você pode usar os seguintes comandos para copiar um arquivo de amostra do bucket S3 fornecido dentro do bucket de entrada da sua pilha. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +Depois que o arquivo foi carregado para o bucket de entrada, você pode inspecionar o bucket de saída para ver os arquivos de saída HTML e texto sem formatação criados pelas funções lambda. + +Você também pode visualizar os registros do CloudWatch gerados pelas funções lambda. + +## Limpando os recursos de exemplo + +Para remover todos os recursos criados por este exemplo, faça o seguinte: + +1. Exclua todos os objetos nos buckets de entrada e saída. +1. Exclua a pilha do CloudFormation. +1. Exclua os grupos de registro do CloudWatch que contêm os registros de execução para as duas funções de processador. + + + +## Recursos do modelo do CloudFormation + +### Parâmetros +- **CodeBucket** - Nome do bucket S3 na região da pilha que contém o código para as duas funções Lambda, ProcessorFunctionOne e ProcessorFunctionTwo. O padrão para o bucket gerenciado é "awslambda-reference-architectures". + +- **CodeKeyPrefix** - O prefixo de chaves para o código da função Lambda em relação ao "CodeBucket". O padrão é "file-processing". + +### Recursos +[O modelo fornecido](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +cria os seguintes recursos: + +- **InputBucket** - Um bucket S3 que contém os arquivos Markdown não processados. Fazer upload de um arquivo para este bucket irá desencadear ambas as funções de processamento. + +- **OutputBucket** - Um bucket S3 que é preenchido pelas funções do processador com os arquivos transformados. + +- **InputNotificationTopic** - Um tópico Amazon Simple Notification Service (Amazon SNS) usado para chamar múltiplas funções Lambda em resposta a cada notificação de criação do objeto. + +- **NotificationPolicy** - Uma política de tópico Amazon SNS que permite "Input Bucket" para chamar a ação "Publish" sobre o tema. + +- **ProcessorFunctionOne** - Uma função Lambda AWS que converte os arquivos Markdown para HTML. O pacote de implementação para esta função deve estar localizado em "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip". + +- **ProcessorFunctionTwo** - Uma função Lambda da AWS que converte arquivos Markdown para texto sem formatação. O pacote de implementação para esta função deve estar localizado em "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip". + +- **LambdaExecutionRole** - Uma função AWS Identity and Access Management (IAM) usada pelas duas funções Lambda. + +- **RolePolicy** - Uma política de IAM associada ao **LambdaExecutionRole** que permite às funções obter objetos do "InputBucket", colocar objeto para "OutputBucket" e registro para o Amazon CloudWatch. + +- **LambdaInvokePermissionOne** - Uma política que permite ao Amazon SNS invocar ProcessorFunctionOne com base em notificações dos InputNotificationTopic. + +- **LambdaInvokePermissionTwo** - Uma política que permite ao Amazon SNS invocar ProcessorFunctionTwo com base nas notificações do InputNotificationTopic. + + +## Licença + +Este exemplo de arquitetura de referência é licenciado sob a licença do Apache 2.0. diff --git a/README/README-RU.md b/README/README-RU.md new file mode 100644 index 0000000..716621a --- /dev/null +++ b/README/README-RU.md @@ -0,0 +1,84 @@ +# Эталонная бессерверная архитектура: обработка файлов в реальном времени + +Эталонная архитектура для обработки файлов в реальном времени – это универсальная архитектура параллельной обработки данных на основе событий, которая использует [AWS Lambda](https://aws.amazon.com/lambda). Она идеально подходит для рабочих нагрузок, для которых требуется несколько производных данных объекта. Эта простая архитектура описана на этой [схеме](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) и в ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) в блоге AWS Compute. В примере приложения Lambda используется для преобразования файлов Markdown в HTML и текст. + +## Запуск примера + +Вы можете использовать предоставленный [шаблон AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template), чтобы запустить стек, демонстрирующий эталонную архитектуру для обработки файлов с помощью Lambda. Сведения о ресурсах, созданных этим шаблоном, представлены в разделе «Ресурсы шаблона CloudFormation» этого документа. + +**Важно!** Так как имя стека AWS CloudFormation используется в имени корзин Amazon Simple Storage Service (Amazon S3), оно должно содержать только строчные буквы. При вводе имени стека используйте только строчные буквы. Предоставленный шаблон CloudFormation извлекает код Lambda из корзины в регионе us-east-1. Чтобы запустить пример в другом регионе, измените шаблон и загрузите код Lambda в корзину в этом регионе. + + +Выберите **Launch Stack**, чтобы запустить шаблон в регионе us-east-1 в вашем аккаунте: + +[![Запуск обработки файлов Lambda в Северной Вирджинии с помощью CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +Или же выполните следующую команду, чтобы запустить стек с помощью AWS CLI. При этом предполагается, что вы уже [установили AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## Тестирование примера + +После создания стека с помощью шаблона CloudFormation вы можете проверить систему, загрузив файл Markdown в корзину InputBucket, созданную стеком. Для примера можно использовать файл README.md в этом репозитории. После передачи файла вы увидите полученные HTML-файл и текстовый файл в выходной корзине стека. Вы также можете просмотреть сведения о выполнении каждой функции в журналах CloudWatch. + +Выполните следующие команды, чтобы скопировать пример файла из корзины S3 во входную корзину вашего стека. + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +После передачи файла во входную корзину вы можете просмотреть выходную корзину, где расположены полученные HTML-файл и текстовый файл, созданные функциями Lambda. + +Вы также можете просмотреть журналы CloudWatch, созданные функциями Lambda. + +## Очистка ресурсов примера + +Чтобы удалить все ресурсы, созданные этим примером, выполните следующие действия. + +1. Удалите все объекты во входной и выходной корзинах. +1. Удалите стек CloudFormation. +1. Удалите группы журналов CloudWatch, содержащие журналы выполнения двух функций обработки. + + + +## Ресурсы шаблона CloudFormation + +### Параметры +- **CodeBucket** – имя корзины S3 в регионе стека, содержащей код для двух функций Lambda: ProcessorFunctionOne и ProcessorFunctionTwo. По умолчанию используется управляемая корзина awslambda-reference-architectures. + +- **CodeKeyPrefix** – префикс ключа для кода функции Lambda относительно CodeBucket. Значение по умолчанию: file-processing. + +### Ресурсы +[Предоставленный шаблон](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +создает следующие ресурсы. + +- **InputBucket** – это корзина S3, в которой размещены файлы Markdown. При загрузке файла в эту корзину вызываются обе функции обработки. + +- **OutputBucket** – в эту корзину S3 функции обработки добавляют преобразованные файлы. + +- **InputNotificationTopic** – тема Amazon Simple Notification Service (Amazon SNS), используемая для вызова нескольких функций Lambda в ответ на каждое оповещение о создании объекта. + +- **NotificationPolicy** – политика темы Amazon SNS, позволяющая InputBucket вызвать действие Publish для темы. + +- **ProcessorFunctionOne** – эта функция AWS Lambda преобразует файлы Markdown в HTML. Пакет развертывания для нее должен быть расположен по следующему пути: s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip. + +- **ProcessorFunctionTwo** – эта функция AWS Lambda преобразует файлы Markdown в текстовые файлы. Пакет развертывания для нее должен быть расположен по следующему пути: s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip. + +- **LambdaExecutionRole** – эту роль AWS Identity and Access Management (IAM) используют две функции Lambda. + +- **RolePolicy** – политика IAM, связанная с ролью LambdaExecutionRole, которая позволяет функциям извлекать объекты из корзины InputBucket, добавлять объекты в корзину OutputBucket и вести журнал в Amazon CloudWatch. + +- **LambdaInvokePermissionOne** – политика, позволяющая Amazon SNS вызывать функцию ProcessorFunctionOne в ответ на оповещения от InputNotificationTopic. + +- **LambdaInvokePermissionTwo** – политика, позволяющая Amazon SNS вызывать функцию ProcessorFunctionTwo в ответ на оповещения от InputNotificationTopic. + + +## Лицензия + +Данная эталонная архитектура лицензирована в соответствии с лицензией Apache 2.0. diff --git a/README/README-TW.md b/README/README-TW.md new file mode 100644 index 0000000..7627ab4 --- /dev/null +++ b/README/README-TW.md @@ -0,0 +1,84 @@ +# 無伺服器參考架構:即時檔案處理 + +即時檔案處理參考架構是利用 [AWS Lambda](https://aws.amazon.com/lambda) 運作的一般用途、事件驅動的平行資料處理架構。此架構很適合需要一個以上的物件資料衍生物的工作負載。在 [示意圖](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) 與 AWS 運算部落格的 ["Fanout S3 Event Notifications to Multiple Endpoints" 部落格文章](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) 中,有關於此簡易架構的說明。此簡易的應用程式示範 Markdown 轉換應用程式,Lambda 使用此應用程式將 Markdown 檔案轉換為 HTML 與純文字。 + +## 執行範例 + +您可以使用系統提供的 [AWS CloudFormation 範本](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) 啟動示範 Lambda 檔案處理參考架構的堆疊。本文件的 *CloudFormation 範本資源* 章節中有提供關於此範例所建立資源的詳細資訊。 + +**重要** 由於 AWS CloudFormation 堆疊名稱將使用於 Amazon Simple Storage Service (Amazon S3) 儲存貯體的名稱,因此堆疊名稱只能包含小寫字母。輸入堆疊名稱時,請使用小寫字母。系統提供的 CloudFormation 範本會從 us-east-1 區域的儲存貯體取回其 Lambda 程式碼。若要在其他區域啟動此範例,請修改範本並將 Lambda 程式碼上傳至該區域的儲存貯體。 + + +選擇 **Launch Stack** 以啟動您帳戶的 us-east-1 區域中的範本。 + +[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) + +或者,您可以使用以下命令啟動堆疊以使用 AWS CLI。這裡假設您已 [安裝 AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)。 + +```bash +aws cloudformation create-stack \ + --stack-name lambda-file-processing \ + --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ + --capabilities CAPABILITY_IAM +``` + +## 測試範例 + +在您使用 CloudFormation 範本建立堆疊之後,可藉由將 Markdown 檔案上傳至於堆疊中建立的 InputBucket 以測試系統。您可以使用儲存庫中的 README.md 檔案做為範例檔案。在檔案上傳之後,可在您的堆疊的輸出儲存貯體中看到結果的 HTML 與純文字檔案。您亦可檢視各項功能的 CloudWatch 記錄以查看其執行的詳細資訊。 + +您可以使用以下命令,將範例檔案從系統提供的 S3 儲存貯體複製至您的堆疊的輸入儲存貯體。 + +``` +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +``` + +在檔案上傳至輸入儲存貯體之後,您可以檢查輸出儲存貯體以查看經過 Lambda 功能處理的 HTML 與純文字輸出檔案。 + +您亦可檢視由 Lambda 功能產生的 CloudWatch 記錄。 + +## 清除應用範例資源 + +若要移除此範例建立的所有資源,請執行以下動作: + +1.刪除輸入與輸出儲存貯體中的所有物件。 +1.刪除 CloudFormation 堆疊。 +1.刪除包含兩個處理器功能的執行記錄的 CloudWatch 記錄群組。 + + + +## CloudFormation 範本資源 + +### 參數 +- **CodeBucket** - 包含兩個 Lambda 功能 ProcessorFunctionOne 與 ProcessorFunctionTwo 的堆疊區域中的 S3 儲存貯體的名稱。預設為受管儲存貯體「awslambda-reference-architectures」。 + +- **CodeKeyPrefix** - 與「CodeBucket」相關的 Lambda 功能程式碼的金鑰前綴。預設為「file-processing」。 + +### 資源 +[系統提供的範本](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +建立以下資源: + +- **InputBucket** - 存放原始 Markdown 檔案的 S3 儲存貯體。上傳檔案至此儲存貯體將觸發兩個處理功能。 + +- **OutputBucket** - 由處理器功能與轉換後的檔案所填入的 S3 儲存貯體。 + +- **InputNotificationTopic** - 用於呼叫多個 Lambda 功能以回應各個物件建立通知的 Amazon Simple Notification Service (Amazon SNS) 主題。 + +- **NotificationPolicy** - 允許「InputBucket」呼叫主題上的「Publish」動作的 Amazon SNS 主題政策。 + +- **ProcessorFunctionOne** - 可將 Markdown 檔案轉換為 HTML 的 AWS Lambda 功能。此功能的部署套件必須位於「s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip」。 + +- **ProcessorFunctionTwo** - 可將 Markdown 檔案轉換為純文字的 AWS Lambda 功能。此功能的部署套件必須位於「s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip」。 + +- **LambdaExecutionRole** - 由兩個 Lambda 功能使用的 AWS Identity and Access Management (IAM) 角色。 + +- **RolePolicy** - 與 **LambdaExecutionRole** 關聯的 IAM 政策,它允許功能從「InputBucket」取得物件、將物件放入「OutputBucket」,以及記錄至 Amazon CloudWatch。 + +- **LambdaInvokePermissionOne** - 可讓 Amazon SNS 依據來自 InputNotificationTopic 的通知以呼叫 ProcessorFunctionOne 的一個政策。 + +- **LambdaInvokePermissionTwo** - 可讓 Amazon SNS 依據來自 InputNotificationTopic 的通知以呼叫 ProcessorFunctionTwo 的一個政策。 + + +## 授權 + +此參考架構範例依據 Apache 2.0 授權。 From 16175bf5a7eea3b8b732302153d73ae9f3aba51a Mon Sep 17 00:00:00 2001 From: Kyle Somers Date: Fri, 19 May 2017 12:12:06 -0400 Subject: [PATCH 004/115] updated lambda runtime to 6.10 latest node version --- lambda_file_processing.template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lambda_file_processing.template b/lambda_file_processing.template index 62f07a0..dac389a 100644 --- a/lambda_file_processing.template +++ b/lambda_file_processing.template @@ -115,7 +115,7 @@ "Arn" ] }, - "Runtime": "nodejs", + "Runtime": "nodejs6.10", "MemorySize": 128, "Timeout": 3 } @@ -135,7 +135,7 @@ "Arn" ] }, - "Runtime": "nodejs", + "Runtime": "nodejs6.10", "MemorySize": 128, "Timeout": 3 } From ab27ff941df07812d937e758246df9b2a7e72cfc Mon Sep 17 00:00:00 2001 From: Ghosh Date: Thu, 29 Mar 2018 13:02:31 -0400 Subject: [PATCH 005/115] added SAM template --- .gitignore | 2 + README.md | 29 ++++ lambda_file_processing.yml | 131 ++++++++++++++++++ .../data-processor-1/data-processor-1.js | 0 src/data-processor-1/package-lock.json | 20 +++ .../data-processor-2/data-processor-2.js | 0 src/data-processor-2/package-lock.json | 20 +++ 7 files changed, 202 insertions(+) create mode 100644 .gitignore create mode 100644 lambda_file_processing.yml rename data-processor-1.js => src/data-processor-1/data-processor-1.js (100%) create mode 100644 src/data-processor-1/package-lock.json rename data-processor-2.js => src/data-processor-2/data-processor-2.js (100%) create mode 100644 src/data-processor-2/package-lock.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c424d5b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +post-sam.yml +**/node_modules diff --git a/README.md b/README.md index a2dd6e7..d1ea6bd 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,35 @@ aws cloudformation create-stack \ --capabilities CAPABILITY_IAM ``` +## Using SAM + +Install the dependencies for lambda + +```cd src/data-processor-1 && npm install async marked +cd src/data-processor-2 && npm install async marked +``` + +Run SAM package (equivalent to aws cloudformation package) + +``` +aws cloudformation package \ + --template-file lambda_file_processing.yml \ + --s3-bucket sam-stuff \ + --output-template-file post-sam.yml + +``` + + +Deploy the SAM template + +``` +aws cloudformation deploy \ + --template-file ./post-sam.yml \ + --stack-name lambda-file-refarch \ + --capabilities CAPABILITY_IAM +``` + + ## Testing the Example After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use this README.md file in the repository as an example file. After the file has been uploaded, you can see the resulting HTML and plain text files in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. diff --git a/lambda_file_processing.yml b/lambda_file_processing.yml new file mode 100644 index 0000000..ca656d7 --- /dev/null +++ b/lambda_file_processing.yml @@ -0,0 +1,131 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: 'AWS::Serverless-2016-10-31' +Description: CFN template to create architecture represented at https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/. +Resources: + ProcessorFunctionOne: + Type: 'AWS::Serverless::Function' + Properties: + Handler: data-processor-1.handler + Runtime: nodejs6.10 + CodeUri: ./src/data-processor-1/ + Role: !GetAtt [LambdaExecutionRole, Arn] + + ProcessorFunctionTwo: + Type: 'AWS::Serverless::Function' + Properties: + Handler: data-processor-2.handler + Runtime: nodejs6.10 + CodeUri: ./src/data-processor-2/ + Role: !GetAtt [LambdaExecutionRole, Arn] + + InputBucket: + Type: AWS::S3::Bucket + Properties: + BucketName: !Join ['-', [!Ref 'AWS::StackName', !Ref 'AWS::AccountId', files]] + NotificationConfiguration: + TopicConfigurations: + - Event: s3:ObjectCreated:* + Topic: !Ref 'InputNotificationTopic' + DependsOn: NotificationPolicy + OutputBucket: + Type: AWS::S3::Bucket + Properties: + BucketName: !Join ['-', [!Ref 'InputBucket', out]] + InputNotificationTopic: + Type: AWS::SNS::Topic + Properties: + Subscription: + - Endpoint: !GetAtt [ProcessorFunctionOne, Arn] + Protocol: lambda + - Endpoint: !GetAtt [ProcessorFunctionTwo, Arn] + Protocol: lambda + NotificationPolicy: + Type: AWS::SNS::TopicPolicy + Properties: + PolicyDocument: + Id: PushBucketNotificationPolicy + Version: '2012-10-17' + Statement: + - Sid: AllowBucketToPushNotificationEffect + Effect: Allow + Principal: + Service: s3.amazonaws.com + Action: sns:Publish + Resource: !Ref 'InputNotificationTopic' + Condition: + ArnLike: + aws:SourceArn: !Join ['', ['arn:aws:s3:*:*:', !Join ['-', [!Ref 'AWS::StackName', + !Ref 'AWS::AccountId', files]]]] + Topics: + - !Ref 'InputNotificationTopic' + LambdaExecutionRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: + - lambda.amazonaws.com + Action: + - sts:AssumeRole + Path: / + RolePolicy: + Type: AWS::IAM::Policy + Properties: + PolicyName: root + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - logs:CreateLogGroup + - logs:CreateLogStream + - logs:PutLogEvents + Resource: arn:aws:logs:*:*:* + - Effect: Allow + Action: + - s3:GetObject + Resource: !Join ['', ['arn:aws:s3:::', !Ref 'InputBucket', /*]] + - Effect: Allow + Action: + - s3:PutObject + Resource: !Join ['', ['arn:aws:s3:::', !Ref 'OutputBucket', /*]] + Roles: + - !Ref 'LambdaExecutionRole' + LambdaInvokePermissionOne: + Type: AWS::Lambda::Permission + Properties: + FunctionName: !GetAtt [ProcessorFunctionOne, Arn] + Action: lambda:InvokeFunction + Principal: sns.amazonaws.com + SourceArn: !Ref 'InputNotificationTopic' + LambdaInvokePermissionTwo: + Type: AWS::Lambda::Permission + Properties: + FunctionName: !GetAtt [ProcessorFunctionTwo, Arn] + Action: lambda:InvokeFunction + Principal: sns.amazonaws.com + SourceArn: !Ref 'InputNotificationTopic' +Outputs: + Bucket: + Description: Storage location for data which is to be processed by Lambda functions + Value: !Ref 'InputBucket' + BucketOut: + Description: Storage location for data which is to be processed by Lambda functions + Value: !Ref 'OutputBucket' + Topic: + Description: SNS topic to fanout S3 Event notifications to Lambda functions + Value: !Ref 'InputNotificationTopic' + ProcessorFnOne: + Description: Lambda function receiving SNS messages of S3 events + Value: !Ref 'ProcessorFunctionOne' + ProcessorFnTwo: + Description: Lambda function receiving SNS messages of S3 events + Value: !Ref 'ProcessorFunctionTwo' + + + + + \ No newline at end of file diff --git a/data-processor-1.js b/src/data-processor-1/data-processor-1.js similarity index 100% rename from data-processor-1.js rename to src/data-processor-1/data-processor-1.js diff --git a/src/data-processor-1/package-lock.json b/src/data-processor-1/package-lock.json new file mode 100644 index 0000000..881b236 --- /dev/null +++ b/src/data-processor-1/package-lock.json @@ -0,0 +1,20 @@ +{ + "lockfileVersion": 1, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + } + } +} diff --git a/data-processor-2.js b/src/data-processor-2/data-processor-2.js similarity index 100% rename from data-processor-2.js rename to src/data-processor-2/data-processor-2.js diff --git a/src/data-processor-2/package-lock.json b/src/data-processor-2/package-lock.json new file mode 100644 index 0000000..881b236 --- /dev/null +++ b/src/data-processor-2/package-lock.json @@ -0,0 +1,20 @@ +{ + "lockfileVersion": 1, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + } + } +} From c7333ba56db55eb9750ffe702380c2559dcf2644 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Thu, 29 Mar 2018 13:04:24 -0400 Subject: [PATCH 006/115] minor change to readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1ea6bd..9dea670 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,8 @@ aws cloudformation create-stack \ Install the dependencies for lambda -```cd src/data-processor-1 && npm install async marked +``` +cd src/data-processor-1 && npm install async marked cd src/data-processor-2 && npm install async marked ``` From 26b1bfabd6013ebf68bfb69c1210f4cd2b7b4986 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 11:05:54 -0400 Subject: [PATCH 007/115] adding pipeline --- pipeline/main.yaml | 68 ++++++++++++++ pipeline/pipeline-roles.yaml | 136 ++++++++++++++++++++++++++++ pipeline/pipeline.yaml | 170 +++++++++++++++++++++++++++++++++++ 3 files changed, 374 insertions(+) create mode 100644 pipeline/main.yaml create mode 100644 pipeline/pipeline-roles.yaml create mode 100644 pipeline/pipeline.yaml diff --git a/pipeline/main.yaml b/pipeline/main.yaml new file mode 100644 index 0000000..5786400 --- /dev/null +++ b/pipeline/main.yaml @@ -0,0 +1,68 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: "Main template for a CI/CD Serverless application." +Parameters: + AppName: + Type: String + Description: Name of the application + MinLength: "1" + MaxLength: "80" + AllowedPattern: "[A-Za-z0-9-]+" + ConstraintDescription: Malformed input parameter. AppName must only contain upper and lower case letters, numbers, and -. + SAMInputFile: + Type: String + Description: The filename for the SAM file. + Default: lambda_file_processing.yml + SAMOutputFile: + Type: String + Description: The filename for the output SAM file from the buildspec file. + Default: post-sam.yaml + CodeBuildImage: + Type: String + Default: "aws/codebuild/nodejs:4.3.2" + Description: Image used for CodeBuild project. + CICDS3BucketName: + Type: String + Default: "sam-stuff" + Description: S3 Bucket where the pipeline templates live + GitHubRepoName: + Type: String + Default: "" + Description: The GitHub repo name + GitHubRepoBranch: + Type: String + Description: The GitHub repo branch code pipelines should watch for changes on + Default: master + GitHubUser: + Type: String + Description: GitHub UserName. This username must have access to the GitHubToken. + GitHubToken: + NoEcho: true + Type: String + Description: "Secret. OAuthToken with access to Repo. Long string of characters and digits. Go to https://github.com/settings/tokens" +Resources: + ServerlessRoles: + Type: "AWS::CloudFormation::Stack" + Properties: + Parameters: + AppName: !Ref AppName + TemplateURL: + Fn::Sub: https://${CICDS3BucketName}.s3.amazonaws.com/templates/pipeline-roles.yaml + ServerlessPipeline: + Type: "AWS::CloudFormation::Stack" + DependsOn: [ServerlessRoles] + Properties: + Parameters: + AppName: !Ref AppName + SAMInputFile: !Ref SAMInputFile + SAMOutputFile: !Ref SAMOutputFile + CodeBuildImage: !Ref CodeBuildImage + GitHubRepoName: !Ref GitHubRepoName + GitHubRepoBranch: !Ref GitHubRepoBranch + GitHubUser: !Ref GitHubUser + GitHubToken: !Ref GitHubToken + CICDS3BucketName: !Ref CICDS3BucketName + CodePipelineRole: !GetAtt ServerlessRoles.Outputs.CodePipelineRole + CloudformationRole: !GetAtt ServerlessRoles.Outputs.CloudformationDeployRole + CodeBuildRole: !GetAtt ServerlessRoles.Outputs.CodeBuildRole + TemplateURL: + Fn::Sub: https://${CICDS3BucketName}.s3.amazonaws.com/templates/pipeline.yaml diff --git a/pipeline/pipeline-roles.yaml b/pipeline/pipeline-roles.yaml new file mode 100644 index 0000000..b9906db --- /dev/null +++ b/pipeline/pipeline-roles.yaml @@ -0,0 +1,136 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: Common resources for application deployed to Lambda +Parameters: + AppName: + Type: String + Description: Name of the application. + MinLength: "1" + MaxLength: "100" +Resources: + CodeBuildTrustRole: + Description: Creating service role in IAM for AWS CodeBuild + Type: AWS::IAM::Role + Properties: + RoleName: !Sub "${AppName}-codebuild-role" + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Principal: + Service: [codebuild.amazonaws.com] + Action: sts:AssumeRole + Path: / + CodeBuildRolePolicy: + Type: AWS::IAM::Policy + DependsOn: CodeBuildTrustRole + Description: Setting IAM policy for the service role for AWS CodeBuild + Properties: + PolicyName: CodeBuildRolePolicy + PolicyDocument: + Statement: + - Effect: Allow + Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] + Resource: ["*"] + - Effect: Allow + Resource: ["*"] + Action: ["s3:*"] + - Effect: Allow + Resource: ["*"] + Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] + - Effect: Allow + Resource: ["*"] + Action: ["sns:SendMessage"] + Roles: [!Ref CodeBuildTrustRole] + CloudFormationTrustRole: + Description: Creating service role in IAM for AWS CloudFormation + Type: AWS::IAM::Role + Properties: + RoleName: !Sub "${AppName}-cloudformation-role" + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Principal: + Service: [cloudformation.amazonaws.com] + Action: sts:AssumeRole + Path: / + CloudFormationRolePolicy: + Type: AWS::IAM::Policy + DependsOn: CloudFormationTrustRole + Description: Setting IAM policy for the service role for AWS CloudFormation + Properties: + PolicyName: CloudFormationRolePolicy + PolicyDocument: + Statement: + - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] + Resource: "*" + Effect: Allow + - Action: ["s3:PutObject"] + Resource: ["arn:aws:s3:::codepipeline*"] + Effect: Allow + - Action: ["lambda:*"] + Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" + Effect: Allow + - Action: ["apigateway:*"] + Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Effect: Allow + - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Effect: Allow + - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy"] + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Effect: Allow + - Action: ["iam:PassRole"] + Resource: ["*"] + Effect: Allow + - Action: ["cloudformation:CreateChangeSet"] + Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" + Effect: Allow + - Action: ["cloudformation:CreateChangeSet"] + Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Include" + Effect: Allow + Roles: [!Ref CloudFormationTrustRole] + CodePipelineTrustRole: + Description: Creating service role in IAM for AWS CodePipeline + Type: AWS::IAM::Role + Properties: + RoleName: !Sub "${AppName}-codepipeline-role" + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Principal: + Service: [codepipeline.amazonaws.com] + Action: sts:AssumeRole + Path: / + CodePipelineRolePolicy: + Type: AWS::IAM::Policy + DependsOn: CodePipelineTrustRole + Description: Setting IAM policy for the service role for AWS CodePipeline + Properties: + PolicyName: CodePipelineRolePolicy + PolicyDocument: + Statement: + - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] + Resource: "*" + Effect: Allow + - Action: ["s3:PutObject"] + Resource: ["arn:aws:s3:::codepipeline*"] + Effect: Allow + - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] + Resource: "*" + Effect: Allow + - Action: ["cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "iam:PassRole"] + Resource: "*" + Effect: Allow + - Action: ["lambda:InvokeFunction", "lambda:ListFunctions"] + Resource: "*" + Effect: Allow + Roles: [!Ref CodePipelineTrustRole] +Outputs: + CodePipelineRole: + Description: "Role for code pipeline" + Value: !GetAtt CodePipelineTrustRole.Arn + CloudformationDeployRole: + Description: "Role for cloudformation to deploy with." + Value: !GetAtt CloudFormationTrustRole.Arn + CodeBuildRole: + Description: "Role for code build to build" + Value: !GetAtt CodeBuildTrustRole.Arn diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml new file mode 100644 index 0000000..ea98632 --- /dev/null +++ b/pipeline/pipeline.yaml @@ -0,0 +1,170 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: "Template for full CI/CD serverless applications." +Parameters: + AppName: + Type: String + Description: Name of the application. + SAMInputFile: + Type: String + Description: The filename for the SAM file. + SAMOutputFile: + Type: String + Description: The filename for the output SAM file from the buildspec file + CodeBuildImage: + Type: String + Default: "aws/codebuild/nodejs:4.3.2" + Description: Image used for CodeBuild project. + GitHubRepoName: + Type: String + Description: The GitHub repo name + GitHubRepoBranch: + Type: String + Description: The GitHub repo branch code pipelines should watch for changes on + Default: master + GitHubUser: + Type: String + Description: GitHub UserName. This username must have access to the GitHubToken. + GitHubToken: + NoEcho: true + Type: String + Description: "Secret. OAuthToken with access to Repo. Long string of characters and digits. Go to https://github.com/settings/tokens" + CodePipelineRole: + Type: String + Description: Role the pipeline will use + CloudformationRole: + Type: String + Description: Role for cloudformation + CodeBuildRole: + Type: String + Description: Role for code build + CICDS3BucketName: + Type: String + Description: S3 Bucket where the pipeline templates live +Resources: + CodeBuildProject: + DependsOn: [S3Bucket] + Description: Creating AWS CodeBuild project + Type: AWS::CodeBuild::Project + Properties: + Artifacts: + Type: CODEPIPELINE + Description: !Sub "Building stage for ${AppName}." + Environment: + ComputeType: BUILD_GENERAL1_SMALL + EnvironmentVariables: + - Name: S3_BUCKET + Value: !Ref S3Bucket + - Name: INPUT_FILE + Value: !Ref SAMInputFile + Image: !Ref CodeBuildImage + Type: LINUX_CONTAINER + Name: !Sub "${AppName}-build" + ServiceRole: !Ref CodeBuildRole + Source: + Type: CODEPIPELINE + Tags: + - Key: app-name + Value: !Ref AppName + TimeoutInMinutes: 5 + S3Bucket: + Description: Creating Amazon S3 bucket for AWS CodePipeline artifacts + Type: AWS::S3::Bucket + DeletionPolicy: Retain + Properties: + BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}" + VersioningConfiguration: + Status: Enabled + S3ArtifactBucketPolicy: + DependsOn: [S3Bucket] + Description: Setting Amazon S3 bucket policy for AWS CodePipeline access + Type: AWS::S3::BucketPolicy + Properties: + Bucket: !Ref S3Bucket + PolicyDocument: + Version: "2012-10-17" + Id: SSEAndSSLPolicy + Statement: + - Sid: DenyInsecureConnections + Effect: Deny + Principal: "*" + Action: s3:* + Resource: !Sub "arn:aws:s3:::${S3Bucket}/*" + Condition: + Bool: + aws:SecureTransport: false + ProjectPipeline: + DependsOn: [S3Bucket, CodeBuildProject] + Description: Creating a deployment pipeline for your project in AWS CodePipeline + Type: AWS::CodePipeline::Pipeline + Properties: + Name: !Sub "${AppName}-pipeline" + RoleArn: !Ref CodePipelineRole + Stages: + - Name: Source + Actions: + - Name: source + InputArtifacts: [] + ActionTypeId: + Version: "1" + Category: Source + Owner: ThirdParty + Provider: GitHub + OutputArtifacts: + - Name: !Sub "${AppName}-SourceArtifact" + Configuration: + Repo: !Ref GitHubRepoName + Branch: !Ref GitHubRepoBranch + OAuthToken: !Ref GitHubToken + Owner: !Ref GitHubUser + RunOrder: 1 + - Name: Build + Actions: + - Name: build-from-source + InputArtifacts: + - Name: !Sub "${AppName}-SourceArtifact" + ActionTypeId: + Category: Build + Owner: AWS + Version: "1" + Provider: CodeBuild + OutputArtifacts: + - Name: !Sub "${AppName}-BuildArtifact" + Configuration: + ProjectName: !Sub "${AppName}-build" + RunOrder: 1 + - Name: Deploy + Actions: + - Name: create-changeset + InputArtifacts: + - Name: !Sub "${AppName}-BuildArtifact" + ActionTypeId: + Category: Deploy + Owner: AWS + Version: "1" + Provider: CloudFormation + OutputArtifacts: [] + Configuration: + StackName: !Sub "${AppName}-serverless-stack" + ActionMode: CHANGE_SET_REPLACE + RoleArn: !Ref CloudformationRole + ChangeSetName: pipeline-changeset + Capabilities: CAPABILITY_NAMED_IAM + TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" + ParameterOverrides: !Sub '"CICDS3BucketName":"${CICDS3BucketName}"}' + RunOrder: 1 + - Name: execute-changeset + InputArtifacts: [] + ActionTypeId: + Category: Deploy + Owner: AWS + Version: "1" + Provider: CloudFormation + OutputArtifacts: [] + Configuration: + StackName: !Sub "${AppName}-serverless-stack" + ActionMode: CHANGE_SET_EXECUTE + ChangeSetName: pipeline-changeset + RunOrder: 2 + ArtifactStore: + Type: S3 + Location: !Ref S3Bucket From 52eb822f21eb95fec054911b9f4961407f4868a4 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 11:35:46 -0400 Subject: [PATCH 008/115] changing buildspec.yml location --- src/buildspec.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/buildspec.yml diff --git a/src/buildspec.yml b/src/buildspec.yml new file mode 100644 index 0000000..e5d7de7 --- /dev/null +++ b/src/buildspec.yml @@ -0,0 +1,12 @@ +version: 0.0 +containers: + LambdaFunctions: + phases: + during_build: + commands: + - cd data-processor-1 && pwd && npm install + - cd data-processor-2 && pwd && npm install + - aws cloudformation package --template $INPUT_FILE --s3-bucket $S3_BUCKET --output-template post-sam.yaml + artifacts: + files: + - post-sam.yaml From e0ea2bcc1c6a0dfe0c170361de332b3cd54b6697 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 11:49:42 -0400 Subject: [PATCH 009/115] rollback previous change --- src/buildspec.yml => buildspec.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/buildspec.yml => buildspec.yml (100%) diff --git a/src/buildspec.yml b/buildspec.yml similarity index 100% rename from src/buildspec.yml rename to buildspec.yml From 5da0a694f51e96fe4c36c136b78e37dd2f3f2fcb Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 11:54:48 -0400 Subject: [PATCH 010/115] fix buildspec --- buildspec.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildspec.yml b/buildspec.yml index e5d7de7..49d349b 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -4,8 +4,8 @@ containers: phases: during_build: commands: - - cd data-processor-1 && pwd && npm install - - cd data-processor-2 && pwd && npm install + - cd src/data-processor-1 && pwd && npm install + - cd src/data-processor-2 && pwd && npm install - aws cloudformation package --template $INPUT_FILE --s3-bucket $S3_BUCKET --output-template post-sam.yaml artifacts: files: From 272f2ab9103c9895854084afd82edd8b3ac8925f Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 11:57:52 -0400 Subject: [PATCH 011/115] added package.json --- src/data-processor-2/package-lock.json | 20 ------------------- .../package.json} | 0 2 files changed, 20 deletions(-) delete mode 100644 src/data-processor-2/package-lock.json rename src/{data-processor-1/package-lock.json => data-processor-2/package.json} (100%) diff --git a/src/data-processor-2/package-lock.json b/src/data-processor-2/package-lock.json deleted file mode 100644 index 881b236..0000000 --- a/src/data-processor-2/package-lock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "lockfileVersion": 1, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==" - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" - }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" - } - } -} diff --git a/src/data-processor-1/package-lock.json b/src/data-processor-2/package.json similarity index 100% rename from src/data-processor-1/package-lock.json rename to src/data-processor-2/package.json From 4bc7d56c334ce94446d30f2f0b73b4c354335892 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 15:40:04 -0400 Subject: [PATCH 012/115] removed dependency on local package.json --- buildspec.yml | 4 ++-- src/data-processor-2/package.json | 20 -------------------- 2 files changed, 2 insertions(+), 22 deletions(-) delete mode 100644 src/data-processor-2/package.json diff --git a/buildspec.yml b/buildspec.yml index 49d349b..587bc5f 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -4,8 +4,8 @@ containers: phases: during_build: commands: - - cd src/data-processor-1 && pwd && npm install - - cd src/data-processor-2 && pwd && npm install + - cd src/data-processor-1 && pwd && npm install async marked + - cd src/data-processor-2 && pwd && npm install async marked - aws cloudformation package --template $INPUT_FILE --s3-bucket $S3_BUCKET --output-template post-sam.yaml artifacts: files: diff --git a/src/data-processor-2/package.json b/src/data-processor-2/package.json deleted file mode 100644 index 881b236..0000000 --- a/src/data-processor-2/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "lockfileVersion": 1, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==" - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" - }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" - } - } -} From bad24535a3b6bce30a20eb0aecc70d84b38a6a90 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 15:53:16 -0400 Subject: [PATCH 013/115] fixed an error in template --- pipeline/pipeline.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index ea98632..3813ba4 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -150,7 +150,7 @@ Resources: ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" - ParameterOverrides: !Sub '"CICDS3BucketName":"${CICDS3BucketName}"}' + ParameterOverrides: !Sub '{"CICDS3BucketName":"${CICDS3BucketName}"}' RunOrder: 1 - Name: execute-changeset InputArtifacts: [] From 5f49d8c535a626999e1714b61b502b6c55880714 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 15:59:35 -0400 Subject: [PATCH 014/115] added a file list to observe if the npm deps are being downloaded in correct dir --- buildspec.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildspec.yml b/buildspec.yml index 587bc5f..d30b0d2 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -5,7 +5,7 @@ containers: during_build: commands: - cd src/data-processor-1 && pwd && npm install async marked - - cd src/data-processor-2 && pwd && npm install async marked + - cd src/data-processor-2 && npm install async marked && ls - aws cloudformation package --template $INPUT_FILE --s3-bucket $S3_BUCKET --output-template post-sam.yaml artifacts: files: From dfd274c732782d17fa60bd22f1792d8357f09e5e Mon Sep 17 00:00:00 2001 From: Ghosh Date: Fri, 30 Mar 2018 16:20:15 -0400 Subject: [PATCH 015/115] fixing parameter overrides --- pipeline/pipeline.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 3813ba4..f9e324a 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -150,7 +150,10 @@ Resources: ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" - ParameterOverrides: !Sub '{"CICDS3BucketName":"${CICDS3BucketName}"}' + ParameterOverrides: !Sub | + { + "CICDS3BucketName": "${CICDS3BucketName}" + } RunOrder: 1 - Name: execute-changeset InputArtifacts: [] From 8a7478ac654cc4e073a8951d1fde5aaf7d5b825b Mon Sep 17 00:00:00 2001 From: Ghosh Date: Tue, 17 Apr 2018 16:26:06 -0400 Subject: [PATCH 016/115] fixing param overrides --- pipeline/pipeline.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index f9e324a..826e9c0 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -150,10 +150,7 @@ Resources: ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" - ParameterOverrides: !Sub | - { - "CICDS3BucketName": "${CICDS3BucketName}" - } + #ParameterOverrides: !Sub '{"CICDS3BucketName":"${CICDS3BucketName}"}' RunOrder: 1 - Name: execute-changeset InputArtifacts: [] From 2ba2d74ed1eb2fc25de6a782e7a9daea4a294e0b Mon Sep 17 00:00:00 2001 From: Ghosh Date: Tue, 17 Apr 2018 17:01:45 -0400 Subject: [PATCH 017/115] added sns permission to cfn role --- pipeline/pipeline-roles.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pipeline/pipeline-roles.yaml b/pipeline/pipeline-roles.yaml index b9906db..2451f24 100644 --- a/pipeline/pipeline-roles.yaml +++ b/pipeline/pipeline-roles.yaml @@ -72,6 +72,9 @@ Resources: - Action: ["apigateway:*"] Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" Effect: Allow + - Action: ["sns:*"] + Resource: !Sub "arn:aws:sns:${AWS::Region}::*" + Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow From 56ea763d4061a4f02cbeccd8cc054a4d35e53c66 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Tue, 17 Apr 2018 17:18:06 -0400 Subject: [PATCH 018/115] Yaml error --- pipeline/pipeline-roles.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/pipeline-roles.yaml b/pipeline/pipeline-roles.yaml index 2451f24..45801bb 100644 --- a/pipeline/pipeline-roles.yaml +++ b/pipeline/pipeline-roles.yaml @@ -72,7 +72,7 @@ Resources: - Action: ["apigateway:*"] Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" Effect: Allow - - Action: ["sns:*"] + - Action: ["sns:*"] Resource: !Sub "arn:aws:sns:${AWS::Region}::*" Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] From f20368be9ecb518c4ef460c79f023b77214090e0 Mon Sep 17 00:00:00 2001 From: Ghosh Date: Tue, 24 Apr 2018 19:29:43 -0400 Subject: [PATCH 019/115] fixed sns permissions --- pipeline/pipeline-roles.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/pipeline-roles.yaml b/pipeline/pipeline-roles.yaml index 45801bb..5d2e759 100644 --- a/pipeline/pipeline-roles.yaml +++ b/pipeline/pipeline-roles.yaml @@ -73,7 +73,7 @@ Resources: Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" Effect: Allow - Action: ["sns:*"] - Resource: !Sub "arn:aws:sns:${AWS::Region}::*" + Resource: !Sub "arn:aws:sns:${AWS::Region}:*:*" Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" From d516463b214e318a0b7aa5ae4733d02cc181271b Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Fri, 27 Sep 2019 17:35:27 -0400 Subject: [PATCH 020/115] Initial version of updated architecture. * Triggering CloudWatch Events from CloudTrail logs --- .gitignore | 1 + file_processing.yml | 175 ++++++++++++++++++++++++++++++++ src/conversion/conversion.py | 7 ++ src/conversion/requirements.txt | 1 + src/sentiment/sentiment.py | 5 + 5 files changed, 189 insertions(+) create mode 100644 file_processing.yml create mode 100644 src/conversion/conversion.py create mode 100644 src/conversion/requirements.txt create mode 100644 src/sentiment/sentiment.py diff --git a/.gitignore b/.gitignore index c424d5b..ee50dd7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +packaged-template.yml post-sam.yml **/node_modules diff --git a/file_processing.yml b/file_processing.yml new file mode 100644 index 0000000..f550577 --- /dev/null +++ b/file_processing.yml @@ -0,0 +1,175 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: 'AWS::Serverless-2016-10-31' +Description: SAM template to create file processing architecture represented at TBD. + +Resources: + InputBucket: + Type: AWS::S3::Bucket + + CloudTrailBucket: + Type: AWS::S3::Bucket + + InputBucketTrail: + DependsOn: CloudTrailBucketPolicy + Type: AWS::CloudTrail::Trail + Properties: + S3BucketName: !Ref CloudTrailBucket + EventSelectors: + - DataResources: + - Type: 'AWS::S3::Object' + Values: + - !Sub |- + arn:aws:s3:::${InputBucket}/ + IncludeManagementEvents: false + ReadWriteType: WriteOnly + IsLogging: true + + CloudTrailBucketPolicy: + Type: AWS::S3::BucketPolicy + DependsOn: CloudTrailBucket + Properties: + Bucket: !Ref CloudTrailBucket + PolicyDocument: + Version: "2012-10-17" + Statement: + - + Sid: "AWSCloudTrailAclCheck" + Effect: "Allow" + Principal: + Service: "cloudtrail.amazonaws.com" + Action: "s3:GetBucketAcl" + Resource: !Sub |- + arn:aws:s3:::${CloudTrailBucket} + - + Sid: "AWSCloudTrailWrite" + Effect: "Allow" + Principal: + Service: "cloudtrail.amazonaws.com" + Action: "s3:PutObject" + Resource: + !Sub |- + arn:aws:s3:::${CloudTrailBucket}/AWSLogs/${AWS::AccountId}/* + Condition: + StringEquals: + s3:x-amz-acl: "bucket-owner-full-control" + + FileProcessingQueuePolicy: + # https://forums.aws.amazon.com/message.jspa?messageID=743094 + Type: AWS::SQS::QueuePolicy + Properties: + Queues: + - !Ref ConversionQueue + - !Ref SentimentQueue + PolicyDocument: + Version: '2012-10-17' + Statement: + - + Effect: Allow + Principal: + AWS: '*' + Action: + - sqs:SendMessage + Resource: !GetAtt ConversionQueue.Arn + Condition: + ArnEquals: + aws:SourceArn: !GetAtt FileProcessingRule.Arn + - + Effect: Allow + Principal: + AWS: '*' + Action: + - sqs:SendMessage + Resource: !GetAtt SentimentQueue.Arn + Condition: + ArnEquals: + aws:SourceArn: !GetAtt FileProcessingRule.Arn + + FileProcessingRule: + Type: AWS::Events::Rule + DependsOn: + - ConversionQueue + - SentimentQueue + Properties: + Description: Rule to capture S3 PutObject events + EventPattern: + source: + - aws.s3 + detail-type: + - AWS API Call via CloudTrail + detail: + eventSource: + - s3.amazonaws.com + eventName: + - PutObject + requestParameters: + bucketName: + - !Ref InputBucket + State: 'ENABLED' + Targets: + - Arn: !GetAtt ConversionQueue.Arn + Id: Convert + - Arn: !GetAtt SentimentQueue.Arn + Id: Sentiment + + ConversionQueue: + Type: AWS::SQS::Queue + DependsOn: ConversionDlq + Properties: + VisibilityTimeout: 300 + RedrivePolicy: + deadLetterTargetArn: !GetAtt ConversionDlq.Arn + maxReceiveCount: 5 + + ConversionDlq: + Type: AWS::SQS::Queue + Properties: + VisibilityTimeout: 300 + + ConversionFunction: + Type: 'AWS::Serverless::Function' + Properties: + Handler: conversion.handler + Runtime: python3.6 + CodeUri: ./src/conversion/ + Policies: + - SQSPollerPolicy: + QueueName: + !GetAtt ConversionQueue.Arn + Events: + ConversionQueueReaderEvent: + Type: SQS + Properties: + Queue: !GetAtt ConversionQueue.Arn + BatchSize: 10 + + SentimentQueue: + Type: AWS::SQS::Queue + DependsOn: SentimentDlq + Properties: + VisibilityTimeout: 300 + RedrivePolicy: + deadLetterTargetArn: !GetAtt SentimentDlq.Arn + maxReceiveCount: 5 + + SentimentDlq: + Type: AWS::SQS::Queue + Properties: + VisibilityTimeout: 300 + + SentimentFunction: + Type: 'AWS::Serverless::Function' + Properties: + Handler: sentiment.handler + Runtime: python3.6 + CodeUri: ./src/sentiment/ + Policies: + - SQSPollerPolicy: + QueueName: + !GetAtt SentimentQueue.Arn + Events: + SentimentQueueReaderEvent: + Type: SQS + Properties: + Queue: !GetAtt SentimentQueue.Arn + BatchSize: 10 + \ No newline at end of file diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py new file mode 100644 index 0000000..292bbc3 --- /dev/null +++ b/src/conversion/conversion.py @@ -0,0 +1,7 @@ +def handler(event, context): + # records = event['Records'] + # print(records) + print(event) + return('ok') + + diff --git a/src/conversion/requirements.txt b/src/conversion/requirements.txt new file mode 100644 index 0000000..3cda9eb --- /dev/null +++ b/src/conversion/requirements.txt @@ -0,0 +1 @@ +markdown \ No newline at end of file diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py new file mode 100644 index 0000000..07e04ab --- /dev/null +++ b/src/sentiment/sentiment.py @@ -0,0 +1,5 @@ +def handler(event, context): + # records = event['Records'] + # print(records) + print(event) + return('ok') \ No newline at end of file From 3447d7a426a9685920deef705ad864d7ee1fe953 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Sun, 29 Sep 2019 14:58:46 -0400 Subject: [PATCH 021/115] Working version to convert markdown file to html and upload to target bucket --- README.md | 55 +++++----- file_processing.yml | 13 +++ img/lambda-refarch-fileprocessing-simple.png | Bin 0 -> 79859 bytes src/conversion/conversion.py | 105 ++++++++++++++++++- src/conversion/requirements.txt | 1 + 5 files changed, 144 insertions(+), 30 deletions(-) create mode 100644 img/lambda-refarch-fileprocessing-simple.png diff --git a/README.md b/README.md index 9dea670..7bf7496 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,13 @@ README Languages: [DE](README/README-DE.md) | [ES](README/README-ES.md) | [FR]( The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. This simple architecture is described in this [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) and ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) on the AWS Compute Blog. This sample application demonstrates a Markdown conversion application where Lambda is used to convert Markdown files to HTML and plain text. +## Architectural Diagram + +![Reference Architecture - Real-time File Processing](img/lambda-refarch-fileprocessing-simple.png) + ## Running the Example -You can use the provided [AWS CloudFormation template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *CloudFormation Template Resources* section of this document. +You can use the provided [AWS SAM template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *CloudFormation Template Resources* section of this document. **Important** Because the AWS CloudFormation stack name is used in the name of the Amazon Simple Storage Service (Amazon S3) buckets, that stack name must only contain lowercase letters. Use lowercase letters when typing the stack name. The provided CloudFormation template retrieves its Lambda code from a bucket in the us-east-1 region. To launch this sample in another region, please modify the template and upload the Lambda code to a bucket in that region. @@ -29,27 +33,26 @@ aws cloudformation create-stack \ Install the dependencies for lambda -``` -cd src/data-processor-1 && npm install async marked -cd src/data-processor-2 && npm install async marked +```bash +cd src/conversion && pip install -r requirements.txt -t . +cd src/sentiment && pip install -r requirements.txt -t . ``` Run SAM package (equivalent to aws cloudformation package) -``` -aws cloudformation package \ - --template-file lambda_file_processing.yml \ - --s3-bucket sam-stuff \ - --output-template-file post-sam.yml - +```bash +sam package \ + --template-file file_processing.yml \ + --output-template-file packaged-template.yml \ + --s3-bucket ``` Deploy the SAM template ``` -aws cloudformation deploy \ - --template-file ./post-sam.yml \ +sam deploy \ + --template-file packaged-template.yml \ --stack-name lambda-file-refarch \ --capabilities CAPABILITY_IAM ``` @@ -83,33 +86,35 @@ To remove all resources created by this example, do the following: ## CloudFormation Template Resources ### Parameters -- **CodeBucket** - Name of the S3 bucket in the stack's region that contains the code for the two Lambda functions, ProcessorFunctionOne and ProcessorFunctionTwo. Defaults to the managed bucket `awslambda-reference-architectures`. - -- **CodeKeyPrefix** - The key prefix for the Lambda function code relative to `CodeBucket`. Defaults to `file-processing`. +TBD ### Resources [The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) creates the following resources: -- **InputBucket** - An S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger both processing functions. +- **InputBucket** - An S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger processing functions. + +- **CloudTrailBucket** - An S3 bucket that is used to store CloudTrail data. + +- **InputBucketTrail** - An CloudTrail definition that captures events put into the **CloudTrailBucket**. -- **OutputBucket** - An S3 bucket that is populated by the processor functions with the transformed files. +- **CloudTrailBucketPolicy** - A S3 policy which permits the AWS CloudTrail service to write data to the **CloudTrailBucket**. -- **InputNotificationTopic** - An Amazon Simple Notification Service (Amazon SNS) topic used to invoke multiple Lambda functions in response to each object creation notification. +- **FileProcessingQueuePolicy** - A SQS policy that allows the **FileProcessingRule** to publish events to the **ConversionQueue** and **SentimentQueue**. -- **NotificationPolicy** - An Amazon SNS topic policy which permits `InputBucket` to call the `Publish` action on the topic. +- **FileProcessingRule** - A CloudWatch Events Rule that monitors CloudTrail `PubObject` events from the **InputBucket**. -- **ProcessorFunctionOne** - An AWS Lambda function that converts Markdown files to HTML. The deployment package for this function must be located at `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`. +- **ConversionQueue** - TBD. -- **ProcessorFunctionTwo** - An AWS Lambda function that converts Markdown files to plain text. The deployment package for this function must be located at `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`. +- **ConversionDlq** - TBD. -- **LambdaExecutionRole** - An AWS Identity and Access Management (IAM) role used by the two Lambda functions. +- **ConversionFunction** - TBD. -- **RolePolicy** - An IAM policy associated with **LambdaExecutionRole** that allows the functions to get objects from `InputBucket`, put object to `OutputBucket` and log to Amazon CloudWatch. +- **SentimentQueue** - TBD. -- **LambdaInvokePermissionOne** - A policy that enables Amazon SNS to invoke ProcessorFunctionOne based on notifications from InputNotificationTopic. +- **SentimentDlq** - TBD. -- **LambdaInvokePermissionTwo** - A policy that enables Amazon SNS to invoke ProcessorFunctionTwo based on notifications from InputNotificationTopic. +- **SentimentFunction** - TBD. ## License diff --git a/file_processing.yml b/file_processing.yml index f550577..8eac7b1 100644 --- a/file_processing.yml +++ b/file_processing.yml @@ -127,6 +127,7 @@ Resources: ConversionFunction: Type: 'AWS::Serverless::Function' + DependsOn: ConversionTargetBucket Properties: Handler: conversion.handler Runtime: python3.6 @@ -135,6 +136,15 @@ Resources: - SQSPollerPolicy: QueueName: !GetAtt ConversionQueue.Arn + - S3FullAccessPolicy: + BucketName: + !GetAtt InputBucket.Arn + - S3FullAccessPolicy: + BucketName: + !GetAtt ConversionTargetBucket.Arn + Environment: + Variables: + TARGET_BUCKET: !Ref ConversionTargetBucket Events: ConversionQueueReaderEvent: Type: SQS @@ -142,6 +152,9 @@ Resources: Queue: !GetAtt ConversionQueue.Arn BatchSize: 10 + ConversionTargetBucket: + Type: AWS::S3::Bucket + SentimentQueue: Type: AWS::SQS::Queue DependsOn: SentimentDlq diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd2b8f0fd593848d53d74cf99643c596738a777 GIT binary patch literal 79859 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

#?_lx5YT_q*1IJ(|y#E`(owXzI9Q( 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 literal 0 HcmV?d00001 diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 292bbc3..d2f1e69 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -1,7 +1,102 @@ -def handler(event, context): - # records = event['Records'] - # print(records) - print(event) - return('ok') +import json +import os + +import boto3 +import botocore +import markdown + +max_object_size = 104857600 # 100MB = 104857600 bytes + +target_bucket = os.getenv('TARGET_BUCKET') + +s3_resource = boto3.resource('s3') + + +def check_s3_object_size(bucket, key_name): + try: + size = s3_resource.Object(bucket, key_name).content_length + except Exception as e: + print('Error: {}'.format(str(e))) + size = 'NaN' + return size + +def get_s3_object(bucket, key_name): + try: + s3_resource.Bucket(bucket).download_file(key_name, '/tmp/{}'.format(key_name)) + return 'ok' + except botocore.exceptions.ClientError as e: + if e.response['Error']['Code'] == '404': + return 'Error: s3://{}/{} does not exist'.format(bucket, key_name) + else: + return 'Error: {}'.format(str(e)) + +def convert_to_html(file): + try: + file_string = open(file).read() + except Exception as e: + print('Error: {}'.format(str(e))) + raise + + return markdown.markdown(file_string) + +def upload_html(target_bucket, target_key, source_file): + try: + s3_resource.Object(target_bucket, target_key).upload_file(source_file) + html_upload = 'ok' + except Exception as e: + print('Error: {}'.format(str(e))) + html_upload = 'fail' + + return html_upload + + +def handler(event, context): + log_event = {} + + try: + json_body = json.loads(event['Records'][0]['body']) + request_params = json_body['detail']['requestParameters'] + bucket_name = request_params['bucketName'] + key_name = request_params['key'] + log_event['source_s3_bucket_name'] = bucket_name + log_event['source_s3_key_name'] = key_name + + size = check_s3_object_size(bucket_name, key_name) + + download_status = get_s3_object(bucket_name, key_name) + + local_file = '/tmp/{}'.format(key_name) + + if download_status == 'ok': + log_event['source_s3_download'] = 'ok' + key_bytes = os.stat(local_file).st_size + log_event['source_s3_download_bytes'] = key_bytes + else: + log_event['source_s3_download'] = download_status + log_event['source_s3_download_bytes'] = -1 + + html = convert_to_html(local_file) + + html_filename = os.path.splitext(key_name)[0] + '.html' + + html_file = '/tmp/{}'.format(html_filename) + + with open(html_file, 'w') as outfile: + outfile.write(html) + + html_upload = upload_html(target_bucket, html_filename, html_file) + + if html_upload == 'ok': + log_event['dest_s3_object'] = 's3://{}/{}'.format(target_bucket, html_filename) + else: + log_event['dest_s3_object'] = '' + + log_event['dest_s3_upload'] = html_upload + except Exception as e: + log_event['error_msg'] = str(e) + print(log_event) + return 'fail' + print(log_event) + return 'ok' diff --git a/src/conversion/requirements.txt b/src/conversion/requirements.txt index 3cda9eb..158fba1 100644 --- a/src/conversion/requirements.txt +++ b/src/conversion/requirements.txt @@ -1 +1,2 @@ +boto3 markdown \ No newline at end of file From 8e4bb5168ef3dcaa98f3738c86893d136dbf081a Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Sun, 29 Sep 2019 15:05:06 -0400 Subject: [PATCH 022/115] Updated to include new sample file --- README.md | 6 +++--- sample.md | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 sample.md diff --git a/README.md b/README.md index 7bf7496..c4f9aa7 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ sam package \ Deploy the SAM template -``` +```bash sam deploy \ --template-file packaged-template.yml \ --stack-name lambda-file-refarch \ @@ -65,8 +65,8 @@ After you have created the stack using the CloudFormation template, you can test You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. ``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp ./sample.md s3://$BUCKET/sample.md ``` After the file has been uploaded to the input bucket, you can inspect the output bucket to see the rendered HTML and plain text output files created by the Lambda functions. diff --git a/sample.md b/sample.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/sample.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file From 7f870ceb7f1d054ede2432b640308d917a2f64d0 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Mon, 30 Sep 2019 11:03:21 -0400 Subject: [PATCH 023/115] Tie up conversion functionality incl docs --- README.md | 41 ++++++++---- file_processing.yml | 36 +++++++++-- sample.md => sample-1.md | 0 sample-2.md | 15 +++++ src/conversion/conversion.py | 82 +++++++++++++----------- src/data-processor-1/data-processor-1.js | 75 ---------------------- src/data-processor-2/data-processor-2.js | 75 ---------------------- 7 files changed, 117 insertions(+), 207 deletions(-) rename sample.md => sample-1.md (100%) create mode 100644 sample-2.md delete mode 100644 src/data-processor-1/data-processor-1.js delete mode 100644 src/data-processor-2/data-processor-2.js diff --git a/README.md b/README.md index c4f9aa7..47b3d76 100644 --- a/README.md +++ b/README.md @@ -20,15 +20,6 @@ Choose **Launch Stack** to launch the template in the us-east-1 region in your a [![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -Alternatively, you can use the following command to launch the stack using the AWS CLI. This assumes you have already [installed the AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - ## Using SAM Install the dependencies for lambda @@ -60,13 +51,17 @@ sam deploy \ ## Testing the Example -After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use this README.md file in the repository as an example file. After the file has been uploaded, you can see the resulting HTML and plain text files in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. +After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use the sample-1.md and sample-2.md files in the repository as example files. After the files have been uploaded, you can see the resulting HTML and plain text files in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. ``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp ./sample.md s3://$BUCKET/sample.md +INPUT_BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 cp ./sample-1.md s3://${INPUT_BUCKET}/sample-1.md +aws s3 cp ./sample-2.md s3://${INPUT_BUCKET}/sample-2.md + +OUTPUT_BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ConversionTargetBucket --query "StackResourceDetail.PhysicalResourceId" --output text) +aws s3 ls s3://${OUTPUT_BUCKET} ``` After the file has been uploaded to the input bucket, you can inspect the output bucket to see the rendered HTML and plain text output files created by the Lambda functions. @@ -78,10 +73,30 @@ You can also view the CloudWatch logs generated by the Lambda functions. To remove all resources created by this example, do the following: 1. Delete all objects in the input and output buckets. +```bash +for bucket in InputBucket CloudTrailBucket ConversionTargetBucket; do + echo "Clearing out ${bucket}..." + BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) + aws s3 rm s3://${BUCKET} --recursive + echo +done +``` + 1. Delete the CloudFormation stack. -1. Delete the CloudWatch log groups that contain the execution logs for the two processor functions. +```bash +aws cloudformation delete-stack \ +--stack-name lambda-file-refarch +``` +1. Delete the CloudWatch log groups that contain the execution logs for the two processor functions. The Log Group names can be identified by running the following command: +```bash +for log_group in $(aws logs describe-log-groups --log-group-name-prefix '/aws/lambda/lambda-file-refarch-' --query "logGroups[*].logGroupName" --output text); do + echo "Removing log group ${log_group}..." + aws logs delete-log-group --log-group-name ${log_group} + echo +done +``` ## CloudFormation Template Resources diff --git a/file_processing.yml b/file_processing.yml index 8eac7b1..bc3c051 100644 --- a/file_processing.yml +++ b/file_processing.yml @@ -136,12 +136,36 @@ Resources: - SQSPollerPolicy: QueueName: !GetAtt ConversionQueue.Arn - - S3FullAccessPolicy: - BucketName: - !GetAtt InputBucket.Arn - - S3FullAccessPolicy: - BucketName: - !GetAtt ConversionTargetBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - s3:GetObject + - s3:GetObjectAcl + - s3:GetObjectVersion + Resource: + Fn::Join: + - '' + - - 'arn:aws:s3:::' + - Ref: InputBucket + - '/*' + - Effect: Allow + Action: + - s3:ListBucket + Resource: !GetAtt InputBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: s3:PutObject + Resource: + Fn::Join: + - '' + - - 'arn:aws:s3:::' + - Ref: ConversionTargetBucket + - '/*' + # - S3FullAccessPolicy: + # BucketName: + # !GetAtt ConversionTargetBucket.Arn Environment: Variables: TARGET_BUCKET: !Ref ConversionTargetBucket diff --git a/sample.md b/sample-1.md similarity index 100% rename from sample.md rename to sample-1.md diff --git a/sample-2.md b/sample-2.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/sample-2.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index d2f1e69..9a3f114 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -52,51 +52,57 @@ def upload_html(target_bucket, target_key, source_file): def handler(event, context): - log_event = {} + for record in event['Records']: + log_event = {} - try: - json_body = json.loads(event['Records'][0]['body']) - request_params = json_body['detail']['requestParameters'] - bucket_name = request_params['bucketName'] - key_name = request_params['key'] - log_event['source_s3_bucket_name'] = bucket_name - log_event['source_s3_key_name'] = key_name - - size = check_s3_object_size(bucket_name, key_name) - - download_status = get_s3_object(bucket_name, key_name) - - local_file = '/tmp/{}'.format(key_name) - - if download_status == 'ok': - log_event['source_s3_download'] = 'ok' - key_bytes = os.stat(local_file).st_size - log_event['source_s3_download_bytes'] = key_bytes - else: - log_event['source_s3_download'] = download_status - log_event['source_s3_download_bytes'] = -1 + log_event['request_id'] = context.aws_request_id + log_event['invoked_function_arn'] = context.invoked_function_arn + log_event['sqs_message_id'] = record['messageId'] + log_event['sqs_event_source_arn'] = record['eventSourceARN'] - html = convert_to_html(local_file) + try: + json_body = json.loads(record['body']) + request_params = json_body['detail']['requestParameters'] + bucket_name = request_params['bucketName'] + key_name = request_params['key'] + log_event['source_s3_bucket_name'] = bucket_name + log_event['source_s3_key_name'] = key_name - html_filename = os.path.splitext(key_name)[0] + '.html' + size = check_s3_object_size(bucket_name, key_name) - html_file = '/tmp/{}'.format(html_filename) + download_status = get_s3_object(bucket_name, key_name) - with open(html_file, 'w') as outfile: - outfile.write(html) + local_file = '/tmp/{}'.format(key_name) + + if download_status == 'ok': + log_event['src_s3_download'] = 'ok' + key_bytes = os.stat(local_file).st_size + log_event['src_s3_download_bytes'] = key_bytes + else: + log_event['src_s3_download'] = download_status + log_event['src_s3_download_bytes'] = -1 - html_upload = upload_html(target_bucket, html_filename, html_file) + html = convert_to_html(local_file) - if html_upload == 'ok': - log_event['dest_s3_object'] = 's3://{}/{}'.format(target_bucket, html_filename) - else: - log_event['dest_s3_object'] = '' + html_filename = os.path.splitext(key_name)[0] + '.html' - log_event['dest_s3_upload'] = html_upload + html_file = '/tmp/{}'.format(html_filename) - except Exception as e: - log_event['error_msg'] = str(e) + with open(html_file, 'w') as outfile: + outfile.write(html) + + html_upload = upload_html(target_bucket, html_filename, html_file) + + if html_upload == 'ok': + log_event['dst_s3_object'] = 's3://{}/{}'.format(target_bucket, html_filename) + else: + log_event['dst_s3_object'] = '' + + log_event['dst_s3_upload'] = html_upload + + except Exception as e: + log_event['error_msg'] = str(e) + print(log_event) + return 'fail' print(log_event) - return 'fail' - print(log_event) - return 'ok' + return 'ok' diff --git a/src/data-processor-1/data-processor-1.js b/src/data-processor-1/data-processor-1.js deleted file mode 100644 index 151c70c..0000000 --- a/src/data-processor-1/data-processor-1.js +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"). You may not use -this file except in compliance with the License. A copy of the License is -located at - -http://aws.amazon.com/apache2.0/ - -or in the "license" file accompanying this file. This file is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied. See the License for the specific language governing permissions and -limitations under the License. */ - -var AWS = require('aws-sdk'); -var marked = require('marked'); -var async = require('async'); - -var s3 = new AWS.S3(); - -function getSNSMessageObject(msgString) { - var x = msgString.replace(/\\/g, ''); - var y = x.substring(1, x.length - 1); - var z = JSON.parse(y); - return z; -} - -exports.handler = function (event, context) { - console.log('event: ' + JSON.stringify(event)); - var snsMsgString = JSON.stringify(event.Records[0].Sns.Message); - var snsMsgObject = getSNSMessageObject(snsMsgString); - - var obj = { - 'bucket': snsMsgObject.Records[0].s3.bucket.name, - 'bucketOut': String(snsMsgObject.Records[0].s3.bucket.name + "-out"), - 'key': snsMsgObject.Records[0].s3.object.key, - }; - - async.waterfall([ - function download(next) { - // get Markdown object - s3.getObject( - { - Bucket: obj.bucket, - Key: obj.key - }, - next); - }, - function transform(response, next) { - // convert md -> html - var data = marked(String(response.Body)); - next(null, data); - }, - function upload(data, next) { - // change file extension - var newFileName = obj.key.split(".")[0] + ".html"; - console.log("Uploading data to: " + obj.bucketOut); - s3.putObject( - { - Bucket: obj.bucketOut, - Key: newFileName, - Body: data, - ContentType: "text/html" // set contentType as HTML - }, - next); - } - ], function (err) { - if (err) { - console.error(err); - } else { - console.log('Success'); - } - context.done(); - }); - -}; diff --git a/src/data-processor-2/data-processor-2.js b/src/data-processor-2/data-processor-2.js deleted file mode 100644 index 7de6bde..0000000 --- a/src/data-processor-2/data-processor-2.js +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"). You may not use -this file except in compliance with the License. A copy of the License is -located at - -http://aws.amazon.com/apache2.0/ - -or in the "license" file accompanying this file. This file is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied. See the License for the specific language governing permissions and -limitations under the License. */ - -var AWS = require('aws-sdk'); -var removeMD = require('remove-markdown'); -var async = require('async'); - -var s3 = new AWS.S3(); - -function getSNSMessageObject(msgString) { - var x = msgString.replace(/\\/g, ''); - var y = x.substring(1, x.length - 1); - var z = JSON.parse(y); - return z; -} - -exports.handler = function (event, context) { - console.log('event: ' + JSON.stringify(event)); - var snsMsgString = JSON.stringify(event.Records[0].Sns.Message); - var snsMsgObject = getSNSMessageObject(snsMsgString); - - var obj = { - 'bucket': snsMsgObject.Records[0].s3.bucket.name, - 'bucketOut': String(snsMsgObject.Records[0].s3.bucket.name + "-out"), - 'key': snsMsgObject.Records[0].s3.object.key - }; - - async.waterfall([ - function download(next) { - // get Markdown object - s3.getObject( - { - Bucket: obj.bucket, - Key: obj.key - }, - next); - }, - function transform(response, next) { - // strip out md and convert to plaintext - var data = removeMD(String(response.Body)); - next(null, data); - }, - function upload(data, next) { - // change file extension - var newFileName = obj.key.split(".")[0] + ".txt"; - console.log("Uploading data to: " + obj.bucketOut); - s3.putObject( - { - Bucket: obj.bucketOut, - Key: newFileName, - Body: data, - ContentType: "text/plain" // set contentType as plaintext - }, - next); - } - ], function (err) { - if (err) { - console.error(err); - } else { - console.log('Success'); - } - context.done(); - }); - -}; From 05ac4ebef80fc4cd4da4c14241e5b3b45f579a9b Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Mon, 30 Sep 2019 11:58:56 -0400 Subject: [PATCH 024/115] Remove unnecessary space in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47b3d76..bb6c726 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Install the dependencies for lambda ```bash cd src/conversion && pip install -r requirements.txt -t . -cd src/sentiment && pip install -r requirements.txt -t . +cd src/sentiment && pip install -r requirements.txt -t . ``` Run SAM package (equivalent to aws cloudformation package) From 21b4716e7c285705a97e9e290c46b488dfba866f Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 2 Oct 2019 14:54:47 -0400 Subject: [PATCH 025/115] Early working version of sentiment analysis --- README.md | 25 +++++---- file_processing.yml | 44 +++++++++++++-- src/conversion/conversion.py | 8 +-- src/sentiment/requirements.txt | 1 + src/sentiment/sentiment.py | 98 ++++++++++++++++++++++++++++++++-- 5 files changed, 154 insertions(+), 22 deletions(-) create mode 100644 src/sentiment/requirements.txt diff --git a/README.md b/README.md index bb6c726..e7b5ab3 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ After you have created the stack using the CloudFormation template, you can test You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. -``` +```bash INPUT_BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) aws s3 cp ./sample-1.md s3://${INPUT_BUCKET}/sample-1.md aws s3 cp ./sample-2.md s3://${INPUT_BUCKET}/sample-2.md @@ -72,7 +72,8 @@ You can also view the CloudWatch logs generated by the Lambda functions. To remove all resources created by this example, do the following: -1. Delete all objects in the input and output buckets. +### Delete Objects in the Input and Output Buckets. + ```bash for bucket in InputBucket CloudTrailBucket ConversionTargetBucket; do echo "Clearing out ${bucket}..." @@ -82,13 +83,14 @@ for bucket in InputBucket CloudTrailBucket ConversionTargetBucket; do done ``` -1. Delete the CloudFormation stack. +### Delete the CloudFormation Stack + ```bash aws cloudformation delete-stack \ --stack-name lambda-file-refarch ``` -1. Delete the CloudWatch log groups that contain the execution logs for the two processor functions. The Log Group names can be identified by running the following command: +### Delete the CloudWatch Log Groups ```bash for log_group in $(aws logs describe-log-groups --log-group-name-prefix '/aws/lambda/lambda-file-refarch-' --query "logGroups[*].logGroupName" --output text); do @@ -100,9 +102,6 @@ done ## CloudFormation Template Resources -### Parameters -TBD - ### Resources [The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) creates the following resources: @@ -119,17 +118,21 @@ creates the following resources: - **FileProcessingRule** - A CloudWatch Events Rule that monitors CloudTrail `PubObject` events from the **InputBucket**. -- **ConversionQueue** - TBD. +- **ConversionQueue** - A SQS queue that is used to store events for conversion from markdown to HTML. - **ConversionDlq** - TBD. -- **ConversionFunction** - TBD. +- **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. + +- **ConversionTargetBucket** - A S3 bucket that stores the converted HTML. -- **SentimentQueue** - TBD. +- **SentimentQueue** - A SQS queue that is used to store events for sentiment analysis processing. - **SentimentDlq** - TBD. -- **SentimentFunction** - TBD. +- **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. + +- **SentimentTable** - A DynamoDB table that stores the input file along with the sentiment. ## License diff --git a/file_processing.yml b/file_processing.yml index bc3c051..1c666c7 100644 --- a/file_processing.yml +++ b/file_processing.yml @@ -163,9 +163,6 @@ Resources: - - 'arn:aws:s3:::' - Ref: ConversionTargetBucket - '/*' - # - S3FullAccessPolicy: - # BucketName: - # !GetAtt ConversionTargetBucket.Arn Environment: Variables: TARGET_BUCKET: !Ref ConversionTargetBucket @@ -203,10 +200,49 @@ Resources: - SQSPollerPolicy: QueueName: !GetAtt SentimentQueue.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - s3:GetObject + - s3:GetObjectAcl + - s3:GetObjectVersion + Resource: + Fn::Join: + - '' + - - 'arn:aws:s3:::' + - Ref: InputBucket + - '/*' + - Effect: Allow + Action: + - s3:ListBucket + Resource: !GetAtt InputBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - comprehend:DetectSentiment + Resource: '*' + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - dynamodb:PutItem + Resource: !GetAtt SentimentTable.Arn + Environment: + Variables: + SENTIMENT_TABLE: !Ref SentimentTable Events: SentimentQueueReaderEvent: Type: SQS Properties: Queue: !GetAtt SentimentQueue.Arn - BatchSize: 10 + BatchSize: 10 + + SentimentTable: + Type: AWS::Serverless::SimpleTable + TableName: ref-arch-filearch-document-sentiment + PrimaryKey: + Name: 's3_object' + Type: String \ No newline at end of file diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 9a3f114..8ec6be0 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -1,5 +1,6 @@ import json import os +import sys import boto3 import botocore @@ -81,17 +82,18 @@ def handler(event, context): else: log_event['src_s3_download'] = download_status log_event['src_s3_download_bytes'] = -1 + sys.exit(1) html = convert_to_html(local_file) html_filename = os.path.splitext(key_name)[0] + '.html' - html_file = '/tmp/{}'.format(html_filename) + local_html_file = '/tmp/{}'.format(html_filename) - with open(html_file, 'w') as outfile: + with open(local_html_file, 'w') as outfile: outfile.write(html) - html_upload = upload_html(target_bucket, html_filename, html_file) + html_upload = upload_html(target_bucket, html_filename, local_html_file) if html_upload == 'ok': log_event['dst_s3_object'] = 's3://{}/{}'.format(target_bucket, html_filename) diff --git a/src/sentiment/requirements.txt b/src/sentiment/requirements.txt new file mode 100644 index 0000000..1db657b --- /dev/null +++ b/src/sentiment/requirements.txt @@ -0,0 +1 @@ +boto3 \ No newline at end of file diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 07e04ab..a73ff99 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -1,5 +1,95 @@ +import json +import os +import sys + +import boto3 +import botocore + + +comprehend_client = boto3.client('comprehend') + +s3_resource = boto3.resource('s3') + +ddb_client = boto3.client('dynamodb') + +sentiment_table = os.getenv('SENTIMENT_TABLE') + +def get_s3_object(bucket, key_name): + try: + s3_resource.Bucket(bucket).download_file(key_name, '/tmp/{}'.format(key_name)) + return 'ok' + except botocore.exceptions.ClientError as e: + if e.response['Error']['Code'] == '404': + return 'Error: s3://{}/{} does not exist'.format(bucket, key_name) + else: + return 'Error: {}'.format(str(e)) + +def put_sentiment(table_name, s3_object, sentiment): + try: + result = ddb_client.put_item( + TableName=table_name, + Item={ + 'id': { + 'S': s3_object + }, + 'sentiment': { + 'S': sentiment['Sentiment'] + } + } + ) + except Exception as e: + print('Error: {}'.format(str(e))) + + def handler(event, context): - # records = event['Records'] - # print(records) - print(event) - return('ok') \ No newline at end of file + for record in event['Records']: + log_event = {} + + log_event['request_id'] = context.aws_request_id + log_event['invoked_function_arn'] = context.invoked_function_arn + log_event['sqs_message_id'] = record['messageId'] + log_event['sqs_event_source_arn'] = record['eventSourceARN'] + + try: + json_body = json.loads(record['body']) + request_params = json_body['detail']['requestParameters'] + bucket_name = request_params['bucketName'] + key_name = request_params['key'] + log_event['source_s3_bucket_name'] = bucket_name + log_event['source_s3_key_name'] = key_name + + download_status = get_s3_object(bucket_name, key_name) + + local_file = '/tmp/{}'.format(key_name) + + if download_status == 'ok': + log_event['src_s3_download'] = 'ok' + key_bytes = os.stat(local_file).st_size + log_event['src_s3_download_bytes'] = key_bytes + else: + log_event['src_s3_download'] = download_status + log_event['src_s3_download_bytes'] = -1 + sys.exit(1) + + md_contents = open(local_file, 'r').read() + + sentiment = comprehend_client.detect_sentiment(Text=md_contents, LanguageCode='en') + + log_event['sentiment'] = sentiment['Sentiment'] + log_event['sentiment_score'] = sentiment['SentimentScore'] + + source_s3_object = 's3://{}/{}'.format(bucket_name, key_name) + + put_sentiment_result = put_sentiment(sentiment_table, source_s3_object, sentiment) + + print(put_sentiment_result) + + except Exception as e: + log_event['error_msg'] = str(e) + print(log_event) + return 'fail' + + + print(log_event) + return('ok') + From acf763bf08fec1b0f84ff70bbfe2f1b864ee2ed2 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 2 Oct 2019 15:07:39 -0400 Subject: [PATCH 026/115] Added directions for verifying DynamoDB data --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7b5ab3..ee77e22 100644 --- a/README.md +++ b/README.md @@ -59,12 +59,21 @@ You can use the following commands to copy a sample file from the provided S3 bu INPUT_BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) aws s3 cp ./sample-1.md s3://${INPUT_BUCKET}/sample-1.md aws s3 cp ./sample-2.md s3://${INPUT_BUCKET}/sample-2.md +``` + +Once the input files has been uploaded to the input bucket, a series of events are put into motion. +1. The input Markdown files are converted and stored in a separate S3 bucket. +``` OUTPUT_BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ConversionTargetBucket --query "StackResourceDetail.PhysicalResourceId" --output text) aws s3 ls s3://${OUTPUT_BUCKET} ``` -After the file has been uploaded to the input bucket, you can inspect the output bucket to see the rendered HTML and plain text output files created by the Lambda functions. +2. The input Markdown files are analyzed and their sentiment published to a DynamoDB table. +``` +DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id SentimentTable --query "StackResourceDetail.PhysicalResourceId" --output text) +aws dynamodb scan --table-name ${DYNAMO_TABLE} --query "Items[*]" +``` You can also view the CloudWatch logs generated by the Lambda functions. From d0cc624dc5c7fce6f3a24ed0877abb0adcadecc4 Mon Sep 17 00:00:00 2001 From: Rudge Date: Fri, 11 Oct 2019 15:58:34 +0100 Subject: [PATCH 027/115] updated to comply with pep8 and bandit, also added temporary file cleanup --- src/conversion/conversion.py | 50 ++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 8ec6be0..9471d67 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -5,8 +5,9 @@ import boto3 import botocore import markdown +import tempfile -max_object_size = 104857600 # 100MB = 104857600 bytes +max_object_size = 104857600 # 100MB = 104857600 bytes target_bucket = os.getenv('TARGET_BUCKET') @@ -19,12 +20,13 @@ def check_s3_object_size(bucket, key_name): except Exception as e: print('Error: {}'.format(str(e))) size = 'NaN' - + return size -def get_s3_object(bucket, key_name): + +def get_s3_object(bucket, key_name, local_file): try: - s3_resource.Bucket(bucket).download_file(key_name, '/tmp/{}'.format(key_name)) + s3_resource.Bucket(bucket).download_file(key_name, local_file) return 'ok' except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == '404': @@ -32,15 +34,20 @@ def get_s3_object(bucket, key_name): else: return 'Error: {}'.format(str(e)) + def convert_to_html(file): try: - file_string = open(file).read() + file_open = open(file, 'r') + file_string = file_open.read() + file_open.close() + except Exception as e: print('Error: {}'.format(str(e))) raise - + return markdown.markdown(file_string) + def upload_html(target_bucket, target_key, source_file): try: s3_resource.Object(target_bucket, target_key).upload_file(source_file) @@ -48,12 +55,14 @@ def upload_html(target_bucket, target_key, source_file): except Exception as e: print('Error: {}'.format(str(e))) html_upload = 'fail' - + return html_upload def handler(event, context): for record in event['Records']: + tmpdir = tempfile.mkdtemp() + log_event = {} log_event['request_id'] = context.aws_request_id @@ -71,10 +80,10 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) - download_status = get_s3_object(bucket_name, key_name) + local_file = os.path.join(tmpdir, key_name) + + download_status = get_s3_object(bucket_name, key_name, local_file) - local_file = '/tmp/{}'.format(key_name) - if download_status == 'ok': log_event['src_s3_download'] = 'ok' key_bytes = os.stat(local_file).st_size @@ -88,15 +97,20 @@ def handler(event, context): html_filename = os.path.splitext(key_name)[0] + '.html' - local_html_file = '/tmp/{}'.format(html_filename) + local_html_file = os.path.join(tmpdir, html_filename) with open(local_html_file, 'w') as outfile: outfile.write(html) - html_upload = upload_html(target_bucket, html_filename, local_html_file) + outfile.close() + + html_upload = upload_html(target_bucket, + html_filename, + local_html_file) if html_upload == 'ok': - log_event['dst_s3_object'] = 's3://{}/{}'.format(target_bucket, html_filename) + log_event['dst_s3_object'] = 's3://{}/{}'.format(target_bucket, + html_filename) else: log_event['dst_s3_object'] = '' @@ -106,5 +120,15 @@ def handler(event, context): log_event['error_msg'] = str(e) print(log_event) return 'fail' + + finally: + filesToRemove = os.listdir(tmpdir) + for f in filesToRemove: + file_path = os.path.join(tmpdir, f) + print(f'Removing File: {file_path}') + os.remove(file_path) + print(f'Removing Folder: {tmpdir}') + os.rmdir(tmpdir) + print(log_event) return 'ok' From 976cede8a5ef2652583ad73b3d6495689df4f38a Mon Sep 17 00:00:00 2001 From: Rudge Date: Fri, 11 Oct 2019 16:49:19 +0100 Subject: [PATCH 028/115] added try / catch --- src/conversion/conversion.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 9471d67..5a53997 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -123,10 +123,17 @@ def handler(event, context): finally: filesToRemove = os.listdir(tmpdir) + for f in filesToRemove: file_path = os.path.join(tmpdir, f) print(f'Removing File: {file_path}') - os.remove(file_path) + + try: + os.remove(file_path) + except OSError as e: + print(e) + print(f'Error while deleting file {file_path}') + print(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) From 58070d1217538a559211511d7056cd02c1930bbe Mon Sep 17 00:00:00 2001 From: Rudge Date: Fri, 1 Nov 2019 15:38:47 +0000 Subject: [PATCH 029/115] Updated readme for new workflows --- README.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ee77e22..737e8dd 100644 --- a/README.md +++ b/README.md @@ -3,21 +3,64 @@ README Languages: [DE](README/README-DE.md) | [ES](README/README-ES.md) | [FR]( [PT](README/README-PT.md) | [RU](README/README-RU.md) | [CN](README/README-CN.md) | [TW](README/README-TW.md) -The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. This simple architecture is described in this [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) and ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) on the AWS Compute Blog. This sample application demonstrates a Markdown conversion application where Lambda is used to convert Markdown files to HTML and plain text. +The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. + +In this example application we deliver the notes from an interview in markdown format into S3 and we utilise CloudWatch Events to trigger multiple processing flows. ## Architectural Diagram ![Reference Architecture - Real-time File Processing](img/lambda-refarch-fileprocessing-simple.png) +## Application Components + +### Event Trigger +Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilise [CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) and [CloudTrail](https://aws.amazon.com/cloudtrail/). We write a CloudWatch Events rule which checks for S3 PutObject API calls into our Source Bucket from CloudTrail. Everytime the PutObject API is called this creates a CloudTrail log which our rule translates into an event represented as a JSON object. In our rule we also define targets which our JSON event object is delivered to, which in this scenario is 4 seperate [SQS Queues](https://aws.amazon.com/sqs/) for 4 different worflows. Other target types include AWS Lambda Functions, Kinesis Data Streams, Simple Notification Service, Step Functions state machines, ECS tasks and more. + +### Conversion WorkFlow + +For this workflow the target of our JSON object decribing the S3 PutObject event is an SQS queue. Sending to SQS first rather than directly to Lambda allows for more control of Lambda invocations and better error handling. + +Lambda uses long polling to poll our queue and when messages are available it will read upto 5 batches and send them to our function. Lambda will automatically scale this process if more messages still remain on the queue. This allows us to simultaneously process upto 1000 batches. + +If our Lambda fails to process the messages we can configure SQS to send to a dead-letter queue for inspection and reprocessing. + +Once the function has the message this is parsed. The JSON event object contains information such as the S3 bucket and object key and object size. + +Our business logic uses this information to retrieve the file from S3 and convert it to HTML finally writing out the new file to the HTML Bucket. + + +### Sentiment Analysis Workflow + +Here we are using our AI/ML service [Amazon Comprehend](https://aws.amazon.com/comprehend/) which is a machine learning powered service that makes it easy to find insights and relationships in text. We can use the Sentiment Analysis API in order to understand if the questions the interviewer asked had positive or negative responses. + +This workflow uses the same SQS to Lambda Function pattern as the coversion workflow. Here our business logic downloads the file and extracts the content of the file and sends it to the Comprehend Sentiment Analysis API. This returns a Sentiment and a confidence Score which Describes the level of confidence that Amazon Comprehend has in the accuracy of its detection of sentiments. + +Once we have our sentiment we persist the result to our [DynamoDB](https://aws.amazon.com/dynamodb/) table. + + +### Search Indexing Workflow +TODO + +### Replay Workflow + +TODO + + ## Running the Example -You can use the provided [AWS SAM template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *CloudFormation Template Resources* section of this document. +You can use the provided [AWS SAM template] + +TODO **Insert CFN Template Link** + +to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *CloudFormation Template Resources* section of this document. **Important** Because the AWS CloudFormation stack name is used in the name of the Amazon Simple Storage Service (Amazon S3) buckets, that stack name must only contain lowercase letters. Use lowercase letters when typing the stack name. The provided CloudFormation template retrieves its Lambda code from a bucket in the us-east-1 region. To launch this sample in another region, please modify the template and upload the Lambda code to a bucket in that region. Choose **Launch Stack** to launch the template in the us-east-1 region in your account: +TODO Update Link + [![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) ## Using SAM @@ -51,7 +94,7 @@ sam deploy \ ## Testing the Example -After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use the sample-1.md and sample-2.md files in the repository as example files. After the files have been uploaded, you can see the resulting HTML and plain text files in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. +After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use the sample-1.md and sample-2.md files in the repository as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. From 0b097f7d4ec8da4855b672b5c2e41568640dd7b1 Mon Sep 17 00:00:00 2001 From: Rudge Date: Fri, 1 Nov 2019 17:25:34 +0000 Subject: [PATCH 030/115] Changes as per PR suggestions --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 737e8dd..206535e 100644 --- a/README.md +++ b/README.md @@ -14,19 +14,19 @@ In this example application we deliver the notes from an interview in markdown f ## Application Components ### Event Trigger -Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilise [CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) and [CloudTrail](https://aws.amazon.com/cloudtrail/). We write a CloudWatch Events rule which checks for S3 PutObject API calls into our Source Bucket from CloudTrail. Everytime the PutObject API is called this creates a CloudTrail log which our rule translates into an event represented as a JSON object. In our rule we also define targets which our JSON event object is delivered to, which in this scenario is 4 seperate [SQS Queues](https://aws.amazon.com/sqs/) for 4 different worflows. Other target types include AWS Lambda Functions, Kinesis Data Streams, Simple Notification Service, Step Functions state machines, ECS tasks and more. +Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilise [CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) and [CloudTrail](https://aws.amazon.com/cloudtrail/). We write a CloudWatch Events rule which checks for S3 PutObject API calls into our Source Bucket from CloudTrail. Everytime the PutObject API is called this creates a CloudTrail log which our rule translates into an event represented as a JSON object. In our rule we also define targets which our JSON event object is delivered to, which in this scenario is 4 seperate [SQS Queues](https://aws.amazon.com/sqs/) for 4 different worflows. Other target types include AWS Lambda Functions, Kinesis Data Streams, Simple Notification Service, Step Functions state machines, ECS tasks refer to [What is Amazon CloudWatch Events?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) for more information about eligible targets. ### Conversion WorkFlow For this workflow the target of our JSON object decribing the S3 PutObject event is an SQS queue. Sending to SQS first rather than directly to Lambda allows for more control of Lambda invocations and better error handling. -Lambda uses long polling to poll our queue and when messages are available it will read upto 5 batches and send them to our function. Lambda will automatically scale this process if more messages still remain on the queue. This allows us to simultaneously process upto 1000 batches. +Lambda polls our queue and when messages are available it will send them to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. If our Lambda fails to process the messages we can configure SQS to send to a dead-letter queue for inspection and reprocessing. Once the function has the message this is parsed. The JSON event object contains information such as the S3 bucket and object key and object size. -Our business logic uses this information to retrieve the file from S3 and convert it to HTML finally writing out the new file to the HTML Bucket. +Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new html file to the HTML Bucket. ### Sentiment Analysis Workflow From cbcb05ebb934f3ff502cec657383b55dc2821731 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Tue, 5 Nov 2019 12:50:31 -0500 Subject: [PATCH 031/115] Updates to sentiment, build process Also, add in consistency to Sentiment code. --- .gitignore | 1 + README.md | 51 +++---- README/README-CN.md | 84 ----------- README/README-DE.md | 84 ----------- README/README-ES.md | 84 ----------- README/README-FR.md | 84 ----------- README/README-IT.md | 84 ----------- README/README-JP.md | 84 ----------- README/README-KR.md | 84 ----------- README/README-PT.md | 84 ----------- README/README-RU.md | 84 ----------- README/README-TW.md | 84 ----------- file_processing.yml | 248 ------------------------------ lambda_file_processing.template | 258 -------------------------------- lambda_file_processing.yml | 131 ---------------- src/conversion/conversion.py | 6 + src/sentiment/sentiment.py | 109 +++++++++++--- 17 files changed, 120 insertions(+), 1524 deletions(-) delete mode 100644 README/README-CN.md delete mode 100644 README/README-DE.md delete mode 100644 README/README-ES.md delete mode 100644 README/README-FR.md delete mode 100644 README/README-IT.md delete mode 100644 README/README-JP.md delete mode 100644 README/README-KR.md delete mode 100644 README/README-PT.md delete mode 100644 README/README-RU.md delete mode 100644 README/README-TW.md delete mode 100644 file_processing.yml delete mode 100644 lambda_file_processing.template delete mode 100644 lambda_file_processing.yml diff --git a/.gitignore b/.gitignore index ee50dd7..ed419d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ packaged-template.yml post-sam.yml +.aws-sam **/node_modules diff --git a/README.md b/README.md index 206535e..79a6649 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,4 @@ # Serverless Reference Architecture: Real-time File Processing -README Languages: [DE](README/README-DE.md) | [ES](README/README-ES.md) | [FR](README/README-FR.md) | [IT](README/README-IT.md) | [JP](README/README-JP.md) | [KR](README/README-KR.md) | -[PT](README/README-PT.md) | [RU](README/README-RU.md) | -[CN](README/README-CN.md) | [TW](README/README-TW.md) The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. @@ -48,46 +45,50 @@ TODO ## Running the Example -You can use the provided [AWS SAM template] +You can use the provided [AWS SAM template](./template.yml) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *SAM Template Resources* section of this document. -TODO **Insert CFN Template Link** -to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *CloudFormation Template Resources* section of this document. +### Using SAM to Build and Deploy the Application -**Important** Because the AWS CloudFormation stack name is used in the name of the Amazon Simple Storage Service (Amazon S3) buckets, that stack name must only contain lowercase letters. Use lowercase letters when typing the stack name. The provided CloudFormation template retrieves its Lambda code from a bucket in the us-east-1 region. To launch this sample in another region, please modify the template and upload the Lambda code to a bucket in that region. +#### Build +The AWS SAM CLI comes with abstractions for a number of Lambda runtimes to build your dependencies, and copies the source code into staging folders so that everything is ready to be packaged and deployed. The *sam build* command builds any dependencies that your application has, and copies your application source code to folders under aws-sam/build to be zipped and uploaded to Lambda. -Choose **Launch Stack** to launch the template in the us-east-1 region in your account: - -TODO Update Link - -[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +```bash +sam build --use-container +``` -## Using SAM +#### Package -Install the dependencies for lambda +Next, run *sam package*. This command takes your Lambda handler source code and any third-party dependencies, zips everything, and uploads the zip file to your Amazon S3 bucket. That bucket and file location are then noted in the packaged-template.yaml file. You use the generated packaged-template.yaml file to deploy the application in the next step. ```bash -cd src/conversion && pip install -r requirements.txt -t . -cd src/sentiment && pip install -r requirements.txt -t . +sam package \ + --output-template-file packaged-template.yml \ + --s3-bucket bucketname ``` -Run SAM package (equivalent to aws cloudformation package) +**Note** + +For *bucketname* in this command, you need an Amazon S3 bucket that the sam package command can use to store the deployment package. The deployment package is used when you deploy your application in a later step. If you need to create a bucket for this purpose, run the following command to create an Amazon S3 bucket: ```bash -sam package \ - --template-file file_processing.yml \ - --output-template-file packaged-template.yml \ - --s3-bucket +aws s3 mb s3://bucketname --region region # Example regions: us-east-1, ap-east-1, eu-central-1, sa-east-1 ``` +#### Deploy + +This command deploys your application to the AWS Cloud. It's important that this command explicitly includes both of the following: + + * The AWS Region to deploy to. This Region must match the Region of the Amazon S3 source bucket. -Deploy the SAM template + * The CAPABILITY_IAM parameter, because creating new Lambda functions involves creating new IAM roles. ```bash sam deploy \ --template-file packaged-template.yml \ --stack-name lambda-file-refarch \ + --region region \ --capabilities CAPABILITY_IAM ``` @@ -152,10 +153,10 @@ for log_group in $(aws logs describe-log-groups --log-group-name-prefix '/aws/la done ``` -## CloudFormation Template Resources +## SAM Template Resources ### Resources -[The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) +[The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/packaged-template.yml) creates the following resources: - **InputBucket** - An S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger processing functions. @@ -166,7 +167,7 @@ creates the following resources: - **CloudTrailBucketPolicy** - A S3 policy which permits the AWS CloudTrail service to write data to the **CloudTrailBucket**. -- **FileProcessingQueuePolicy** - A SQS policy that allows the **FileProcessingRule** to publish events to the **ConversionQueue** and **SentimentQueue**. +- **FileProcessingQueuePolicy** - A SQS policy that allows the **FileProcessingRule** to publish events to the **ConversionQueue**, **SentimentQueue**, and the **ReplayQueue**. - **FileProcessingRule** - A CloudWatch Events Rule that monitors CloudTrail `PubObject` events from the **InputBucket**. diff --git a/README/README-CN.md b/README/README-CN.md deleted file mode 100644 index 23ac454..0000000 --- a/README/README-CN.md +++ /dev/null @@ -1,84 +0,0 @@ -# 无服务器参考架构:实时文件处理 - -实时文件处理参考架构是一个受事件驱动的通用并行数据处理架构,使用 [AWS Lambda](https://aws.amazon.com/lambda)。该架构非常适合需要某个对象的多种衍生数据的工作负载。此 [示意图](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) 以及 AWS 计算博客上的 ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) 中介绍了这个简单架构。这个示例应用程序演示了一个 Markdown 转换应用程序,该应用程序使用 Lambda 来将 Markdown 文件转换为 HTML 和纯文本。 - -## 运行示例 - -您可以使用提供的 [AWS CloudFormation 模板](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) 启动一个堆栈,该堆栈演示了 Lambda 文件处理参考架构。在本文档的 *CloudFormation 模板资源* 部分中提供了有关通过该模板创建的资源的详细信息。 - -**重要提示** 由于 AWS CloudFormation 堆栈名称在 Amazon Simple Storage Service (Amazon S3) 存储桶的名称中使用,该堆栈名称只能包含小写字母。在键入堆栈名称时,使用小写字母。提供的 CloudFormation 模板会从 us-east-1 区域的存储桶中检索其 Lambda 代码。要在另一个区域中启动此示例,请修改模板并将 Lambda 代码上传到该区域的存储桶中。 - - -选择 **Launch Stack** 以在您账户的 us-east-1 区域中启动模板: - -[![使用 CloudFormation 在北弗吉尼亚区域中启动 Lambda 文件处理](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -此外,您可以通过 AWS CLI 使用以下命令来启动堆栈。这假设您已 [安装 AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)。 - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## 测试示例 - -在您使用 CloudFormation 模板创建堆栈后,可以通过将 Markdown 文件上传到已在堆栈中创建的 InputBucket 来测试系统。您可以使用存储库中的此 README.md 文件作为示例文件。在上传该文件后,您可以在堆栈的输出存储桶中看到生成的 HTML 和纯文本文件。您还可以在 CloudWatch 日志中查看每个函数,以便了解函数执行的详细信息。 - -您可以使用下面的命令,将示例文件从提供的 S3 存储桶复制到您堆栈的输入存储桶中。 - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -在将该文件上传到输入存储桶后,您可以检查输出存储桶,查看 Lambda 函数创建的 HTML 和纯文本格式的输出文件。 - -您还可以查看 Lambda 函数生成的 CloudWatch 日志。 - -## 清理示例资源 - -要删除此示例创建的所有资源,请执行以下操作: - -1.删除输入和输出存储桶中的所有对象。 -1.删除 CloudFormation 堆栈。 -1.删除包含两个处理程序函数的执行日志的 CloudWatch 日志组。 - - - -## CloudFormation 模板资源 - -### 参数 -- **CodeBucket** - 堆栈区域中的 S3 存储桶的名称,该区域包含两个 Lambda 函数 ProcessorFunctionOne 和 ProcessorFunctionTwo 的代码。默认为托管存储桶 `awslambda-reference-architectures`。 - -- **CodeKeyPrefix** - 与 `CodeBucket` 相关的 Lambda 函数代码的键前缀。默认为 `file-processing`。 - -### 资源 -使用 [提供的模板](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -可创建以下资源: - -- **InputBucket** - 一个保存原始 Markdown 文件的 S3 存储桶。将文件上传到此存储桶时,将同时触发两个处理函数。 - -- **OutputBucket** - 一个 S3 存储桶,该存储桶由处理程序函数使用转换的文件填充。 - -- **InputNotificationTopic** - 一个 Amazon Simple Notification Service (Amazon SNS) 主题,该主题用于调用多个 Lambda 函数来响应各个对象创建通知。 - -- **NotificationPolicy** - 一个 Amazon SNS 主题策略,该策略允许 `InputBucket` 对主题调用 `Publish` 操作。 - -- **ProcessorFunctionOne** - 一个用于将 Markdown 文件转换为 HTML 的 AWS Lambda 函数。此函数的部署程序包必须位于 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip` 中。 - -- **ProcessorFunctionTwo** - 一个用于将 Markdown 文件转换为纯文本的 AWS Lambda 函数。此函数的部署程序包必须位于 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip` 中。 - -- **LambdaExecutionRole** - 一个 AWS Identity and Access Management (IAM) 角色,该角色由这两个 Lambda 函数使用。 - -- **RolePolicy** - 一个与 **LambdaExecutionRole** 关联的 IAM 策略,该策略允许函数从 `InputBucket` 获取对象,将对象置入 `OutputBucket`,并记录到 Amazon CloudWatch。 - -- **LambdaInvokePermissionOne** - 一个策略,该策略允许 Amazon SNS 根据来自 InputNotificationTopic 的通知调用 ProcessorFunctionOne。 - -- **LambdaInvokePermissionTwo** - 一个策略,该策略允许 Amazon SNS 根据来自 InputNotificationTopic 的通知调用 ProcessorFunctionTwo。 - - -## 许可证 - -此示例参考架构已获得 Apache 2.0 许可。 diff --git a/README/README-DE.md b/README/README-DE.md deleted file mode 100644 index cc73f50..0000000 --- a/README/README-DE.md +++ /dev/null @@ -1,84 +0,0 @@ -# Serverlose Referenzarchitektur: Dateiverarbeitung in Echtzeit - -Die Referenzarchitektur zur Dateiverarbeitung in Echtzeit ist eine ereignisgesteuerte Architektur zur parallelen Datenverarbeitung für allgemeine Zwecke, die [AWS Lambda](https://aws.amazon.com/lambda) verwendet. Die Architektur eignet sich optimal für Arbeitslasten, die mehr als eine Datenableitung eines Objekts benötigen. Diese einfache Architektur wird in diesem [Diagramm](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) und [im Blogpost "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) auf dem AWS Compute-Blog beschrieben. Diese Beispielanwendung zeigt eine Markdown-Konvertierungsanwendung in Fällen, in denen Lambda zur Markdown-Dateikonvertierung von HTML in Nur-Text verwendet wird. - -## Ausführen der Beispielanwendung - -Mithilfe der bereitgestellten [AWS CloudFormation-Vorlage](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) können Sie einen Stapel starten, der die Referenzarchitektur für die Lambda-Dateiverarbeitung zeigt. Details über die mithilfe dieser Vorlage erstellen Ressourcen finden Sie im Abschnitt *Ressourcen der CloudFormation-Vorlage* in diesem Dokument. - -**Wichtig** Da der AWS CloudFormation-Stapelname im Namen des Amazon Simple Storage Service (Amazon S3)-Buckets verwendet wird, darf dieser Stapelname nur aus Kleinbuchstaben bestehen. Verwenden Sie daher Kleinbuchstaben für den Stapelnamen. Die bereitgestellte CloudFormation-Vorlage ruft den Lambda-Code aus einem Bucket für die Region "us-east-1" ab. Um dieses Beispiel in einer anderen Region zu starten, ändern Sie die Vorlage und laden Sie den Lambda-Code in einen Bucket für diese Region hoch. - - -Wählen Sie **Launch Stack**, um die Vorlage für die Region "us-east-1" in Ihrem Konto zu starten: - -[![Starten der Lambda-Dateiverarbeitung mit CloudFormation in Nord-Virginia](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -Alternativ können Sie den Stapel mit dem folgenden Befehl und mithilfe von AWS CLI starten. Dies setzt jedoch voraus, dass Sie [die AWS CLI bereits installiert haben](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## Testen der Beispielanwendung - -Nachdem Sie den Stapel mithilfe der CloudFormation-Vorlage erstellt haben, können Sie das System testen, indem Sie eine Markdown-Datei in den im Stapel erstellten "InputBucket" hochladen. Sie können die README.md-Datei im Repository als Beispieldatei verwenden. Nachdem die Datei hochgeladen wurde, können Sie die resultierenden HTML- und Nur-Text-Dateien im Ausgabe-Bucket des Stapels sehen. Sie können ebenfalls CloudWatch-Protokolle für die einzelnen Funktionen aufrufen, um Details zu ihrer Ausführung anzuzeigen. - -Mithilfe der folgenden Befehle können Sie eine Beispieldatei vom bereitgestellten S3-Bucket in den Empfangs-Bucket des Stapels kopieren. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -Nachdem die Datei in den Empfangs-Bucket hochgeladen wurde, können Sie den Ausgabe-Bucket überprüfen, um die gerenderten HTML- und Nur-Text-Ausgabedateien zu sehen, die von den Lambda-Funktionen erstellt wurden. - -Ebenfalls können Sie die von den Lamda-Funktionen generierten CloudWatch-Protokolle aufrufen. - -## Bereinigen der Beispielressourcen - -Gehen Sie wie folgt vor, um alle in diesem Beispiel erstellten Ressourcen zu entfernen: - -1. Löschen Sie alle Objekte in den Empfangs- und Ausgabe-Buckets. -1. Löschen Sie den CloudFormation-Stapel. -1. Löschen Sie die CloudWatch-Protokollgruppen, die die Ausführungsprotokolle der zwei Prozessorfunktionen enthalten. - - - -## Ressourcen der CloudFormation-Vorlage - -### Parameter -- **CodeBucket** – Name des S3-Buckets in der Region des Stapels, der den Code für die zwei Lambda-Funktionen, "ProcessorFunctionOne" und "ProcessorFunctionTwo", enthält. Verwendet standardmäßig den verwalteten Bucket "awslambda-reference-architectures". - -- **CodeKeyPrefix** – Schlüsselpräfix für den Lambda-Funktionscode, der sich auf "CodeBucket" bezieht. Verwendet standardmäßig "file-processing". - -### Ressourcen -[Die bereitgestellte Vorlage](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -erstellt die folgenden Ressourcen: - -- **InputBucket** – ein S3-Bucket, der die Markdown-Dateien mit den Rohdaten enthält. Das Hochladen einer Datei in diesen Bucket löst beide Verarbeitungsfunktionen aus. - -- **OutputBucket** – ein S3-Bucket, den die Verarbeitungsfunktionen mit den transformierten Dateien auffüllen. - -- **InputNotificationTopic** – ein Amazon Simple Notification Service (Amazon SNS)-Thema, das verwendet wird, um mehrere Lambda-Funktionen als Reaktion auf die einzelnen Objekterstellungsbenachrichtigungen aufzurufen. - -- **NotificationPolicy** – eine Amazon SNS-Themenrichtlinie, die gestattet, dass "InputBucket" die Aktion "Veröffentlichen" für das Thema aufruft. - -- **ProcessorFunctionOne** – eine AWS Lambda-Funktion, die Markdown-Dateien in HTML umwandelt. Das Bereitstellungspaket für diese Funktion muss sich unter "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip" befinden. - -- **ProcessorFunctionTwo** – eine AWS Lambda-Funktion, die Markdown-Dateien in Nur-Text umwandelt. Das Bereitstellungspaket für diese Funktion muss sich unter "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip" befinden. - -- **LambdaExecutionRole** – eine AWS Identity and Access Management (IAM)-Rolle, die von den zwei Lambda-Funktionen verwendet wird. - -- **RolePolicy** – eine mit **LambdaExecutionRole** verknüpfte IAM-Richtlinie, die ermöglicht, dass Funktionen Objekte aus "InputBucket" abrufen, Objekte in "OutputBucket" platzieren und Protokolle an Amazon CloudWatch ausgeben. - -- **LambdaInvokePermissionOne** – eine Richtlinie, die es Amazon SNS ermöglicht, "ProcessorFunctionOne" basierend auf Benachrichtigungen von "InputNotificationTopic" aufzurufen. - -- **LambdaInvokePermissionTwo** – eine Richtlinie, die es Amazon SNS ermöglicht, "ProcessorFunctionTwo" basierend auf Benachrichtigungen von "InputNotificationTopic" aufzurufen. - - -## Lizensierung - -Dieses Beispiel einer Referenzarchitektur ist unter Apache 2.0 lizensiert. diff --git a/README/README-ES.md b/README/README-ES.md deleted file mode 100644 index 80644a5..0000000 --- a/README/README-ES.md +++ /dev/null @@ -1,84 +0,0 @@ -# Arquitectura de referencia sin servidor: Procesamiento de archivos en tiempo real - -La arquitectura de referencia Procesamiento de archivos en tiempo real es una arquitectura de procesamiento de datos en paralelo controlada por eventos de propósito general que usa [AWS Lambda](https://aws.amazon.com/lambda). Esta arquitectura es ideal para cargas de trabajo que necesitan obtener más de un dato de un objeto. Esta arquitectura sencilla se describe en este [diagrama](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) y en la [entrada de blog "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) del blog AWS Compute. Esta aplicación de ejemplo muestra una aplicación de conversión de Markdown en la que se utiliza Lambda para convertir archivos Markdown en HTML y texto sin formato. - -## Ejecución del ejemplo - -Puede usar la [plantilla de AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) proporcionada para lanzar una pila que muestre la arquitectura de referencia de procesamiento de archivos con Lambda. En la sección *Recursos de la plantilla de CloudFormation* de este documento encontrará información detallada sobre los recursos creados por esta plantilla. - -**Importante** Como el nombre de la pila de AWS CloudFormation se usa en el nombre de los buckets de Amazon Simple Storage Service (Amazon S3), ese nombre de pila solo debe contener letras en minúscula. Use letras en minúscula cuando escriba el nombre de la pila. La plantilla de CloudFormation proporcionada recupera su código Lambda de un bucket de la región us-east-1. Para ejecutar este ejemplo en otra región, modifique la plantilla y cargue el código Lambda en un bucket de esa región. - - -Elija **Launch Stack** para lanzar la plantilla en la región us-east-1 de su cuenta: - -[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -También puede usar el siguiente comando para lanzar la pila mediante el CLI de AWS. Se presupone que ya ha [instalado AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## Probar el ejemplo - -Una vez creada la pila mediante la plantilla de CloudFormation, puede probar el sistema cargando un archivo Markdown en el InputBucket que se creó en la pila. Puede usar este archivo README.md del repositorio como archivo de ejemplo. Después de cargar el archivo, puede ver los archivos HTML y de texto sin formato resultantes en el bucket de salida de la pila. También puede ver los logs de CloudWatch de cada una de las funciones si desea obtener información detallada de la ejecución. - -Puede usar los siguientes comandos para copiar un archivo de ejemplo del bucket de S3 proporcionado en el bucket de entrada de la pila. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -Después de cargar el archivo en el bucket de entrada, puede examinar el bucket de salida para ver los archivos de salida HTML y de texto sin formato resultantes creados por las funciones Lambda. - -También puede ver los logs de CloudWatch generados por las funciones Lambda. - -## Borrado de los recursos del ejemplo - -Para eliminar todos los recursos creados por este ejemplo, proceda del modo siguiente: - -1. Elimine todos los objetos de los buckets de entrada y salida. -1. Elimine la pila de CloudFormation. -1. Elimine los grupos de logs de CloudWatch que contienen los logs de ejecución de las dos funciones de procesamiento. - - - -## Recursos de la plantilla de CloudFormation - -### Parámetros -- **CodeBucket**: nombre del bucket de S3 de la región de la pila que contiene el código de las dos funciones Lambda, ProcessorFunctionOne y ProcessorFunctionTwo. Está establecido de forma predeterminada en el bucket administrado `awslambda-reference-architectures`. - -- **CodeKeyPrefix**: el prefijo de clave del código de la función Lambda correspondiente a `CodeBucket`. De forma predeterminada es `file-processing`. - -### Recursos -[La plantilla proporcionada](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -crea los recursos siguientes: - -- **InputBucket**: un bucket de S3 que almacena los archivos Markdown sin formato. Al cargar un archivo en este bucket se desencadenarán ambas funciones de procesamiento. - -- **OutputBucket**: un bucket de S3 que rellenan las funciones de procesamiento con los archivos convertidos. - -- **InputNotificationTopic**: un tema de Amazon Simple Notification Service (Amazon SNS) usado para invocar a varias funciones Lambda en respuesta a cada notificación de creación de un objeto. - -- **NotificationPolicy**: una política de tema de Amazon SNS que permite a `InputBucket` llamar a la acción `Publish` en el tema. - -- **ProcessorFunctionOne**: una función de AWS Lambda que convierte archivos Markdown en HTML. El paquete de implementación de esta función debe estar ubicado en `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`. - -- **ProcessorFunctionTwo**: una función de AWS Lambda que convierte archivos Markdown en texto sin formato. El paquete de implementación de esta función debe estar ubicado en `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`. - -- **LambdaExecutionRole**: un rol de AWS Identity and Access Management (IAM) usado por las dos funciones Lambda. - -- **RolePolicy**: una política de IAM asociada a **LambdaExecutionRole** que permite que las funciones obtengan objetos de `InputBucket`, coloquen objetos en `OutputBucket` y creen un log en Amazon CloudWatch. - -- **LambdaInvokePermissionOne**: una política que permite a Amazon SNS invocar a ProcessorFunctionOne a partir de las notificaciones de InputNotificationTopic. - -- **LambdaInvokePermissionTwo**: una política que permite a Amazon SNS invocar a ProcessorFunctionTwo a partir de las notificaciones de InputNotificationTopic. - - -## Licencia - -Este ejemplo de arquitectura de referencia tiene licencia de Apache 2.0. diff --git a/README/README-FR.md b/README/README-FR.md deleted file mode 100644 index fc6ec40..0000000 --- a/README/README-FR.md +++ /dev/null @@ -1,84 +0,0 @@ -# Architecture de référence sans serveur : Traitement de fichier en temps réel - -L'architecture de référence de traitement de fichier en temps réel est une architecture à visée générale de traitement de données en parallèle piloté par les événements qui utilise [AWS Lambda](https://aws.amazon.com/lambda). Cette architecture est idéale pour les charges de travail qui ont besoin de plusieurs dérivés de données d'un objet. Cette architecture simple est décrite dans ce [diagramme](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) et le [billet de blog « Fanout S3 Event Notifications to Multiple Endpoints »](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) sur le blog de calcul AWS. Cet exemple d'application illustre une application de conversion Markdown dans laquelle Lambda est utilisé pour convertir des fichiers Markdown en HTML et en texte brut. - -## Exécution de l'exemple - -Vous pouvez utiliser le [template AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) fourni pour lancer une stack qui illustre l'architecture de référence de traitement de fichier Lambda. Vous trouverez des détails sur les ressources créées par ce template dans la section *Ressources de template CloudFormation* de ce document. - -**Important** Comme le nom de stack AWS CloudFormation est utilisé dans le nom des buckets (compartiments) Amazon Simple Storage Service (Amazon S3), le nom de stack ne doit contenir que des lettres minuscules. Utilisez des lettres minuscules lorsque vous tapez le nom de stack. Le template CloudFormation fourni extrait son code Lambda d'un bucket dans la région us-east-1. Pour lancer cet exemple dans une autre région, veuillez modifier le template et charger le code Lambda dans un bucket de cette région. - - -Sélectionnez **Launch Stack** pour lancer le template dans la région us-east-1 dans votre compte : - -[![Lancement de Lambda de traitement de fichier en Virginie du Nord) avec CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -Sinon, vous pouvez utiliser la commande suivante pour lancer la stack à l'aide de l'interface de ligne de commande AWS CLI. Cela présume que vous avez déjà [installé AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## Test de l'exemple - -Une fois que vous avez créé la stack à l'aide du template CloudFormation, vous pouvez tester le système en chargeant un fichier Markdown dans le bucket (compartiment) InputBucket créé dans la stack. Vous pouvez utiliser ce fichier README.md dans le référentiel comme exemple de fichier. Une fois que le fichier a été chargé, vous pouvez afficher les fichiers HTML et en texte brut dans le bucket de sortie de votre stack. Vous pouvez également afficher les journaux CloudWatch pour chacune des fonctions pour voir les détails de leur exécution. - -Vous pouvez utiliser les commandes suivantes pour copier un exemple de fichier depuis le bucket (compartiment) S3 fourni vers le bucket d'entrée de votre stack. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -Une fois que le fichier a été chargé dans le bucket (compartiment) d'entrée, vous pouvez inspecter le bucket de sortie pour afficher les fichiers HTML et en texte brut de sortie créés par les fonctions Lambda. - -Vous pouvez également afficher les journaux CloudWatch générés par les fonctions Lambda. - -## Nettoyage des ressources de l'exemple - -Pour supprimer toutes les ressources créées par cet exemple, procédez comme suit : - -1. Supprimez tous les objets des buckets (compartiments) d'entrée et de sorties. -1. Supprimez la stack CloudFormation. -1. Supprimez les groupes de journaux qui contiennent les journaux d'exécution pour les deux fonctions de traitement. - - - -## Ressources du template CloudFormation - -### Paramètres -- **CodeBucket** - Nom du bucket (compartiment) S3 dans la région de la stack qui contient le code des deux fonctions Lambda, ProcessorFunctionOne et ProcessorFunctionTwo. Par défaut, il s'agit du bucket opéré par `awslambda-reference-architectures`. - -- **CodeKeyPrefix** - Le préfixe de clé pour le code de fonction Lambda relatif à `CodeBucket`. La valeur par défaut est `file-processing`. - -### Ressources -[Le template fourni](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -crée les ressources suivantes : - -- **InputBucket** - Un bucket (compartiment) S3 qui contient les fichiers Markdown bruts. Le chargement d'un fichier dans ce bucket déclenchera les deux fonctions de traitement. - -- **OutputBucket** - Un bucket S3 alimenté par les fonctions de traitement avec les fichiers transformés. - -- **InputNotificationTopic** - Une rubrique Amazon Simple Notification Service (Amazon SNS) utilisée pour appeler plusieurs fonctions Lambda en réponse à chaque notification de création d'objet. - -- **NotificationPolicy** - Une politique de rubrique Amazon SNS qui autorise `InputBucket` à appeler l'action `Publish` sur la rubrique. - -- **ProcessorFunctionOne** - Une fonction AWS Lambda qui convertit des fichiers Markdown en HTML. Le package de déploiement pour cette fonction doit être situé dans `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`. - -- **ProcessorFunctionTwo** - Une fonction AWS Lambda qui convertit des fichiers Markdown en texte brut. Le package de déploiement pour cette fonction doit être situé dans `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`. - -- **LambdaExecutionRole** - Un rôle AWS Identity and Access Management (IAM) utilisé par les deux fonctions Lambda. - -- **RolePolicy** - Une politique IAM associée à **LambdaExecutionRole** qui autorise les fonctions à extraire des objets de `InputBucket`, à les mettre dans `OutputBucket` et à se connecter à Amazon CloudWatch. - -- **LambdaInvokePermissionOne** - Une politique qui permet à Amazon SNS d'appeler ProcessorFunctionOne en fonction de notifications d'InputNotificationTopic. - -- **LambdaInvokePermissionTwo** - Une politique qui permet à Amazon SNS d'appeler ProcessorFunctionTwo en fonction de notifications d'InputNotificationTopic. - - -## Licence - -Cet exemple d'architecture de référence est fourni sous licence sous Apache 2.0. diff --git a/README/README-IT.md b/README/README-IT.md deleted file mode 100644 index b529e19..0000000 --- a/README/README-IT.md +++ /dev/null @@ -1,84 +0,0 @@ -# Architettura di riferimento senza server: elaborazione dei file in tempo reale - -L'architettura di riferimento per l'elaborazione dei file in tempo reale è un'architettura di elaborazione dati parallela, basata sugli eventi e destinata a scopi generici che utilizza [AWS Lambda](https://aws.amazon.com/lambda). Tale architettura è ideale per i carichi di lavoro che necessitano di più di un derivato dati di un oggetto. Questa architettura semplice è descritta in questo [diagramma](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) e nel [post "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) del blog AWS Compute. L'architettura esempio mostra un'applicazione di conversione Markdown in cui Lambda viene utilizzato per convertire file Markdown in HTML e testo semplice. - -## Esecuzione dell'esempio - -È possibile utilizzare il [modello AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) fornito, per avviare uno stack che mostra l'architettura di riferimento per l'elaborazione dei file Lambda. I dettagli sulle risorse create da questo modello sono disponibili nella sezione *CloudFormation Template Resources* di questo documento. - -**Important** Poiché il nome dello stack di AWS CloudFormation è utilizzato nel nome dei bucket di Amazon Simple Storage Service (Amazon S3), il nome di tale stack deve contenere solo lettere minuscole. Utilizzare lettere minuscole durante la digitazione del nome dello stack. Il modello di CloudFormation fornito recupera il suo codice Lambda da un bucket nella regione Stati Uniti orientali 1. Per avviare questo esempio in un'altra regione, modificare il modello e caricare il codice Lambda in un bucket di quella regione. - - -Selezionare **Launch Stack** per avviare il modello nella regione Stati Uniti orientali 1 nell'account personale: - -[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -In alternativa, è possibile utilizzare il comando seguente per avviare lo stack tramite AWS CLI. Ciò presuppone l'[installazione di AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## Test dell'esempio - -Dopo aver creato lo stack tramite il modello di CloudFormation, è possibile eseguire il test del sistema caricando un file Markdown nell'InputBucket creato nello stack. È possibile utilizzare il file README.md nel repository come file di esempio. Una volta caricato il file, è possibile visualizzare i risultanti file HTML e di testo semplice nel bucket di output dello stack. È possibile visualizzare anche i registri di CloudWatch di ciascuna funzione per vedere i dettagli della loro esecuzione. - -È possibile utilizzare i comandi seguenti per copiare un file di esempio dal bucket S3 fornito nel bucket di input dello stack. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -Una volta caricato il file nel bucket di input, è possibile ispezionare il bucket di output per vedere la resa dei file di output HTML e di testo semplice creati dalle funzioni di Lambda. - -È possibile visualizzare anche i registri di CloudWatch generati dalle funzioni di Lambda. - -## Eliminazione delle risorse dell'esempio - -Per eliminare tutte le risorse create da questo esempio, effettuare i seguenti passaggi: - -1. Eliminare tutti gli oggetti nei bucket di input e output. -1. Eliminare lo stack di CloudFormation. -1. Eliminare i gruppi di registro di CloudWatch che contengono i registri di esecuzione per le due funzioni del processore. - - - -## Risorse dei modelli di CloudFormation - -### Parametri -- **CodeBucket**: nome del bucket S3 nella regione dello stack che contiene il codice per le due funzioni di Lambda, ProcessorFunctionOne e ProcessorFunctionTwo. Impostazioni predefinite sul bucket gestito "awslambda-reference-architectures". - -- **CodeKeyPrefix**: prefisso della chiave per il codice delle funzioni di Lambda relativo a "CodeBucket". Impostazioni predefinite su "file-processing". - -### Risorse -[Il modello fornito](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -crea le risorse seguenti: - -- **InputBucket**: bucket S3 che contiene i file Markdown non elaborati. Il caricamento di un file in questo bucket attiva entrambe le funzioni di elaborazione. - -- **OutputBucket**: bucket S3 popolato dalle funzioni del processore con i file trasformati. - -- **InputNotificationTopic**: argomento di Amazon Simple Notification Service (Amazon SNS) utilizzato per richiamare più funzioni di Lambda in risposta alla notifica della creazione di ciascun oggetto. - -- **NotificationPolicy**: policy dell'argomento di Amazon SNS che permette a "InputBucket" di richiedere l'azione "Publish" all'argomento. - -- **ProcessorFunctionOne**: funzione di AWS Lambda che converte i file Markdown in HTML. Il pacchetto di distribuzione per questa funzione deve essere collocato in "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip". - -- **ProcessorFunctionTwo**: funzione di AWS Lambda che converte i file Markdown in testo semplice. Il pacchetto di distribuzione per questa funzione deve essere collocato in "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip". - -- **LambdaExecutionRole**: ruolo di AWS Identity and Access Management (IAM) utilizzato dalle due funzioni di Lambda. - -- **RolePolicy**: policy di IAM associata a **LambdaExecutionRole** che consente alle funzioni di prendere oggetti da "InputBucket", posizionare oggetti in "OutputBucket" e accedere ad Amazon CloudWatch. - -- **LambdaInvokePermissionOne**: policy che consente ad Amazon SNS di richiamare ProcessorFunctionOne in base alle notifiche di InputNotificationTopic. - -- **LambdaInvokePermissionTwo**: policy che consente ad Amazon SNS di richiamare ProcessorFunctionTwo in base alle notifiche di InputNotificationTopic. - - -## Licenza - -La licenza di questo esempio di architettura di riferimento è fornita con Apache 2.0. diff --git a/README/README-JP.md b/README/README-JP.md deleted file mode 100644 index 90a140c..0000000 --- a/README/README-JP.md +++ /dev/null @@ -1,84 +0,0 @@ -# サーバーレスリファレンスアーキテクチャ: リアルタイムのファイル処理 - -リアルタイムのファイル処理リファレンスアーキテクチャは、[AWS Lambda](https://aws.amazon.com/lambda) を使用する、汎用でイベント駆動型の並列データ処理アーキテクチャです。このアーキテクチャは、オブジェクトの複数のデータ派生物を必要とするワークロードに最適です。このシンプルなアーキテクチャについては、この [図](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) および AWS コンピューティングブログの ["Fanout S3 Event Notifications to Multiple Endpoints" ブログの投稿](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) で説明しています。このサンプルアプリケーションは、Markdown ファイルを HTML とプレーンテキストに変換するために Lambda を使用する Markdown 変換アプリケーションを示しています。 - -## 例の実行 - -用意された [AWS CloudFormation テンプレート](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) を使用して、Lambda ファイル処理のリファレンスアーキテクチャを示すスタックを起動できます。このテンプレートで作成されるリソースの詳細は、このドキュメントの「*CloudFormation テンプレートのリソース*」セクションで説明しています。 - -**重要** AWS CloudFormation スタック名が Amazon Simple Storage Service (Amazon S3) バケット名で使用されるため、そのスタック名には小文字のみを含める必要があります。スタック名を入力するときは小文字を使用してください。用意された CloudFormation テンプレートは、us-east-1 region リージョンのバケットからその Lambda コードを取得します。別のリージョンでこのサンプルを起動するには、テンプレートを変更し、そのリージョンのバケットに Lambda コードをアップロードします。 - - -[**Launch Stack**] を選択して、アカウントで us-east-1 リージョンにテンプレートを起動します。 - -[![CloudFormation を使用して Lambda ファイル処理を北バージニアに起動する](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -代わりに、次のコマンドで、AWS CLI を使用してスタックを起動できます。この例では、すでに [AWS CLI をインストール済み](http://docs.aws.amazon.com/cli/latest/userguide/installing.html) であることを前提としています。 - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## 例のテスト - -CloudFormation テンプレートを使用してスタックを作成したら、スタックで作成された InputBucket に Markdown ファイルをアップロードしてシステムをテストできます。レポジトリ内のこの README.md ファイルは、サンプルファイルとして使用できます。ファイルがアップロードされたら、生成される HTML とプレーンテキストファイルをスタックの出力バケットで表示できます。各関数の CloudWatch ログを表示して、実行の詳細を確認することもできます。 - -次のコマンドを使用して、用意された S3 バケットからスタックの入力バケットにサンプルファイルをコピーすることができます。 - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -ファイルが入力バケットにアップロードされたら、出力バケットを検査し、Lambda 関数によって作成され、レンダリングされた HTML およびプレーンテキスト出力ファイルを表示できます。 - -Lambda 関数によって生成された CloudWatch ログを表示することもできます。 - -## リソース例のクリーンアップ - -この例で作成されたすべてのリソースを削除するには、次の操作を行います。 - -1.入出力バケットのすべてのオブジェクトを削除します。 -1.CloudFormation スタックを削除します。 -1.2 つのプロセッサ関数の実行ログを含む CloudWatch ロググループを削除します。 - - - -## CloudFormation テンプレートのリソース - -### パラメーター -- **CodeBucket** - 2 つの Lambda 関数 (ProcessorFunctionOne および ProcessorFunctionTwo) のコードを含む、スタックのリージョンの S3 バケットの名前。デフォルトはマネージドバケット `awslambda-reference-architectures` です。 - -- **CodeKeyPrefix** - `CodeBucket` に相対的な Lambda 関数コードのキープレフィックス。デフォルトは `file-processing` です。 - -### リソース -[用意されたテンプレート](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - では以下のリソースが作成されます。 - -- **InputBucket** - Markdown の raw ファイルを保持する S3 バケット。このバケットにファイルをアップロードすると、両方の処理関数がトリガーされます。 - -- **OutputBucket** - プロセッサ関数によって、変換されたファイルが入力される S3 バケット。 - -- **InputNotificationTopic** - 各オブジェクトの作成通知に応答して複数の Lambda 関数を呼び出すために使用される Amazon Simple Notification Service (Amazon SNS) トピック。 - -- **NotificationPolicy** - トピックで `Publish` アクションを呼び出す `InputBucket` を許可する Amazon SNS トピックポリシー。 - -- **ProcessorFunctionOne** - Markdown ファイルを HTML に変換する AWS Lambda 関数。この関数のデプロイパッケージは `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip` にあります。 - -- **ProcessorFunctionTwo** - Markdown ファイルをプレーンテキストに変換する AWS Lambda 関数。この関数のデプロイパッケージは `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip` にあります。 - -- **LambdaExecutionRole** - 2 つの Lambda 関数によって使用される AWS Identity and Access Management (IAM) ロール。 - -- **RolePolicy** - 関数が `InputBucket` からオブジェクトを取得し、オブジェクトを `OutputBucket` に配置して、Amazon CloudWatch に記録できるようにする **LambdaExecutionRole** に関連付けられた IAM ポリシー。 - -- **LambdaInvokePermissionOne** - Amazon SNS が InputNotificationTopic からの通知に基づいて ProcessorFunctionOne を呼び出せるようにするポリシー。 - -- **LambdaInvokePermissionTwo** - Amazon SNS が InputNotificationTopic からの通知に基づいて ProcessorFunctionTwo を呼び出せるようにするポリシー。 - - -## ライセンス - -このリファレンスアーキテクチャサンプルは Apache 2.0 でライセンスされています。 diff --git a/README/README-KR.md b/README/README-KR.md deleted file mode 100644 index c63e05c..0000000 --- a/README/README-KR.md +++ /dev/null @@ -1,84 +0,0 @@ -# 서버 없는 레퍼런스 아키텍처: 실시간 파일 처리 - -실시간 파일 처리 레퍼런스 아키텍처는 이벤트 중심의 범용 병렬 데이터 처리 아키텍처이며 [AWS Lambda](https://aws.amazon.com/lambda)를 사용합니다. 이 아키텍처는 객체의 데이터 파생이 하나 이상 필요한 워크로드에 적합합니다. 이 간단한 아키텍처는 이 [diagram](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) 및 AWS Compute 블로그의 ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/)에 설명되어 있습니다. 이 단순한 애플리케이션은 Lambda를 사용하여 Markdown 파일을 HTML 및 일반 텍스트로 변환하는 Markdown 변환 애플리케이션을 보여줍니다. - -## 예제 실행 - -제공된 [AWS CloudFormation template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template)을 사용하여 Lambda 파일 처리 레퍼런스 아키텍처를 보여주는 스택을 시작할 수 있습니다. 이 템플릿을 통해 생성된 리소스에 대한 세부 정보는 본 문서의 *CloudFormation 템플릿 리소스* 단원에서 제공됩니다. - -**중요** AWS CloudFormation 스택 이름은 Amazon Simple Storage Service(Amazon S3) 버킷에서 사용되므로 이 스택 이름은 소문자만 포함해야 합니다. 스택 이름을 입력할 때는 소문자만 사용하십시오. 제공된 CloudFormation 템플릿은 us-east-1 리전의 버킷에서 Lambda 코드를 가져옵니다. 이 샘플을 다른 리전에서 시작하려면 템플릿을 수정하고 Lambda 코드를 해당 리전의 버킷에 업로드하십시오. - - -**Launch Stack**을 선택하여 계정의 us-east-1 리전에서 템플릿을 시작합니다. - -[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -그 밖에도 다음 명령을 사용하여 AWS CLI를 사용하여 스택을 시작할 수 있습니다. 이 단계를 실행하기 위해 이미 [installed the AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)를 완료했다고 가정합니다. - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## 예제 테스트 - -CloudFormation 템플릿을 사용하여 스택을 만든 후 Markdown 파일을 스택에 만들어진 InputBucket으로 업로드하여 시스템을 테스트할 수 있습니다. 리포지토리의 이 README.md 파일을 예제 파일로 사용할 수 있습니다. 파일을 업로드한 후 스택의 출력 버킷에서 결과 HTML과 일반 텍스트 파일을 확인할 수 있습니다. 각 함수의 CloudWatch 로그를 통해 각각의 실행 세부 정보를 볼 수도 있습니다. - -다음 명령을 사용하여 제공된 S3 버킷에서 샘플 파일을 스택의 입력 버킷으로 복사할 수 있습니다. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -파일을 입력 버킷으로 업로드한 후 출력 버킷을 검사하여 렌더링된 HTML과 Lambda 함수에 의해 생성된 일반 텍스트 출력 파일을 확인할 수 있습니다. - -Lambda 함수에 의해 생성된 CloudWatch 로그도 볼 수 있습니다. - -## 예제 리소스 정리 - -이 예제에서 생성된 모든 리소스를 제거하려면 다음을 수행합니다. - -1. 입력 및 출력 버킷에서 모든 객체를 삭제합니다. -1. CloudFormation 스택을 삭제합니다. -1. 두 프로세서 함수에 대한 실행 정보가 포함된 CloudWatch 로그 그룹을 삭제합니다. - - - -## CloudFormation 템플릿 리소스 - -### 파라미터 -- **CodeBucket** - 스택의 리전에 있는 S3 버킷의 이름이며 두 Lambda 함수(ProcessorFunctionOne 및 ProcessorFunctionTwo)에 대한 코드가 포함되어 있습니다. 관리형 버킷 `awslambda-reference-architectures`의 기본값입니다. - -- **CodeKeyPrefix** - `CodeBucket`과 관련된 Lambda 함수 코드의 키 접두사입니다. `file-processing`의 기본값입니다. - -### 리소스 -[The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template)은 -다음 리소스를 만듭니다. - -- **InputBucket** - 원시 Markdown 파일이 저장된 S3 버킷입니다. 이 버킷에 파일을 업로드하면 두 처리 함수가 트리거됩니다. - -- **OutputBucket** - 변형된 파일이 있는 프로세서 함수에 의해 채워지는 S3 버킷입니다. - -- **InputNotificationTopic** - 각 객체 생성 알림에 대한 응답으로 여러 Lambda 함수를 호출하는 Amazon Simple Notification Service(Amazon SNS) 주제입니다. - -- **NotificationPolicy** - `InputBucket`이 주제에 대한 `Publish` 작업을 호출할 수 있도록 허용하는 Amazon SNS 주제 정책입니다. - -- **ProcessorFunctionOne** - Markdown 파일을 HTML로 변환하는 AWS Lambda 함수입니다. 이 함수의 배포 패키지가 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip`에 있어야 합니다. - -- **ProcessorFunctionTwo** - Markdown 파일을 일반 텍스트로 변환하는 AWS Lambda 함수입니다. 이 함수의 배포 패키지가 `s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip`에 있어야 합니다. - -- **LambdaExecutionRole** - 두 Lambda 함수에서 사용하는 AWS Identity and Access Management(IAM) 역할입니다. - -- **RolePolicy** - **LambdaExecutionRole**과 연결된 IAM 정책이며 함수가 `InputBucket`으로부터 객체를 얻고, `OutputBucket`에 객체를 추가하고 Amazon CloudWatch에 로그를 기록할 수 있도록 허용합니다. - -- **LambdaInvokePermissionOne** - Amazon SNS가 InputNotificationTopic의 알림을 기반으로 ProcessorFunctionOne을 호출할 수 있게 하는 정책입니다. - -- **LambdaInvokePermissionTwo** - Amazon SNS가 InputNotificationTopic의 알림을 기반으로 ProcessorFunctionTwo를 호출할 수 있게 하는 정책입니다. - - -## 라이선스 - -이 레퍼런스 아키텍처 샘플은 Apache 2.0에서 라이선스가 부여되었습니다. diff --git a/README/README-PT.md b/README/README-PT.md deleted file mode 100644 index e84ee94..0000000 --- a/README/README-PT.md +++ /dev/null @@ -1,84 +0,0 @@ -# Arquitetura de referência sem servidor: processamento de arquivos em tempo real - -A arquitetura de referência de Processamento de arquivos em tempo real é uma arquitetura de processamento de uso geral, com base em evento e com dados paralelos que usa [AWS Lambda](https://aws.amazon.com/lambda). Esta arquitetura é ideal para cargas de trabalho que precisam de mais de um derivado de dados de um objeto. Esta arquitetura simples está descrita neste [diagrama](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) e em [postagem do blog "Fanout S3 Event Notifications to Multiple Endpoints"](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) no Blog de computação da AWS. Esta aplicação da amostra demonstra uma aplicação de conversão Markdown em que o Lambda é usado para converter arquivos Markdown para HTML e texto sem formatação. - -## Executando o exemplo - -Você pode usar o [modelo AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) fornecido para iniciar uma pilha que demonstra a arquitetura de referência de processamento de arquivo Lambda. Os detalhes sobre os recursos criados por este modelo são fornecidos na seção *Recursos do modelo do CloudFormation* deste documento. - -**Importante** Como o nome da pilha do AWS CloudFormation é usado no nome dos buckets Amazon Simple Storage Service (Amazon S3), o nome da pilha deve conter apenas letras minúsculas. Use letras minúsculas ao digitar o nome da pilha. O modelo do CloudFormation fornecido recupera seu código do Lambda de um bucket na região us-east-1. Para iniciar esta amostra em outra região, modifique o modelo e faça o upload do código do Lambda em um bucket nessa região. - - -Escolha **Launch Stack** para iniciar o modelo na região us-east-1 em sua conta: - -[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -Alternativamente, você pode usar o seguinte comando para iniciar a pilha usando o AWS CLI. Isso pressupõe que você já [instalou o AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## Testando o exemplo - -Depois de ter criado a pilha usando o modelo CloudFormation, você pode testar o sistema de upload de um arquivo Markdown para o InputBucket que foi criado na pilha. Você pode usar esse arquivo README.md no repositório como um arquivo de exemplo. Depois que o arquivo foi carregado, você pode ver os arquivos HTML e os textos sem formatação resultantes do bucket de saída da pilha. Você também pode visualizar os registros de CloudWatch para cada uma das funções, a fim de ver os detalhes da sua execução. - -Você pode usar os seguintes comandos para copiar um arquivo de amostra do bucket S3 fornecido dentro do bucket de entrada da sua pilha. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -Depois que o arquivo foi carregado para o bucket de entrada, você pode inspecionar o bucket de saída para ver os arquivos de saída HTML e texto sem formatação criados pelas funções lambda. - -Você também pode visualizar os registros do CloudWatch gerados pelas funções lambda. - -## Limpando os recursos de exemplo - -Para remover todos os recursos criados por este exemplo, faça o seguinte: - -1. Exclua todos os objetos nos buckets de entrada e saída. -1. Exclua a pilha do CloudFormation. -1. Exclua os grupos de registro do CloudWatch que contêm os registros de execução para as duas funções de processador. - - - -## Recursos do modelo do CloudFormation - -### Parâmetros -- **CodeBucket** - Nome do bucket S3 na região da pilha que contém o código para as duas funções Lambda, ProcessorFunctionOne e ProcessorFunctionTwo. O padrão para o bucket gerenciado é "awslambda-reference-architectures". - -- **CodeKeyPrefix** - O prefixo de chaves para o código da função Lambda em relação ao "CodeBucket". O padrão é "file-processing". - -### Recursos -[O modelo fornecido](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -cria os seguintes recursos: - -- **InputBucket** - Um bucket S3 que contém os arquivos Markdown não processados. Fazer upload de um arquivo para este bucket irá desencadear ambas as funções de processamento. - -- **OutputBucket** - Um bucket S3 que é preenchido pelas funções do processador com os arquivos transformados. - -- **InputNotificationTopic** - Um tópico Amazon Simple Notification Service (Amazon SNS) usado para chamar múltiplas funções Lambda em resposta a cada notificação de criação do objeto. - -- **NotificationPolicy** - Uma política de tópico Amazon SNS que permite "Input Bucket" para chamar a ação "Publish" sobre o tema. - -- **ProcessorFunctionOne** - Uma função Lambda AWS que converte os arquivos Markdown para HTML. O pacote de implementação para esta função deve estar localizado em "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip". - -- **ProcessorFunctionTwo** - Uma função Lambda da AWS que converte arquivos Markdown para texto sem formatação. O pacote de implementação para esta função deve estar localizado em "s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip". - -- **LambdaExecutionRole** - Uma função AWS Identity and Access Management (IAM) usada pelas duas funções Lambda. - -- **RolePolicy** - Uma política de IAM associada ao **LambdaExecutionRole** que permite às funções obter objetos do "InputBucket", colocar objeto para "OutputBucket" e registro para o Amazon CloudWatch. - -- **LambdaInvokePermissionOne** - Uma política que permite ao Amazon SNS invocar ProcessorFunctionOne com base em notificações dos InputNotificationTopic. - -- **LambdaInvokePermissionTwo** - Uma política que permite ao Amazon SNS invocar ProcessorFunctionTwo com base nas notificações do InputNotificationTopic. - - -## Licença - -Este exemplo de arquitetura de referência é licenciado sob a licença do Apache 2.0. diff --git a/README/README-RU.md b/README/README-RU.md deleted file mode 100644 index 716621a..0000000 --- a/README/README-RU.md +++ /dev/null @@ -1,84 +0,0 @@ -# Эталонная бессерверная архитектура: обработка файлов в реальном времени - -Эталонная архитектура для обработки файлов в реальном времени – это универсальная архитектура параллельной обработки данных на основе событий, которая использует [AWS Lambda](https://aws.amazon.com/lambda). Она идеально подходит для рабочих нагрузок, для которых требуется несколько производных данных объекта. Эта простая архитектура описана на этой [схеме](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) и в ["Fanout S3 Event Notifications to Multiple Endpoints" blog post](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) в блоге AWS Compute. В примере приложения Lambda используется для преобразования файлов Markdown в HTML и текст. - -## Запуск примера - -Вы можете использовать предоставленный [шаблон AWS CloudFormation](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template), чтобы запустить стек, демонстрирующий эталонную архитектуру для обработки файлов с помощью Lambda. Сведения о ресурсах, созданных этим шаблоном, представлены в разделе «Ресурсы шаблона CloudFormation» этого документа. - -**Важно!** Так как имя стека AWS CloudFormation используется в имени корзин Amazon Simple Storage Service (Amazon S3), оно должно содержать только строчные буквы. При вводе имени стека используйте только строчные буквы. Предоставленный шаблон CloudFormation извлекает код Lambda из корзины в регионе us-east-1. Чтобы запустить пример в другом регионе, измените шаблон и загрузите код Lambda в корзину в этом регионе. - - -Выберите **Launch Stack**, чтобы запустить шаблон в регионе us-east-1 в вашем аккаунте: - -[![Запуск обработки файлов Lambda в Северной Вирджинии с помощью CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -Или же выполните следующую команду, чтобы запустить стек с помощью AWS CLI. При этом предполагается, что вы уже [установили AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## Тестирование примера - -После создания стека с помощью шаблона CloudFormation вы можете проверить систему, загрузив файл Markdown в корзину InputBucket, созданную стеком. Для примера можно использовать файл README.md в этом репозитории. После передачи файла вы увидите полученные HTML-файл и текстовый файл в выходной корзине стека. Вы также можете просмотреть сведения о выполнении каждой функции в журналах CloudWatch. - -Выполните следующие команды, чтобы скопировать пример файла из корзины S3 во входную корзину вашего стека. - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -После передачи файла во входную корзину вы можете просмотреть выходную корзину, где расположены полученные HTML-файл и текстовый файл, созданные функциями Lambda. - -Вы также можете просмотреть журналы CloudWatch, созданные функциями Lambda. - -## Очистка ресурсов примера - -Чтобы удалить все ресурсы, созданные этим примером, выполните следующие действия. - -1. Удалите все объекты во входной и выходной корзинах. -1. Удалите стек CloudFormation. -1. Удалите группы журналов CloudWatch, содержащие журналы выполнения двух функций обработки. - - - -## Ресурсы шаблона CloudFormation - -### Параметры -- **CodeBucket** – имя корзины S3 в регионе стека, содержащей код для двух функций Lambda: ProcessorFunctionOne и ProcessorFunctionTwo. По умолчанию используется управляемая корзина awslambda-reference-architectures. - -- **CodeKeyPrefix** – префикс ключа для кода функции Lambda относительно CodeBucket. Значение по умолчанию: file-processing. - -### Ресурсы -[Предоставленный шаблон](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -создает следующие ресурсы. - -- **InputBucket** – это корзина S3, в которой размещены файлы Markdown. При загрузке файла в эту корзину вызываются обе функции обработки. - -- **OutputBucket** – в эту корзину S3 функции обработки добавляют преобразованные файлы. - -- **InputNotificationTopic** – тема Amazon Simple Notification Service (Amazon SNS), используемая для вызова нескольких функций Lambda в ответ на каждое оповещение о создании объекта. - -- **NotificationPolicy** – политика темы Amazon SNS, позволяющая InputBucket вызвать действие Publish для темы. - -- **ProcessorFunctionOne** – эта функция AWS Lambda преобразует файлы Markdown в HTML. Пакет развертывания для нее должен быть расположен по следующему пути: s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip. - -- **ProcessorFunctionTwo** – эта функция AWS Lambda преобразует файлы Markdown в текстовые файлы. Пакет развертывания для нее должен быть расположен по следующему пути: s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip. - -- **LambdaExecutionRole** – эту роль AWS Identity and Access Management (IAM) используют две функции Lambda. - -- **RolePolicy** – политика IAM, связанная с ролью LambdaExecutionRole, которая позволяет функциям извлекать объекты из корзины InputBucket, добавлять объекты в корзину OutputBucket и вести журнал в Amazon CloudWatch. - -- **LambdaInvokePermissionOne** – политика, позволяющая Amazon SNS вызывать функцию ProcessorFunctionOne в ответ на оповещения от InputNotificationTopic. - -- **LambdaInvokePermissionTwo** – политика, позволяющая Amazon SNS вызывать функцию ProcessorFunctionTwo в ответ на оповещения от InputNotificationTopic. - - -## Лицензия - -Данная эталонная архитектура лицензирована в соответствии с лицензией Apache 2.0. diff --git a/README/README-TW.md b/README/README-TW.md deleted file mode 100644 index 7627ab4..0000000 --- a/README/README-TW.md +++ /dev/null @@ -1,84 +0,0 @@ -# 無伺服器參考架構:即時檔案處理 - -即時檔案處理參考架構是利用 [AWS Lambda](https://aws.amazon.com/lambda) 運作的一般用途、事件驅動的平行資料處理架構。此架構很適合需要一個以上的物件資料衍生物的工作負載。在 [示意圖](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdf) 與 AWS 運算部落格的 ["Fanout S3 Event Notifications to Multiple Endpoints" 部落格文章](https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/) 中,有關於此簡易架構的說明。此簡易的應用程式示範 Markdown 轉換應用程式,Lambda 使用此應用程式將 Markdown 檔案轉換為 HTML 與純文字。 - -## 執行範例 - -您可以使用系統提供的 [AWS CloudFormation 範本](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) 啟動示範 Lambda 檔案處理參考架構的堆疊。本文件的 *CloudFormation 範本資源* 章節中有提供關於此範例所建立資源的詳細資訊。 - -**重要** 由於 AWS CloudFormation 堆疊名稱將使用於 Amazon Simple Storage Service (Amazon S3) 儲存貯體的名稱,因此堆疊名稱只能包含小寫字母。輸入堆疊名稱時,請使用小寫字母。系統提供的 CloudFormation 範本會從 us-east-1 區域的儲存貯體取回其 Lambda 程式碼。若要在其他區域啟動此範例,請修改範本並將 Lambda 程式碼上傳至該區域的儲存貯體。 - - -選擇 **Launch Stack** 以啟動您帳戶的 us-east-1 區域中的範本。 - -[![Launch Lambda File Processing into North Virginia with CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/images/cloudformation-launch-stack-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=lambda-file-processing&templateURL=https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) - -或者,您可以使用以下命令啟動堆疊以使用 AWS CLI。這裡假設您已 [安裝 AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)。 - -```bash -aws cloudformation create-stack \ - --stack-name lambda-file-processing \ - --template-url https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template \ - --capabilities CAPABILITY_IAM -``` - -## 測試範例 - -在您使用 CloudFormation 範本建立堆疊之後,可藉由將 Markdown 檔案上傳至於堆疊中建立的 InputBucket 以測試系統。您可以使用儲存庫中的 README.md 檔案做為範例檔案。在檔案上傳之後,可在您的堆疊的輸出儲存貯體中看到結果的 HTML 與純文字檔案。您亦可檢視各項功能的 CloudWatch 記錄以查看其執行的詳細資訊。 - -您可以使用以下命令,將範例檔案從系統提供的 S3 儲存貯體複製至您的堆疊的輸入儲存貯體。 - -``` -BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-processing --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp s3://awslambda-reference-architectures/file-processing/example.md s3://$BUCKET/example.md -``` - -在檔案上傳至輸入儲存貯體之後,您可以檢查輸出儲存貯體以查看經過 Lambda 功能處理的 HTML 與純文字輸出檔案。 - -您亦可檢視由 Lambda 功能產生的 CloudWatch 記錄。 - -## 清除應用範例資源 - -若要移除此範例建立的所有資源,請執行以下動作: - -1.刪除輸入與輸出儲存貯體中的所有物件。 -1.刪除 CloudFormation 堆疊。 -1.刪除包含兩個處理器功能的執行記錄的 CloudWatch 記錄群組。 - - - -## CloudFormation 範本資源 - -### 參數 -- **CodeBucket** - 包含兩個 Lambda 功能 ProcessorFunctionOne 與 ProcessorFunctionTwo 的堆疊區域中的 S3 儲存貯體的名稱。預設為受管儲存貯體「awslambda-reference-architectures」。 - -- **CodeKeyPrefix** - 與「CodeBucket」相關的 Lambda 功能程式碼的金鑰前綴。預設為「file-processing」。 - -### 資源 -[系統提供的範本](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda_file_processing.template) -建立以下資源: - -- **InputBucket** - 存放原始 Markdown 檔案的 S3 儲存貯體。上傳檔案至此儲存貯體將觸發兩個處理功能。 - -- **OutputBucket** - 由處理器功能與轉換後的檔案所填入的 S3 儲存貯體。 - -- **InputNotificationTopic** - 用於呼叫多個 Lambda 功能以回應各個物件建立通知的 Amazon Simple Notification Service (Amazon SNS) 主題。 - -- **NotificationPolicy** - 允許「InputBucket」呼叫主題上的「Publish」動作的 Amazon SNS 主題政策。 - -- **ProcessorFunctionOne** - 可將 Markdown 檔案轉換為 HTML 的 AWS Lambda 功能。此功能的部署套件必須位於「s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-1.zip」。 - -- **ProcessorFunctionTwo** - 可將 Markdown 檔案轉換為純文字的 AWS Lambda 功能。此功能的部署套件必須位於「s3://[CodeBucket]/[CodeKeyPrefix]/data-processor-2.zip」。 - -- **LambdaExecutionRole** - 由兩個 Lambda 功能使用的 AWS Identity and Access Management (IAM) 角色。 - -- **RolePolicy** - 與 **LambdaExecutionRole** 關聯的 IAM 政策,它允許功能從「InputBucket」取得物件、將物件放入「OutputBucket」,以及記錄至 Amazon CloudWatch。 - -- **LambdaInvokePermissionOne** - 可讓 Amazon SNS 依據來自 InputNotificationTopic 的通知以呼叫 ProcessorFunctionOne 的一個政策。 - -- **LambdaInvokePermissionTwo** - 可讓 Amazon SNS 依據來自 InputNotificationTopic 的通知以呼叫 ProcessorFunctionTwo 的一個政策。 - - -## 授權 - -此參考架構範例依據 Apache 2.0 授權。 diff --git a/file_processing.yml b/file_processing.yml deleted file mode 100644 index 1c666c7..0000000 --- a/file_processing.yml +++ /dev/null @@ -1,248 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: SAM template to create file processing architecture represented at TBD. - -Resources: - InputBucket: - Type: AWS::S3::Bucket - - CloudTrailBucket: - Type: AWS::S3::Bucket - - InputBucketTrail: - DependsOn: CloudTrailBucketPolicy - Type: AWS::CloudTrail::Trail - Properties: - S3BucketName: !Ref CloudTrailBucket - EventSelectors: - - DataResources: - - Type: 'AWS::S3::Object' - Values: - - !Sub |- - arn:aws:s3:::${InputBucket}/ - IncludeManagementEvents: false - ReadWriteType: WriteOnly - IsLogging: true - - CloudTrailBucketPolicy: - Type: AWS::S3::BucketPolicy - DependsOn: CloudTrailBucket - Properties: - Bucket: !Ref CloudTrailBucket - PolicyDocument: - Version: "2012-10-17" - Statement: - - - Sid: "AWSCloudTrailAclCheck" - Effect: "Allow" - Principal: - Service: "cloudtrail.amazonaws.com" - Action: "s3:GetBucketAcl" - Resource: !Sub |- - arn:aws:s3:::${CloudTrailBucket} - - - Sid: "AWSCloudTrailWrite" - Effect: "Allow" - Principal: - Service: "cloudtrail.amazonaws.com" - Action: "s3:PutObject" - Resource: - !Sub |- - arn:aws:s3:::${CloudTrailBucket}/AWSLogs/${AWS::AccountId}/* - Condition: - StringEquals: - s3:x-amz-acl: "bucket-owner-full-control" - - FileProcessingQueuePolicy: - # https://forums.aws.amazon.com/message.jspa?messageID=743094 - Type: AWS::SQS::QueuePolicy - Properties: - Queues: - - !Ref ConversionQueue - - !Ref SentimentQueue - PolicyDocument: - Version: '2012-10-17' - Statement: - - - Effect: Allow - Principal: - AWS: '*' - Action: - - sqs:SendMessage - Resource: !GetAtt ConversionQueue.Arn - Condition: - ArnEquals: - aws:SourceArn: !GetAtt FileProcessingRule.Arn - - - Effect: Allow - Principal: - AWS: '*' - Action: - - sqs:SendMessage - Resource: !GetAtt SentimentQueue.Arn - Condition: - ArnEquals: - aws:SourceArn: !GetAtt FileProcessingRule.Arn - - FileProcessingRule: - Type: AWS::Events::Rule - DependsOn: - - ConversionQueue - - SentimentQueue - Properties: - Description: Rule to capture S3 PutObject events - EventPattern: - source: - - aws.s3 - detail-type: - - AWS API Call via CloudTrail - detail: - eventSource: - - s3.amazonaws.com - eventName: - - PutObject - requestParameters: - bucketName: - - !Ref InputBucket - State: 'ENABLED' - Targets: - - Arn: !GetAtt ConversionQueue.Arn - Id: Convert - - Arn: !GetAtt SentimentQueue.Arn - Id: Sentiment - - ConversionQueue: - Type: AWS::SQS::Queue - DependsOn: ConversionDlq - Properties: - VisibilityTimeout: 300 - RedrivePolicy: - deadLetterTargetArn: !GetAtt ConversionDlq.Arn - maxReceiveCount: 5 - - ConversionDlq: - Type: AWS::SQS::Queue - Properties: - VisibilityTimeout: 300 - - ConversionFunction: - Type: 'AWS::Serverless::Function' - DependsOn: ConversionTargetBucket - Properties: - Handler: conversion.handler - Runtime: python3.6 - CodeUri: ./src/conversion/ - Policies: - - SQSPollerPolicy: - QueueName: - !GetAtt ConversionQueue.Arn - - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - s3:GetObject - - s3:GetObjectAcl - - s3:GetObjectVersion - Resource: - Fn::Join: - - '' - - - 'arn:aws:s3:::' - - Ref: InputBucket - - '/*' - - Effect: Allow - Action: - - s3:ListBucket - Resource: !GetAtt InputBucket.Arn - - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: s3:PutObject - Resource: - Fn::Join: - - '' - - - 'arn:aws:s3:::' - - Ref: ConversionTargetBucket - - '/*' - Environment: - Variables: - TARGET_BUCKET: !Ref ConversionTargetBucket - Events: - ConversionQueueReaderEvent: - Type: SQS - Properties: - Queue: !GetAtt ConversionQueue.Arn - BatchSize: 10 - - ConversionTargetBucket: - Type: AWS::S3::Bucket - - SentimentQueue: - Type: AWS::SQS::Queue - DependsOn: SentimentDlq - Properties: - VisibilityTimeout: 300 - RedrivePolicy: - deadLetterTargetArn: !GetAtt SentimentDlq.Arn - maxReceiveCount: 5 - - SentimentDlq: - Type: AWS::SQS::Queue - Properties: - VisibilityTimeout: 300 - - SentimentFunction: - Type: 'AWS::Serverless::Function' - Properties: - Handler: sentiment.handler - Runtime: python3.6 - CodeUri: ./src/sentiment/ - Policies: - - SQSPollerPolicy: - QueueName: - !GetAtt SentimentQueue.Arn - - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - s3:GetObject - - s3:GetObjectAcl - - s3:GetObjectVersion - Resource: - Fn::Join: - - '' - - - 'arn:aws:s3:::' - - Ref: InputBucket - - '/*' - - Effect: Allow - Action: - - s3:ListBucket - Resource: !GetAtt InputBucket.Arn - - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - comprehend:DetectSentiment - Resource: '*' - - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - dynamodb:PutItem - Resource: !GetAtt SentimentTable.Arn - Environment: - Variables: - SENTIMENT_TABLE: !Ref SentimentTable - Events: - SentimentQueueReaderEvent: - Type: SQS - Properties: - Queue: !GetAtt SentimentQueue.Arn - BatchSize: 10 - - SentimentTable: - Type: AWS::Serverless::SimpleTable - TableName: ref-arch-filearch-document-sentiment - PrimaryKey: - Name: 's3_object' - Type: String - \ No newline at end of file diff --git a/lambda_file_processing.template b/lambda_file_processing.template deleted file mode 100644 index dac389a..0000000 --- a/lambda_file_processing.template +++ /dev/null @@ -1,258 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "CFN template to create architecture represented at https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/.", - "Parameters": { - "CodeBucket": { - "Description": "S3 Bucket containing Lambda deployment packages and sub-stack templates", - "Type": "String", - "Default" : "awslambda-reference-architectures" - }, - "CodeKeyPrefix": { - "Description": "The key prefix for all deployment packages and sub-stack templates within CodeBucket", - "Type": "String", - "Default" : "file-processing" - } - }, - "Resources": { - "InputBucket": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": {"Fn::Join" : ["-", [{"Ref" : "AWS::StackName"}, {"Ref" : "AWS::AccountId"}, "files"]]}, - "NotificationConfiguration": { - "TopicConfigurations": [ - { - "Event": "s3:ObjectCreated:*", - "Topic": { "Ref" : "InputNotificationTopic" } - } - ] - } - }, - "DependsOn": "NotificationPolicy" - }, - "OutputBucket": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": {"Fn::Join" : ["-", [{"Ref" : "InputBucket"}, "out"]]} - } - }, - "InputNotificationTopic": { - "Type": "AWS::SNS::Topic", - "Properties": { - "Subscription": [ - { - "Endpoint": { - "Fn::GetAtt": [ - "ProcessorFunctionOne", - "Arn" - ] - }, - "Protocol": "lambda" - }, - { - "Endpoint": { - "Fn::GetAtt": [ - "ProcessorFunctionTwo", - "Arn" - ] - }, - "Protocol": "lambda" - } - ] - } - }, - "NotificationPolicy": { - "Type": "AWS::SNS::TopicPolicy", - "Properties": { - "PolicyDocument": { - "Id": "PushBucketNotificationPolicy", - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "AllowBucketToPushNotificationEffect", - "Effect": "Allow", - "Principal": { - "Service": "s3.amazonaws.com" - }, - "Action": "sns:Publish", - "Resource": { - "Ref": "InputNotificationTopic" - }, - "Condition": { - "ArnLike": { - "aws:SourceArn": { - "Fn::Join": [ - "", - [ - "arn:aws:s3:*:*:", - {"Fn::Join" : ["-", [{"Ref" : "AWS::StackName"}, {"Ref" : "AWS::AccountId"}, "files"]]} - ] - ] - } - } - } - } - ] - }, - "Topics": [ - { - "Ref": "InputNotificationTopic" - } - ] - } - }, - "ProcessorFunctionOne": { - "Type": "AWS::Lambda::Function", - "Properties": { - "Code": { - "S3Bucket": { "Ref": "CodeBucket" }, - "S3Key": {"Fn::Join" : ["/", [{"Ref": "CodeKeyPrefix"}, "data-processor-1.zip"]]} - }, - "Description": "Data Processor One", - "Handler": "data-processor-1.handler", - "Role": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - }, - "Runtime": "nodejs6.10", - "MemorySize": 128, - "Timeout": 3 - } - }, - "ProcessorFunctionTwo": { - "Type": "AWS::Lambda::Function", - "Properties": { - "Code": { - "S3Bucket": { "Ref": "CodeBucket" }, - "S3Key": {"Fn::Join" : ["/", [{"Ref": "CodeKeyPrefix"}, "data-processor-2.zip"]]} - }, - "Description": "Data Processor Two", - "Handler": "data-processor-2.handler", - "Role": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - }, - "Runtime": "nodejs6.10", - "MemorySize": 128, - "Timeout": 3 - } - }, - "LambdaExecutionRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Service": [ - "lambda.amazonaws.com" - ] - }, - "Action": [ - "sts:AssumeRole" - ] - } - ] - }, - "Path": "/" - } - }, - "RolePolicy": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": "root", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "Resource": "arn:aws:logs:*:*:*" - }, - { - "Effect": "Allow", - "Action": [ - "s3:GetObject" - ], - "Resource": { "Fn::Join": ["", ["arn:aws:s3:::", { "Ref" : "InputBucket" }, "/*"]]} - }, - { - "Effect": "Allow", - "Action": [ - "s3:PutObject" - ], - "Resource": { "Fn::Join": ["", ["arn:aws:s3:::", { "Ref" : "OutputBucket" }, "/*"]]} - } - ] - }, - "Roles": [ - { - "Ref": "LambdaExecutionRole" - } - ] - } - }, - - "LambdaInvokePermissionOne": { - "Type": "AWS::Lambda::Permission", - "Properties": { - "FunctionName" : { "Fn::GetAtt" : ["ProcessorFunctionOne", "Arn"] }, - "Action": "lambda:InvokeFunction", - "Principal": "sns.amazonaws.com", - "SourceArn" : { "Ref" : "InputNotificationTopic" } - } - }, - - - "LambdaInvokePermissionTwo": { - "Type": "AWS::Lambda::Permission", - "Properties": { - "FunctionName" : { "Fn::GetAtt" : ["ProcessorFunctionTwo", "Arn"] }, - "Action": "lambda:InvokeFunction", - "Principal": "sns.amazonaws.com", - "SourceArn" : { "Ref" : "InputNotificationTopic" } - } - } - }, - "Outputs": { - "Bucket": { - "Description": "Storage location for data which is to be processed by Lambda functions", - "Value": { - "Ref": "InputBucket" - } - }, - "BucketOut": { - "Description": "Storage location for data which is to be processed by Lambda functions", - "Value": { - "Ref": "OutputBucket" - } - }, - "Topic": { - "Description": "SNS topic to fanout S3 Event notifications to Lambda functions", - "Value": { - "Ref": "InputNotificationTopic" - } - }, - "ProcessorFxOne": { - "Description": "Lambda function receiving SNS messages of S3 events", - "Value": { - "Ref": "ProcessorFunctionOne" - } - }, - "ProcessorFxTwo": { - "Description": "Lambda function receiving SNS messages of S3 events", - "Value": { - "Ref": "ProcessorFunctionTwo" - } - } - } -} diff --git a/lambda_file_processing.yml b/lambda_file_processing.yml deleted file mode 100644 index ca656d7..0000000 --- a/lambda_file_processing.yml +++ /dev/null @@ -1,131 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: CFN template to create architecture represented at https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/. -Resources: - ProcessorFunctionOne: - Type: 'AWS::Serverless::Function' - Properties: - Handler: data-processor-1.handler - Runtime: nodejs6.10 - CodeUri: ./src/data-processor-1/ - Role: !GetAtt [LambdaExecutionRole, Arn] - - ProcessorFunctionTwo: - Type: 'AWS::Serverless::Function' - Properties: - Handler: data-processor-2.handler - Runtime: nodejs6.10 - CodeUri: ./src/data-processor-2/ - Role: !GetAtt [LambdaExecutionRole, Arn] - - InputBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: !Join ['-', [!Ref 'AWS::StackName', !Ref 'AWS::AccountId', files]] - NotificationConfiguration: - TopicConfigurations: - - Event: s3:ObjectCreated:* - Topic: !Ref 'InputNotificationTopic' - DependsOn: NotificationPolicy - OutputBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: !Join ['-', [!Ref 'InputBucket', out]] - InputNotificationTopic: - Type: AWS::SNS::Topic - Properties: - Subscription: - - Endpoint: !GetAtt [ProcessorFunctionOne, Arn] - Protocol: lambda - - Endpoint: !GetAtt [ProcessorFunctionTwo, Arn] - Protocol: lambda - NotificationPolicy: - Type: AWS::SNS::TopicPolicy - Properties: - PolicyDocument: - Id: PushBucketNotificationPolicy - Version: '2012-10-17' - Statement: - - Sid: AllowBucketToPushNotificationEffect - Effect: Allow - Principal: - Service: s3.amazonaws.com - Action: sns:Publish - Resource: !Ref 'InputNotificationTopic' - Condition: - ArnLike: - aws:SourceArn: !Join ['', ['arn:aws:s3:*:*:', !Join ['-', [!Ref 'AWS::StackName', - !Ref 'AWS::AccountId', files]]]] - Topics: - - !Ref 'InputNotificationTopic' - LambdaExecutionRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Action: - - sts:AssumeRole - Path: / - RolePolicy: - Type: AWS::IAM::Policy - Properties: - PolicyName: root - PolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - logs:CreateLogGroup - - logs:CreateLogStream - - logs:PutLogEvents - Resource: arn:aws:logs:*:*:* - - Effect: Allow - Action: - - s3:GetObject - Resource: !Join ['', ['arn:aws:s3:::', !Ref 'InputBucket', /*]] - - Effect: Allow - Action: - - s3:PutObject - Resource: !Join ['', ['arn:aws:s3:::', !Ref 'OutputBucket', /*]] - Roles: - - !Ref 'LambdaExecutionRole' - LambdaInvokePermissionOne: - Type: AWS::Lambda::Permission - Properties: - FunctionName: !GetAtt [ProcessorFunctionOne, Arn] - Action: lambda:InvokeFunction - Principal: sns.amazonaws.com - SourceArn: !Ref 'InputNotificationTopic' - LambdaInvokePermissionTwo: - Type: AWS::Lambda::Permission - Properties: - FunctionName: !GetAtt [ProcessorFunctionTwo, Arn] - Action: lambda:InvokeFunction - Principal: sns.amazonaws.com - SourceArn: !Ref 'InputNotificationTopic' -Outputs: - Bucket: - Description: Storage location for data which is to be processed by Lambda functions - Value: !Ref 'InputBucket' - BucketOut: - Description: Storage location for data which is to be processed by Lambda functions - Value: !Ref 'OutputBucket' - Topic: - Description: SNS topic to fanout S3 Event notifications to Lambda functions - Value: !Ref 'InputNotificationTopic' - ProcessorFnOne: - Description: Lambda function receiving SNS messages of S3 events - Value: !Ref 'ProcessorFunctionOne' - ProcessorFnTwo: - Description: Lambda function receiving SNS messages of S3 events - Value: !Ref 'ProcessorFunctionTwo' - - - - - \ No newline at end of file diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 5a53997..b63cd37 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -80,6 +80,12 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) + if size >= max_object_size: + log_event['source_s3_object_size'] = size + log_event['error_msg'] = 'source s3 object too large' + print(log_event) + return 'fail' + local_file = os.path.join(tmpdir, key_name) download_status = get_s3_object(bucket_name, key_name, local_file) diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index a73ff99..b8be50e 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -1,22 +1,41 @@ +from datetime import datetime import json import os import sys +import tempfile import boto3 import botocore +max_object_size = 104857600 # 100MB = 104857600 bytes + +sentiment_table = os.getenv('SENTIMENT_TABLE') +sentiment_queue = os.getenv('SENTIMENT_QUEUE') + comprehend_client = boto3.client('comprehend') s3_resource = boto3.resource('s3') -ddb_client = boto3.client('dynamodb') +dynamodb_resource = boto3.resource('dynamodb') +table = dynamodb_resource.Table(sentiment_table) + +sqs_client = boto3.client('sqs') + + +def check_s3_object_size(bucket, key_name): + try: + size = s3_resource.Object(bucket, key_name).content_length + except Exception as e: + print('Error: {}'.format(str(e))) + size = 'NaN' + + return size -sentiment_table = os.getenv('SENTIMENT_TABLE') -def get_s3_object(bucket, key_name): +def get_s3_object(bucket, key_name, local_file): try: - s3_resource.Bucket(bucket).download_file(key_name, '/tmp/{}'.format(key_name)) + s3_resource.Bucket(bucket).download_file(key_name, local_file) return 'ok' except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == '404': @@ -24,25 +43,33 @@ def get_s3_object(bucket, key_name): else: return 'Error: {}'.format(str(e)) -def put_sentiment(table_name, s3_object, sentiment): + +def put_sentiment(s3_object, sentiment): try: - result = ddb_client.put_item( - TableName=table_name, + response = table.put_item( Item={ - 'id': { - 'S': s3_object - }, - 'sentiment': { - 'S': sentiment['Sentiment'] - } + 'id': s3_object, + 'last_modified': datetime.utcnow().isoformat(), + 'overall_sentiment': sentiment['Sentiment'], + 'positive': str(sentiment['SentimentScore']['Positive']), + 'negative': str(sentiment['SentimentScore']['Negative']), + 'neutral': str(sentiment['SentimentScore']['Neutral']), + 'mixed': str(sentiment['SentimentScore']['Mixed']) } ) + + result = 'ok' + except Exception as e: - print('Error: {}'.format(str(e))) + result = str(e) + + return result def handler(event, context): for record in event['Records']: + tmpdir = tempfile.mkdtemp() + log_event = {} log_event['request_id'] = context.aws_request_id @@ -50,6 +77,8 @@ def handler(event, context): log_event['sqs_message_id'] = record['messageId'] log_event['sqs_event_source_arn'] = record['eventSourceARN'] + sqs_receipt_handle = record['receiptHandle'] + try: json_body = json.loads(record['body']) request_params = json_body['detail']['requestParameters'] @@ -58,9 +87,17 @@ def handler(event, context): log_event['source_s3_bucket_name'] = bucket_name log_event['source_s3_key_name'] = key_name - download_status = get_s3_object(bucket_name, key_name) + size = check_s3_object_size(bucket_name, key_name) - local_file = '/tmp/{}'.format(key_name) + if size >= max_object_size: + log_event['source_s3_object_size'] = size + log_event['error_msg'] = 'source s3 object too large' + print(log_event) + return 'fail' + + local_file = os.path.join(tmpdir, key_name) + + download_status = get_s3_object(bucket_name, key_name, local_file) if download_status == 'ok': log_event['src_s3_download'] = 'ok' @@ -70,26 +107,54 @@ def handler(event, context): log_event['src_s3_download'] = download_status log_event['src_s3_download_bytes'] = -1 sys.exit(1) - + md_contents = open(local_file, 'r').read() - sentiment = comprehend_client.detect_sentiment(Text=md_contents, LanguageCode='en') + sentiment = comprehend_client.detect_sentiment( + Text=md_contents, + LanguageCode='en' + ) log_event['sentiment'] = sentiment['Sentiment'] log_event['sentiment_score'] = sentiment['SentimentScore'] source_s3_object = 's3://{}/{}'.format(bucket_name, key_name) - - put_sentiment_result = put_sentiment(sentiment_table, source_s3_object, sentiment) + + put_sentiment_result = put_sentiment(source_s3_object, sentiment) + + if put_sentiment_result == 'ok': + '''If function could put the sentiment to the DDB table then remove message + from SQS queue.''' + try: + sqs_client.delete_message( + QueueUrl=sentiment_queue, + ReceiptHandle=sqs_receipt_handle + ) + except Exception as e: + print('Error: {}'.str(e)) print(put_sentiment_result) - + except Exception as e: log_event['error_msg'] = str(e) print(log_event) return 'fail' + finally: + filesToRemove = os.listdir(tmpdir) + + for f in filesToRemove: + file_path = os.path.join(tmpdir, f) + print(f'Removing File: {file_path}') + + try: + os.remove(file_path) + except OSError as e: + print(e) + print(f'Error while deleting file {file_path}') + + print(f'Removing Folder: {tmpdir}') + os.rmdir(tmpdir) print(log_event) return('ok') - From 8202eebbbc4cc81df1750452b63761052fc990ad Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Tue, 12 Nov 2019 16:23:32 -0500 Subject: [PATCH 032/115] Update to logging --- README.md | 3 +- src/conversion/conversion.py | 76 +++++--- src/conversion/requirements.txt | 1 + src/sentiment/requirements.txt | 1 + src/sentiment/sentiment.py | 55 +++--- template.yml | 302 ++++++++++++++++++++++++++++++++ 6 files changed, 387 insertions(+), 51 deletions(-) create mode 100644 template.yml diff --git a/README.md b/README.md index 79a6649..4a87bb4 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Next, run *sam package*. This command takes your Lambda handler source code and ```bash sam package \ --output-template-file packaged-template.yml \ - --s3-bucket bucketname + --s3-bucket bucketname ``` **Note** @@ -89,6 +89,7 @@ sam deploy \ --template-file packaged-template.yml \ --stack-name lambda-file-refarch \ --region region \ + --tags Project=lambda-refarch-fileprocessing --capabilities CAPABILITY_IAM ``` diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index b63cd37..bf07ad7 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -1,18 +1,29 @@ import json +import logging import os import sys +import aws_lambda_logging import boto3 import botocore import markdown import tempfile + max_object_size = 104857600 # 100MB = 104857600 bytes +conversion_queue = os.getenv('CONVERSION_QUEUE') + target_bucket = os.getenv('TARGET_BUCKET') +log_level = os.getenv('LOG_LEVEL') + s3_resource = boto3.resource('s3') +sqs_client = boto3.client('sqs') + +log = logging.getLogger() + def check_s3_object_size(bucket, key_name): try: @@ -60,44 +71,46 @@ def upload_html(target_bucket, target_key, source_file): def handler(event, context): + aws_lambda_logging.setup(level=log_level, + aws_request_id=context.aws_request_id) + for record in event['Records']: tmpdir = tempfile.mkdtemp() - log_event = {} + sqs_message_id = record['messageId'] + sqs_event_source_arn = record['eventSourceARN'] - log_event['request_id'] = context.aws_request_id - log_event['invoked_function_arn'] = context.invoked_function_arn - log_event['sqs_message_id'] = record['messageId'] - log_event['sqs_event_source_arn'] = record['eventSourceARN'] + sqs_receipt_handle = record['receiptHandle'] try: json_body = json.loads(record['body']) request_params = json_body['detail']['requestParameters'] bucket_name = request_params['bucketName'] key_name = request_params['key'] - log_event['source_s3_bucket_name'] = bucket_name - log_event['source_s3_key_name'] = key_name size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - log_event['source_s3_object_size'] = size - log_event['error_msg'] = 'source s3 object too large' - print(log_event) - return 'fail' + log.error('''Source S3 object s3://{}/{} is larger ({} bytes) + than {} max object bytes'''.format( + bucket_name, + key_name, + size, + max_object_size)) + raise Exception("Source S3 object too large") local_file = os.path.join(tmpdir, key_name) download_status = get_s3_object(bucket_name, key_name, local_file) if download_status == 'ok': - log_event['src_s3_download'] = 'ok' key_bytes = os.stat(local_file).st_size - log_event['src_s3_download_bytes'] = key_bytes + src_s3_download_bytes = key_bytes + log.info("Success: Download to {} for conversion".format( + local_file, + key_bytes)) else: - log_event['src_s3_download'] = download_status - log_event['src_s3_download_bytes'] = -1 - sys.exit(1) + raise Exception("Fail to put object to {}".format(local_file)) html = convert_to_html(local_file) @@ -107,24 +120,36 @@ def handler(event, context): with open(local_html_file, 'w') as outfile: outfile.write(html) - + log.info("Success: Converted s3://{}/{} to {}".format( + bucket_name, + key_name, + local_html_file)) outfile.close() html_upload = upload_html(target_bucket, html_filename, local_html_file) - if html_upload == 'ok': - log_event['dst_s3_object'] = 's3://{}/{}'.format(target_bucket, - html_filename) + '''If function could put the converted file to the S3 bucket then + remove message from the SQS queue''' + try: + sqs_client.delete_message( + QueueUrl=conversion_queue, + ReceiptHandle=sqs_receipt_handle + ) + except Exception as e: + raise Exception(str(e)) + dst_s3_object = 's3://{}/{}'.format(target_bucket, + html_filename) + log.info("Success: Uploaded {} to {}".format( + local_html_file, + dst_s3_object + )) else: - log_event['dst_s3_object'] = '' - - log_event['dst_s3_upload'] = html_upload + raise Exception("Error: {}".format(str(e))) except Exception as e: - log_event['error_msg'] = str(e) - print(log_event) + raise Exception("Could not convert record: {}".format(str(e))) return 'fail' finally: @@ -143,5 +168,4 @@ def handler(event, context): print(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) - print(log_event) return 'ok' diff --git a/src/conversion/requirements.txt b/src/conversion/requirements.txt index 158fba1..5a75021 100644 --- a/src/conversion/requirements.txt +++ b/src/conversion/requirements.txt @@ -1,2 +1,3 @@ +aws-lambda-logging boto3 markdown \ No newline at end of file diff --git a/src/sentiment/requirements.txt b/src/sentiment/requirements.txt index 1db657b..9445505 100644 --- a/src/sentiment/requirements.txt +++ b/src/sentiment/requirements.txt @@ -1 +1,2 @@ +aws-lambda-logging boto3 \ No newline at end of file diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index b8be50e..5805aae 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -1,9 +1,11 @@ from datetime import datetime import json +import logging import os import sys import tempfile +import aws_lambda_logging import boto3 import botocore @@ -13,6 +15,8 @@ sentiment_table = os.getenv('SENTIMENT_TABLE') sentiment_queue = os.getenv('SENTIMENT_QUEUE') +log_level = os.getenv('LOG_LEVEL') + comprehend_client = boto3.client('comprehend') s3_resource = boto3.resource('s3') @@ -22,6 +26,8 @@ sqs_client = boto3.client('sqs') +log = logging.getLogger() + def check_s3_object_size(bucket, key_name): try: @@ -67,15 +73,14 @@ def put_sentiment(s3_object, sentiment): def handler(event, context): + aws_lambda_logging.setup(level=log_level, + aws_request_id=context.aws_request_id) + for record in event['Records']: tmpdir = tempfile.mkdtemp() - log_event = {} - - log_event['request_id'] = context.aws_request_id - log_event['invoked_function_arn'] = context.invoked_function_arn - log_event['sqs_message_id'] = record['messageId'] - log_event['sqs_event_source_arn'] = record['eventSourceARN'] + sqs_message_id = record['messageId'] + sqs_event_source_arn = record['eventSourceARN'] sqs_receipt_handle = record['receiptHandle'] @@ -84,29 +89,30 @@ def handler(event, context): request_params = json_body['detail']['requestParameters'] bucket_name = request_params['bucketName'] key_name = request_params['key'] - log_event['source_s3_bucket_name'] = bucket_name - log_event['source_s3_key_name'] = key_name size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - log_event['source_s3_object_size'] = size - log_event['error_msg'] = 'source s3 object too large' - print(log_event) - return 'fail' + log.error('''Source S3 object s3://{}/{} is larger ({} bytes) + than {} max object bytes'''.format( + bucket_name, + key_name, + size, + max_object_size)) + raise Exception("Source S3 object too large") local_file = os.path.join(tmpdir, key_name) download_status = get_s3_object(bucket_name, key_name, local_file) if download_status == 'ok': - log_event['src_s3_download'] = 'ok' key_bytes = os.stat(local_file).st_size - log_event['src_s3_download_bytes'] = key_bytes + src_s3_download_bytes = key_bytes + log.info('''Download to {} for sentiment analysis'''.format( + local_file + )) else: - log_event['src_s3_download'] = download_status - log_event['src_s3_download_bytes'] = -1 - sys.exit(1) + raise Exception("Download failure to {}".format(local_file)) md_contents = open(local_file, 'r').read() @@ -115,8 +121,10 @@ def handler(event, context): LanguageCode='en' ) - log_event['sentiment'] = sentiment['Sentiment'] - log_event['sentiment_score'] = sentiment['SentimentScore'] + log.info('Overall sentiment: {} ({})'.format( + sentiment['Sentiment'], + sentiment['SentimentScore'] + )) source_s3_object = 's3://{}/{}'.format(bucket_name, key_name) @@ -131,13 +139,13 @@ def handler(event, context): ReceiptHandle=sqs_receipt_handle ) except Exception as e: - print('Error: {}'.str(e)) + raise Exception(str(e)) - print(put_sentiment_result) + log.info('Put sentiment of {} to table {}'.format( + local_file, sentiment_table)) except Exception as e: - log_event['error_msg'] = str(e) - print(log_event) + raise Exception("Could not get sentiment: {}".format(str(e))) return 'fail' finally: @@ -156,5 +164,4 @@ def handler(event, context): print(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) - print(log_event) return('ok') diff --git a/template.yml b/template.yml new file mode 100644 index 0000000..6d7e47d --- /dev/null +++ b/template.yml @@ -0,0 +1,302 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: 'AWS::Serverless-2016-10-31' +Description: SAM template to create file processing architecture represented at https://github.com/aws-samples/lambda-refarch-fileprocessing. + +Parameters: + ConversionLogLevel: + Type: String + Default: "INFO" + AllowedValues: + - "INFO" + - "DEBUG" + + SentimentLogLevel: + Type: String + Default: "INFO" + AllowedValues: + - "INFO" + - "DEBUG" + +Resources: + InputBucket: + Type: AWS::S3::Bucket + + CloudTrailBucket: + Type: AWS::S3::Bucket + + InputBucketTrail: + DependsOn: CloudTrailBucketPolicy + Type: AWS::CloudTrail::Trail + Properties: + S3BucketName: !Ref CloudTrailBucket + EventSelectors: + - DataResources: + - Type: 'AWS::S3::Object' + Values: + - !Sub |- + arn:aws:s3:::${InputBucket}/ + IncludeManagementEvents: false + ReadWriteType: WriteOnly + IsLogging: true + + CloudTrailBucketPolicy: + Type: AWS::S3::BucketPolicy + DependsOn: CloudTrailBucket + Properties: + Bucket: !Ref CloudTrailBucket + PolicyDocument: + Version: "2012-10-17" + Statement: + - + Sid: "AWSCloudTrailAclCheck" + Effect: "Allow" + Principal: + Service: "cloudtrail.amazonaws.com" + Action: "s3:GetBucketAcl" + Resource: !Sub |- + arn:aws:s3:::${CloudTrailBucket} + - + Sid: "AWSCloudTrailWrite" + Effect: "Allow" + Principal: + Service: "cloudtrail.amazonaws.com" + Action: "s3:PutObject" + Resource: + !Sub |- + arn:aws:s3:::${CloudTrailBucket}/AWSLogs/${AWS::AccountId}/* + Condition: + StringEquals: + s3:x-amz-acl: "bucket-owner-full-control" + + FileProcessingQueuePolicy: + # https://forums.aws.amazon.com/message.jspa?messageID=743094 + Type: AWS::SQS::QueuePolicy + Properties: + Queues: + - !Ref ConversionQueue + - !Ref SentimentQueue + - !Ref ReplayQueue + PolicyDocument: + Version: '2012-10-17' + Statement: + - + Effect: Allow + Principal: + AWS: '*' + Action: + - sqs:SendMessage + Resource: !GetAtt ConversionQueue.Arn + Condition: + ArnEquals: + aws:SourceArn: !GetAtt FileProcessingRule.Arn + - + Effect: Allow + Principal: + AWS: '*' + Action: + - sqs:SendMessage + Resource: !GetAtt SentimentQueue.Arn + Condition: + ArnEquals: + aws:SourceArn: !GetAtt FileProcessingRule.Arn + - + Effect: Allow + Principal: + AWS: '*' + Action: + - sqs:SendMessage + Resource: !GetAtt ReplayQueue.Arn + Condition: + ArnEquals: + aws:SourceArn: !GetAtt FileProcessingRule.Arn + + FileProcessingRule: + Type: AWS::Events::Rule + DependsOn: + - ConversionQueue + - SentimentQueue + - ReplayQueue + Properties: + Description: Rule to capture S3 PutObject events + EventPattern: + source: + - aws.s3 + detail-type: + - AWS API Call via CloudTrail + detail: + eventSource: + - s3.amazonaws.com + eventName: + - PutObject + requestParameters: + bucketName: + - !Ref InputBucket + State: 'ENABLED' + Targets: + - Arn: !GetAtt ConversionQueue.Arn + Id: Convert + - Arn: !GetAtt SentimentQueue.Arn + Id: Sentiment + - Arn: !GetAtt ReplayQueue.Arn + Id: Replay + + ConversionQueue: + Type: AWS::SQS::Queue + DependsOn: ConversionDlq + Properties: + VisibilityTimeout: 300 + RedrivePolicy: + deadLetterTargetArn: !GetAtt ConversionDlq.Arn + maxReceiveCount: 5 + + ConversionDlq: + Type: AWS::SQS::Queue + Properties: + VisibilityTimeout: 300 + + ConversionFunction: + Type: 'AWS::Serverless::Function' + DependsOn: ConversionTargetBucket + Properties: + Description: Convert and store HTML representation of uploaded S3 objects + Handler: conversion.handler + Runtime: python3.6 + CodeUri: ./src/conversion/ + Policies: + - SQSPollerPolicy: + QueueName: + !GetAtt ConversionQueue.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - s3:GetObject + - s3:GetObjectAcl + - s3:GetObjectVersion + Resource: + Fn::Join: + - '' + - - 'arn:aws:s3:::' + - Ref: InputBucket + - '/*' + - Effect: Allow + Action: + - s3:ListBucket + Resource: !GetAtt InputBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: s3:PutObject + Resource: + Fn::Join: + - '' + - - 'arn:aws:s3:::' + - Ref: ConversionTargetBucket + - '/*' + Environment: + Variables: + TARGET_BUCKET: !Ref ConversionTargetBucket + CONVERSION_QUEUE: !Ref ConversionQueue + LOG_LEVEL: !Ref ConversionLogLevel + Events: + ConversionQueueReaderEvent: + Type: SQS + Properties: + Queue: !GetAtt ConversionQueue.Arn + BatchSize: 10 + + ConversionTargetBucket: + Type: AWS::S3::Bucket + + SentimentQueue: + Type: AWS::SQS::Queue + DependsOn: SentimentDlq + Properties: + VisibilityTimeout: 300 + RedrivePolicy: + deadLetterTargetArn: !GetAtt SentimentDlq.Arn + maxReceiveCount: 5 + + SentimentDlq: + Type: AWS::SQS::Queue + Properties: + VisibilityTimeout: 300 + + SentimentFunction: + Type: 'AWS::Serverless::Function' + Properties: + Description: Detect and store sentiment from uploaded S3 objects + Handler: sentiment.handler + Runtime: python3.6 + CodeUri: ./src/sentiment/ + Policies: + - SQSPollerPolicy: + QueueName: + !GetAtt SentimentQueue.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - s3:GetObject + - s3:GetObjectAcl + - s3:GetObjectVersion + Resource: + Fn::Join: + - '' + - - 'arn:aws:s3:::' + - Ref: InputBucket + - '/*' + - Effect: Allow + Action: + - s3:ListBucket + Resource: !GetAtt InputBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - comprehend:DetectSentiment + Resource: '*' + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - dynamodb:PutItem + Resource: !GetAtt SentimentTable.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - sqs:DeleteMessage + Resource: !GetAtt SentimentQueue.Arn + Environment: + Variables: + SENTIMENT_TABLE: !Ref SentimentTable + SENTIMENT_QUEUE: !Ref SentimentQueue + LOG_LEVEL: !Ref SentimentLogLevel + Events: + SentimentQueueReaderEvent: + Type: SQS + Properties: + Queue: !GetAtt SentimentQueue.Arn + BatchSize: 10 + + SentimentTable: + Type: AWS::Serverless::SimpleTable + TableName: ref-arch-filearch-document-sentiment + PrimaryKey: + Name: 's3_object' + Type: String + + ReplayQueue: + Type: AWS::SQS::Queue + DependsOn: ReplayDlq + Properties: + VisibilityTimeout: 300 + RedrivePolicy: + deadLetterTargetArn: !GetAtt ReplayDlq.Arn + maxReceiveCount: 5 + + ReplayDlq: + Type: AWS::SQS::Queue + Properties: + VisibilityTimeout: 300 From 8bc9bcb46fc267e9e0c74bd1d86a920828e0c341 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 13 Nov 2019 11:55:02 -0500 Subject: [PATCH 033/115] Update to use python3 f-strings --- src/conversion/conversion.py | 53 ++++++++++++++---------------------- src/sentiment/sentiment.py | 51 ++++++++++++++++------------------ 2 files changed, 43 insertions(+), 61 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index bf07ad7..63dfa5f 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -29,21 +29,21 @@ def check_s3_object_size(bucket, key_name): try: size = s3_resource.Object(bucket, key_name).content_length except Exception as e: - print('Error: {}'.format(str(e))) + print(f'Error: {str(e)}') size = 'NaN' - return size + return(size) def get_s3_object(bucket, key_name, local_file): try: s3_resource.Bucket(bucket).download_file(key_name, local_file) - return 'ok' + return('ok') except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == '404': - return 'Error: s3://{}/{} does not exist'.format(bucket, key_name) + return(f'Error: s3://{bucket}/{key_name} does not exist') else: - return 'Error: {}'.format(str(e)) + return(f'Error: {str(e)}') def convert_to_html(file): @@ -56,7 +56,7 @@ def convert_to_html(file): print('Error: {}'.format(str(e))) raise - return markdown.markdown(file_string) + return(markdown.markdown(file_string)) def upload_html(target_bucket, target_key, source_file): @@ -67,7 +67,7 @@ def upload_html(target_bucket, target_key, source_file): print('Error: {}'.format(str(e))) html_upload = 'fail' - return html_upload + return(html_upload) def handler(event, context): @@ -91,13 +91,9 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - log.error('''Source S3 object s3://{}/{} is larger ({} bytes) - than {} max object bytes'''.format( - bucket_name, - key_name, - size, - max_object_size)) - raise Exception("Source S3 object too large") + log.error(f'''Source S3 object s3://{bucket_name}/{key_name} is larger ({size} bytes) + than {max_object_size} (max object bytes)''') + raise Exception('Source S3 object too large') local_file = os.path.join(tmpdir, key_name) @@ -105,12 +101,9 @@ def handler(event, context): if download_status == 'ok': key_bytes = os.stat(local_file).st_size - src_s3_download_bytes = key_bytes - log.info("Success: Download to {} for conversion".format( - local_file, - key_bytes)) + log.info(f'Success: Download to {local_file} for conversion') else: - raise Exception("Fail to put object to {}".format(local_file)) + raise Exception(f'Fail to put object to {local_file}') html = convert_to_html(local_file) @@ -120,10 +113,8 @@ def handler(event, context): with open(local_html_file, 'w') as outfile: outfile.write(html) - log.info("Success: Converted s3://{}/{} to {}".format( - bucket_name, - key_name, - local_html_file)) + log.info(f'''Success: Converted s3://{bucket_name}/{key_name} + to {local_html_file}''') outfile.close() html_upload = upload_html(target_bucket, @@ -139,18 +130,14 @@ def handler(event, context): ) except Exception as e: raise Exception(str(e)) - dst_s3_object = 's3://{}/{}'.format(target_bucket, - html_filename) - log.info("Success: Uploaded {} to {}".format( - local_html_file, - dst_s3_object - )) + dst_s3_object = f's3://{target_bucket}/{html_filename}' + log.info(f'''Success: Uploaded {local_html_file} to + {dst_s3_object}''') else: - raise Exception("Error: {}".format(str(e))) + raise Exception(f'Error: {str(e)}') except Exception as e: - raise Exception("Could not convert record: {}".format(str(e))) - return 'fail' + raise Exception(f'Could not convert record: {str(e)}') finally: filesToRemove = os.listdir(tmpdir) @@ -168,4 +155,4 @@ def handler(event, context): print(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) - return 'ok' + return('ok') diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 5805aae..84b540f 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -33,21 +33,22 @@ def check_s3_object_size(bucket, key_name): try: size = s3_resource.Object(bucket, key_name).content_length except Exception as e: - print('Error: {}'.format(str(e))) + # print('Error: {}'.format(str(e))) + print(f'Error: {str(e)}') size = 'NaN' - return size + return(size) def get_s3_object(bucket, key_name, local_file): try: s3_resource.Bucket(bucket).download_file(key_name, local_file) - return 'ok' + return('ok') except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == '404': - return 'Error: s3://{}/{} does not exist'.format(bucket, key_name) + return(f'Error: s3://{bucket}/{key_name} does not exist') else: - return 'Error: {}'.format(str(e)) + return(f'Error: {str(e)}') def put_sentiment(s3_object, sentiment): @@ -69,7 +70,7 @@ def put_sentiment(s3_object, sentiment): except Exception as e: result = str(e) - return result + return(result) def handler(event, context): @@ -93,13 +94,9 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - log.error('''Source S3 object s3://{}/{} is larger ({} bytes) - than {} max object bytes'''.format( - bucket_name, - key_name, - size, - max_object_size)) - raise Exception("Source S3 object too large") + log.error(f'''Source S3 object s3://{bucket_name}/{key_name} is larger ({size} bytes) + than {max_object_size} (max object bytes)''') + raise Exception('Source S3 object too large') local_file = os.path.join(tmpdir, key_name) @@ -108,11 +105,9 @@ def handler(event, context): if download_status == 'ok': key_bytes = os.stat(local_file).st_size src_s3_download_bytes = key_bytes - log.info('''Download to {} for sentiment analysis'''.format( - local_file - )) + log.info(f'Download to {local_file} for sentiment analysis') else: - raise Exception("Download failure to {}".format(local_file)) + raise Exception(f'Download failure to {local_file}') md_contents = open(local_file, 'r').read() @@ -121,18 +116,19 @@ def handler(event, context): LanguageCode='en' ) - log.info('Overall sentiment: {} ({})'.format( - sentiment['Sentiment'], - sentiment['SentimentScore'] - )) + overall_sentiment = sentiment['Sentiment'] + sentiment_score = sentiment['SentimentScore'] + + log.info(f'''Overall sentiment: {overall_sentiment} + ({sentiment_score})''') - source_s3_object = 's3://{}/{}'.format(bucket_name, key_name) + source_s3_object = f's3://{bucket_name}/{key_name}' put_sentiment_result = put_sentiment(source_s3_object, sentiment) if put_sentiment_result == 'ok': - '''If function could put the sentiment to the DDB table then remove message - from SQS queue.''' + '''If function could put the sentiment to the DDB table then + remove message from SQS queue.''' try: sqs_client.delete_message( QueueUrl=sentiment_queue, @@ -141,12 +137,11 @@ def handler(event, context): except Exception as e: raise Exception(str(e)) - log.info('Put sentiment of {} to table {}'.format( - local_file, sentiment_table)) + log.info(f'''Put sentiment of {local_file} to + table {sentiment_table}''') except Exception as e: - raise Exception("Could not get sentiment: {}".format(str(e))) - return 'fail' + raise Exception(f'Could not get sentiment: {str(e)}') finally: filesToRemove = os.listdir(tmpdir) From 7f9052fac2a18b58c40f7dde5730283e8286e8e2 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Thu, 14 Nov 2019 09:28:16 -0500 Subject: [PATCH 034/115] Clean-up of .format string, add in additional error logging --- src/conversion/conversion.py | 10 +++++++--- src/sentiment/sentiment.py | 7 +++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 63dfa5f..11bd342 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -53,7 +53,7 @@ def convert_to_html(file): file_open.close() except Exception as e: - print('Error: {}'.format(str(e))) + print(f'Error: {str(e)}') raise return(markdown.markdown(file_string)) @@ -64,7 +64,7 @@ def upload_html(target_bucket, target_key, source_file): s3_resource.Object(target_bucket, target_key).upload_file(source_file) html_upload = 'ok' except Exception as e: - print('Error: {}'.format(str(e))) + print(f'Error: {str(e)}') html_upload = 'fail' return(html_upload) @@ -103,6 +103,7 @@ def handler(event, context): key_bytes = os.stat(local_file).st_size log.info(f'Success: Download to {local_file} for conversion') else: + log.error(f'Fail to put object to {local_file}') raise Exception(f'Fail to put object to {local_file}') html = convert_to_html(local_file) @@ -129,14 +130,17 @@ def handler(event, context): ReceiptHandle=sqs_receipt_handle ) except Exception as e: + log.error(f'{str(e)}') raise Exception(str(e)) dst_s3_object = f's3://{target_bucket}/{html_filename}' log.info(f'''Success: Uploaded {local_html_file} to {dst_s3_object}''') else: - raise Exception(f'Error: {str(e)}') + log.error(f'{str(e)}') + raise Exception(f'{str(e)}') except Exception as e: + log.error(f'Could not convert record: {str(e)}') raise Exception(f'Could not convert record: {str(e)}') finally: diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 84b540f..0507727 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -33,7 +33,6 @@ def check_s3_object_size(bucket, key_name): try: size = s3_resource.Object(bucket, key_name).content_length except Exception as e: - # print('Error: {}'.format(str(e))) print(f'Error: {str(e)}') size = 'NaN' @@ -107,6 +106,7 @@ def handler(event, context): src_s3_download_bytes = key_bytes log.info(f'Download to {local_file} for sentiment analysis') else: + log.error(f'Download failure to {local_file}') raise Exception(f'Download failure to {local_file}') md_contents = open(local_file, 'r').read() @@ -135,12 +135,15 @@ def handler(event, context): ReceiptHandle=sqs_receipt_handle ) except Exception as e: - raise Exception(str(e)) + log.error(f'Could not remove message from queue: {str(e)}') + raise Exception(f'''Could not remove message from queue: + {str(e)}''') log.info(f'''Put sentiment of {local_file} to table {sentiment_table}''') except Exception as e: + log.error(f'Could not get sentiment: {str(e)}') raise Exception(f'Could not get sentiment: {str(e)}') finally: From d471b5910e5f2588675c4bfd5afb85af8de6271e Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Fri, 15 Nov 2019 12:12:18 -0500 Subject: [PATCH 035/115] Use logging statements instead of print, fix return bug --- src/conversion/conversion.py | 13 ++++++------- src/sentiment/sentiment.py | 35 +++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 11bd342..44ee45a 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -29,7 +29,7 @@ def check_s3_object_size(bucket, key_name): try: size = s3_resource.Object(bucket, key_name).content_length except Exception as e: - print(f'Error: {str(e)}') + log.error(f'Error: {str(e)}') size = 'NaN' return(size) @@ -53,7 +53,7 @@ def convert_to_html(file): file_open.close() except Exception as e: - print(f'Error: {str(e)}') + log.error(f'Could not open or read {file}: {str(e)}') raise return(markdown.markdown(file_string)) @@ -64,7 +64,7 @@ def upload_html(target_bucket, target_key, source_file): s3_resource.Object(target_bucket, target_key).upload_file(source_file) html_upload = 'ok' except Exception as e: - print(f'Error: {str(e)}') + log.error(f'Could not upload {source_file} to {target_bucket}: {str(e)}') html_upload = 'fail' return(html_upload) @@ -148,15 +148,14 @@ def handler(event, context): for f in filesToRemove: file_path = os.path.join(tmpdir, f) - print(f'Removing File: {file_path}') + log.info(f'Removing File: {file_path}') try: os.remove(file_path) except OSError as e: - print(e) - print(f'Error while deleting file {file_path}') + log.error(f'Could not delete file {file_path}: {str(e)}') - print(f'Removing Folder: {tmpdir}') + log.info(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) return('ok') diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 0507727..dd4f1f5 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -33,7 +33,7 @@ def check_s3_object_size(bucket, key_name): try: size = s3_resource.Object(bucket, key_name).content_length except Exception as e: - print(f'Error: {str(e)}') + log.error(f'Error: {str(e)}') size = 'NaN' return(size) @@ -93,9 +93,13 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - log.error(f'''Source S3 object s3://{bucket_name}/{key_name} is larger ({size} bytes) - than {max_object_size} (max object bytes)''') - raise Exception('Source S3 object too large') + max_err_msg = f'Source object is too large' + log.error(max_err_msg) + raise Exception(max_err_msg) + + if size == 'NaN': + exc = f'Could not get size for s3://{bucket_name}/{key_name}' + raise Exception(exc) local_file = os.path.join(tmpdir, key_name) @@ -119,8 +123,8 @@ def handler(event, context): overall_sentiment = sentiment['Sentiment'] sentiment_score = sentiment['SentimentScore'] - log.info(f'''Overall sentiment: {overall_sentiment} - ({sentiment_score})''') + sentiment_message = f'{overall_sentiment} ({sentiment_score})' + log.info(sentiment_message) source_s3_object = f's3://{bucket_name}/{key_name}' @@ -135,12 +139,12 @@ def handler(event, context): ReceiptHandle=sqs_receipt_handle ) except Exception as e: - log.error(f'Could not remove message from queue: {str(e)}') - raise Exception(f'''Could not remove message from queue: - {str(e)}''') + err_msg = f'Could not remove message from queue: {str(e)}' + log.error(err_msg) + raise Exception(err_msg) - log.info(f'''Put sentiment of {local_file} to - table {sentiment_table}''') + sentiment_db_msg = f'Put sentiment to {sentiment_table}' + log.info(sentiment_db_msg) except Exception as e: log.error(f'Could not get sentiment: {str(e)}') @@ -151,15 +155,14 @@ def handler(event, context): for f in filesToRemove: file_path = os.path.join(tmpdir, f) - print(f'Removing File: {file_path}') + log.info(f'Removing File: {file_path}') try: os.remove(file_path) except OSError as e: - print(e) - print(f'Error while deleting file {file_path}') + log.error(f'Could not delete file {file_path}: {str(e)}') - print(f'Removing Folder: {tmpdir}') + log.info(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) - return('ok') + return('ok') From ea4e04ac6b1fd7e5fb3b307f24a8643f6b7748a0 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Fri, 15 Nov 2019 13:25:53 -0500 Subject: [PATCH 036/115] Update indentation error on conversion, remove replay resources --- src/conversion/conversion.py | 2 +- template.yml | 28 ---------------------------- 2 files changed, 1 insertion(+), 29 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 44ee45a..6d960f1 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -158,4 +158,4 @@ def handler(event, context): log.info(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) - return('ok') + return('ok') diff --git a/template.yml b/template.yml index 6d7e47d..e1ce3c9 100644 --- a/template.yml +++ b/template.yml @@ -75,7 +75,6 @@ Resources: Queues: - !Ref ConversionQueue - !Ref SentimentQueue - - !Ref ReplayQueue PolicyDocument: Version: '2012-10-17' Statement: @@ -99,23 +98,12 @@ Resources: Condition: ArnEquals: aws:SourceArn: !GetAtt FileProcessingRule.Arn - - - Effect: Allow - Principal: - AWS: '*' - Action: - - sqs:SendMessage - Resource: !GetAtt ReplayQueue.Arn - Condition: - ArnEquals: - aws:SourceArn: !GetAtt FileProcessingRule.Arn FileProcessingRule: Type: AWS::Events::Rule DependsOn: - ConversionQueue - SentimentQueue - - ReplayQueue Properties: Description: Rule to capture S3 PutObject events EventPattern: @@ -137,8 +125,6 @@ Resources: Id: Convert - Arn: !GetAtt SentimentQueue.Arn Id: Sentiment - - Arn: !GetAtt ReplayQueue.Arn - Id: Replay ConversionQueue: Type: AWS::SQS::Queue @@ -286,17 +272,3 @@ Resources: PrimaryKey: Name: 's3_object' Type: String - - ReplayQueue: - Type: AWS::SQS::Queue - DependsOn: ReplayDlq - Properties: - VisibilityTimeout: 300 - RedrivePolicy: - deadLetterTargetArn: !GetAtt ReplayDlq.Arn - maxReceiveCount: 5 - - ReplayDlq: - Type: AWS::SQS::Queue - Properties: - VisibilityTimeout: 300 From e90074b83d886cfe553eb6a8b85e8a36e393f537 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Mon, 18 Nov 2019 17:39:24 -0500 Subject: [PATCH 037/115] First revision of alarming --- README.md | 4 +++- template.yml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a87bb4..e4ee912 100644 --- a/README.md +++ b/README.md @@ -89,10 +89,12 @@ sam deploy \ --template-file packaged-template.yml \ --stack-name lambda-file-refarch \ --region region \ - --tags Project=lambda-refarch-fileprocessing + --tags Project=lambda-refarch-fileprocessing \ + --parameter-overrides AlarmRecipientEmailAddress= \ --capabilities CAPABILITY_IAM ``` +You will receive an email asking you to confirm subscription to the `lambda-file-refarch-AlarmTopic` SNS topic that will receive alerts should either the `ConversionDlq` SQS queue or `SentimentDlq` SQS queue receive messages. ## Testing the Example diff --git a/template.yml b/template.yml index e1ce3c9..b006a36 100644 --- a/template.yml +++ b/template.yml @@ -17,6 +17,11 @@ Parameters: - "INFO" - "DEBUG" + AlarmRecipientEmailAddress: + Type: String + AllowedPattern: '[^\s@]+@[^\s@]+\.[^\s@]+' + ConstraintDescription: Enter a valid email address + Resources: InputBucket: Type: AWS::S3::Bucket @@ -272,3 +277,46 @@ Resources: PrimaryKey: Name: 's3_object' Type: String + + AlarmTopic: + Type: AWS::SNS::Topic + Properties: + Subscription: + - Protocol: email + Endpoint: !Ref AlarmRecipientEmailAddress + + ConversionDlqAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: Conversion DLQ messages + AlarmActions: + - Ref: AlarmTopic + MetricName: ApproximateNumberOfMessagesVisible + Namespace: AWS/SQS + Statistic: Sum + Period: '60' + EvaluationPeriods: '1' + Threshold: '1' + ComparisonOperator: GreaterThanThreshold + Dimensions: + - Name: QueueName + Value: + Ref: ConversionDlq + + SentimentDlqAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: Sentiment DLQ messages + AlarmActions: + - Ref: AlarmTopic + MetricName: ApproximateNumberOfMessagesVisible + Namespace: AWS/SQS + Statistic: Sum + Period: '60' + EvaluationPeriods: '1' + Threshold: '1' + ComparisonOperator: GreaterThanThreshold + Dimensions: + - Name: QueueName + Value: + Ref: SentimentDlq From 0cab5cacd989361da6bd2ef0db533bb83047a478 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Tue, 19 Nov 2019 13:15:10 -0500 Subject: [PATCH 038/115] Updated ComparisonOperator and Description for Alarms --- template.yml | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/template.yml b/template.yml index b006a36..5a8f003 100644 --- a/template.yml +++ b/template.yml @@ -288,35 +288,37 @@ Resources: ConversionDlqAlarm: Type: AWS::CloudWatch::Alarm Properties: - AlarmDescription: Conversion DLQ messages + AlarmDescription: Alarm if Conversion DLQ queue depth is more than 1 message AlarmActions: - - Ref: AlarmTopic + - Ref: AlarmTopic MetricName: ApproximateNumberOfMessagesVisible Namespace: AWS/SQS Statistic: Sum - Period: '60' - EvaluationPeriods: '1' - Threshold: '1' - ComparisonOperator: GreaterThanThreshold + Period: 60 + EvaluationPeriods: 1 + Threshold: 1 + ComparisonOperator: GreaterThanOrEqualToThreshold + TreatMissingData: notBreaching Dimensions: - - Name: QueueName - Value: - Ref: ConversionDlq + - Name: QueueName + Value: + Ref: ConversionDlq SentimentDlqAlarm: Type: AWS::CloudWatch::Alarm Properties: - AlarmDescription: Sentiment DLQ messages + AlarmDescription: Alarm if Sentiment DLQ queue depth is more than 1 message AlarmActions: - - Ref: AlarmTopic + - Ref: AlarmTopic MetricName: ApproximateNumberOfMessagesVisible Namespace: AWS/SQS Statistic: Sum - Period: '60' - EvaluationPeriods: '1' - Threshold: '1' - ComparisonOperator: GreaterThanThreshold + Period: 60 + EvaluationPeriods: 1 + Threshold: 1 + ComparisonOperator: GreaterThanOrEqualToThreshold + TreatMissingData: notBreaching Dimensions: - - Name: QueueName - Value: - Ref: SentimentDlq + - Name: QueueName + Value: + Ref: SentimentDlq From a3f35d7f6f182d443ff51644ed4232e723e89c41 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 20 Nov 2019 10:50:06 -0500 Subject: [PATCH 039/115] Update dimensions of Alarms --- template.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/template.yml b/template.yml index 5a8f003..69e2891 100644 --- a/template.yml +++ b/template.yml @@ -288,7 +288,7 @@ Resources: ConversionDlqAlarm: Type: AWS::CloudWatch::Alarm Properties: - AlarmDescription: Alarm if Conversion DLQ queue depth is more than 1 message + AlarmDescription: Alarm if Conversion DLQ has any messages AlarmActions: - Ref: AlarmTopic MetricName: ApproximateNumberOfMessagesVisible @@ -296,18 +296,17 @@ Resources: Statistic: Sum Period: 60 EvaluationPeriods: 1 - Threshold: 1 - ComparisonOperator: GreaterThanOrEqualToThreshold + Threshold: 0 + ComparisonOperator: GreaterThanThreshold TreatMissingData: notBreaching Dimensions: - Name: QueueName - Value: - Ref: ConversionDlq + Value: !GetAtt ConversionDlq.QueueName SentimentDlqAlarm: Type: AWS::CloudWatch::Alarm Properties: - AlarmDescription: Alarm if Sentiment DLQ queue depth is more than 1 message + AlarmDescription: Alarm if Sentiment DLQ has any messages AlarmActions: - Ref: AlarmTopic MetricName: ApproximateNumberOfMessagesVisible @@ -315,10 +314,9 @@ Resources: Statistic: Sum Period: 60 EvaluationPeriods: 1 - Threshold: 1 - ComparisonOperator: GreaterThanOrEqualToThreshold + Threshold: 0 + ComparisonOperator: GreaterThanThreshold TreatMissingData: notBreaching Dimensions: - Name: QueueName - Value: - Ref: SentimentDlq + Value: !GetAtt SentimentDlq.QueueName From 60381d4e613d8206654f323deee9f3604d66466f Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 20 Nov 2019 11:49:42 -0500 Subject: [PATCH 040/115] Update error handling when failure to put message to db --- src/sentiment/sentiment.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index dd4f1f5..5df3ca2 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -12,8 +12,8 @@ max_object_size = 104857600 # 100MB = 104857600 bytes -sentiment_table = os.getenv('SENTIMENT_TABLE') -sentiment_queue = os.getenv('SENTIMENT_QUEUE') +s_table = os.getenv('s_table') +s_queue = os.getenv('s_queue') log_level = os.getenv('LOG_LEVEL') @@ -22,7 +22,7 @@ s3_resource = boto3.resource('s3') dynamodb_resource = boto3.resource('dynamodb') -table = dynamodb_resource.Table(sentiment_table) +table = dynamodb_resource.Table(s_table) sqs_client = boto3.client('sqs') @@ -135,7 +135,7 @@ def handler(event, context): remove message from SQS queue.''' try: sqs_client.delete_message( - QueueUrl=sentiment_queue, + QueueUrl=s_queue, ReceiptHandle=sqs_receipt_handle ) except Exception as e: @@ -143,9 +143,13 @@ def handler(event, context): log.error(err_msg) raise Exception(err_msg) - sentiment_db_msg = f'Put sentiment to {sentiment_table}' + sentiment_db_msg = f'Put sentiment to {s_table}' log.info(sentiment_db_msg) - + else: + db_put_error_msg = f'Could not put sentiment to {s_table}: ' + db_put_error_msg += f'{put_sentiment_result}' + log.error(db_put_error_msg) + raise Exception(db_put_error_msg) except Exception as e: log.error(f'Could not get sentiment: {str(e)}') raise Exception(f'Could not get sentiment: {str(e)}') From e1c956602c18aa2e7bbaa7aecbb4eb03c32c4d07 Mon Sep 17 00:00:00 2001 From: Rudge Date: Thu, 21 Nov 2019 11:05:17 +0000 Subject: [PATCH 041/115] updated diagram with correct icons and corrected alignment --- img/lambda-refarch-fileprocessing-simple.png | Bin 79859 -> 134504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png index 8dd2b8f0fd593848d53d74cf99643c596738a777..2c2551ea9605aec81605a3bda1f774da760ffcca 100644 GIT binary patch literal 134504 zcmb@uN3QhB)*X0(Dij0(nt=KbkQ(oT-ZbgG_w3P=$t0QdW(GBvnt__?){LrC!SDVJ z4M4y-X=s9Bwpn}a9r=ITru1L_^MC!%fBp5>e^F%K{p+v)^MCyH*Z=X?fBL_`k^lGq zss86*e|i7kCdAut)!n!H>t87M&!>MO&@h!<-BsnkQ2t*Cf>c(<9 zSMbsF!3zw5!zc?rffEGw&&P|v{yR9r{C?jms&cK{-uqGVZzm2?WXac%V6YheC3PSdW}iTYiuI`=18J4D|oc64;=rf5ZPYLdI|m=8QFvZ6}VR zjA;HLMVTei>1w|0f)+`ai?R@3FidwOLXbUGwz&arNr#H8zFgz50=Lo{Bno!J;^nU# zX01JJ_Xi(0<5(lOl%WMUQsQWX zh6fzfE!(3h*yB@bR7W&Ui}8-a3G!?7p^ytl(W@dZCPczQ&07VIiJA!WIgnwsZ4MG| zepl$$Lz^{Ii{79?2r6nr#_?XCEvQBbuVsL6iIe#RG?u)A) zj@N{wC3;5)-YA)#=W{2zA{I{*wPUNUf52s&oGjTC`4nZ8HI$)qIqfqw)D7zdv^H^P z%oi(>Mx{ld32kG62^&*uKTJI$I9^xxO+kWOh%=m{sGe^F6iSs%e5Jw+6VQGL9bpNE zP{X?j-lF3JJ*LHQ(jCG^9WGx~r6Gtu+)Tz1lD6-G%jSkh^#eYCeg04a`5fl_P>-B$ z_ndx+(YbK{u@xjDm@24h(5l)AW(*#tu;;g^vZuAZpQet_yNptG?_z{X)n0%r9tUr5 z^#dkVjQrCs+_uLUHKGz*uX1(4fp&y*U1%E&X%r+Soz#bX7V(JSBd7&F!>Dcly8Z_Bpl7UXQ6HcKqH$WPzIp66e2TGj z=BkR3l}hR(8;8QjcbFZQO7=r55vhykZ~-$i=U07+9vC0d zs32fdS-bqsG2(70YYL($%po|IfA?7*b_6pTaG^G^82$i-Vi&)ker5WrRd{HC9a&UA zBRTvLD+5PE3~xx67+2l!gO1nU8$R?JZ0#%Gi|R2c_6=)I|7AVSk_-+V?Py!f=-}|+ ztfnSpG$H)HAL0632Z9ib&Ew7Cc~a{y10kH69t~Hj-~<#`8l-xosix<}ih-)?&IXi~ z)$1`!i)iGoE8NMsjKrt(D&@9|ccetZA|=gf!xE#_FC&n-FfJ1pPN zza}b{tMWr-_qRk8+9}D8Y&F4YWxz&?2QkL&)f^u?={1_%O1D^86u zAG8{1J^1qNLn$SK+8MvLR?5xpU3uvApVbfx|;N5*##I zhGaj+!guw2xiC+16C+z$qwS|+A$j#ulAZFCFL9!GF1UP)E|!hfSGbq2bEG4Ub){Lz zY}y2wn<*Yvw}t{uoiA}F$-BUNvm8f!tchKV>d}qkK|enwTN0Qc9Yw(^7n+gJsWE#% zh6ekNQ|TWGUS|0BT2taHq@6F2j4b|^j|PtD*u@F&bzk=TtkpooK_q64Gv>}Xm1l|* zY8ec5II7XG+=!(>L^|IiKO+UB#(Ixn0>y!jtDw~U)k5KPcNBIY zg7ERxBy@khivBG4M2Yh`$EDnQhj^07J)UDe=7S2Bmk z0G{r3&FN*{;!vlnXwZpL_=j+d$ulc;(rLXlHln!L*lPAix|doPGx^j=Hcn-R6YMoG z#f0SJi#&?`5!lBjMM+~)NQUgLV;@|oG=DNsa@f?WA6&%d7gG{dWIUV?e|uX;4*fa; z*Z2(Ic4w}Z?wHzBM5(x4=av$MOmMu^?H?tx$l-}(DscXZ=Ht1R34>->MQJd@r$}%H z_lGI#nRsIOcTzZ~D|4XVTCJG`*SE$rl{e8H*Tj~XYhSrd6r=F7e^SBNXr6^|w-Bx* zCu^MJ-s|@}Z$x&RRbGyqUL8Wf&GUlpk#$9hAkWh<7 zhaPoMt&T4&fvN<+Fm{6Nt&EahN~>RuZ6pjFX`lIn{hX)$sI-v95*4f$L>PBftl{3e z1?0-RsN1<<2Intd9uIB?!Fl~B{TT{*F)XP*dqH3IU36c=7mk=B10c;x$l~BK-Pbt{ zv@r*#w8@3O^d%gxp;awv!!|zJuGJ+C51cMg1tx%J5l2ZmR(Z&Z2;dUY80MCVd)Bjt zaM>#pXfs~Aib#HIFN5{gEWU(ieA4;HLhE8)+Ca~0avLE_$f1ZH{q>5e%O#fHX22wo zkZ92_>?A%>S7JNr6XZAd<2-3<+-&;~VeL?s|ERE!>((7>U738BWsnu3Iv-~FEFjsO zVA@Y*gH}G%&-rzQ)0RqW1=e-XvICySuV@o)f}j1KJ`|t5@-Qkv88^8}Wc_e?`5JxP zGIprJoXfZZPCgBRhshsoL5RA`42}Njg-B}q2prVCu!|s>&tbmA zJvJCA)|`^Tz=cPNKJ9dcaKL(a%-(_tpX&KO?zt#pyho2ctpl_3tw7@bT8r8BR@zsn zHpkDvPI4hmto+*trRc9WU!YL4rnCR95L4~GgCE_6PeyI-FtsDjx$YyKy1Pffw*3QL zW0}x9nbMnpePX*^Lu~!K-|^~wuh-!FQ8PRcMhdR6e#;Rs_7>M* z=&ZL~IXALBfA|+uu8H4&iRqwS5J$2mTZK7lef06$S?zPxln{V68u{dYy*FFc=;f|h z`T8+`8uE0juQO!$>oSbM{&E9S1ts*rjx0!q?#^t>RE}fw66(t)t_Cz*17C^1*v?s3 zZl5e}Og1u*LlXaf(DIX`$8|oN>7fP#F0v8JP6dnFM@l#Y$G2Y>JpABS=9ix^2flm< z-wCEF=#Iv@I1*77LkW=*)qK&!f<6sfx6_XRUpPmeU@R9Vx=|#0b(8hHi6=;FE=qkS z6V%Jr6lMGpgm5o|<)}r0Q!}{nIH=nIPi9f?@n4U!hn(6guTTUGKH|pji#q!afE+lY zg|X7LaX;X&66F+UOY>@Rp)%b+yr+LNsiAkS9(w9adM#nJ=}$#D5bbj8wzI3%R2eJ! zI&xAQ$3x9~iVw&tF7j*}-agO~#SDHq3S&%`8dx(?qi1M~Hs?!KrQg__ht0;f7Q4wU zVG~&y86%qVVFZS4ApgU35U`oAGJ?i>Dl%SdjH-C#L){xkPd|y($|BztSCgl>?-)%= zzcmvHXSI>vCJKYFQaYc5so{~);75#|i&Xg-q$)-XfXrY445gz^y@X%0eBwufhSn+| z;fq;9Ewrx)CKVg(KcLZ}#r-6awdxKf)Wk?NbqcJ8D$czvq8ss=7=mvG>k@xZ$10-1 zz5XyMbH6lq)I2E~N@O_XyFuf;G#+fC0ZG>f$19U7vcCI|=(Iiz5g51-72N!-TEs}& zzTpwU89fr_zP{SJU@>8baSoa0AP@ykIzp-UVoRBGRDq4Cck>(JbqC8lEK#uDM|kzO zEs$2x%c|Y>Rxoj;3)-$LXK}nOewdcu z*Nhhgr<^UR#6ch(vk>%*X>M~&b5xl*Bi$K9=r8lm&nJvCCkn#jAz7Gtc$L`V7w`n` z5vxv-B1rUNc?F`rZc^w!-2W~qYAoGkMSsr7Tu%h&g|-0?OI%5g;%xG^%%{^Zn`nul zUlY!1FW~Z_)Ns4JL6C|R!7J9N*2*mdBx34yu^YeW4yV}#8O|(Fwaz(+p?)MX^&jaA zdUO*w{>A;2@(lZMT!u**XUQ2et53us8c)q?PAfmfJzNWs4Z$^mM-1EvZneXd+&QZ{ zJSGU<#xS1y%t`?3xzWO*QapN`0ekb~>2BzhFx363{xWz0D;CVo6 z`vX_s!TU+;@O}F8$QeGY718V`>!B_75VX&FbjH-|Bi8Xo7dGU?gyN))$r!ptjD$RJ z4QuJ_HsB=Wxat*XsJs}OaRGFBB&lDgR)=_8TU4Xqflke^RF!2Yk2$~xIzd&uF-N8} zjKhb+FkA>+$g&Wen2h1^s;MnQIiR=8SDuD1jyC`wY$TwVCXXR5gU&ci2d+EIbqur< zGmnp5+Bls0H&b7$w%MHV(|$Av!5I4nGsqqnmI2fv+Oarcup9xVYe<(;H!x|;fYyks zX+k4Acd^(bM3nimgr%yJPR`pNW?ZT5y79z9D$zD8wQc2nc|ZA_I3-`dWj7G8f{Jov|#A2LQgU2bJb{Uf?_cbTYRQfdtl7F*@# z2Y3K(cn$hj@eZ*zU6GqAuGu`5=8iLx)XcJxTgV3=Wpx%QyjzJ~pNzv1^=gy)RKoVK z&?Y%`WbpwV4#;HQ)oi8cS1CLh0ro~5jn^)vp3?8%Lk0&T=j$Mh@Sp}tZ80(h?dFeW zZH~3Le@*EpgU~B>%v%i&pR~k}`J28Qu?=1b+CdKc2QQcFF&BG~4^Hs2Zr88s3FT)o z&157?qgcV1#2WJ9`*#D9&dG`JOMC8X2*NG|v3i=*5eZ|Me=nwhsBThG&~;|qsLn#f z&W!164oT?*m*w{N+L8zOBGHNbU8JjreNuczAv{xfI#`xQ(CAm*v#tW5L6lRK;8*RY z_YrVks6MsghXiOr6trq^;r`*4ulu3RdjMEvShwH@eN|AP?EbCri<4F8n1zxtK!_D~WJf=;PXHT+QJuiea;P4Ujh9k=SFToWGq z`08RqZdi4vUO3>TFD_Jr3&3e{1l-R<66fn2_CL4*Q+-H^ot3yF(x{%5bIF6Km*11l zbw}s}j7TohJ7@Yn<6nTCnwIni%*m*^#&hwDl5Y-Uk>qVNpavN?}w*9o6PZ@(D zD;G`GRTC5N{!uPWN=q>9B9ob~opcQftS5_8zgH|b*!w77rh?n&o%$nvUq^2w1`$Nu z`7~Pm@15Duc68?uOsM{fRwjbzg#8$};`38{uOoUjAk<_@yT^qUw7?40DnnHL5}IFE zBC7EKL@5}&SX%>3ze1cJz3VwYrg-OiB%f0-NEQbcf;A7`KVbW(r;N=*?~#iKOoc1F zAS~{IsTBEV!f8M!g9GUX%$W#7`>`IPOPl~)iOBJ7jwQzpwfG`}NUy5+j$Ea0KxGaa z@Q!1B*^Y2&0?-Q9UU1p7H6gGmxPBMzQ=gc_%l=xw6gD0WQtbcIjf(TdS$fklCXgNIiYLt zt?W9ID#CUCJ~fF0eOPj1I#%HiWk?eZ4-n@N37jQr1_N z`=jyuku<38tJ(yJy*;1i;MdIYx8OOtP`|f1_^!n&wFf!n3a3z7_IGxK&mj1Ig~qy} zFXrAw>q$9;s+$Gu_BEIvG5J|LNlHg~jmp`L^alIy_{3K#MtCE8<#$x-Vq5aL;JcS%me2sVy`nS zS{bt-^Fh)3&8>;w$hIe)U3cQkh==E>oM{SFNcB0EnP7yhzu>~D(wDm&;BtU?Z|v64RN*C7sm*!y}JBULTe!~*PA*f2tU8EP{1_ESd$3s8mpvi)q#$IsbtV39Vx z{au?O^&#<@T<4!8f%^K$U}I}v_`{M*)SzH5Qs(>C#Xxu1IsARV+c$ZipMBofz~f07 z5+&R$Ujsr`o>0W#!vzv~jg%T!~bm!S*AB%mvZAiz}>c_{E?PrT^ zZX=R+Rs?#cb$3C6=R??-&*5tIOzXQsojoi1{e5kvp9dwH;

W2v*?fJ3aX6f-|6B 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

#?_lx5YT_q*1IJ(|y#E`(owXzI9Q( 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 From dcd11e822fbd2b528b19264887b47dd6d46110df Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Fri, 22 Nov 2019 11:42:45 -0500 Subject: [PATCH 042/115] Add tracing capability, update readme, fix sentiment bug --- README.md | 47 +++++++++++++++++++------------------- src/sentiment/sentiment.py | 4 ++-- template.yml | 22 ++++++++++++++++++ 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index e4ee912..6486b9f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. -In this example application we deliver the notes from an interview in markdown format into S3 and we utilise CloudWatch Events to trigger multiple processing flows. +In this example application we deliver the notes from an interview in Markdown format to S3. CloudWatch Events is used to trigger multiple processing flows - one to convert and persist Markdown files to HTML and another to detect and persist sentiment. ## Architectural Diagram @@ -11,36 +11,29 @@ In this example application we deliver the notes from an interview in markdown f ## Application Components ### Event Trigger -Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilise [CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) and [CloudTrail](https://aws.amazon.com/cloudtrail/). We write a CloudWatch Events rule which checks for S3 PutObject API calls into our Source Bucket from CloudTrail. Everytime the PutObject API is called this creates a CloudTrail log which our rule translates into an event represented as a JSON object. In our rule we also define targets which our JSON event object is delivered to, which in this scenario is 4 seperate [SQS Queues](https://aws.amazon.com/sqs/) for 4 different worflows. Other target types include AWS Lambda Functions, Kinesis Data Streams, Simple Notification Service, Step Functions state machines, ECS tasks refer to [What is Amazon CloudWatch Events?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) for more information about eligible targets. -### Conversion WorkFlow +Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilise [CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) and [CloudTrail](https://aws.amazon.com/cloudtrail/). A CloudWatch Events rule checks for S3 PutObject API calls into our Source Bucket using CloudTrail data. CloudTrail records when PutObject API is called. Our rule translates this record into an event, represented as a JSON object. We also define targets in our rule and deliver our JSON event to 2 seperate [SQS Queues](https://aws.amazon.com/sqs/), representing 2 different worflows. Other target types include AWS Lambda Functions, Kinesis Data Streams, Simple Notification Service, Step Functions state machines, and ECS tasks. Refer to [What is Amazon CloudWatch Events?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) for more information about eligible targets. -For this workflow the target of our JSON object decribing the S3 PutObject event is an SQS queue. Sending to SQS first rather than directly to Lambda allows for more control of Lambda invocations and better error handling. +### Conversion Workflow -Lambda polls our queue and when messages are available it will send them to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. +We target a SQS queue for this workflow. Sending the JSON event to SQS first rather than directly to Lambda allows for more control of Lambda invocations and better error handling. -If our Lambda fails to process the messages we can configure SQS to send to a dead-letter queue for inspection and reprocessing. +The Lambda service polls our queue. When messages are available it will send them to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. -Once the function has the message this is parsed. The JSON event object contains information such as the S3 bucket and object key and object size. +If our Conversion Lambda function fails to process the messages, SQS sends the event to a dead-letter queue (DLQ) for inspection and reprocessing. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Conversion DLQ. -Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new html file to the HTML Bucket. +Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function execution environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new html file to the HTML Bucket. ### Sentiment Analysis Workflow -Here we are using our AI/ML service [Amazon Comprehend](https://aws.amazon.com/comprehend/) which is a machine learning powered service that makes it easy to find insights and relationships in text. We can use the Sentiment Analysis API in order to understand if the questions the interviewer asked had positive or negative responses. +We are using AWS' AI/ML service [Amazon Comprehend](https://aws.amazon.com/comprehend/) which is a machine learning powered service that makes it easy to find insights and relationships in text. We use the Sentiment Analysis API to understand whether interview responses are positive or negative. -This workflow uses the same SQS to Lambda Function pattern as the coversion workflow. Here our business logic downloads the file and extracts the content of the file and sends it to the Comprehend Sentiment Analysis API. This returns a Sentiment and a confidence Score which Describes the level of confidence that Amazon Comprehend has in the accuracy of its detection of sentiments. +The Sentiment workflow uses the same SQS-to-Lambda Function pattern as the Coversion workflow. Our function downloads the interview file, extracts the content, and sends it to the Comprehend Sentiment Analysis API. This returns a Sentiment and a confidence score which describes the level of confidence that Amazon Comprehend has in the accuracy of its detection of sentiments. -Once we have our sentiment we persist the result to our [DynamoDB](https://aws.amazon.com/dynamodb/) table. +Once we have our sentiment we persist the result to our [DynamoDB](https://aws.amazon.com/dynamodb/) table. - -### Search Indexing Workflow -TODO - -### Replay Workflow - -TODO +If our Sentiment Lambda function fails to process the messages, SQS sends the event to a dead-letter queue (DLQ) for inspection and reprocessing. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Sentiment DLQ. ## Running the Example @@ -52,7 +45,7 @@ You can use the provided [AWS SAM template](./template.yml) to launch a stack th #### Build -The AWS SAM CLI comes with abstractions for a number of Lambda runtimes to build your dependencies, and copies the source code into staging folders so that everything is ready to be packaged and deployed. The *sam build* command builds any dependencies that your application has, and copies your application source code to folders under aws-sam/build to be zipped and uploaded to Lambda. +The AWS SAM CLI comes with abstractions for a number of Lambda runtimes to build your dependencies, and copies the source code into staging folders so that everything is ready to be packaged and deployed. The *sam build* command builds any dependencies that your application has, and copies your application source code to folders under *.aws-sam/build* to be zipped and uploaded to Lambda. ```bash sam build --use-container @@ -170,13 +163,13 @@ creates the following resources: - **CloudTrailBucketPolicy** - A S3 policy which permits the AWS CloudTrail service to write data to the **CloudTrailBucket**. -- **FileProcessingQueuePolicy** - A SQS policy that allows the **FileProcessingRule** to publish events to the **ConversionQueue**, **SentimentQueue**, and the **ReplayQueue**. +- **FileProcessingQueuePolicy** - A SQS policy that allows the **FileProcessingRule** to publish events to the **ConversionQueue** and **SentimentQueue**. -- **FileProcessingRule** - A CloudWatch Events Rule that monitors CloudTrail `PubObject` events from the **InputBucket**. +- **FileProcessingRule** - A CloudWatch Events Rule that monitors CloudTrail `PutObject` events to the **InputBucket**. -- **ConversionQueue** - A SQS queue that is used to store events for conversion from markdown to HTML. +- **ConversionQueue** - A SQS queue that is used to store events for conversion from Markdown to HTML. -- **ConversionDlq** - TBD. +- **ConversionDlq** - A SQS queue that is used to capture messages that cannot be processed by the **ConversionFunction**. The *RedrivePolicy* on the **ConversionQueue** is used to manage how traffic makes it to this queue. - **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. @@ -184,12 +177,18 @@ creates the following resources: - **SentimentQueue** - A SQS queue that is used to store events for sentiment analysis processing. -- **SentimentDlq** - TBD. +- **SentimentDlq** - A SQS queue that is used to capture messages that cannot be processed by the **SentimentFunction**. The *RedrivePolicy* on the **SentimentQueue** is used to manage how traffic makes it to this queue. - **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. - **SentimentTable** - A DynamoDB table that stores the input file along with the sentiment. +- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive alarms from the **ConversionDlqAlarm** and **SentimentDlqAlarm**. + +- **ConversionDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **ConvesionDlq** within a 1 minute period and sends notification to the **AlarmTopic**. + +- **SentimentDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **SentimentDlq** within a 1 minute period and sends notification to the **AlarmTopic**. + ## License diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 5df3ca2..e26058a 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -12,8 +12,8 @@ max_object_size = 104857600 # 100MB = 104857600 bytes -s_table = os.getenv('s_table') -s_queue = os.getenv('s_queue') +s_table = os.getenv('SENTIMENT_TABLE') +s_queue = os.getenv('SENTIMENT_QUEUE') log_level = os.getenv('LOG_LEVEL') diff --git a/template.yml b/template.yml index 69e2891..3ade329 100644 --- a/template.yml +++ b/template.yml @@ -153,6 +153,7 @@ Resources: Handler: conversion.handler Runtime: python3.6 CodeUri: ./src/conversion/ + Tracing: Active Policies: - SQSPollerPolicy: QueueName: @@ -174,6 +175,16 @@ Resources: Action: - s3:ListBucket Resource: !GetAtt InputBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - xray:PutTraceSegments + - xray:PutTelemetryRecords + - xray:GetSamplingRules + - xray:GetSamplingTargets + - xray:GetSamplingStatisticSummaries + Resource: '*' - Version: '2012-10-17' Statement: - Effect: Allow @@ -220,6 +231,7 @@ Resources: Handler: sentiment.handler Runtime: python3.6 CodeUri: ./src/sentiment/ + Tracing: Active Policies: - SQSPollerPolicy: QueueName: @@ -241,6 +253,16 @@ Resources: Action: - s3:ListBucket Resource: !GetAtt InputBucket.Arn + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - xray:PutTraceSegments + - xray:PutTelemetryRecords + - xray:GetSamplingRules + - xray:GetSamplingTargets + - xray:GetSamplingStatisticSummaries + Resource: '*' - Version: '2012-10-17' Statement: - Effect: Allow From 0635c5d333249bbf8952ee44f14bb0efb317a0ef Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Tue, 26 Nov 2019 10:51:39 -0500 Subject: [PATCH 043/115] Update with X-Ray, more sensible timeouts --- src/conversion/conversion.py | 143 +++++++++++++++++++++++++++----- src/conversion/requirements.txt | 1 + src/sentiment/requirements.txt | 1 + src/sentiment/sentiment.py | 98 ++++++++++++++++++++-- template.yml | 8 +- 5 files changed, 222 insertions(+), 29 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index 6d960f1..dc6123a 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -4,11 +4,15 @@ import sys import aws_lambda_logging +from aws_xray_sdk.core import xray_recorder +from aws_xray_sdk.core import patch_all import boto3 import botocore import markdown import tempfile +patch_all() + max_object_size = 104857600 # 100MB = 104857600 bytes @@ -26,48 +30,143 @@ def check_s3_object_size(bucket, key_name): + """Take in a bucket and key and return the number of bytes + + Parameters + ---------- + bucket: string, required + Bucket name where object is stored + + key_name: string, required + Key name of object + + Returns + ------- + size: integer + Size of key_name in bucket + """ + + xray_recorder.begin_subsegment('## get_object_size') + subsegment = xray_recorder.current_subsegment() + subsegment.put_metadata('object', f's3://{bucket}/{key_name}') + try: size = s3_resource.Object(bucket, key_name).content_length + subsegment.put_metadata('object_size', size) except Exception as e: log.error(f'Error: {str(e)}') size = 'NaN' + subsegment.put_metadata('object_size', size) + xray_recorder.end_subsegment() return(size) def get_s3_object(bucket, key_name, local_file): + """Download object in S3 to local file + + Parameters + ---------- + bucket: string, required + Bucket name where object is stored + + key_name: string, required + Key name of object + + local_file: string, required + + Returns + ------- + result: string + Result of operation ('ok' or exception) + """ + + xray_recorder.begin_subsegment('## get_object_to_convert') + subsegment = xray_recorder.current_subsegment() + subsegment.put_metadata('object', f's3://{bucket}/{key_name}') + try: s3_resource.Bucket(bucket).download_file(key_name, local_file) - return('ok') + result = 'ok' + subsegment.put_annotation('OBJECT_DOWNLOAD', 'SUCCESS') except botocore.exceptions.ClientError as e: + subsegment.put_annotation('OBJECT_DOWNLOAD', 'FAILURE') if e.response['Error']['Code'] == '404': - return(f'Error: s3://{bucket}/{key_name} does not exist') + result = f'Error: s3://{bucket}/{key_name} does not exist' else: - return(f'Error: {str(e)}') + result = f'Error: {str(e)}' + + xray_recorder.end_subsegment() + return(result) def convert_to_html(file): + """Convert Markdown in file to HTML + + Parameters + ---------- + file: string, required + Local file to be converted + + Returns + ------- + string + Resulting HTML5 + """ + + xray_recorder.begin_subsegment('## convert_to_html') + subsegment = xray_recorder.current_subsegment() + subsegment.put_metadata('file', file) + try: file_open = open(file, 'r') file_string = file_open.read() + subsegment.put_annotation('MARKDOWN_CONVERSION', 'SUCCESS') + xray_recorder.end_subsegment() file_open.close() - + return(markdown.markdown(file_string)) except Exception as e: log.error(f'Could not open or read {file}: {str(e)}') + subsegment.put_annotation('MARKDOWN_CONVERSION', 'FAILURE') + xray_recorder.end_subsegment() raise - return(markdown.markdown(file_string)) +def upload_html(bucket, key, source_file): + """Upload local file to S3 bucket + + Parameters + ---------- + target_bucket: string, required + S3 bucket where object is stored + + key_name: string, required + Key name of object + + source_file: string, required + Name of local file + + Returns + ------- + result: string + Result of operation ('ok' or exception) + """ + + xray_recorder.begin_subsegment('## upload_html_to_s3') + subsegment = xray_recorder.current_subsegment() + subsegment.put_metadata('object', f's3://{bucket}/{key}') -def upload_html(target_bucket, target_key, source_file): try: - s3_resource.Object(target_bucket, target_key).upload_file(source_file) - html_upload = 'ok' + s3_resource.Object(bucket, key).upload_file(source_file) + result = 'ok' + subsegment.put_annotation('OBJECT_DOWNLOAD', 'SUCCESS') except Exception as e: - log.error(f'Could not upload {source_file} to {target_bucket}: {str(e)}') - html_upload = 'fail' + subsegment.put_annotation('OBJECT_DOWNLOAD', 'FAILURE') + log.error(f'Could not upload {source_file} to {bucket}: {str(e)}') + result = 'fail' - return(html_upload) + xray_recorder.end_subsegment() + return(result) def handler(event, context): @@ -91,9 +190,11 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - log.error(f'''Source S3 object s3://{bucket_name}/{key_name} is larger ({size} bytes) - than {max_object_size} (max object bytes)''') + error_message = f'Source S3 object s3://{bucket_name}/{key_name} is larger ' + error_message += f'than {max_object_size} (max object bytes)' + log.error(error_message) raise Exception('Source S3 object too large') + sys.exit(1) local_file = os.path.join(tmpdir, key_name) @@ -105,6 +206,7 @@ def handler(event, context): else: log.error(f'Fail to put object to {local_file}') raise Exception(f'Fail to put object to {local_file}') + sys.exit(1) html = convert_to_html(local_file) @@ -132,17 +234,20 @@ def handler(event, context): except Exception as e: log.error(f'{str(e)}') raise Exception(str(e)) + sys.exit(1) dst_s3_object = f's3://{target_bucket}/{html_filename}' - log.info(f'''Success: Uploaded {local_html_file} to - {dst_s3_object}''') + success_message = f'Success: Uploaded {local_html_file} to ' + success_message += f'{dst_s3_object}' + log.info(success_message) else: - log.error(f'{str(e)}') - raise Exception(f'{str(e)}') - + error_message = f'Could not upload file to ' + error_message += f'{dst_s3_object}: {str(e)}' + log.error(error_message) + raise Exception(error_message) except Exception as e: log.error(f'Could not convert record: {str(e)}') raise Exception(f'Could not convert record: {str(e)}') - + sys.exit(1) finally: filesToRemove = os.listdir(tmpdir) diff --git a/src/conversion/requirements.txt b/src/conversion/requirements.txt index 5a75021..8a8bea7 100644 --- a/src/conversion/requirements.txt +++ b/src/conversion/requirements.txt @@ -1,3 +1,4 @@ aws-lambda-logging +aws-xray-sdk boto3 markdown \ No newline at end of file diff --git a/src/sentiment/requirements.txt b/src/sentiment/requirements.txt index 9445505..f3b429b 100644 --- a/src/sentiment/requirements.txt +++ b/src/sentiment/requirements.txt @@ -1,2 +1,3 @@ aws-lambda-logging +aws-xray-sdk boto3 \ No newline at end of file diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index e26058a..06367a1 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -6,9 +6,13 @@ import tempfile import aws_lambda_logging +from aws_xray_sdk.core import xray_recorder +from aws_xray_sdk.core import patch_all import boto3 import botocore +patch_all() + max_object_size = 104857600 # 100MB = 104857600 bytes @@ -30,27 +34,96 @@ def check_s3_object_size(bucket, key_name): + """Take in a bucket and key and return the number of bytes + + Parameters + ---------- + bucket: string, required + Bucket name where object is stored + + key_name: string, required + Key name of object + + Returns + ------- + size: integer + Size of key_name in bucket + """ + + xray_recorder.begin_subsegment('## get_object_size') + subsegment = xray_recorder.current_subsegment() + subsegment.put_metadata('object', f's3://{bucket}/{key_name}') + try: size = s3_resource.Object(bucket, key_name).content_length + subsegment.put_metadata('object_size', size) except Exception as e: log.error(f'Error: {str(e)}') size = 'NaN' + subsegment.put_metadata('object_size', size) + xray_recorder.end_subsegment() return(size) def get_s3_object(bucket, key_name, local_file): + """Download object in S3 to local file + + Parameters + ---------- + bucket: string, required + Bucket name where object is stored + + key_name: string, required + Key name of object + + local_file: string, required + + Returns + ------- + result: string + Result of operation ('ok' or exception) + """ + + xray_recorder.begin_subsegment('## get_object_to_analyze') + subsegment = xray_recorder.current_subsegment() + subsegment.put_metadata('object', f's3://{bucket}/{key_name}') + try: s3_resource.Bucket(bucket).download_file(key_name, local_file) - return('ok') + result = 'ok' + subsegment.put_annotation('OBJECT_DOWNLOAD', 'SUCCESS') except botocore.exceptions.ClientError as e: + subsegment.put_annotation('OBJECT_DOWNLOAD', 'FAILURE') if e.response['Error']['Code'] == '404': - return(f'Error: s3://{bucket}/{key_name} does not exist') + result = f'Error: s3://{bucket}/{key_name} does not exist' else: - return(f'Error: {str(e)}') + result = f'Error: {str(e)}' + + xray_recorder.end_subsegment() + return(result) def put_sentiment(s3_object, sentiment): + """Put the sentiment of a object to DynamoDB + + Parameters + ---------- + s3_object: string, required + Location of the S3 object to analyze + + sentiment: dict, required + Sentiment dictionary from Comprehend + + Returns + ------- + result: string + Result of operation ('ok' or exception) + """ + + xray_recorder.begin_subsegment('## put_sentiment_to_db') + subsegment = xray_recorder.current_subsegment() + try: response = table.put_item( Item={ @@ -65,10 +138,12 @@ def put_sentiment(s3_object, sentiment): ) result = 'ok' - + subsegment.put_annotation('PUT_SENTIMENT_TO_DB', 'SUCCESS') except Exception as e: result = str(e) + subsegment.put_annotation('PUT_SENTIMENT_TO_DB', 'FAILURE') + xray_recorder.end_subsegment() return(result) @@ -93,13 +168,17 @@ def handler(event, context): size = check_s3_object_size(bucket_name, key_name) if size >= max_object_size: - max_err_msg = f'Source object is too large' - log.error(max_err_msg) - raise Exception(max_err_msg) + error_message = f'Source S3 object ' + error_message += f's3://{bucket_name}/{key_name} is larger ' + error_message += f'than {max_object_size} (max object bytes)' + log.error(error_message) + raise Exception(error_message) + sys.exit(1) if size == 'NaN': exc = f'Could not get size for s3://{bucket_name}/{key_name}' raise Exception(exc) + sys.exit(1) local_file = os.path.join(tmpdir, key_name) @@ -112,6 +191,7 @@ def handler(event, context): else: log.error(f'Download failure to {local_file}') raise Exception(f'Download failure to {local_file}') + sys.exit(1) md_contents = open(local_file, 'r').read() @@ -142,6 +222,7 @@ def handler(event, context): err_msg = f'Could not remove message from queue: {str(e)}' log.error(err_msg) raise Exception(err_msg) + sys.exit(1) sentiment_db_msg = f'Put sentiment to {s_table}' log.info(sentiment_db_msg) @@ -150,10 +231,11 @@ def handler(event, context): db_put_error_msg += f'{put_sentiment_result}' log.error(db_put_error_msg) raise Exception(db_put_error_msg) + sys.exit(1) except Exception as e: log.error(f'Could not get sentiment: {str(e)}') raise Exception(f'Could not get sentiment: {str(e)}') - + sys.exit(1) finally: filesToRemove = os.listdir(tmpdir) diff --git a/template.yml b/template.yml index 3ade329..dce3529 100644 --- a/template.yml +++ b/template.yml @@ -135,7 +135,7 @@ Resources: Type: AWS::SQS::Queue DependsOn: ConversionDlq Properties: - VisibilityTimeout: 300 + VisibilityTimeout: 20 RedrivePolicy: deadLetterTargetArn: !GetAtt ConversionDlq.Arn maxReceiveCount: 5 @@ -153,6 +153,8 @@ Resources: Handler: conversion.handler Runtime: python3.6 CodeUri: ./src/conversion/ + MemorySize: 256 + Timeout: 3 Tracing: Active Policies: - SQSPollerPolicy: @@ -214,7 +216,7 @@ Resources: Type: AWS::SQS::Queue DependsOn: SentimentDlq Properties: - VisibilityTimeout: 300 + VisibilityTimeout: 20 RedrivePolicy: deadLetterTargetArn: !GetAtt SentimentDlq.Arn maxReceiveCount: 5 @@ -231,6 +233,8 @@ Resources: Handler: sentiment.handler Runtime: python3.6 CodeUri: ./src/sentiment/ + MemorySize: 128 + Timeout: 3 Tracing: Active Policies: - SQSPollerPolicy: From 2566af0d3f347a792573c5e90233401e4321c5d1 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 27 Nov 2019 11:34:14 -0500 Subject: [PATCH 044/115] Updating memory for sentiment, adjusting timeouts --- template.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/template.yml b/template.yml index dce3529..f1b3c6b 100644 --- a/template.yml +++ b/template.yml @@ -135,7 +135,7 @@ Resources: Type: AWS::SQS::Queue DependsOn: ConversionDlq Properties: - VisibilityTimeout: 20 + VisibilityTimeout: 60 RedrivePolicy: deadLetterTargetArn: !GetAtt ConversionDlq.Arn maxReceiveCount: 5 @@ -154,7 +154,7 @@ Resources: Runtime: python3.6 CodeUri: ./src/conversion/ MemorySize: 256 - Timeout: 3 + Timeout: 10 Tracing: Active Policies: - SQSPollerPolicy: @@ -216,7 +216,7 @@ Resources: Type: AWS::SQS::Queue DependsOn: SentimentDlq Properties: - VisibilityTimeout: 20 + VisibilityTimeout: 60 RedrivePolicy: deadLetterTargetArn: !GetAtt SentimentDlq.Arn maxReceiveCount: 5 @@ -233,8 +233,8 @@ Resources: Handler: sentiment.handler Runtime: python3.6 CodeUri: ./src/sentiment/ - MemorySize: 128 - Timeout: 3 + MemorySize: 256 + Timeout: 10 Tracing: Active Policies: - SQSPollerPolicy: From f67b5c984e1057b87e67ef5b7e946314a6eb1fe3 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 9 Jan 2020 16:20:38 +0000 Subject: [PATCH 045/115] Changed some INFO logging to DEBUG --- src/conversion/conversion.py | 10 +++++----- src/sentiment/sentiment.py | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index dc6123a..c70c9bc 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -159,9 +159,9 @@ def upload_html(bucket, key, source_file): try: s3_resource.Object(bucket, key).upload_file(source_file) result = 'ok' - subsegment.put_annotation('OBJECT_DOWNLOAD', 'SUCCESS') + subsegment.put_annotation('OBJECT_UPLOAD', 'SUCCESS') except Exception as e: - subsegment.put_annotation('OBJECT_DOWNLOAD', 'FAILURE') + subsegment.put_annotation('OBJECT_UPLOAD', 'FAILURE') log.error(f'Could not upload {source_file} to {bucket}: {str(e)}') result = 'fail' @@ -217,7 +217,7 @@ def handler(event, context): with open(local_html_file, 'w') as outfile: outfile.write(html) log.info(f'''Success: Converted s3://{bucket_name}/{key_name} - to {local_html_file}''') + to {local_html_file}''') outfile.close() html_upload = upload_html(target_bucket, @@ -253,14 +253,14 @@ def handler(event, context): for f in filesToRemove: file_path = os.path.join(tmpdir, f) - log.info(f'Removing File: {file_path}') + log.debug(f'Removing File: {file_path}') try: os.remove(file_path) except OSError as e: log.error(f'Could not delete file {file_path}: {str(e)}') - log.info(f'Removing Folder: {tmpdir}') + log.debug(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) return('ok') diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 06367a1..4b60062 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -212,7 +212,7 @@ def handler(event, context): if put_sentiment_result == 'ok': '''If function could put the sentiment to the DDB table then - remove message from SQS queue.''' + remove message from SQS queue.''' try: sqs_client.delete_message( QueueUrl=s_queue, @@ -241,14 +241,14 @@ def handler(event, context): for f in filesToRemove: file_path = os.path.join(tmpdir, f) - log.info(f'Removing File: {file_path}') + log.debug(f'Removing File: {file_path}') try: os.remove(file_path) except OSError as e: log.error(f'Could not delete file {file_path}: {str(e)}') - log.info(f'Removing Folder: {tmpdir}') + log.debug(f'Removing Folder: {tmpdir}') os.rmdir(tmpdir) return('ok') From 076d00c2630e1c3b2a24582535a4c575d868d7f3 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 14 Jan 2020 15:45:41 +0000 Subject: [PATCH 046/115] Corrected linting errors --- src/conversion/conversion.py | 20 +++++++------------- src/sentiment/sentiment.py | 14 +++----------- 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index c70c9bc..a4c4f77 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -170,15 +170,11 @@ def upload_html(bucket, key, source_file): def handler(event, context): - aws_lambda_logging.setup(level=log_level, - aws_request_id=context.aws_request_id) + aws_lambda_logging.setup(level=log_level, aws_request_id=context.aws_request_id) for record in event['Records']: tmpdir = tempfile.mkdtemp() - sqs_message_id = record['messageId'] - sqs_event_source_arn = record['eventSourceARN'] - sqs_receipt_handle = record['receiptHandle'] try: @@ -194,19 +190,16 @@ def handler(event, context): error_message += f'than {max_object_size} (max object bytes)' log.error(error_message) raise Exception('Source S3 object too large') - sys.exit(1) local_file = os.path.join(tmpdir, key_name) download_status = get_s3_object(bucket_name, key_name, local_file) if download_status == 'ok': - key_bytes = os.stat(local_file).st_size log.info(f'Success: Download to {local_file} for conversion') else: log.error(f'Fail to put object to {local_file}') raise Exception(f'Fail to put object to {local_file}') - sys.exit(1) html = convert_to_html(local_file) @@ -220,9 +213,11 @@ def handler(event, context): to {local_html_file}''') outfile.close() - html_upload = upload_html(target_bucket, - html_filename, - local_html_file) + html_upload = upload_html( + target_bucket, + html_filename, + local_html_file) + if html_upload == 'ok': '''If function could put the converted file to the S3 bucket then remove message from the SQS queue''' @@ -234,7 +229,7 @@ def handler(event, context): except Exception as e: log.error(f'{str(e)}') raise Exception(str(e)) - sys.exit(1) + dst_s3_object = f's3://{target_bucket}/{html_filename}' success_message = f'Success: Uploaded {local_html_file} to ' success_message += f'{dst_s3_object}' @@ -247,7 +242,6 @@ def handler(event, context): except Exception as e: log.error(f'Could not convert record: {str(e)}') raise Exception(f'Could not convert record: {str(e)}') - sys.exit(1) finally: filesToRemove = os.listdir(tmpdir) diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 4b60062..7d5184b 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -142,6 +142,9 @@ def put_sentiment(s3_object, sentiment): except Exception as e: result = str(e) subsegment.put_annotation('PUT_SENTIMENT_TO_DB', 'FAILURE') + result = f'Error: {str(e)}' + log.error(response) + xray_recorder.end_subsegment() return(result) @@ -154,9 +157,6 @@ def handler(event, context): for record in event['Records']: tmpdir = tempfile.mkdtemp() - sqs_message_id = record['messageId'] - sqs_event_source_arn = record['eventSourceARN'] - sqs_receipt_handle = record['receiptHandle'] try: @@ -173,25 +173,20 @@ def handler(event, context): error_message += f'than {max_object_size} (max object bytes)' log.error(error_message) raise Exception(error_message) - sys.exit(1) if size == 'NaN': exc = f'Could not get size for s3://{bucket_name}/{key_name}' raise Exception(exc) - sys.exit(1) local_file = os.path.join(tmpdir, key_name) download_status = get_s3_object(bucket_name, key_name, local_file) if download_status == 'ok': - key_bytes = os.stat(local_file).st_size - src_s3_download_bytes = key_bytes log.info(f'Download to {local_file} for sentiment analysis') else: log.error(f'Download failure to {local_file}') raise Exception(f'Download failure to {local_file}') - sys.exit(1) md_contents = open(local_file, 'r').read() @@ -222,7 +217,6 @@ def handler(event, context): err_msg = f'Could not remove message from queue: {str(e)}' log.error(err_msg) raise Exception(err_msg) - sys.exit(1) sentiment_db_msg = f'Put sentiment to {s_table}' log.info(sentiment_db_msg) @@ -231,11 +225,9 @@ def handler(event, context): db_put_error_msg += f'{put_sentiment_result}' log.error(db_put_error_msg) raise Exception(db_put_error_msg) - sys.exit(1) except Exception as e: log.error(f'Could not get sentiment: {str(e)}') raise Exception(f'Could not get sentiment: {str(e)}') - sys.exit(1) finally: filesToRemove = os.listdir(tmpdir) From 9f76870c6e003a7aaadc5b76c59161e4b911aa6d Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 15 Jan 2020 16:29:47 -0500 Subject: [PATCH 047/115] Updates to monitoring capabilities Include dashboard creation. --- .gitignore | 3 +- README.md | 10 +- template.yml | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 368 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index ed419d9..5cbe22e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ packaged-template.yml -post-sam.yml .aws-sam -**/node_modules +__pycache__ \ No newline at end of file diff --git a/README.md b/README.md index 6486b9f..e158e72 100644 --- a/README.md +++ b/README.md @@ -183,12 +183,20 @@ creates the following resources: - **SentimentTable** - A DynamoDB table that stores the input file along with the sentiment. -- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive alarms from the **ConversionDlqAlarm** and **SentimentDlqAlarm**. +- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive CloudWatch Alarms. - **ConversionDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **ConvesionDlq** within a 1 minute period and sends notification to the **AlarmTopic**. - **SentimentDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **SentimentDlq** within a 1 minute period and sends notification to the **AlarmTopic**. +- **ConversionQueueAlarm** - A CloudWatch Alarm that detect when there are too many messages in the **ConversionQueue** and sends notification to the **AlarmTopic**. + +- **SentimentQueueAlarm** - A CloudWatch Alarm that detect when there are too many messages in the **SentimentQueue** and sends notification to the **AlarmTopic**. + +- **ConversionFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when the error rate for **ConversionFunction** is too high and sends notification to the **AlarmTopic**. + +- **SentimentFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when the error rate for **SentimentFunction** is too high and sends notification to the **AlarmTopic**. + ## License diff --git a/template.yml b/template.yml index f1b3c6b..6833dfb 100644 --- a/template.yml +++ b/template.yml @@ -346,3 +346,361 @@ Resources: Dimensions: - Name: QueueName Value: !GetAtt SentimentDlq.QueueName + + ConverstionQueueAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: Conversion queue has too many messages + AlarmActions: + - Ref: AlarmTopic + MetricName: ApproximateNumberOfMessagesVisible + Namespace: AWS/SQS + Statistic: Sum + Period: 60 + EvaluationPeriods: 1 + Threshold: 20 + ComparisonOperator: GreaterThanThreshold + TreatMissingData: notBreaching + Dimensions: + - Name: QueueName + Value: !GetAtt ConversionQueue.QueueName + + SentimentQueueAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: Sentiment queue has too many messages + AlarmActions: + - Ref: AlarmTopic + MetricName: ApproximateNumberOfMessagesVisible + Namespace: AWS/SQS + Statistic: Sum + Period: 60 + EvaluationPeriods: 1 + Threshold: 20 + ComparisonOperator: GreaterThanThreshold + TreatMissingData: notBreaching + Dimensions: + - Name: QueueName + Value: !GetAtt SentimentQueue.QueueName + + ConversionFunctionErrorRateAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: High error rate for Conversion Function + AlarmActions: + - Ref: AlarmTopic + Metrics: + - Id: e1 + Expression: '(m1/m2) * 100' + Label: ConversionFunctionErrorRate + - Id: m1 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Errors + Dimensions: + - Name: FunctionName + Value: !Ref ConversionFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + - Id: m2 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Invocations + Dimensions: + - Name: FunctionName + Value: !Ref ConversionFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + EvaluationPeriods: 1 + Threshold: 5.0 + ComparisonOperator: GreaterThanOrEqualToThreshold + TreatMissingData: notBreaching + + SentimentFunctionErrorRateAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: High error rate for Sentiment Function + AlarmActions: + - Ref: AlarmTopic + Metrics: + - Id: e1 + Expression: '(m1/m2) * 100' + Label: SentimentFunctionErrorRate + - Id: m1 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Errors + Dimensions: + - Name: FunctionName + Value: !Ref SentimentFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + - Id: m2 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Invocations + Dimensions: + - Name: FunctionName + Value: !Ref SentimentFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + EvaluationPeriods: 1 + Threshold: 5.0 + ComparisonOperator: GreaterThanOrEqualToThreshold + TreatMissingData: notBreaching + + ConversionFunctionThrottleRateAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: High throttle rate for Conversion Function + AlarmActions: + - Ref: AlarmTopic + Metrics: + - Id: e1 + Expression: '(m1/m2) * 100' + Label: ConversionFunctionThrottleRate + - Id: m1 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Throttles + Dimensions: + - Name: FunctionName + Value: !Ref ConversionFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + - Id: m2 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Invocations + Dimensions: + - Name: FunctionName + Value: !Ref ConversionFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + EvaluationPeriods: 1 + Threshold: 1.0 + ComparisonOperator: GreaterThanOrEqualToThreshold + TreatMissingData: notBreaching + + SentimentFunctionThrottleRateAlarm: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: High throttle rate for Sentiment Function + AlarmActions: + - Ref: AlarmTopic + Metrics: + - Id: e1 + Expression: '(m1/m2) * 100' + Label: SentimentFunctionThrottleRate + - Id: m1 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Throttles + Dimensions: + - Name: FunctionName + Value: !Ref SentimentFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + - Id: m2 + MetricStat: + Metric: + Namespace: AWS/Lambda + MetricName: Invocations + Dimensions: + - Name: FunctionName + Value: !Ref SentimentFunction + Period: 300 + Stat: Average + Unit: Count + ReturnData: false + EvaluationPeriods: 1 + Threshold: 1.0 + ComparisonOperator: GreaterThanOrEqualToThreshold + TreatMissingData: notBreaching + + ApplicationDashboard: + Type: AWS::CloudWatch::Dashboard + Properties: + DashboardName: !Ref AWS::StackName + DashboardBody: !Sub '{ + "widgets": + [ + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ + "AWS/Lambda", + "Invocations", + "FunctionName", + "${ConversionFunction}" + ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Conversion Function Invocations" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ "AWS/Lambda", "Errors", "FunctionName", "${ConversionFunction}", { "id": "m1", "visible": false } ], + [ { "expression": "100*(m1/m2)", "label": "Error Rate", "id": "e1", "region": "${AWS::Region}" } ], + [ "AWS/Lambda", "Invocations", "FunctionName", "${ConversionFunction}", { "id": "m2", "visible": false } ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Conversion Function Error Rate" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ "AWS/Lambda", "Throttles", "FunctionName", "${ConversionFunction}", { "id": "m1", "visible": false } ], + [ { "expression": "100*(m1/m2)", "label": "Throttle Rate", "id": "e1", "region": "${AWS::Region}" } ], + [ "AWS/Lambda", "Invocations", "FunctionName", "${ConversionFunction}", { "id": "m2", "visible": false } ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Conversion Function Throttle Rate" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ + "AWS/SQS", + "ApproximateNumberOfMessagesVisible", + "QueueName", + "${ConversionDlq.QueueName}" + ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Conversion DLQ Length" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ + "AWS/Lambda", + "Invocations", + "FunctionName", + "${SentimentFunction}" + ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Sentiment Function Invocations" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ "AWS/Lambda", "Errors", "FunctionName", "${SentimentFunction}", { "id": "m1", "visible": false } ], + [ { "expression": "100*(m1/m2)", "label": "Error Rate", "id": "e1", "region": "${AWS::Region}" } ], + [ "AWS/Lambda", "Invocations", "FunctionName", "${SentimentFunction}", { "id": "m2", "visible": false } ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Sentiment Function Error Rate" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ "AWS/Lambda", "Throttles", "FunctionName", "${SentimentFunction}", { "id": "m1", "visible": false } ], + [ { "expression": "100*(m1/m2)", "label": "Throttle Rate", "id": "e1", "region": "${AWS::Region}" } ], + [ "AWS/Lambda", "Invocations", "FunctionName", "${SentimentFunction}", { "id": "m2", "visible": false } ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Sentiment Function Throttle Rate" + } + }, + { + "type":"metric", + "x":0, + "y":0, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ + "AWS/SQS", + "ApproximateNumberOfMessagesVisible", + "QueueName", + "${SentimentDlq.QueueName}" + ] + ], + "period":60, + "stat":"Average", + "region": "${AWS::Region}", + "title":"Sentiment DLQ Length" + } + } + ] + }' From b2c8361ad15d88d80bdeb7d23dc6705bc2284f8c Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Fri, 17 Jan 2020 10:10:18 -0500 Subject: [PATCH 048/115] Update README with new template resources --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index e158e72..2ab634c 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,11 @@ creates the following resources: - **SentimentFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when the error rate for **SentimentFunction** is too high and sends notification to the **AlarmTopic**. +- **ConversionFunctionThrottleRateAlarm** - A CloudWatch Alarm that detects when the throttle rate for **ConversionFunction** is too high and sends notification to the **AlarmTopic**. + +- **SentimentFunctionThrottleRateAlarm** - A CloudWatch Alarm that detects when the throttle rate for **SentimentFunction** is too high and sends notification to the **AlarmTopic**. + +- **ApplicationDashboard** - A CloudWatch Dashboard that presents Lambda function Invocations, Lambda function error and throttle rates, and visible SQS messages. ## License From be28707977aaeaef93a993dee84313687a2c9776 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 17 Jan 2020 15:36:10 +0000 Subject: [PATCH 049/115] Updated pipeline code --- buildspec.yml | 30 ++++---- pipeline/pipeline.yaml | 158 +++++++++++++++++++++++++++++++++++------ 2 files changed, 156 insertions(+), 32 deletions(-) diff --git a/buildspec.yml b/buildspec.yml index d30b0d2..af69355 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1,12 +1,18 @@ -version: 0.0 -containers: - LambdaFunctions: - phases: - during_build: - commands: - - cd src/data-processor-1 && pwd && npm install async marked - - cd src/data-processor-2 && npm install async marked && ls - - aws cloudformation package --template $INPUT_FILE --s3-bucket $S3_BUCKET --output-template post-sam.yaml - artifacts: - files: - - post-sam.yaml +version: 0.2 + +env: + variables: + ARTIFACT_BUCKET: "jr-amz-test" +phases: + install: + runtime-versions: + python: 3.7 + build: + commands: + - sam build --use-container + post_build: + commands: + - sam package --output-template-file packaged-template.yml --s3-bucket $ARTIFACT_BUCKET +artifacts: + files: + - packaged-template.yml diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 826e9c0..59dad02 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -6,13 +6,15 @@ Parameters: Description: Name of the application. SAMInputFile: Type: String + Default: "" Description: The filename for the SAM file. SAMOutputFile: Type: String + Default: "packaged-template.yml" Description: The filename for the output SAM file from the buildspec file CodeBuildImage: Type: String - Default: "aws/codebuild/nodejs:4.3.2" + Default: "aws/codebuild/amazonlinux2-x86_64-standard:1.0" Description: Image used for CodeBuild project. GitHubRepoName: Type: String @@ -21,25 +23,13 @@ Parameters: Type: String Description: The GitHub repo branch code pipelines should watch for changes on Default: master - GitHubUser: + GitHubRepoOwner: Type: String - Description: GitHub UserName. This username must have access to the GitHubToken. + Description: GitHub Repository Owner. GitHubToken: NoEcho: true Type: String Description: "Secret. OAuthToken with access to Repo. Long string of characters and digits. Go to https://github.com/settings/tokens" - CodePipelineRole: - Type: String - Description: Role the pipeline will use - CloudformationRole: - Type: String - Description: Role for cloudformation - CodeBuildRole: - Type: String - Description: Role for code build - CICDS3BucketName: - Type: String - Description: S3 Bucket where the pipeline templates live Resources: CodeBuildProject: DependsOn: [S3Bucket] @@ -59,7 +49,7 @@ Resources: Image: !Ref CodeBuildImage Type: LINUX_CONTAINER Name: !Sub "${AppName}-build" - ServiceRole: !Ref CodeBuildRole + ServiceRole: !GetAtt CodeBuildTrustRole.Arn Source: Type: CODEPIPELINE Tags: @@ -98,7 +88,7 @@ Resources: Type: AWS::CodePipeline::Pipeline Properties: Name: !Sub "${AppName}-pipeline" - RoleArn: !Ref CodePipelineRole + RoleArn: !GetAtt CodePipelineTrustRole.Arn Stages: - Name: Source Actions: @@ -115,7 +105,7 @@ Resources: Repo: !Ref GitHubRepoName Branch: !Ref GitHubRepoBranch OAuthToken: !Ref GitHubToken - Owner: !Ref GitHubUser + Owner: !Ref GitHubRepoOwner RunOrder: 1 - Name: Build Actions: @@ -146,11 +136,10 @@ Resources: Configuration: StackName: !Sub "${AppName}-serverless-stack" ActionMode: CHANGE_SET_REPLACE - RoleArn: !Ref CloudformationRole + RoleArn: !GetAtt CloudFormationTrustRole.Arn ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" - #ParameterOverrides: !Sub '{"CICDS3BucketName":"${CICDS3BucketName}"}' RunOrder: 1 - Name: execute-changeset InputArtifacts: [] @@ -168,3 +157,132 @@ Resources: ArtifactStore: Type: S3 Location: !Ref S3Bucket + CodeBuildTrustRole: + Description: Creating service role in IAM for AWS CodeBuild + Type: AWS::IAM::Role + Properties: + RoleName: !Sub "${AppName}-codebuild-role" + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Principal: + Service: [codebuild.amazonaws.com] + Action: sts:AssumeRole + Path: / + CodeBuildRolePolicy: + Type: AWS::IAM::Policy + DependsOn: CodeBuildTrustRole + Description: Setting IAM policy for the service role for AWS CodeBuild + Properties: + PolicyName: CodeBuildRolePolicy + PolicyDocument: + Statement: + - Effect: Allow + Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] + Resource: ["*"] + - Effect: Allow + Resource: ["*"] + Action: ["s3:*"] + - Effect: Allow + Resource: ["*"] + Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] + - Effect: Allow + Resource: ["*"] + Action: ["sns:SendMessage"] + Roles: [!Ref CodeBuildTrustRole] + CloudFormationTrustRole: + Description: Creating service role in IAM for AWS CloudFormation + Type: AWS::IAM::Role + Properties: + RoleName: !Sub "${AppName}-cloudformation-role" + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Principal: + Service: [cloudformation.amazonaws.com] + Action: sts:AssumeRole + Path: / + CloudFormationRolePolicy: + Type: AWS::IAM::Policy + DependsOn: CloudFormationTrustRole + Description: Setting IAM policy for the service role for AWS CloudFormation + Properties: + PolicyName: CloudFormationRolePolicy + PolicyDocument: + Statement: + - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] + Resource: "*" + Effect: Allow + - Action: ["s3:PutObject"] + Resource: ["arn:aws:s3:::codepipeline*"] + Effect: Allow + - Action: ["lambda:*"] + Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" + Effect: Allow + - Action: ["dynamo:*"] + Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Effect: Allow + - Action: ["sqs:*"] + Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Effect: Allow + - Action: ["cloudwatch:*"] + Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Effect: Allow + - Action: ["cloudtrail:*"] + Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Effect: Allow + - Action: ["sns:*"] + Resource: !Sub "arn:aws:sns:${AWS::Region}:*:*" + Effect: Allow + - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Effect: Allow + - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy"] + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Effect: Allow + - Action: ["iam:PassRole"] + Resource: ["*"] + Effect: Allow + - Action: ["cloudformation:CreateChangeSet"] + Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" + Effect: Allow + - Action: ["cloudformation:CreateChangeSet"] + Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Include" + Effect: Allow + Roles: [!Ref CloudFormationTrustRole] + CodePipelineTrustRole: + Description: Creating service role in IAM for AWS CodePipeline + Type: AWS::IAM::Role + Properties: + RoleName: !Sub "${AppName}-codepipeline-role" + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Principal: + Service: [codepipeline.amazonaws.com] + Action: sts:AssumeRole + Path: / + CodePipelineRolePolicy: + Type: AWS::IAM::Policy + DependsOn: CodePipelineTrustRole + Description: Setting IAM policy for the service role for AWS CodePipeline + Properties: + PolicyName: CodePipelineRolePolicy + PolicyDocument: + Statement: + - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] + Resource: "*" + Effect: Allow + - Action: ["s3:PutObject"] + Resource: ["arn:aws:s3:::codepipeline*"] + Effect: Allow + - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] + Resource: "*" + Effect: Allow + - Action: ["cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "iam:PassRole"] + Resource: "*" + Effect: Allow + - Action: ["lambda:InvokeFunction", "lambda:ListFunctions"] + Resource: "*" + Effect: Allow + Roles: [!Ref CodePipelineTrustRole] \ No newline at end of file From 717a5957b19358d03a64630a98f82e166af7e074 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 17 Jan 2020 15:37:08 +0000 Subject: [PATCH 050/115] Removed redundant files --- pipeline/main.yaml | 68 ----------------- pipeline/pipeline-roles.yaml | 139 ----------------------------------- 2 files changed, 207 deletions(-) delete mode 100644 pipeline/main.yaml delete mode 100644 pipeline/pipeline-roles.yaml diff --git a/pipeline/main.yaml b/pipeline/main.yaml deleted file mode 100644 index 5786400..0000000 --- a/pipeline/main.yaml +++ /dev/null @@ -1,68 +0,0 @@ -AWSTemplateFormatVersion: "2010-09-09" -Description: "Main template for a CI/CD Serverless application." -Parameters: - AppName: - Type: String - Description: Name of the application - MinLength: "1" - MaxLength: "80" - AllowedPattern: "[A-Za-z0-9-]+" - ConstraintDescription: Malformed input parameter. AppName must only contain upper and lower case letters, numbers, and -. - SAMInputFile: - Type: String - Description: The filename for the SAM file. - Default: lambda_file_processing.yml - SAMOutputFile: - Type: String - Description: The filename for the output SAM file from the buildspec file. - Default: post-sam.yaml - CodeBuildImage: - Type: String - Default: "aws/codebuild/nodejs:4.3.2" - Description: Image used for CodeBuild project. - CICDS3BucketName: - Type: String - Default: "sam-stuff" - Description: S3 Bucket where the pipeline templates live - GitHubRepoName: - Type: String - Default: "" - Description: The GitHub repo name - GitHubRepoBranch: - Type: String - Description: The GitHub repo branch code pipelines should watch for changes on - Default: master - GitHubUser: - Type: String - Description: GitHub UserName. This username must have access to the GitHubToken. - GitHubToken: - NoEcho: true - Type: String - Description: "Secret. OAuthToken with access to Repo. Long string of characters and digits. Go to https://github.com/settings/tokens" -Resources: - ServerlessRoles: - Type: "AWS::CloudFormation::Stack" - Properties: - Parameters: - AppName: !Ref AppName - TemplateURL: - Fn::Sub: https://${CICDS3BucketName}.s3.amazonaws.com/templates/pipeline-roles.yaml - ServerlessPipeline: - Type: "AWS::CloudFormation::Stack" - DependsOn: [ServerlessRoles] - Properties: - Parameters: - AppName: !Ref AppName - SAMInputFile: !Ref SAMInputFile - SAMOutputFile: !Ref SAMOutputFile - CodeBuildImage: !Ref CodeBuildImage - GitHubRepoName: !Ref GitHubRepoName - GitHubRepoBranch: !Ref GitHubRepoBranch - GitHubUser: !Ref GitHubUser - GitHubToken: !Ref GitHubToken - CICDS3BucketName: !Ref CICDS3BucketName - CodePipelineRole: !GetAtt ServerlessRoles.Outputs.CodePipelineRole - CloudformationRole: !GetAtt ServerlessRoles.Outputs.CloudformationDeployRole - CodeBuildRole: !GetAtt ServerlessRoles.Outputs.CodeBuildRole - TemplateURL: - Fn::Sub: https://${CICDS3BucketName}.s3.amazonaws.com/templates/pipeline.yaml diff --git a/pipeline/pipeline-roles.yaml b/pipeline/pipeline-roles.yaml deleted file mode 100644 index 5d2e759..0000000 --- a/pipeline/pipeline-roles.yaml +++ /dev/null @@ -1,139 +0,0 @@ -AWSTemplateFormatVersion: "2010-09-09" -Description: Common resources for application deployed to Lambda -Parameters: - AppName: - Type: String - Description: Name of the application. - MinLength: "1" - MaxLength: "100" -Resources: - CodeBuildTrustRole: - Description: Creating service role in IAM for AWS CodeBuild - Type: AWS::IAM::Role - Properties: - RoleName: !Sub "${AppName}-codebuild-role" - AssumeRolePolicyDocument: - Statement: - - Effect: Allow - Principal: - Service: [codebuild.amazonaws.com] - Action: sts:AssumeRole - Path: / - CodeBuildRolePolicy: - Type: AWS::IAM::Policy - DependsOn: CodeBuildTrustRole - Description: Setting IAM policy for the service role for AWS CodeBuild - Properties: - PolicyName: CodeBuildRolePolicy - PolicyDocument: - Statement: - - Effect: Allow - Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] - Resource: ["*"] - - Effect: Allow - Resource: ["*"] - Action: ["s3:*"] - - Effect: Allow - Resource: ["*"] - Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] - - Effect: Allow - Resource: ["*"] - Action: ["sns:SendMessage"] - Roles: [!Ref CodeBuildTrustRole] - CloudFormationTrustRole: - Description: Creating service role in IAM for AWS CloudFormation - Type: AWS::IAM::Role - Properties: - RoleName: !Sub "${AppName}-cloudformation-role" - AssumeRolePolicyDocument: - Statement: - - Effect: Allow - Principal: - Service: [cloudformation.amazonaws.com] - Action: sts:AssumeRole - Path: / - CloudFormationRolePolicy: - Type: AWS::IAM::Policy - DependsOn: CloudFormationTrustRole - Description: Setting IAM policy for the service role for AWS CloudFormation - Properties: - PolicyName: CloudFormationRolePolicy - PolicyDocument: - Statement: - - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] - Resource: "*" - Effect: Allow - - Action: ["s3:PutObject"] - Resource: ["arn:aws:s3:::codepipeline*"] - Effect: Allow - - Action: ["lambda:*"] - Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" - Effect: Allow - - Action: ["apigateway:*"] - Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" - Effect: Allow - - Action: ["sns:*"] - Resource: !Sub "arn:aws:sns:${AWS::Region}:*:*" - Effect: Allow - - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" - Effect: Allow - - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" - Effect: Allow - - Action: ["iam:PassRole"] - Resource: ["*"] - Effect: Allow - - Action: ["cloudformation:CreateChangeSet"] - Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" - Effect: Allow - - Action: ["cloudformation:CreateChangeSet"] - Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Include" - Effect: Allow - Roles: [!Ref CloudFormationTrustRole] - CodePipelineTrustRole: - Description: Creating service role in IAM for AWS CodePipeline - Type: AWS::IAM::Role - Properties: - RoleName: !Sub "${AppName}-codepipeline-role" - AssumeRolePolicyDocument: - Statement: - - Effect: Allow - Principal: - Service: [codepipeline.amazonaws.com] - Action: sts:AssumeRole - Path: / - CodePipelineRolePolicy: - Type: AWS::IAM::Policy - DependsOn: CodePipelineTrustRole - Description: Setting IAM policy for the service role for AWS CodePipeline - Properties: - PolicyName: CodePipelineRolePolicy - PolicyDocument: - Statement: - - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] - Resource: "*" - Effect: Allow - - Action: ["s3:PutObject"] - Resource: ["arn:aws:s3:::codepipeline*"] - Effect: Allow - - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] - Resource: "*" - Effect: Allow - - Action: ["cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "iam:PassRole"] - Resource: "*" - Effect: Allow - - Action: ["lambda:InvokeFunction", "lambda:ListFunctions"] - Resource: "*" - Effect: Allow - Roles: [!Ref CodePipelineTrustRole] -Outputs: - CodePipelineRole: - Description: "Role for code pipeline" - Value: !GetAtt CodePipelineTrustRole.Arn - CloudformationDeployRole: - Description: "Role for cloudformation to deploy with." - Value: !GetAtt CloudFormationTrustRole.Arn - CodeBuildRole: - Description: "Role for code build to build" - Value: !GetAtt CodeBuildTrustRole.Arn From ed768d2b569b0663bf4763871ae0f06f84eb88a0 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 17 Jan 2020 15:56:42 +0000 Subject: [PATCH 051/115] added variables to make it more generic --- buildspec.yml | 7 ++----- pipeline/pipeline.yaml | 11 +++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/buildspec.yml b/buildspec.yml index af69355..31438eb 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1,8 +1,5 @@ version: 0.2 -env: - variables: - ARTIFACT_BUCKET: "jr-amz-test" phases: install: runtime-versions: @@ -12,7 +9,7 @@ phases: - sam build --use-container post_build: commands: - - sam package --output-template-file packaged-template.yml --s3-bucket $ARTIFACT_BUCKET + - sam package --output-template-file $SAM_OUTPUT_TEMPLATE --s3-bucket $ARTIFACT_BUCKET artifacts: files: - - packaged-template.yml + - $SAM_OUTPUT_TEMPLATE diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 59dad02..39db6d2 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -4,10 +4,10 @@ Parameters: AppName: Type: String Description: Name of the application. - SAMInputFile: + SAMTemplateFile: Type: String - Default: "" - Description: The filename for the SAM file. + Default: "packaged-template.yml" + Description: The filename for the SAM Template file. SAMOutputFile: Type: String Default: "packaged-template.yml" @@ -41,11 +41,10 @@ Resources: Description: !Sub "Building stage for ${AppName}." Environment: ComputeType: BUILD_GENERAL1_SMALL + PrivilegedMode: True EnvironmentVariables: - - Name: S3_BUCKET + - Name: ARTIFACT_BUCKET Value: !Ref S3Bucket - - Name: INPUT_FILE - Value: !Ref SAMInputFile Image: !Ref CodeBuildImage Type: LINUX_CONTAINER Name: !Sub "${AppName}-build" From cec7752b9cea8c562d5b076e20d6c39d9c448d9c Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 20 Jan 2020 11:28:39 +0000 Subject: [PATCH 052/115] improved permissions --- pipeline/pipeline.yaml | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 39db6d2..3298634 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -4,10 +4,6 @@ Parameters: AppName: Type: String Description: Name of the application. - SAMTemplateFile: - Type: String - Default: "packaged-template.yml" - Description: The filename for the SAM Template file. SAMOutputFile: Type: String Default: "packaged-template.yml" @@ -30,6 +26,9 @@ Parameters: NoEcho: true Type: String Description: "Secret. OAuthToken with access to Repo. Long string of characters and digits. Go to https://github.com/settings/tokens" + AlarmRecipientEmailAddress: + Type: String + Description: Email address for any alerts. Resources: CodeBuildProject: DependsOn: [S3Bucket] @@ -45,6 +44,8 @@ Resources: EnvironmentVariables: - Name: ARTIFACT_BUCKET Value: !Ref S3Bucket + - Name: SAM_OUTPUT_TEMPLATE + Value: !Ref SAMOutputFile Image: !Ref CodeBuildImage Type: LINUX_CONTAINER Name: !Sub "${AppName}-build" @@ -139,6 +140,7 @@ Resources: ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" + ParameterOverrides: !Sub '{"AlarmRecipientEmailAddress": "${AlarmRecipientEmailAddress}"}' RunOrder: 1 - Name: execute-changeset InputArtifacts: [] @@ -209,7 +211,7 @@ Resources: PolicyName: CloudFormationRolePolicy PolicyDocument: Statement: - - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] + - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] Resource: "*" Effect: Allow - Action: ["s3:PutObject"] @@ -218,25 +220,31 @@ Resources: - Action: ["lambda:*"] Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" Effect: Allow - - Action: ["dynamo:*"] - Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + - Action: ["lambda:CreateEventSourceMapping", "lambda:DeleteEventSourceMapping", "lambda:GetEventSourceMapping", "lambda:UpdateEventSourceMapping" ] + Resource: "*" + Effect: Allow + - Action: ["dynamodb:*"] + Resource: "*" Effect: Allow - Action: ["sqs:*"] - Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Resource: "*" Effect: Allow - Action: ["cloudwatch:*"] - Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Resource: "*" Effect: Allow - Action: ["cloudtrail:*"] - Resource: !Sub "arn:aws:apigateway:${AWS::Region}::*" + Resource: "*" + Effect: Allow + - Action: ["events:*"] + Resource: "*" Effect: Allow - Action: ["sns:*"] Resource: !Sub "arn:aws:sns:${AWS::Region}:*:*" Effect: Allow - - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole"] + - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy"] + - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRolePolicy", "iam:getRolePolicy", "iam:PutRolePolicy"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - Action: ["iam:PassRole"] From 34179f617b25ec29df49007dee745058dcf5180a Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 22 Jan 2020 15:11:23 +0000 Subject: [PATCH 053/115] Updated roles for least privilage --- pipeline/pipeline.yaml | 85 ++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 3298634..3e77c60 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -3,6 +3,7 @@ Description: "Template for full CI/CD serverless applications." Parameters: AppName: Type: String + Default: "lambda-file-refarch" Description: Name of the application. SAMOutputFile: Type: String @@ -32,7 +33,7 @@ Parameters: Resources: CodeBuildProject: DependsOn: [S3Bucket] - Description: Creating AWS CodeBuild project + Description: AWS CodeBuild project Type: AWS::CodeBuild::Project Properties: Artifacts: @@ -57,16 +58,15 @@ Resources: Value: !Ref AppName TimeoutInMinutes: 5 S3Bucket: - Description: Creating Amazon S3 bucket for AWS CodePipeline artifacts + Description: S3 bucket for AWS CodePipeline artifacts Type: AWS::S3::Bucket - DeletionPolicy: Retain Properties: BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}" VersioningConfiguration: Status: Enabled S3ArtifactBucketPolicy: DependsOn: [S3Bucket] - Description: Setting Amazon S3 bucket policy for AWS CodePipeline access + Description: S3 bucket policy for AWS CodePipeline access Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref S3Bucket @@ -84,7 +84,7 @@ Resources: aws:SecureTransport: false ProjectPipeline: DependsOn: [S3Bucket, CodeBuildProject] - Description: Creating a deployment pipeline for your project in AWS CodePipeline + Description: AWS CodePipeline deployment pipeline for project Type: AWS::CodePipeline::Pipeline Properties: Name: !Sub "${AppName}-pipeline" @@ -159,7 +159,7 @@ Resources: Type: S3 Location: !Ref S3Bucket CodeBuildTrustRole: - Description: Creating service role in IAM for AWS CodeBuild + Description: Service role for AWS CodeBuild Type: AWS::IAM::Role Properties: RoleName: !Sub "${AppName}-codebuild-role" @@ -173,26 +173,23 @@ Resources: CodeBuildRolePolicy: Type: AWS::IAM::Policy DependsOn: CodeBuildTrustRole - Description: Setting IAM policy for the service role for AWS CodeBuild + Description: IAM policy for the service role for AWS CodeBuild Properties: PolicyName: CodeBuildRolePolicy PolicyDocument: Statement: - Effect: Allow Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] - Resource: ["*"] + Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" - Effect: Allow - Resource: ["*"] Action: ["s3:*"] + Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" - Effect: Allow - Resource: ["*"] Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] - - Effect: Allow - Resource: ["*"] - Action: ["sns:SendMessage"] + Resource: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:alias/aws/s3" Roles: [!Ref CodeBuildTrustRole] CloudFormationTrustRole: - Description: Creating service role in IAM for AWS CloudFormation + Description: Service role for AWS CloudFormation Type: AWS::IAM::Role Properties: RoleName: !Sub "${AppName}-cloudformation-role" @@ -206,40 +203,47 @@ Resources: CloudFormationRolePolicy: Type: AWS::IAM::Policy DependsOn: CloudFormationTrustRole - Description: Setting IAM policy for the service role for AWS CloudFormation + Description: IAM policy for the service role for AWS CloudFormation Deployment Properties: PolicyName: CloudFormationRolePolicy PolicyDocument: Statement: - - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] - Resource: "*" + - Action: ["s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] + Resource: + - !Sub "arn:aws:s3:::${AppName}-*-inputbucket-*" + - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*" + - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*" Effect: Allow - - Action: ["s3:PutObject"] - Resource: ["arn:aws:s3:::codepipeline*"] + - Action: ["s3:GetObject", "s3:GetObjectVersion"] + Resource: + - !Sub "arn:aws:s3:::${AppName}-*-inputbucket-*/*" + - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*/*" + - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*/*" + - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - Action: ["lambda:*"] Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" Effect: Allow - Action: ["lambda:CreateEventSourceMapping", "lambda:DeleteEventSourceMapping", "lambda:GetEventSourceMapping", "lambda:UpdateEventSourceMapping" ] - Resource: "*" + Resource: ["*"] Effect: Allow - Action: ["dynamodb:*"] - Resource: "*" + Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-serverless-stack-SentimentTable-*" Effect: Allow - Action: ["sqs:*"] - Resource: "*" + Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-*" Effect: Allow - Action: ["cloudwatch:*"] - Resource: "*" + Resource: !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:${AppName}-serverless-stack-*" Effect: Allow - Action: ["cloudtrail:*"] - Resource: "*" + Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/${AppName}-serverless-stack-InputBucketTrail*" Effect: Allow - Action: ["events:*"] - Resource: "*" + Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-serverless-stack-FileProcessingRule-*" Effect: Allow - Action: ["sns:*"] - Resource: !Sub "arn:aws:sns:${AWS::Region}:*:*" + Resource: !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-AlarmTopic-*" Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" @@ -248,7 +252,7 @@ Resources: Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - Action: ["iam:PassRole"] - Resource: ["*"] + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - Action: ["cloudformation:CreateChangeSet"] Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" @@ -258,7 +262,7 @@ Resources: Effect: Allow Roles: [!Ref CloudFormationTrustRole] CodePipelineTrustRole: - Description: Creating service role in IAM for AWS CodePipeline + Description: Service role for AWS CodePipeline Type: AWS::IAM::Role Properties: RoleName: !Sub "${AppName}-codepipeline-role" @@ -272,24 +276,25 @@ Resources: CodePipelineRolePolicy: Type: AWS::IAM::Policy DependsOn: CodePipelineTrustRole - Description: Setting IAM policy for the service role for AWS CodePipeline + Description: IAM policy for the service role for AWS CodePipeline Properties: PolicyName: CodePipelineRolePolicy PolicyDocument: Statement: - - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning"] - Resource: "*" - Effect: Allow - - Action: ["s3:PutObject"] - Resource: ["arn:aws:s3:::codepipeline*"] + - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning", "s3:PutObject"] + Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] - Resource: "*" + Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-build" Effect: Allow - - Action: ["cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "rds:*", "sqs:*", "iam:PassRole"] - Resource: "*" + - Action: ["cloudformation:*"] + Resource: + # - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack" + - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack/*" Effect: Allow - - Action: ["lambda:InvokeFunction", "lambda:ListFunctions"] - Resource: "*" + - Action: ["iam:PassRole"] + Resource: !GetAtt CloudFormationTrustRole.Arn Effect: Allow - Roles: [!Ref CodePipelineTrustRole] \ No newline at end of file + Roles: [!Ref CodePipelineTrustRole] + + From 70a8f9d4c23a6da4f4c44233e656fa87d5e049ef Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 22 Jan 2020 15:12:51 +0000 Subject: [PATCH 054/115] removed commented line --- pipeline/pipeline.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 3e77c60..9c4e34a 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -289,7 +289,6 @@ Resources: Effect: Allow - Action: ["cloudformation:*"] Resource: - # - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack" - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack/*" Effect: Allow - Action: ["iam:PassRole"] From e73baa0527f2041d1377b952bb9f0c405aee0b86 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 22 Jan 2020 10:24:56 -0500 Subject: [PATCH 055/115] Fix typo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2ab634c..bae4777 100644 --- a/README.md +++ b/README.md @@ -189,9 +189,9 @@ creates the following resources: - **SentimentDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **SentimentDlq** within a 1 minute period and sends notification to the **AlarmTopic**. -- **ConversionQueueAlarm** - A CloudWatch Alarm that detect when there are too many messages in the **ConversionQueue** and sends notification to the **AlarmTopic**. +- **ConversionQueueAlarm** - A CloudWatch Alarm that detects when there are too many messages in the **ConversionQueue** and sends notification to the **AlarmTopic**. -- **SentimentQueueAlarm** - A CloudWatch Alarm that detect when there are too many messages in the **SentimentQueue** and sends notification to the **AlarmTopic**. +- **SentimentQueueAlarm** - A CloudWatch Alarm that detects when there are too many messages in the **SentimentQueue** and sends notification to the **AlarmTopic**. - **ConversionFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when the error rate for **ConversionFunction** is too high and sends notification to the **AlarmTopic**. From 6a7cd135c15411a76b16084a2fb77df0bec9aa50 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 22 Jan 2020 13:00:02 -0500 Subject: [PATCH 056/115] Update stat for many metrics in dashboard --- template.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/template.yml b/template.yml index 6833dfb..d6b97c7 100644 --- a/template.yml +++ b/template.yml @@ -402,7 +402,7 @@ Resources: - Name: FunctionName Value: !Ref ConversionFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false - Id: m2 @@ -414,7 +414,7 @@ Resources: - Name: FunctionName Value: !Ref ConversionFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false EvaluationPeriods: 1 @@ -441,7 +441,7 @@ Resources: - Name: FunctionName Value: !Ref SentimentFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false - Id: m2 @@ -453,7 +453,7 @@ Resources: - Name: FunctionName Value: !Ref SentimentFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false EvaluationPeriods: 1 @@ -480,7 +480,7 @@ Resources: - Name: FunctionName Value: !Ref ConversionFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false - Id: m2 @@ -492,7 +492,7 @@ Resources: - Name: FunctionName Value: !Ref ConversionFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false EvaluationPeriods: 1 @@ -519,7 +519,7 @@ Resources: - Name: FunctionName Value: !Ref SentimentFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false - Id: m2 @@ -531,7 +531,7 @@ Resources: - Name: FunctionName Value: !Ref SentimentFunction Period: 300 - Stat: Average + Stat: Sum Unit: Count ReturnData: false EvaluationPeriods: 1 @@ -562,7 +562,7 @@ Resources: ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Conversion Function Invocations" } @@ -580,7 +580,7 @@ Resources: [ "AWS/Lambda", "Invocations", "FunctionName", "${ConversionFunction}", { "id": "m2", "visible": false } ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Conversion Function Error Rate" } @@ -598,7 +598,7 @@ Resources: [ "AWS/Lambda", "Invocations", "FunctionName", "${ConversionFunction}", { "id": "m2", "visible": false } ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Conversion Function Throttle Rate" } @@ -619,7 +619,7 @@ Resources: ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Conversion DLQ Length" } @@ -640,7 +640,7 @@ Resources: ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Sentiment Function Invocations" } @@ -658,7 +658,7 @@ Resources: [ "AWS/Lambda", "Invocations", "FunctionName", "${SentimentFunction}", { "id": "m2", "visible": false } ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Sentiment Function Error Rate" } @@ -676,7 +676,7 @@ Resources: [ "AWS/Lambda", "Invocations", "FunctionName", "${SentimentFunction}", { "id": "m2", "visible": false } ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Sentiment Function Throttle Rate" } @@ -697,7 +697,7 @@ Resources: ] ], "period":60, - "stat":"Average", + "stat":"Sum", "region": "${AWS::Region}", "title":"Sentiment DLQ Length" } From 0dd01f6116b9c140b7c286383a354d45c4f2b9c0 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 4 Mar 2020 11:38:19 +0000 Subject: [PATCH 057/115] updated diagram to reflect change to SNS event notification --- img/lambda-refarch-fileprocessing-simple.png | Bin 134504 -> 116953 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png index 2c2551ea9605aec81605a3bda1f774da760ffcca..32a36cd4b58625a031e76406a4d119fe1503b24f 100644 GIT binary patch literal 116953 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 n~ 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 E1N+0vxBvhE literal 134504 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

W2v*?fJ3aX6f-|6B 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 aVt$eD-IUQoN;4xBux Date: Wed, 11 Mar 2020 17:32:22 -0400 Subject: [PATCH 058/115] Refactor out EventBridge Use S3 Events and SNS in place of CloudTrail and EventBridge --- README.md | 103 ++++++++++++----------- cleanup.sh | 20 +++++ deploy.sh | 51 ++++++++++++ src/conversion/conversion.py | 128 ++++++++++++++-------------- src/sentiment/sentiment.py | 138 +++++++++++++++++-------------- template.yml | 156 ++++++++++++++--------------------- 6 files changed, 327 insertions(+), 269 deletions(-) create mode 100644 cleanup.sh create mode 100644 deploy.sh diff --git a/README.md b/README.md index bae4777..4a0dd95 100644 --- a/README.md +++ b/README.md @@ -12,70 +12,69 @@ In this example application we deliver the notes from an interview in Markdown f ### Event Trigger -Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilise [CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) and [CloudTrail](https://aws.amazon.com/cloudtrail/). A CloudWatch Events rule checks for S3 PutObject API calls into our Source Bucket using CloudTrail data. CloudTrail records when PutObject API is called. Our rule translates this record into an event, represented as a JSON object. We also define targets in our rule and deliver our JSON event to 2 seperate [SQS Queues](https://aws.amazon.com/sqs/), representing 2 different worflows. Other target types include AWS Lambda Functions, Kinesis Data Streams, Simple Notification Service, Step Functions state machines, and ECS tasks. Refer to [What is Amazon CloudWatch Events?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) for more information about eligible targets. +Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilize [AWS S3 Events](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) and [Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/dg/welcome.html). When an object is created in S3, an event is emitted to a SNS topic. We deliver our event to 2 seperate [SQS Queues](https://aws.amazon.com/sqs/), representing 2 different workflows. Refer to [What is Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) for more information about eligible targets. ### Conversion Workflow We target a SQS queue for this workflow. Sending the JSON event to SQS first rather than directly to Lambda allows for more control of Lambda invocations and better error handling. -The Lambda service polls our queue. When messages are available it will send them to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. +The Lambda service polls our queue on our behalf. When messages are available they will be delivered to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. -If our Conversion Lambda function fails to process the messages, SQS sends the event to a dead-letter queue (DLQ) for inspection and reprocessing. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Conversion DLQ. +If our Conversion Lambda function fails to process the messages, the function sends the event to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Conversion DLQ. -Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function execution environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new html file to the HTML Bucket. +Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function execution environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new HTML file to an output S3 bucket. If our function execution results in an error, we will ### Sentiment Analysis Workflow We are using AWS' AI/ML service [Amazon Comprehend](https://aws.amazon.com/comprehend/) which is a machine learning powered service that makes it easy to find insights and relationships in text. We use the Sentiment Analysis API to understand whether interview responses are positive or negative. -The Sentiment workflow uses the same SQS-to-Lambda Function pattern as the Coversion workflow. Our function downloads the interview file, extracts the content, and sends it to the Comprehend Sentiment Analysis API. This returns a Sentiment and a confidence score which describes the level of confidence that Amazon Comprehend has in the accuracy of its detection of sentiments. +The Sentiment workflow uses the same SQS-to-Lambda Function pattern as the Coversion workflow. Our function downloads the markdown file, extracts the contents, and sends it to the Comprehend Sentiment Analysis API. This returns a Sentiment and a confidence score which describes the level of confidence that Amazon Comprehend has in the accuracy of its detection of sentiments. Once we have our sentiment we persist the result to our [DynamoDB](https://aws.amazon.com/dynamodb/) table. -If our Sentiment Lambda function fails to process the messages, SQS sends the event to a dead-letter queue (DLQ) for inspection and reprocessing. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Sentiment DLQ. +If our Sentiment Lambda function fails to process the messages, the function sends the event to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Sentiment DLQ. -## Running the Example - -You can use the provided [AWS SAM template](./template.yml) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *SAM Template Resources* section of this document. +## Deploying the Application +The application is built, packaged, and deployed using the [AWS SAM CLI](https://github.com/awslabs/aws-sam-cli). -### Using SAM to Build and Deploy the Application - -#### Build +You can use the provided [AWS SAM template](./template.yml) to launch a stack that demonstrates the Lambda file processing reference architecture. Details about the resources created by this template are provided in the *SAM Template Resources* section of this document. -The AWS SAM CLI comes with abstractions for a number of Lambda runtimes to build your dependencies, and copies the source code into staging folders so that everything is ready to be packaged and deployed. The *sam build* command builds any dependencies that your application has, and copies your application source code to folders under *.aws-sam/build* to be zipped and uploaded to Lambda. +The sample can be built and deployed by running the script `deploy.sh`. ```bash -sam build --use-container +bash deploy.sh s3_bucketname aws_region email_address_to_receive_alarm_messages + +# eg bash deploy.sh my_s3_bucket us-east-1 user@mydomain.com ``` -#### Package +**Note** -Next, run *sam package*. This command takes your Lambda handler source code and any third-party dependencies, zips everything, and uploads the zip file to your Amazon S3 bucket. That bucket and file location are then noted in the packaged-template.yaml file. You use the generated packaged-template.yaml file to deploy the application in the next step. +The S3 bucket *s3_bucketname* must exist prior to running the *deploy.sh* script. This bucket is used the sam package command to store the deployment package. If you need to create a bucket for this purpose, run the following command to create an Amazon S3 bucket: ```bash -sam package \ - --output-template-file packaged-template.yml \ - --s3-bucket bucketname +aws s3 mb s3://bucketname --region region # Example regions: us-east-1, ap-east-1, eu-central-1, sa-east-1 ``` -**Note** +### What Is Happening in the Script? -For *bucketname* in this command, you need an Amazon S3 bucket that the sam package command can use to store the deployment package. The deployment package is used when you deploy your application in a later step. If you need to create a bucket for this purpose, run the following command to create an Amazon S3 bucket: +The *sam build* command builds your application dependencies and copies the source code to folders under *.aws-sam/build* to be zipped and uploaded to Lambda. ```bash -aws s3 mb s3://bucketname --region region # Example regions: us-east-1, ap-east-1, eu-central-1, sa-east-1 +sam build --use-container ``` -#### Deploy - -This command deploys your application to the AWS Cloud. It's important that this command explicitly includes both of the following: +The *sam package* command takes your Lambda handler source code and any third-party dependencies, zips everything, and uploads the zip file to your Amazon S3 bucket. That bucket and file location are then noted in the packaged-template.yaml file. The generated packaged-template.yaml file is used to deploy the application. - * The AWS Region to deploy to. This Region must match the Region of the Amazon S3 source bucket. +```bash +sam package \ + --output-template-file packaged-template.yml \ + --s3-bucket bucketname +``` - * The CAPABILITY_IAM parameter, because creating new Lambda functions involves creating new IAM roles. +The *sam deploy* command deploys your application to the AWS Cloud. ```bash sam deploy \ @@ -119,12 +118,18 @@ You can also view the CloudWatch logs generated by the Lambda functions. ## Cleaning Up the Example Resources -To remove all resources created by this example, do the following: +To remove all resources created by this example, run the following command: + +```bash +bash cleanup.sh +``` + +### What Is Happening in the Script? -### Delete Objects in the Input and Output Buckets. +Objects are cleared out from the `InputBucket` and `ConversionTargetBucket`. ```bash -for bucket in InputBucket CloudTrailBucket ConversionTargetBucket; do +for bucket in InputBucket ConversionTargetBucket; do echo "Clearing out ${bucket}..." BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) aws s3 rm s3://${BUCKET} --recursive @@ -132,14 +137,14 @@ for bucket in InputBucket CloudTrailBucket ConversionTargetBucket; do done ``` -### Delete the CloudFormation Stack +The CloudFormation stack is deleted. ```bash aws cloudformation delete-stack \ --stack-name lambda-file-refarch ``` -### Delete the CloudWatch Log Groups +The CloudWatch Logs Groups associated with the Lambda functions are deleted. ```bash for log_group in $(aws logs describe-log-groups --log-group-name-prefix '/aws/lambda/lambda-file-refarch-' --query "logGroups[*].logGroupName" --output text); do @@ -157,21 +162,19 @@ creates the following resources: - **InputBucket** - An S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger processing functions. -- **CloudTrailBucket** - An S3 bucket that is used to store CloudTrail data. - -- **InputBucketTrail** - An CloudTrail definition that captures events put into the **CloudTrailBucket**. +- **NotificationTopic** - A SNS topic that receives S3 events from the **InputBucket**. -- **CloudTrailBucketPolicy** - A S3 policy which permits the AWS CloudTrail service to write data to the **CloudTrailBucket**. +- **NotificationTopicPolicy** - A SNS topic policy that allows the **InputBucket** to publish events to the **NotificationTopic**. -- **FileProcessingQueuePolicy** - A SQS policy that allows the **FileProcessingRule** to publish events to the **ConversionQueue** and **SentimentQueue**. +- **NotificationQueuePolicy** - A SQS queue policy that allows the **NotificationTopic** to publish events to the **ConversionQueue** and **SentimentQueue**. -- **FileProcessingRule** - A CloudWatch Events Rule that monitors CloudTrail `PutObject` events to the **InputBucket**. +- **ConversionSubscription** - A SNS subscription that allows the **ConversionQueue** to receive messages from **NotificationTopic**. - **ConversionQueue** - A SQS queue that is used to store events for conversion from Markdown to HTML. - **ConversionDlq** - A SQS queue that is used to capture messages that cannot be processed by the **ConversionFunction**. The *RedrivePolicy* on the **ConversionQueue** is used to manage how traffic makes it to this queue. -- **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. +- **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. Errors in the function will be sent to the **ConversionDlq**. - **ConversionTargetBucket** - A S3 bucket that stores the converted HTML. @@ -179,29 +182,29 @@ creates the following resources: - **SentimentDlq** - A SQS queue that is used to capture messages that cannot be processed by the **SentimentFunction**. The *RedrivePolicy* on the **SentimentQueue** is used to manage how traffic makes it to this queue. -- **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. +- **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. Errors in the function will be sent to the **SentimentDlq**. - **SentimentTable** - A DynamoDB table that stores the input file along with the sentiment. -- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive CloudWatch Alarms. +- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive alarms from the **ConversionDlqAlarm** and **SentimentDlqAlarm**. -- **ConversionDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **ConvesionDlq** within a 1 minute period and sends notification to the **AlarmTopic**. +- **ConversionDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **ConvesionDlq** within a 1 minute period and sends a notification to the **AlarmTopic**. -- **SentimentDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **SentimentDlq** within a 1 minute period and sends notification to the **AlarmTopic**. +- **SentimentDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **SentimentDlq** within a 1 minute period and sends a notification to the **AlarmTopic**. -- **ConversionQueueAlarm** - A CloudWatch Alarm that detects when there are too many messages in the **ConversionQueue** and sends notification to the **AlarmTopic**. +- **ConversionQueueAlarm** - A CloudWatch Alarm that detects when there are 20 or more messages in the **ConversionQueue** within a 1 minute period and sends a notification to the **AlarmTopic**. -- **SentimentQueueAlarm** - A CloudWatch Alarm that detects when there are too many messages in the **SentimentQueue** and sends notification to the **AlarmTopic**. +- **SentimentQueueAlarm** - A CloudWatch Alarm that detects when there are 20 or more messages in the **SentimentQueue** within a 1 minute period and sends a notification to the **AlarmTopic**. -- **ConversionFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when the error rate for **ConversionFunction** is too high and sends notification to the **AlarmTopic**. +- **ConversionFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when there is an error rate of 5% over a 5 minute period for the **ConversionFunction** and sends a notification to the **AlarmTopic**. -- **SentimentFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when the error rate for **SentimentFunction** is too high and sends notification to the **AlarmTopic**. +- **SentimentFunctionErrorRateAlarm** - A CloudWatch Alarm that detects when there is an error rate of 5% over a 5 minute period for the **SentimentFunction** and sends a notification to the **AlarmTopic**. -- **ConversionFunctionThrottleRateAlarm** - A CloudWatch Alarm that detects when the throttle rate for **ConversionFunction** is too high and sends notification to the **AlarmTopic**. +- **ConversionFunctionThrottleRateAlarm** - A CloudWatch Alarm that detects when ther is a throttle rate of 1% over a 5 minute period for the **ConversionFunction** and sends a notification to the **AlarmTopic**. -- **SentimentFunctionThrottleRateAlarm** - A CloudWatch Alarm that detects when the throttle rate for **SentimentFunction** is too high and sends notification to the **AlarmTopic**. +- **SentimentFunctionThrottleRateAlarm** - A CloudWatch Alarm that detects when ther is a throttle rate of 1% over a 5 minute period for the **SentimentFunction** and sends a notification to the **AlarmTopic**. -- **ApplicationDashboard** - A CloudWatch Dashboard that presents Lambda function Invocations, Lambda function error and throttle rates, and visible SQS messages. +- **ApplicationDashboard** - A CloudWatch Dashboard that displays Conversion Function Invocations, Conversion Function Error Rate, Conversion Function Throttle Rate, Conversion DLQ Length, Sentiment Function Invocations, Sentiment Function Error Rate, Sentiment Function Throttle Rate, and Sentiment DLQ Length. ## License diff --git a/cleanup.sh b/cleanup.sh new file mode 100644 index 0000000..ecdf945 --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,20 @@ +#!/bin/bash + + +echo "Clearing out resources of lambda-file-refarch stack..." +echo +echo "Cleaning up S3 buckets..." && for bucket in InputBucket ConversionTargetBucket; do + echo "Clearing out ${bucket}..." + BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) + aws s3 rm s3://${BUCKET} --recursive + echo +done + +echo "Deleting CloudFormation stack..." && aws cloudformation delete-stack \ + --stack-name lambda-file-refarch + +echo "Clearing out CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/lambda/lambda-file-refarch- --query "logGroups[*].logGroupName" --output text); do + echo "Removing log group ${log_group}..." + aws logs delete-log-group --log-group-name ${log_group} + echo +done diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..8ead219 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +if (( ${#} < 3)); then + echo "USAGE: ${0} s3_package_bucket_name aws_region recipient_email" + exit 1 +fi + +### +# Variables +### +export SAM_TEMPLATE="template.yml" +export PACKAGED_TEMPLATE="packaged-template.yml" +export STACK_NAME="lambda-file-refarch" +export S3_CODE_BUCKET=${1} +export AWS_REGION=${2} +export RECIPIENT_EMAIL=${3} +export SAM_BUILD_ARG=${4} # Possible to pass in --skip-pull-image if docker image is already local +export FILE_TO_UPDATE="src/conversion/conversion.py" + +### +# Functions +### +function sam-runner { + sam build --use-container ${SAM_BUILD_ARG} + sam package --output-template-file ${PACKAGED_TEMPLATE} \ + --s3-bucket ${S3_CODE_BUCKET} # 2> /dev/null + sam deploy \ + --template-file ${PACKAGED_TEMPLATE} \ + --stack-name ${STACK_NAME} \ + --region ${AWS_REGION} \ + --tags Project=lambda-refarch-fileprocessing \ + --parameter-overrides AlarmRecipientEmailAddress=${RECIPIENT_EMAIL} \ + --capabilities CAPABILITY_IAM +} + +### +# Main body +### + +# Need to run two passes of the CF template to mitigate race condition. +# Please refer to https://aws.amazon.com/premiumsupport/knowledge-center/unable-validate-destination-s3/ +# for more detailed information. +sed -i '' '30,33 s/^/#/' ${SAM_TEMPLATE} +echo '' >> ${FILE_TO_UPDATE} +sam-runner +echo +sed -i '' '30,33 s/^#//' ${SAM_TEMPLATE} +echo '' >> ${FILE_TO_UPDATE} +sam-runner +git checkout ${FILE_TO_UPDATE} +echo \ No newline at end of file diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index a4c4f77..efdad17 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -170,7 +170,8 @@ def upload_html(bucket, key, source_file): def handler(event, context): - aws_lambda_logging.setup(level=log_level, aws_request_id=context.aws_request_id) + aws_lambda_logging.setup(level=log_level, + aws_request_id=context.aws_request_id) for record in event['Records']: tmpdir = tempfile.mkdtemp() @@ -179,66 +180,73 @@ def handler(event, context): try: json_body = json.loads(record['body']) - request_params = json_body['detail']['requestParameters'] - bucket_name = request_params['bucketName'] - key_name = request_params['key'] - size = check_s3_object_size(bucket_name, key_name) - - if size >= max_object_size: - error_message = f'Source S3 object s3://{bucket_name}/{key_name} is larger ' - error_message += f'than {max_object_size} (max object bytes)' - log.error(error_message) - raise Exception('Source S3 object too large') - - local_file = os.path.join(tmpdir, key_name) - - download_status = get_s3_object(bucket_name, key_name, local_file) - - if download_status == 'ok': - log.info(f'Success: Download to {local_file} for conversion') - else: - log.error(f'Fail to put object to {local_file}') - raise Exception(f'Fail to put object to {local_file}') - - html = convert_to_html(local_file) - - html_filename = os.path.splitext(key_name)[0] + '.html' - - local_html_file = os.path.join(tmpdir, html_filename) - - with open(local_html_file, 'w') as outfile: - outfile.write(html) - log.info(f'''Success: Converted s3://{bucket_name}/{key_name} - to {local_html_file}''') - outfile.close() - - html_upload = upload_html( - target_bucket, - html_filename, - local_html_file) - - if html_upload == 'ok': - '''If function could put the converted file to the S3 bucket then - remove message from the SQS queue''' - try: - sqs_client.delete_message( - QueueUrl=conversion_queue, - ReceiptHandle=sqs_receipt_handle - ) - except Exception as e: - log.error(f'{str(e)}') - raise Exception(str(e)) - - dst_s3_object = f's3://{target_bucket}/{html_filename}' - success_message = f'Success: Uploaded {local_html_file} to ' - success_message += f'{dst_s3_object}' - log.info(success_message) - else: - error_message = f'Could not upload file to ' - error_message += f'{dst_s3_object}: {str(e)}' - log.error(error_message) - raise Exception(error_message) + for record in json_body['Records']: + bucket_name = record['s3']['bucket']['name'] + key_name = record['s3']['object']['key'] + + size = check_s3_object_size(bucket_name, key_name) + + if size >= max_object_size: + error_message = f'Source S3 object ' + error_message = f's3://{bucket_name}/{key_name} is larger ' + error_message += f'than {max_object_size} ' + error_message += f'(max object bytes)' + log.error(error_message) + raise Exception('Source S3 object too large') + + local_file = os.path.join(tmpdir, key_name) + + download_status = get_s3_object(bucket_name, + key_name, + local_file) + + if download_status == 'ok': + success_message = f'Success: Download to ' + success_message += f'{local_file} for conversion' + log.info(success_message) + else: + log.error(f'Fail to put object to {local_file}') + raise Exception(f'Fail to put object to {local_file}') + + html = convert_to_html(local_file) + + html_filename = os.path.splitext(key_name)[0] + '.html' + + local_html_file = os.path.join(tmpdir, html_filename) + + with open(local_html_file, 'w') as outfile: + outfile.write(html) + log.info(f'''Success: Converted s3://{bucket_name}/{key_name} + to {local_html_file}''') + outfile.close() + + html_upload = upload_html( + target_bucket, + html_filename, + local_html_file) + + if html_upload == 'ok': + '''If function could put the converted file to the S3 bucket then + remove message from the SQS queue''' + try: + sqs_client.delete_message( + QueueUrl=conversion_queue, + ReceiptHandle=sqs_receipt_handle + ) + except Exception as e: + log.error(f'{str(e)}') + raise Exception(str(e)) + + dst_s3_object = f's3://{target_bucket}/{html_filename}' + success_message = f'Success: Uploaded {local_html_file} ' + success_message += f'to {dst_s3_object}' + log.info(success_message) + else: + error_message = f'Could not upload file to ' + error_message += f'{dst_s3_object}: {str(e)}' + log.error(error_message) + raise Exception(error_message) except Exception as e: log.error(f'Could not convert record: {str(e)}') raise Exception(f'Could not convert record: {str(e)}') diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 7d5184b..7974e3c 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -145,7 +145,6 @@ def put_sentiment(s3_object, sentiment): result = f'Error: {str(e)}' log.error(response) - xray_recorder.end_subsegment() return(result) @@ -161,70 +160,81 @@ def handler(event, context): try: json_body = json.loads(record['body']) - request_params = json_body['detail']['requestParameters'] - bucket_name = request_params['bucketName'] - key_name = request_params['key'] - - size = check_s3_object_size(bucket_name, key_name) - - if size >= max_object_size: - error_message = f'Source S3 object ' - error_message += f's3://{bucket_name}/{key_name} is larger ' - error_message += f'than {max_object_size} (max object bytes)' - log.error(error_message) - raise Exception(error_message) - - if size == 'NaN': - exc = f'Could not get size for s3://{bucket_name}/{key_name}' - raise Exception(exc) - - local_file = os.path.join(tmpdir, key_name) - - download_status = get_s3_object(bucket_name, key_name, local_file) - - if download_status == 'ok': - log.info(f'Download to {local_file} for sentiment analysis') - else: - log.error(f'Download failure to {local_file}') - raise Exception(f'Download failure to {local_file}') - md_contents = open(local_file, 'r').read() - - sentiment = comprehend_client.detect_sentiment( - Text=md_contents, - LanguageCode='en' - ) - - overall_sentiment = sentiment['Sentiment'] - sentiment_score = sentiment['SentimentScore'] - - sentiment_message = f'{overall_sentiment} ({sentiment_score})' - log.info(sentiment_message) - - source_s3_object = f's3://{bucket_name}/{key_name}' - - put_sentiment_result = put_sentiment(source_s3_object, sentiment) - - if put_sentiment_result == 'ok': - '''If function could put the sentiment to the DDB table then - remove message from SQS queue.''' - try: - sqs_client.delete_message( - QueueUrl=s_queue, - ReceiptHandle=sqs_receipt_handle - ) - except Exception as e: - err_msg = f'Could not remove message from queue: {str(e)}' - log.error(err_msg) - raise Exception(err_msg) - - sentiment_db_msg = f'Put sentiment to {s_table}' - log.info(sentiment_db_msg) - else: - db_put_error_msg = f'Could not put sentiment to {s_table}: ' - db_put_error_msg += f'{put_sentiment_result}' - log.error(db_put_error_msg) - raise Exception(db_put_error_msg) + for record in json_body['Records']: + bucket_name = record['s3']['bucket']['name'] + key_name = record['s3']['object']['key'] + + size = check_s3_object_size(bucket_name, key_name) + + if size >= max_object_size: + error_message = f'Source S3 object ' + error_message += f's3://{bucket_name}/{key_name} ' + error_message += f'is larger ' + error_message += f'than {max_object_size} ' + error_message += f'(max object bytes)' + log.error(error_message) + raise Exception(error_message) + + if size == 'NaN': + exc = f'Could not get size for ' + exc += f's3://{bucket_name}/{key_name}' + raise Exception(exc) + + local_file = os.path.join(tmpdir, key_name) + + download_status = get_s3_object(bucket_name, + key_name, + local_file) + + if download_status == 'ok': + success_message = f'Download to {local_file} ' + success_message += f'for sentiment analysis' + log.info(success_message) + else: + log.error(f'Download failure to {local_file}') + raise Exception(f'Download failure to {local_file}') + + md_contents = open(local_file, 'r').read() + + sentiment = comprehend_client.detect_sentiment( + Text=md_contents, + LanguageCode='en' + ) + + overall_sentiment = sentiment['Sentiment'] + sentiment_score = sentiment['SentimentScore'] + + sentiment_message = f'{overall_sentiment} ({sentiment_score})' + log.info(sentiment_message) + + source_s3_object = f's3://{bucket_name}/{key_name}' + + put_sentiment_result = put_sentiment(source_s3_object, + sentiment) + + if put_sentiment_result == 'ok': + '''If function could put the sentiment to the DDB table then + remove message from SQS queue.''' + try: + sqs_client.delete_message( + QueueUrl=s_queue, + ReceiptHandle=sqs_receipt_handle + ) + except Exception as e: + err_msg = f'Could not remove message ' + err_msg += f'from queue: {str(e)}' + log.error(err_msg) + raise Exception(err_msg) + + sentiment_db_msg = f'Put sentiment to {s_table}' + log.info(sentiment_db_msg) + else: + db_put_error_msg = f'Could not put sentiment ' + db_put_error_msg += f'to {s_table}: ' + db_put_error_msg += f'{put_sentiment_result}' + log.error(db_put_error_msg) + raise Exception(db_put_error_msg) except Exception as e: log.error(f'Could not get sentiment: {str(e)}') raise Exception(f'Could not get sentiment: {str(e)}') diff --git a/template.yml b/template.yml index d6b97c7..d4932f5 100644 --- a/template.yml +++ b/template.yml @@ -25,112 +25,60 @@ Parameters: Resources: InputBucket: Type: AWS::S3::Bucket - - CloudTrailBucket: - Type: AWS::S3::Bucket - - InputBucketTrail: - DependsOn: CloudTrailBucketPolicy - Type: AWS::CloudTrail::Trail - Properties: - S3BucketName: !Ref CloudTrailBucket - EventSelectors: - - DataResources: - - Type: 'AWS::S3::Object' - Values: - - !Sub |- - arn:aws:s3:::${InputBucket}/ - IncludeManagementEvents: false - ReadWriteType: WriteOnly - IsLogging: true - - CloudTrailBucketPolicy: - Type: AWS::S3::BucketPolicy - DependsOn: CloudTrailBucket - Properties: - Bucket: !Ref CloudTrailBucket - PolicyDocument: - Version: "2012-10-17" - Statement: - - - Sid: "AWSCloudTrailAclCheck" - Effect: "Allow" - Principal: - Service: "cloudtrail.amazonaws.com" - Action: "s3:GetBucketAcl" - Resource: !Sub |- - arn:aws:s3:::${CloudTrailBucket} - - - Sid: "AWSCloudTrailWrite" - Effect: "Allow" - Principal: - Service: "cloudtrail.amazonaws.com" - Action: "s3:PutObject" - Resource: - !Sub |- - arn:aws:s3:::${CloudTrailBucket}/AWSLogs/${AWS::AccountId}/* - Condition: - StringEquals: - s3:x-amz-acl: "bucket-owner-full-control" + Properties: + BucketName: !Sub ${AWS::StackName}-${AWS::AccountId}-input-bucket + NotificationConfiguration: + TopicConfigurations: + - Event: s3:ObjectCreated:* + Topic: !Ref NotificationTopic - FileProcessingQueuePolicy: - # https://forums.aws.amazon.com/message.jspa?messageID=743094 - Type: AWS::SQS::QueuePolicy + NotificationTopic: + Type: AWS::SNS::Topic + + NotificationTopicPolicy: + Type: AWS::SNS::TopicPolicy Properties: - Queues: - - !Ref ConversionQueue - - !Ref SentimentQueue PolicyDocument: Version: '2012-10-17' Statement: - - - Effect: Allow - Principal: - AWS: '*' - Action: - - sqs:SendMessage - Resource: !GetAtt ConversionQueue.Arn + - Effect: Allow + Principal: "*" + Action: SNS:Publish + Resource: !Ref NotificationTopic Condition: + StringEquals: + aws:SourceAccount: !Sub ${AWS::AccountId} ArnEquals: - aws:SourceArn: !GetAtt FileProcessingRule.Arn - - - Effect: Allow - Principal: - AWS: '*' + aws:SourceArn: !Sub "arn:aws:s3:::${InputBucket}" + Topics: + - !Ref NotificationTopic + + NotificationQueuePolicy: + Type: AWS::SQS::QueuePolicy + Properties: + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: "*" Action: - sqs:SendMessage - Resource: !GetAtt SentimentQueue.Arn + Resource: "*" Condition: - ArnEquals: - aws:SourceArn: !GetAtt FileProcessingRule.Arn + ArnEquals: + aws:SourceArn: !Ref NotificationTopic + Queues: + - !Ref ConversionQueue + - !Ref SentimentQueue - FileProcessingRule: - Type: AWS::Events::Rule - DependsOn: - - ConversionQueue - - SentimentQueue + ConversionSubscription: + Type: AWS::SNS::Subscription Properties: - Description: Rule to capture S3 PutObject events - EventPattern: - source: - - aws.s3 - detail-type: - - AWS API Call via CloudTrail - detail: - eventSource: - - s3.amazonaws.com - eventName: - - PutObject - requestParameters: - bucketName: - - !Ref InputBucket - State: 'ENABLED' - Targets: - - Arn: !GetAtt ConversionQueue.Arn - Id: Convert - - Arn: !GetAtt SentimentQueue.Arn - Id: Sentiment - + TopicArn: !Ref NotificationTopic + Endpoint: !GetAtt ConversionQueue.Arn + Protocol: sqs + RawMessageDelivery: true + ConversionQueue: Type: AWS::SQS::Queue DependsOn: ConversionDlq @@ -202,6 +150,11 @@ Resources: TARGET_BUCKET: !Ref ConversionTargetBucket CONVERSION_QUEUE: !Ref ConversionQueue LOG_LEVEL: !Ref ConversionLogLevel + EventInvokeConfig: + DestinationConfig: + OnFailure: + Type: SQS + Destination: !GetAtt ConversionDlq.Arn Events: ConversionQueueReaderEvent: Type: SQS @@ -212,6 +165,14 @@ Resources: ConversionTargetBucket: Type: AWS::S3::Bucket + SentimentSubscription: + Type: AWS::SNS::Subscription + Properties: + TopicArn: !Ref NotificationTopic + Endpoint: !GetAtt SentimentQueue.Arn + Protocol: sqs + RawMessageDelivery: true + SentimentQueue: Type: AWS::SQS::Queue DependsOn: SentimentDlq @@ -290,6 +251,11 @@ Resources: SENTIMENT_TABLE: !Ref SentimentTable SENTIMENT_QUEUE: !Ref SentimentQueue LOG_LEVEL: !Ref SentimentLogLevel + EventInvokeConfig: + DestinationConfig: + OnFailure: + Type: SQS + Destination: !GetAtt SentimentDlq.Arn Events: SentimentQueueReaderEvent: Type: SQS @@ -347,7 +313,7 @@ Resources: - Name: QueueName Value: !GetAtt SentimentDlq.QueueName - ConverstionQueueAlarm: + ConversionQueueAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: Conversion queue has too many messages From ab8b186858d6ad9cab7136d112722d90e21a2640 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 12 Mar 2020 11:34:22 +0000 Subject: [PATCH 059/115] updated pipeline permissions --- pipeline/pipeline.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 9c4e34a..a31410f 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -243,8 +243,10 @@ Resources: Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-serverless-stack-FileProcessingRule-*" Effect: Allow - Action: ["sns:*"] - Resource: !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-AlarmTopic-*" - Effect: Allow + Resource: + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-AlarmTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-NotificationTopic-*" + Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow From 02d42523820e7203454cc80b02c2d5b691d857fb Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 12 Mar 2020 11:46:35 +0000 Subject: [PATCH 060/115] made app name static --- pipeline/pipeline.yaml | 80 ++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index a31410f..457ce20 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -1,10 +1,6 @@ AWSTemplateFormatVersion: "2010-09-09" Description: "Template for full CI/CD serverless applications." Parameters: - AppName: - Type: String - Default: "lambda-file-refarch" - Description: Name of the application. SAMOutputFile: Type: String Default: "packaged-template.yml" @@ -38,7 +34,7 @@ Resources: Properties: Artifacts: Type: CODEPIPELINE - Description: !Sub "Building stage for ${AppName}." + Description: !Sub "Building stage for lambda-file-refarch." Environment: ComputeType: BUILD_GENERAL1_SMALL PrivilegedMode: True @@ -49,19 +45,19 @@ Resources: Value: !Ref SAMOutputFile Image: !Ref CodeBuildImage Type: LINUX_CONTAINER - Name: !Sub "${AppName}-build" + Name: !Sub "lambda-file-refarch-build" ServiceRole: !GetAtt CodeBuildTrustRole.Arn Source: Type: CODEPIPELINE Tags: - Key: app-name - Value: !Ref AppName + Value: "lambda-file-refarch" TimeoutInMinutes: 5 S3Bucket: Description: S3 bucket for AWS CodePipeline artifacts Type: AWS::S3::Bucket Properties: - BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}" + BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch" VersioningConfiguration: Status: Enabled S3ArtifactBucketPolicy: @@ -87,7 +83,7 @@ Resources: Description: AWS CodePipeline deployment pipeline for project Type: AWS::CodePipeline::Pipeline Properties: - Name: !Sub "${AppName}-pipeline" + Name: !Sub "lambda-file-refarch-pipeline" RoleArn: !GetAtt CodePipelineTrustRole.Arn Stages: - Name: Source @@ -100,7 +96,7 @@ Resources: Owner: ThirdParty Provider: GitHub OutputArtifacts: - - Name: !Sub "${AppName}-SourceArtifact" + - Name: !Sub "lambda-file-refarch-SourceArtifact" Configuration: Repo: !Ref GitHubRepoName Branch: !Ref GitHubRepoBranch @@ -111,22 +107,22 @@ Resources: Actions: - Name: build-from-source InputArtifacts: - - Name: !Sub "${AppName}-SourceArtifact" + - Name: !Sub "lambda-file-refarch-SourceArtifact" ActionTypeId: Category: Build Owner: AWS Version: "1" Provider: CodeBuild OutputArtifacts: - - Name: !Sub "${AppName}-BuildArtifact" + - Name: !Sub "lambda-file-refarch-BuildArtifact" Configuration: - ProjectName: !Sub "${AppName}-build" + ProjectName: !Sub "lambda-file-refarch-build" RunOrder: 1 - Name: Deploy Actions: - Name: create-changeset InputArtifacts: - - Name: !Sub "${AppName}-BuildArtifact" + - Name: !Sub "lambda-file-refarch-BuildArtifact" ActionTypeId: Category: Deploy Owner: AWS @@ -134,12 +130,12 @@ Resources: Provider: CloudFormation OutputArtifacts: [] Configuration: - StackName: !Sub "${AppName}-serverless-stack" + StackName: !Sub "lambda-file-refarch-serverless-stack" ActionMode: CHANGE_SET_REPLACE RoleArn: !GetAtt CloudFormationTrustRole.Arn ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM - TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" + TemplatePath: !Sub "lambda-file-refarch-BuildArtifact::${SAMOutputFile}" ParameterOverrides: !Sub '{"AlarmRecipientEmailAddress": "${AlarmRecipientEmailAddress}"}' RunOrder: 1 - Name: execute-changeset @@ -151,7 +147,7 @@ Resources: Provider: CloudFormation OutputArtifacts: [] Configuration: - StackName: !Sub "${AppName}-serverless-stack" + StackName: !Sub "lambda-file-refarch-serverless-stack" ActionMode: CHANGE_SET_EXECUTE ChangeSetName: pipeline-changeset RunOrder: 2 @@ -162,7 +158,7 @@ Resources: Description: Service role for AWS CodeBuild Type: AWS::IAM::Role Properties: - RoleName: !Sub "${AppName}-codebuild-role" + RoleName: !Sub "lambda-file-refarch-codebuild-role" AssumeRolePolicyDocument: Statement: - Effect: Allow @@ -180,10 +176,10 @@ Resources: Statement: - Effect: Allow Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] - Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" + Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/lambda-file-refarch-build*" - Effect: Allow Action: ["s3:*"] - Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch/*" - Effect: Allow Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] Resource: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:alias/aws/s3" @@ -192,7 +188,7 @@ Resources: Description: Service role for AWS CloudFormation Type: AWS::IAM::Role Properties: - RoleName: !Sub "${AppName}-cloudformation-role" + RoleName: !Sub "lambda-file-refarch-cloudformation-role" AssumeRolePolicyDocument: Statement: - Effect: Allow @@ -210,16 +206,16 @@ Resources: Statement: - Action: ["s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] Resource: - - !Sub "arn:aws:s3:::${AppName}-*-inputbucket-*" - - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*" - - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*" + - !Sub "arn:aws:s3:::lambda-file-refarch-*-inputbucket-*" + - !Sub "arn:aws:s3:::lambda-file-refarch-*-cloudtrailbucket-*" + - !Sub "arn:aws:s3:::lambda-file-refarch-*-conversiontargetbucket-*" Effect: Allow - Action: ["s3:GetObject", "s3:GetObjectVersion"] Resource: - - !Sub "arn:aws:s3:::${AppName}-*-inputbucket-*/*" - - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*/*" - - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*/*" - - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + - !Sub "arn:aws:s3:::lambda-file-refarch-*-inputbucket-*/*" + - !Sub "arn:aws:s3:::lambda-file-refarch-*-cloudtrailbucket-*/*" + - !Sub "arn:aws:s3:::lambda-file-refarch-*-conversiontargetbucket-*/*" + - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch/*" Effect: Allow - Action: ["lambda:*"] Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" @@ -228,33 +224,33 @@ Resources: Resource: ["*"] Effect: Allow - Action: ["dynamodb:*"] - Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-serverless-stack-SentimentTable-*" + Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/lambda-file-refarch-serverless-stack-SentimentTable-*" Effect: Allow - Action: ["sqs:*"] - Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-*" + Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:lambda-file-refarch-serverless-stack-*" Effect: Allow - Action: ["cloudwatch:*"] - Resource: !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:${AppName}-serverless-stack-*" + Resource: !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:lambda-file-refarch-serverless-stack-*" Effect: Allow - Action: ["cloudtrail:*"] - Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/${AppName}-serverless-stack-InputBucketTrail*" + Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/lambda-file-refarch-serverless-stack-InputBucketTrail*" Effect: Allow - Action: ["events:*"] - Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-serverless-stack-FileProcessingRule-*" + Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/lambda-file-refarch-serverless-stack-FileProcessingRule-*" Effect: Allow - Action: ["sns:*"] Resource: - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-AlarmTopic-*" - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-NotificationTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:lambda-file-refarch-serverless-stack-AlarmTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:lambda-file-refarch-serverless-stack-NotificationTopic-*" Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-file-refarch-*" Effect: Allow - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRolePolicy", "iam:getRolePolicy", "iam:PutRolePolicy"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-file-refarch-*" Effect: Allow - Action: ["iam:PassRole"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-file-refarch-*" Effect: Allow - Action: ["cloudformation:CreateChangeSet"] Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" @@ -267,7 +263,7 @@ Resources: Description: Service role for AWS CodePipeline Type: AWS::IAM::Role Properties: - RoleName: !Sub "${AppName}-codepipeline-role" + RoleName: !Sub "lambda-file-refarch-codepipeline-role" AssumeRolePolicyDocument: Statement: - Effect: Allow @@ -284,14 +280,14 @@ Resources: PolicyDocument: Statement: - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning", "s3:PutObject"] - Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch/*" Effect: Allow - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] - Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-build" + Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/lambda-file-refarch-build" Effect: Allow - Action: ["cloudformation:*"] Resource: - - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack/*" + - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/lambda-file-refarch-serverless-stack/*" Effect: Allow - Action: ["iam:PassRole"] Resource: !GetAtt CloudFormationTrustRole.Arn From 6a019378a13c3bbe5e818671235f794d3ed8dbfe Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 12 Mar 2020 12:16:22 +0000 Subject: [PATCH 061/115] reverted to appname --- pipeline/pipeline.yaml | 82 ++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 457ce20..2bba1c5 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -1,9 +1,13 @@ AWSTemplateFormatVersion: "2010-09-09" Description: "Template for full CI/CD serverless applications." Parameters: + AppName: + Type: String + Default: lambda-file-refarch + Description: Name used for application deployment SAMOutputFile: Type: String - Default: "packaged-template.yml" + Default: packaged-template.yml Description: The filename for the output SAM file from the buildspec file CodeBuildImage: Type: String @@ -34,7 +38,7 @@ Resources: Properties: Artifacts: Type: CODEPIPELINE - Description: !Sub "Building stage for lambda-file-refarch." + Description: !Sub "Building stage for ${AppName}." Environment: ComputeType: BUILD_GENERAL1_SMALL PrivilegedMode: True @@ -45,19 +49,19 @@ Resources: Value: !Ref SAMOutputFile Image: !Ref CodeBuildImage Type: LINUX_CONTAINER - Name: !Sub "lambda-file-refarch-build" + Name: !Sub "${AppName}-build" ServiceRole: !GetAtt CodeBuildTrustRole.Arn Source: Type: CODEPIPELINE Tags: - Key: app-name - Value: "lambda-file-refarch" + Value: !Ref AppName TimeoutInMinutes: 5 S3Bucket: Description: S3 bucket for AWS CodePipeline artifacts Type: AWS::S3::Bucket Properties: - BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch" + BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}" VersioningConfiguration: Status: Enabled S3ArtifactBucketPolicy: @@ -83,7 +87,7 @@ Resources: Description: AWS CodePipeline deployment pipeline for project Type: AWS::CodePipeline::Pipeline Properties: - Name: !Sub "lambda-file-refarch-pipeline" + Name: !Sub "${AppName}-pipeline" RoleArn: !GetAtt CodePipelineTrustRole.Arn Stages: - Name: Source @@ -96,7 +100,7 @@ Resources: Owner: ThirdParty Provider: GitHub OutputArtifacts: - - Name: !Sub "lambda-file-refarch-SourceArtifact" + - Name: !Sub "${AppName}-SourceArtifact" Configuration: Repo: !Ref GitHubRepoName Branch: !Ref GitHubRepoBranch @@ -107,22 +111,22 @@ Resources: Actions: - Name: build-from-source InputArtifacts: - - Name: !Sub "lambda-file-refarch-SourceArtifact" + - Name: !Sub "${AppName}-SourceArtifact" ActionTypeId: Category: Build Owner: AWS Version: "1" Provider: CodeBuild OutputArtifacts: - - Name: !Sub "lambda-file-refarch-BuildArtifact" + - Name: !Sub "${AppName}-BuildArtifact" Configuration: - ProjectName: !Sub "lambda-file-refarch-build" + ProjectName: !Sub "${AppName}-build" RunOrder: 1 - Name: Deploy Actions: - Name: create-changeset InputArtifacts: - - Name: !Sub "lambda-file-refarch-BuildArtifact" + - Name: !Sub "${AppName}-BuildArtifact" ActionTypeId: Category: Deploy Owner: AWS @@ -130,12 +134,12 @@ Resources: Provider: CloudFormation OutputArtifacts: [] Configuration: - StackName: !Sub "lambda-file-refarch-serverless-stack" + StackName: !Sub "${AppName}-serverless-stack" ActionMode: CHANGE_SET_REPLACE RoleArn: !GetAtt CloudFormationTrustRole.Arn ChangeSetName: pipeline-changeset Capabilities: CAPABILITY_NAMED_IAM - TemplatePath: !Sub "lambda-file-refarch-BuildArtifact::${SAMOutputFile}" + TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" ParameterOverrides: !Sub '{"AlarmRecipientEmailAddress": "${AlarmRecipientEmailAddress}"}' RunOrder: 1 - Name: execute-changeset @@ -147,7 +151,7 @@ Resources: Provider: CloudFormation OutputArtifacts: [] Configuration: - StackName: !Sub "lambda-file-refarch-serverless-stack" + StackName: !Sub "${AppName}-serverless-stack" ActionMode: CHANGE_SET_EXECUTE ChangeSetName: pipeline-changeset RunOrder: 2 @@ -158,7 +162,7 @@ Resources: Description: Service role for AWS CodeBuild Type: AWS::IAM::Role Properties: - RoleName: !Sub "lambda-file-refarch-codebuild-role" + RoleName: !Sub "${AppName}-codebuild-role" AssumeRolePolicyDocument: Statement: - Effect: Allow @@ -176,10 +180,10 @@ Resources: Statement: - Effect: Allow Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] - Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/lambda-file-refarch-build*" + Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" - Effect: Allow Action: ["s3:*"] - Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch/*" + Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" - Effect: Allow Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] Resource: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:alias/aws/s3" @@ -188,7 +192,7 @@ Resources: Description: Service role for AWS CloudFormation Type: AWS::IAM::Role Properties: - RoleName: !Sub "lambda-file-refarch-cloudformation-role" + RoleName: !Sub "${AppName}-cloudformation-role" AssumeRolePolicyDocument: Statement: - Effect: Allow @@ -206,16 +210,16 @@ Resources: Statement: - Action: ["s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] Resource: - - !Sub "arn:aws:s3:::lambda-file-refarch-*-inputbucket-*" - - !Sub "arn:aws:s3:::lambda-file-refarch-*-cloudtrailbucket-*" - - !Sub "arn:aws:s3:::lambda-file-refarch-*-conversiontargetbucket-*" + - !Sub "arn:aws:s3:::*-*-inputbucket" + - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*" + - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*" Effect: Allow - Action: ["s3:GetObject", "s3:GetObjectVersion"] Resource: - - !Sub "arn:aws:s3:::lambda-file-refarch-*-inputbucket-*/*" - - !Sub "arn:aws:s3:::lambda-file-refarch-*-cloudtrailbucket-*/*" - - !Sub "arn:aws:s3:::lambda-file-refarch-*-conversiontargetbucket-*/*" - - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch/*" + - !Sub "arn:aws:s3:::${AppName}-*-inputbucket/*" + - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*/*" + - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*/*" + - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - Action: ["lambda:*"] Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" @@ -224,33 +228,33 @@ Resources: Resource: ["*"] Effect: Allow - Action: ["dynamodb:*"] - Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/lambda-file-refarch-serverless-stack-SentimentTable-*" + Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-serverless-stack-SentimentTable-*" Effect: Allow - Action: ["sqs:*"] - Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:lambda-file-refarch-serverless-stack-*" + Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-*" Effect: Allow - Action: ["cloudwatch:*"] - Resource: !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:lambda-file-refarch-serverless-stack-*" + Resource: !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:${AppName}-serverless-stack-*" Effect: Allow - Action: ["cloudtrail:*"] - Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/lambda-file-refarch-serverless-stack-InputBucketTrail*" + Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/${AppName}-serverless-stack-InputBucketTrail*" Effect: Allow - Action: ["events:*"] - Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/lambda-file-refarch-serverless-stack-FileProcessingRule-*" + Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-serverless-stack-FileProcessingRule-*" Effect: Allow - Action: ["sns:*"] Resource: - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:lambda-file-refarch-serverless-stack-AlarmTopic-*" - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:lambda-file-refarch-serverless-stack-NotificationTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-AlarmTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-NotificationTopic-*" Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-file-refarch-*" + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRolePolicy", "iam:getRolePolicy", "iam:PutRolePolicy"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-file-refarch-*" + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - Action: ["iam:PassRole"] - Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-file-refarch-*" + Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - Action: ["cloudformation:CreateChangeSet"] Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" @@ -263,7 +267,7 @@ Resources: Description: Service role for AWS CodePipeline Type: AWS::IAM::Role Properties: - RoleName: !Sub "lambda-file-refarch-codepipeline-role" + RoleName: !Sub "${AppName}-codepipeline-role" AssumeRolePolicyDocument: Statement: - Effect: Allow @@ -280,14 +284,14 @@ Resources: PolicyDocument: Statement: - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning", "s3:PutObject"] - Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-lambda-file-refarch/*" + Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] - Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/lambda-file-refarch-build" + Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-build" Effect: Allow - Action: ["cloudformation:*"] Resource: - - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/lambda-file-refarch-serverless-stack/*" + - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack/*" Effect: Allow - Action: ["iam:PassRole"] Resource: !GetAtt CloudFormationTrustRole.Arn From 3ce4c070e49cf6a86ed9e1e851ad886839aa43b4 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 12 Mar 2020 13:37:46 +0000 Subject: [PATCH 062/115] added missing permissions --- pipeline/pipeline.yaml | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 2bba1c5..554d613 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -134,7 +134,7 @@ Resources: Provider: CloudFormation OutputArtifacts: [] Configuration: - StackName: !Sub "${AppName}-serverless-stack" + StackName: !Sub "${AppName}" ActionMode: CHANGE_SET_REPLACE RoleArn: !GetAtt CloudFormationTrustRole.Arn ChangeSetName: pipeline-changeset @@ -151,7 +151,7 @@ Resources: Provider: CloudFormation OutputArtifacts: [] Configuration: - StackName: !Sub "${AppName}-serverless-stack" + StackName: !Sub "${AppName}" ActionMode: CHANGE_SET_EXECUTE ChangeSetName: pipeline-changeset RunOrder: 2 @@ -208,7 +208,7 @@ Resources: PolicyName: CloudFormationRolePolicy PolicyDocument: Statement: - - Action: ["s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] + - Action: ["s3:PutBucketNotification", "s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] Resource: - !Sub "arn:aws:s3:::*-*-inputbucket" - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*" @@ -224,28 +224,33 @@ Resources: - Action: ["lambda:*"] Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" Effect: Allow + - Action: ["lambda:PutFunctionEventInvokeConfig"] + Resource: ["*"] + Effect: Allow - Action: ["lambda:CreateEventSourceMapping", "lambda:DeleteEventSourceMapping", "lambda:GetEventSourceMapping", "lambda:UpdateEventSourceMapping" ] Resource: ["*"] Effect: Allow - Action: ["dynamodb:*"] - Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-serverless-stack-SentimentTable-*" + Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-SentimentTable-*" Effect: Allow - Action: ["sqs:*"] - Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-*" + Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${AppName}-*" Effect: Allow - Action: ["cloudwatch:*"] - Resource: !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:${AppName}-serverless-stack-*" + Resource: + - !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:${AppName}-*" + - !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:dashboard/${AppName}" Effect: Allow - Action: ["cloudtrail:*"] - Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/${AppName}-serverless-stack-InputBucketTrail*" + Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/${AppName}-InputBucketTrail*" Effect: Allow - Action: ["events:*"] - Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-serverless-stack-FileProcessingRule-*" + Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-FileProcessingRule-*" Effect: Allow - Action: ["sns:*"] Resource: - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-AlarmTopic-*" - - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-serverless-stack-NotificationTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-AlarmTopic-*" + - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-NotificationTopic-*" Effect: Allow - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" @@ -291,7 +296,7 @@ Resources: Effect: Allow - Action: ["cloudformation:*"] Resource: - - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}-serverless-stack/*" + - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}/*" Effect: Allow - Action: ["iam:PassRole"] Resource: !GetAtt CloudFormationTrustRole.Arn From 0bdc3ca93c268c9ce9d40c432261f4e822d36d1a Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 12 Mar 2020 16:16:34 +0000 Subject: [PATCH 063/115] tidied up naming and permissions --- pipeline/pipeline.yaml | 81 ++++++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 26 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 554d613..31b5b44 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -179,13 +179,19 @@ Resources: PolicyDocument: Statement: - Effect: Allow - Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"] + Action: + - logs:CreateLogGroup + - logs:CreateLogStream + - logs:PutLogEvents Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" - Effect: Allow Action: ["s3:*"] Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" - Effect: Allow - Action: ["kms:GenerateDataKey*", "kms:Encrypt", "kms:Decrypt"] + Action: + - kms:GenerateDataKey* + - kms:Encrypt + - kms:Decrypt Resource: !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:alias/aws/s3" Roles: [!Ref CodeBuildTrustRole] CloudFormationTrustRole: @@ -208,65 +214,88 @@ Resources: PolicyName: CloudFormationRolePolicy PolicyDocument: Statement: - - Action: ["s3:PutBucketNotification", "s3:GetBucketVersioning", "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucketPolicy", "s3:DeleteBucketPolicy", "s3:PutBucketPolicy"] + - Action: + - s3:PutBucketNotification + - s3:GetBucketVersioning + - s3:CreateBucket + - s3:DeleteBucket + - s3:GetBucketPolicy + - s3:DeleteBucketPolicy + - s3:PutBucketPolicy Resource: - !Sub "arn:aws:s3:::*-*-inputbucket" - - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*" - - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*" + - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*" Effect: Allow - - Action: ["s3:GetObject", "s3:GetObjectVersion"] + + - Action: + - s3:GetObject + - s3:GetObjectVersion Resource: - - !Sub "arn:aws:s3:::${AppName}-*-inputbucket/*" - - !Sub "arn:aws:s3:::${AppName}-*-cloudtrailbucket-*/*" - - !Sub "arn:aws:s3:::${AppName}-*-conversiontargetbucket-*/*" - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow + - Action: ["lambda:*"] Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:*" Effect: Allow - - Action: ["lambda:PutFunctionEventInvokeConfig"] - Resource: ["*"] - Effect: Allow - - Action: ["lambda:CreateEventSourceMapping", "lambda:DeleteEventSourceMapping", "lambda:GetEventSourceMapping", "lambda:UpdateEventSourceMapping" ] + + - Action: + - lambda:CreateEventSourceMapping + - lambda:DeleteEventSourceMapping + - lambda:GetEventSourceMapping + - lambda:UpdateEventSourceMapping + - lambda:PutFunctionEventInvokeConfig + - lambda:DeleteFunctionEventInvokeConfig + - lambda:UpdateFunctionEventInvokeConfig Resource: ["*"] Effect: Allow + - Action: ["dynamodb:*"] Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-SentimentTable-*" Effect: Allow + - Action: ["sqs:*"] Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:${AppName}-*" Effect: Allow + - Action: ["cloudwatch:*"] Resource: - !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:alarm:${AppName}-*" - - !Sub "arn:aws:cloudwatch:${AWS::Region}:${AWS::AccountId}:dashboard/${AppName}" - Effect: Allow - - Action: ["cloudtrail:*"] - Resource: !Sub "arn:aws:cloudtrail:${AWS::Region}:${AWS::AccountId}:trail/${AppName}-InputBucketTrail*" - Effect: Allow - - Action: ["events:*"] - Resource: !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/${AppName}-FileProcessingRule-*" + - !Sub "arn:aws:cloudwatch::${AWS::AccountId}:dashboard/${AppName}" Effect: Allow + - Action: ["sns:*"] Resource: - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-AlarmTopic-*" - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${AppName}-NotificationTopic-*" Effect: Allow - - Action: ["iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:TagRole"] + + - Action: + - iam:GetRole + - iam:CreateRole + - iam:DeleteRole + - iam:TagRole Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - - Action: ["iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRolePolicy", "iam:getRolePolicy", "iam:PutRolePolicy"] + + - Action: + - iam:AttachRolePolicy + - iam:DetachRolePolicy + - iam:DeleteRolePolicy + - iam:getRolePolicy + - iam:PutRolePolicy Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow + - Action: ["iam:PassRole"] Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow + - Action: ["cloudformation:CreateChangeSet"] - Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" - Effect: Allow - - Action: ["cloudformation:CreateChangeSet"] - Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Include" + Resource: + - !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" + - !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Include" Effect: Allow + Roles: [!Ref CloudFormationTrustRole] CodePipelineTrustRole: Description: Service role for AWS CodePipeline From 615e93591769327a18fcd05f13b1df322ccab588 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 13 Mar 2020 11:21:38 +0000 Subject: [PATCH 064/115] added pipeline documentation --- PIPELINE-README.md | 74 ++++++++++++++++++ ...refarch-fileprocessing-simple-pipeline.png | Bin 0 -> 95074 bytes pipeline/pipeline.yaml | 22 ++++-- 3 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 PIPELINE-README.md create mode 100644 img/lambda-refarch-fileprocessing-simple-pipeline.png diff --git a/PIPELINE-README.md b/PIPELINE-README.md new file mode 100644 index 0000000..21a284d --- /dev/null +++ b/PIPELINE-README.md @@ -0,0 +1,74 @@ +# Serverless Reference Architecture: Real-time File Processing Deployment Pipeline + +The Real-time File Processing reference pipeline architecture is an example of using basic CI/CD pipeline using the AWS fully managed continuous delivery service [CodePipeline](https://aws.amazon.com/codepipeline/) in order to deploy a Serverless application. Our pipeline consists of source, build and deployment stages. +We use exactly the same method as in the manual deployment however we utilise [CodeBuild](https://aws.amazon.com/codebuild/) to build and package our application and the native CodePipeline CloudFormation support to deploy our package. + +## CI/CD Pipeline Diagram + +![Reference Architecture - Real-time File Processing CI/CD Pipeline](img/lambda-refarch-fileprocessing-simple-pipeline.png) + +## Pipeline Components + +### CloudFormation Template + +pipeline/pipeline.yml is a CloudFormation template that will deploy all the required pipeline components. Once the stack has deployed the Pipeline will automatically execute and deploy the Serverless Application. See getting started for information on how to deploy the template. + +#### Deployed Resources + +* Pipeline S3 bucket, used to store pipeline artefacts that are passed between stages. +* CodePipeline +* CodeBuild Project +* Roles for CodePipeline, CodeBuild and the CloudFormation Deployment + +### Source + +For this application we are hosting our source code in GitHub. Other [Source Integrations](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source) are available however this template focuses on GitHub. Whenever an update is pushed to the GitHub branch being +monitored our pipeline will being executing. The source stage will connect to GitHub using the credentials provided and download the branch into our pipelines artefact bucket for use in the other stages. + +### Build + +In order to run our SAM build and SAM package commands we are using the fully managed continuous integration service [CodeBuild](https://aws.amazon.com/codebuild/) CodeBuild allows us to perform a sequence of commands that we define in the [BuildSpec.yml](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) +file that will execute inside the [build environment](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html) we define using a docker container. For this project we are using the Amazon Linux 2 version 1.0 container with Python 3.7. + +Within the buildspec.yml we are: + +* Updating SAM to the latest version +* Running SAM build as per the manual deployment +* Running SAM Package again as per the manual deployment steps +* Instructing CodeBuild to pass the output template back to the Pipeline for use in the deployment stage. + +### Deploy + +To deploy our application stack we are not using SAM Deploy, instead we are opting to use CodePipelines native support for CloudFormation. The Pipeline has a role it use with appropriate permissions to deploy the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) +and [approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-action-add.html) to demonstrate a manual approval workflow. The first deployment will not require approval however subsequent updates will. + +Additional resources will be deployed as per the main architecture documentation. + +## Getting started + +To get started you just need to deploy the pipeline CloudFormation stack using the template found in this repository under pipeline/pipeline.yaml in order for this to be successful you will need to provide some additional information. + + GitHub Repository information. + + GitHubRepoName: The name of the GitHub repository hosting your source code. + + GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. + + GitHubRepoOwner: the GitHub repository owner. e.g. awslabs + + GitHubToken: GitHub OAuthToken with access to be able to clone the repository. You can find more information in the [GitHub Documentation](https://github.com/settings/tokens) + + +### Deploying the template + +You can deploy the template using either the [AWS Console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) or the [AWS CLI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html) + +## Clean-up + +In order to remove all resources created by this example you will first need to make sure the 3 S3 buckets are empty. + +* Pipeline artefact bucket +* Application input bucket +* Application conversion bucket + +Once that is complete you can remove both the Application Stack and the Pipeline Stack. diff --git a/img/lambda-refarch-fileprocessing-simple-pipeline.png b/img/lambda-refarch-fileprocessing-simple-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..1237df86113430dd29a8f1691bd16bf26c647ada GIT binary patch literal 95074 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 literal 0 HcmV?d00001 diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 31b5b44..d68db0e 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -286,11 +286,13 @@ Resources: Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - - Action: ["iam:PassRole"] + - Action: + - iam:PassRole Resource: !Sub "arn:aws:iam::${AWS::AccountId}:role/${AppName}-*" Effect: Allow - - Action: ["cloudformation:CreateChangeSet"] + - Action: + - cloudformation:CreateChangeSet Resource: - !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Serverless-2016-10-31" - !Sub "arn:aws:cloudformation:${AWS::Region}:aws:transform/Include" @@ -317,17 +319,25 @@ Resources: PolicyName: CodePipelineRolePolicy PolicyDocument: Statement: - - Action: ["s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning", "s3:PutObject"] + - Action: + - s3:GetObject + - s3:GetObjectVersion + - s3:GetBucketVersioning + - s3:PutObject Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - - Action: ["codebuild:StartBuild", "codebuild:BatchGetBuilds"] + - Action: + - codebuild:StartBuild + - codebuild:BatchGetBuilds Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-build" Effect: Allow - - Action: ["cloudformation:*"] + - Action: + - cloudformation:* Resource: - !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}/*" Effect: Allow - - Action: ["iam:PassRole"] + - Action: + - iam:PassRole Resource: !GetAtt CloudFormationTrustRole.Arn Effect: Allow Roles: [!Ref CodePipelineTrustRole] From 250646c8c8be7e5b4fd058d1bf95302078d977cd Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 13 Mar 2020 11:22:53 +0000 Subject: [PATCH 065/115] added pipeline documentation --- PIPELINE-README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PIPELINE-README.md b/PIPELINE-README.md index 21a284d..0fd231c 100644 --- a/PIPELINE-README.md +++ b/PIPELINE-README.md @@ -48,8 +48,6 @@ Additional resources will be deployed as per the main architecture documentation To get started you just need to deploy the pipeline CloudFormation stack using the template found in this repository under pipeline/pipeline.yaml in order for this to be successful you will need to provide some additional information. - GitHub Repository information. - GitHubRepoName: The name of the GitHub repository hosting your source code. GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. @@ -58,6 +56,7 @@ To get started you just need to deploy the pipeline CloudFormation stack using t GitHubToken: GitHub OAuthToken with access to be able to clone the repository. You can find more information in the [GitHub Documentation](https://github.com/settings/tokens) + AlarmRecipientEmailAddress: You will need to provide an email address that can be used for configuring notifications ### Deploying the template From bd956360023a12198510ac135e8447f8b4683a2c Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 13 Mar 2020 11:24:08 +0000 Subject: [PATCH 066/115] updated buildspec to upgrade SAM --- buildspec.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/buildspec.yml b/buildspec.yml index 31438eb..40d62d5 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -4,6 +4,8 @@ phases: install: runtime-versions: python: 3.7 + commands: + - pip install --upgrade aws-sam-cli build: commands: - sam build --use-container @@ -13,3 +15,4 @@ phases: artifacts: files: - $SAM_OUTPUT_TEMPLATE + \ No newline at end of file From f7cda10817ea55605de7db6c05b8da5172cb94fe Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 13 Mar 2020 17:20:18 +0000 Subject: [PATCH 067/115] typos and wording corrections --- PIPELINE-README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PIPELINE-README.md b/PIPELINE-README.md index 0fd231c..e076441 100644 --- a/PIPELINE-README.md +++ b/PIPELINE-README.md @@ -23,7 +23,7 @@ pipeline/pipeline.yml is a CloudFormation template that will deploy all the requ ### Source For this application we are hosting our source code in GitHub. Other [Source Integrations](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source) are available however this template focuses on GitHub. Whenever an update is pushed to the GitHub branch being -monitored our pipeline will being executing. The source stage will connect to GitHub using the credentials provided and download the branch into our pipelines artefact bucket for use in the other stages. +monitored our pipeline will begin executing. The source stage will connect to GitHub using the credentials provided and clone the branch into our pipeline artefact bucket for use in the other stages. ### Build @@ -39,7 +39,7 @@ Within the buildspec.yml we are: ### Deploy -To deploy our application stack we are not using SAM Deploy, instead we are opting to use CodePipelines native support for CloudFormation. The Pipeline has a role it use with appropriate permissions to deploy the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) +To deploy our application stack we are not using SAM Deploy, instead we are opting to use CodePipelines native support for CloudFormation. The pipeline has a role it use with appropriate permissions to deploy the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) and [approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-action-add.html) to demonstrate a manual approval workflow. The first deployment will not require approval however subsequent updates will. Additional resources will be deployed as per the main architecture documentation. From 13bf463d0742801958a9d16b1492101b24ed9b6d Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 13 Mar 2020 18:46:29 +0000 Subject: [PATCH 068/115] new line correction --- PIPELINE-README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/PIPELINE-README.md b/PIPELINE-README.md index e076441..98a229d 100644 --- a/PIPELINE-README.md +++ b/PIPELINE-README.md @@ -27,7 +27,7 @@ monitored our pipeline will begin executing. The source stage will connect to Gi ### Build -In order to run our SAM build and SAM package commands we are using the fully managed continuous integration service [CodeBuild](https://aws.amazon.com/codebuild/) CodeBuild allows us to perform a sequence of commands that we define in the [BuildSpec.yml](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) +In order to run our SAM build and SAM package commands we are using [CodeBuild](https://aws.amazon.com/codebuild/), a fully managed continuous integration service . Codebuild allows us to perform a sequence of commands that we define in the [BuildSpec.yml](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) file that will execute inside the [build environment](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html) we define using a docker container. For this project we are using the Amazon Linux 2 version 1.0 container with Python 3.7. Within the buildspec.yml we are: @@ -39,8 +39,7 @@ Within the buildspec.yml we are: ### Deploy -To deploy our application stack we are not using SAM Deploy, instead we are opting to use CodePipelines native support for CloudFormation. The pipeline has a role it use with appropriate permissions to deploy the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) -and [approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-action-add.html) to demonstrate a manual approval workflow. The first deployment will not require approval however subsequent updates will. +To deploy our application stack we are not using SAM Deploy, instead we are opting to use the CodePipeline native support for CloudFormation. The pipeline has a role it use with appropriate permissions to deploy the template created by the SAM package step which will create a stack containing the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) and [approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-action-add.html) to demonstrate a manual approval workflow. The first deployment will not require approval however subsequent updates will. Additional resources will be deployed as per the main architecture documentation. From fd9a6ba2f3c812f760b3735aa4798acdb907647a Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 16 Mar 2020 18:07:25 +0000 Subject: [PATCH 069/115] add well architected notes draft --- WELL-ARCHITECTED.md | 198 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 WELL-ARCHITECTED.md diff --git a/WELL-ARCHITECTED.md b/WELL-ARCHITECTED.md new file mode 100644 index 0000000..14602de --- /dev/null +++ b/WELL-ARCHITECTED.md @@ -0,0 +1,198 @@ +## Operational Excellence + +#### OPS 1. How do you evaluate your Serverless application’s health? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Understand, analyze and alert on metrics provided out of the box +* [x] **[Best]** Use application, business, and operations metrics +* [x] **[Good]** Use distributed tracing and code is instrumented with additional context +* [ ] **[Good]** Use structured and centralized logging +
+ +* [ ] None of these + + +##### Notes + +The example uses structured logging output to Cloudwatch. For our example we only deploy to a single account so we don't require the use of cross account centralised logging. + +We have alarms configured with notifications should processing fail. + +We do not have a defined KPI within the application. We could however use a metric such as number of records processed within a given time frame and alert if this is outside of the defined thresholds. + +#### OPS 2. How do you approach application lifecycle management? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Use infrastructure as code and stages isolated in separate environments +* [x] **[Good]** Prototype new features using temporary environments +* [ ] **[Good]** Use a rollout deployment mechanism +* [ ] **[Good]** Use configuration management +* [ ] **[Good]** Review the function runtime deprecation policy +* [ ] **[Best]** Use CI/CD including automated testing across separate accounts +
+ +* [ ] None of these + + +##### Notes + +Our example utilizes infrastructure as code and includes a simple pipeline that will build and deploy within an individual account and to an individual environment. However the nature of this example means it can be deployed many times it's possible. You can for example deploy a staging pipeline that would watch a development branch and deploy and changes to the Staging application stack. You could also deploy a production pipeline stack that watches the master branch and merges here will trigger a production release. + +For this example a rollout mechanism would involve adopting either a Blue / Green deployment strategy with you controlling which input bucket a particular user hits . Alternatively for application business logic only changes these could be tested by having a notification invoke an alternate version of a lambda under specific conditions. + +### Security + +#### SEC 1: How do you control access to your Serverless API? + +* [x] Question does not apply to this workload +
+ +* [ ] **[Required]** Use appropriate endpoint type and mechanisms to secure access to your API +* [ ] **[Good]** Use authentication and authorization mechanisms +* [ ] **[Best]** Scope access based on identity’s metadata +
+ +* [ ] None of these + + +##### Notes + +#### SEC 2: How do you manage your Serverless application’s security boundaries? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Evaluate and define resource policies +* [x] **[Good]** Control network traffic at all layers +* [x] **[Best]** Smaller functions require fewer permissions +* [x] **[Required]** Use temporary credentials between resources and components +
+ +* [ ] None of these + + +##### Notes + +We use IAM policy to ensure that resources can only be called by other resources that should be calling them. + +The pipeline will assume a role with only the permissions it requires to deploy the application. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. + +This application does not use private networking. + +We have individual functions for each different piece of business logic. + +#### SEC 3: How do you implement Application Security in your workload?*** + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Review security awareness documents frequently +* [x] **[Required]** Store secrets that are used in your code securely +* [ ] **[Good]** Implement runtime protection to help prevent against malicious code execution +* [ ] **[Best]** Automatically review workload’s code dependencies/libraries +* [x] **[Best]** Validate inbound events +
+ +* [ ] None of these + + +##### Notes + +This application doesn't have any stored secrets. The GitHub token is required by CodeBuild, this is passed as a string for CloudFormation, it is not however visible within the CloudFormation console. This could be improved by manually creating a secrets manager entry for the token and replacing the CloudFormation parameter for the token with the secrets manager value by utilising Dynamic References. +https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html + +For reviewing dependencies and libraries we could integrate an automatic check into the pipeline. There are many tools and providers which can check code. Currently this is manual using PEP8 and Bandit manual checks. + +We only check for particular events and check to make sure the object is valid. + + +### Reliability + +#### REL 1. How do you regulate inbound request rates? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Use throttling to control inbound request rates +* [ ] **[Good]** Use, analyze and enforce API quotas +* [X] **[Best]** Use mechanisms to protect non-scalable resources +
+ +* [ ] None of these + + +##### Notes + +We are using SQS queues in front of our Lambda functions, this helps us throttle the rate at which our application processes requests. + +We don't have API's to set quotas for. + +Our downstream resources are S3 and DynamoDB on-demand which are more than capable of scaling to match our volumes. + +#### REL 2. How do you build resiliency into your Serverless application? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Manage transaction, partial, and intermittent failures +* [ ] **[Required]** Manage duplicate and unwanted events +* [ ] **[Good]** Orchestrate long-running transactions +* [x] **[Best]** Consider scaling patterns at burst rates +
+ +* [ ] None of these + +We use SQS queues and DLQ's to ensure any processing failure results in a notification. + +Our example does not deal with duplicate events or files. Any duplicate will overwrite the previous, this could be improved inserting another layer of business logic that first checks the inbound file and renames with a UUID, it could additionally check to see if the file hash has already been processed. + +The processing time of our transactions is fast and we can handle multiple files in a single invocation. Under heavy load of inbound files the SQS queue handles the work being distributed to lambda up to 1000 concurrent batches. + + +##### Notes + +#### PERF 1. How do you optimize your Serverless application’s performance? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Measure, evaluate, and select optimum capacity units +* [x] **[Good]** Measure and optimize function startup time +* [ ] **[Good]** Take advantage of concurrency via async and stream-based function invocations +* [x] **[Good]** Optimize access patterns and apply caching where applicable +* [x] **[Best]** Integrate with managed services directly over functions when possible +
+ +* [ ] None of these + + +##### Notes + +We have looked at how our function performs with different batch sizes and memory configurations to find what we believe is optimal for cost/performance . + +For our example there is no real advantage to async. If concurrency was an issue it would be possible to chain the business logic, rather than perform it in parallel. + +Data is pulled from S3 and held locally and cached for the execution, however currently there is only a single task performed per invocation so there is no benefit. Caching outside of the function would offer no benefit over S3. + +In our Sentiment function we are utilising comprehend which a managed service. + +#### COST 1. How do you optimize your Serverless application’s costs? + +* [ ] Question does not apply to this workload +
+ +* [x] **[Required]** Minimize external calls and function code initialization +* [x] **[Required]** Optimize logging output and its retention +* [x] **[Good]** Optimize function configuration to reduce cost +* [x] **[Best]** Use cost-aware usage patterns in code +
+ +* [ ] None of these + +##### Notes + +We have configurable logging levels and bench marked our function for optimal cost/performance. From 800fd28c6d18d68262a3bce9548317d5e9157340 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 17 Mar 2020 11:20:23 +0000 Subject: [PATCH 070/115] Updated readme with suggestions and added section on using multiple pipelines for dev/prod --- PIPELINE-README.md => pipeline/README.md | 35 ++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) rename PIPELINE-README.md => pipeline/README.md (64%) diff --git a/PIPELINE-README.md b/pipeline/README.md similarity index 64% rename from PIPELINE-README.md rename to pipeline/README.md index 98a229d..ff49f46 100644 --- a/PIPELINE-README.md +++ b/pipeline/README.md @@ -47,19 +47,38 @@ Additional resources will be deployed as per the main architecture documentation To get started you just need to deploy the pipeline CloudFormation stack using the template found in this repository under pipeline/pipeline.yaml in order for this to be successful you will need to provide some additional information. - GitHubRepoName: The name of the GitHub repository hosting your source code. - - GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. + * GitHubToken: GitHub OAuthToken with access to be able to clone the repository. You can find more information in the [GitHub Documentation](https://github.com/settings/tokens) + * AlarmRecipientEmailAddress: You will need to provide an email address that can be used for configuring notifications + +Optionally, if you are deploying from your own repository you will need to also provide: + + * GitHubRepoName: The name of the GitHub repository hosting your source code. By default it points to the AWSLabs repo. + * GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. + * GitHubRepoOwner: the GitHub repository owner. e.g. awslabs - GitHubRepoOwner: the GitHub repository owner. e.g. awslabs +### Deploying the template - GitHubToken: GitHub OAuthToken with access to be able to clone the repository. You can find more information in the [GitHub Documentation](https://github.com/settings/tokens) +You can deploy the template using either the [AWS Console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) or the [AWS CLI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html) - AlarmRecipientEmailAddress: You will need to provide an email address that can be used for configuring notifications +[TODO] Insert quick link to create CFN stack +##### Example CLI Deployment -### Deploying the template +> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" + +### Deploying twice for a Development and Production example. + +You can actually deploy the pipeline twice to give two seperate envionments. Allowing you to create a simple dev to production workflow. + +Deploy the first stack using a stack name of "lambda-file-refarch-pipeline-dev" update the **AppName** parameter to be environment specific. e.g. "lambda-file-refarch-dev" and make sure to update the branch to the development one. + +Example CLI Deployment for development pipeline + +> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-dev" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="develop" + +Once that has deployed and the application stack has also succesfully deployed you can provision the production pipeline stack. + +> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-prod" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="master" -You can deploy the template using either the [AWS Console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) or the [AWS CLI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html) ## Clean-up From 200fbbe991d8b129e4d3e4b5e7019930d5c2e485 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 17 Mar 2020 11:22:42 +0000 Subject: [PATCH 071/115] corrected stack names --- pipeline/README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pipeline/README.md b/pipeline/README.md index ff49f46..1e41015 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -67,17 +67,19 @@ You can deploy the template using either the [AWS Console](https://docs.aws.amaz ### Deploying twice for a Development and Production example. -You can actually deploy the pipeline twice to give two seperate envionments. Allowing you to create a simple dev to production workflow. +You can actually deploy the pipeline twice to give two separate environments. Allowing you to create a simple dev to production workflow. + +This will allow you to build your application in your development branch and any changes will automatically be picked up and deployed by the pipeline. Once you have tested and are happy the changes can be merged to master and they will be automatically built and deployed to production. Deploy the first stack using a stack name of "lambda-file-refarch-pipeline-dev" update the **AppName** parameter to be environment specific. e.g. "lambda-file-refarch-dev" and make sure to update the branch to the development one. Example CLI Deployment for development pipeline -> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-dev" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="develop" +> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-dev" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-dev" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="develop" -Once that has deployed and the application stack has also succesfully deployed you can provision the production pipeline stack. +Once that has deployed and the application stack has also successfully deployed you can provision the production pipeline stack. -> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-prod" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="master" +> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-prod" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-prod" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="master" ## Clean-up @@ -88,4 +90,5 @@ In order to remove all resources created by this example you will first need to * Application input bucket * Application conversion bucket -Once that is complete you can remove both the Application Stack and the Pipeline Stack. +Once that is complete you can remove both the Application Stack and the Pipeline Stack. +Note that the pipeline stack should not be removed until the application stack has successfully deleted as it is deployed using a role present in the pipeline stack. This role is used to also delete the stack. From 9444527f1b874a54ce53071963ebff53721c6f8d Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 17 Mar 2020 11:28:57 +0000 Subject: [PATCH 072/115] Changed some spacing --- pipeline/README.md | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/pipeline/README.md b/pipeline/README.md index 1e41015..7f7ffac 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -5,28 +5,38 @@ We use exactly the same method as in the manual deployment however we utilise [C ## CI/CD Pipeline Diagram + ![Reference Architecture - Real-time File Processing CI/CD Pipeline](img/lambda-refarch-fileprocessing-simple-pipeline.png) + ## Pipeline Components + ### CloudFormation Template + pipeline/pipeline.yml is a CloudFormation template that will deploy all the required pipeline components. Once the stack has deployed the Pipeline will automatically execute and deploy the Serverless Application. See getting started for information on how to deploy the template. + #### Deployed Resources + * Pipeline S3 bucket, used to store pipeline artefacts that are passed between stages. * CodePipeline * CodeBuild Project * Roles for CodePipeline, CodeBuild and the CloudFormation Deployment + ### Source + For this application we are hosting our source code in GitHub. Other [Source Integrations](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source) are available however this template focuses on GitHub. Whenever an update is pushed to the GitHub branch being monitored our pipeline will begin executing. The source stage will connect to GitHub using the credentials provided and clone the branch into our pipeline artefact bucket for use in the other stages. + ### Build + In order to run our SAM build and SAM package commands we are using [CodeBuild](https://aws.amazon.com/codebuild/), a fully managed continuous integration service . Codebuild allows us to perform a sequence of commands that we define in the [BuildSpec.yml](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) file that will execute inside the [build environment](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html) we define using a docker container. For this project we are using the Amazon Linux 2 version 1.0 container with Python 3.7. @@ -36,15 +46,21 @@ Within the buildspec.yml we are: * Running SAM build as per the manual deployment * Running SAM Package again as per the manual deployment steps * Instructing CodeBuild to pass the output template back to the Pipeline for use in the deployment stage. +
+ ### Deploy + To deploy our application stack we are not using SAM Deploy, instead we are opting to use the CodePipeline native support for CloudFormation. The pipeline has a role it use with appropriate permissions to deploy the template created by the SAM package step which will create a stack containing the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) and [approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-action-add.html) to demonstrate a manual approval workflow. The first deployment will not require approval however subsequent updates will. Additional resources will be deployed as per the main architecture documentation. +
+ ## Getting started + To get started you just need to deploy the pipeline CloudFormation stack using the template found in this repository under pipeline/pipeline.yaml in order for this to be successful you will need to provide some additional information. * GitHubToken: GitHub OAuthToken with access to be able to clone the repository. You can find more information in the [GitHub Documentation](https://github.com/settings/tokens) @@ -55,31 +71,46 @@ Optionally, if you are deploying from your own repository you will need to also * GitHubRepoName: The name of the GitHub repository hosting your source code. By default it points to the AWSLabs repo. * GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. * GitHubRepoOwner: the GitHub repository owner. e.g. awslabs +
+ ### Deploying the template + You can deploy the template using either the [AWS Console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) or the [AWS CLI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html) -[TODO] Insert quick link to create CFN stack +**[TODO]** Insert quick link to create CFN stack +
+ + ##### Example CLI Deployment + > aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" +
+ ### Deploying twice for a Development and Production example. + You can actually deploy the pipeline twice to give two separate environments. Allowing you to create a simple dev to production workflow. This will allow you to build your application in your development branch and any changes will automatically be picked up and deployed by the pipeline. Once you have tested and are happy the changes can be merged to master and they will be automatically built and deployed to production. Deploy the first stack using a stack name of "lambda-file-refarch-pipeline-dev" update the **AppName** parameter to be environment specific. e.g. "lambda-file-refarch-dev" and make sure to update the branch to the development one. +
+ +##### Example CLI Deployment for development pipeline -Example CLI Deployment for development pipeline > aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-dev" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-dev" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="develop" +
Once that has deployed and the application stack has also successfully deployed you can provision the production pipeline stack. +
> aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-prod" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-prod" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="master" +
## Clean-up From 3efee78a962539db8951411635586770f4781198 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 17 Mar 2020 11:34:15 +0000 Subject: [PATCH 073/115] Renamed some resources to allow for 2 or more Deployments --- pipeline/pipeline.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index d68db0e..830949b 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -15,6 +15,7 @@ Parameters: Description: Image used for CodeBuild project. GitHubRepoName: Type: String + Default: "lambda-refarch-fileprocessing" Description: The GitHub repo name GitHubRepoBranch: Type: String @@ -22,6 +23,7 @@ Parameters: Default: master GitHubRepoOwner: Type: String + Default: "awslabs" Description: GitHub Repository Owner. GitHubToken: NoEcho: true @@ -61,7 +63,7 @@ Resources: Description: S3 bucket for AWS CodePipeline artifacts Type: AWS::S3::Bucket Properties: - BucketName: !Sub "serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}" + BucketName: !Sub "pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}" VersioningConfiguration: Status: Enabled S3ArtifactBucketPolicy: @@ -186,7 +188,7 @@ Resources: Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" - Effect: Allow Action: ["s3:*"] - Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + Resource: !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" - Effect: Allow Action: - kms:GenerateDataKey* @@ -231,7 +233,7 @@ Resources: - s3:GetObject - s3:GetObjectVersion Resource: - - !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + - !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - Action: ["lambda:*"] @@ -324,7 +326,7 @@ Resources: - s3:GetObjectVersion - s3:GetBucketVersioning - s3:PutObject - Resource: !Sub "arn:aws:s3:::serverless-app-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + Resource: !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" Effect: Allow - Action: - codebuild:StartBuild From 7d8f6dc7a89395566d7c58e0a10fbff0771a56cd Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 17 Mar 2020 16:16:45 +0000 Subject: [PATCH 074/115] added cleanup script --- pipeline/cleanup.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 pipeline/cleanup.sh diff --git a/pipeline/cleanup.sh b/pipeline/cleanup.sh new file mode 100644 index 0000000..4969903 --- /dev/null +++ b/pipeline/cleanup.sh @@ -0,0 +1,71 @@ +#!/bin/bash + + +echo "Clearing out resources of lambda-file-refarch and Pipeline stacks..." +echo +echo "Cleaning up Application S3 buckets..." && for bucket in InputBucket ConversionTargetBucket; do + echo "Clearing out ${bucket}..." + BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) + aws s3 rm s3://${BUCKET} --recursive + echo +done + +echo "Cleaning up Pipeline S3 buckets..." +BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch-pipeline --logical-resource-id "PipelineBucket" --query "StackResourceDetail.PhysicalResourceId" --output text) + +echo + +echo "Removing all VERSIONS from ${BUCKET}" + +VERSIONS=`aws s3api list-object-VERSIONS --bucket $BUCKET |jq '.VERSIONS'` +MARKERS=`aws s3api list-object-VERSIONS --bucket $BUCKET |jq '.DeleteMARKERS'` +let COUNT=`echo $VERSIONS |jq 'length'`-1 + +if [ $COUNT -gt -1 ]; then + echo "removing files from bucket" + for i in $(seq 0 $COUNT); do + KEY=`echo $VERSIONS | jq .[$i].KEY |sed -e 's/\"//g'` + VERSIONID=`echo $VERSIONS | jq .[$i].VERSIONID |sed -e 's/\"//g'` + CMD="aws s3api delete-object --bucket $BUCKET --KEY $KEY --version-id $VERSIONID" + echo $CMD + $CMD + done +fi + +let COUNT=`echo $MARKERS |jq 'length'`-1 + +if [ $COUNT -gt -1 ]; then + echo "removing delete MARKERS" + + for i in $(seq 0 $COUNT); do + KEY=`echo $MARKERS | jq .[$i].KEY |sed -e 's/\"//g'` + VERSIONID=`echo $MARKERS | jq .[$i].VERSIONID |sed -e 's/\"//g'` + CMD="aws s3api delete-object --bucket $BUCKET --KEY $KEY --version-id $VERSIONID" + echo $CMD + $CMD + done +fi + +echo "Deleting lambda-file-refarch CloudFormation stack..." && aws cloudformation delete-stack \ + --stack-name lambda-file-refarch + +echo "Waiting for stack deletion..." && aws cloudformation wait stack-delete-complete \ + --stack-name lambda-file-refarch + +echo "Deleting lambda-file-refarch-pipeline CloudFormation stack..." && aws cloudformation delete-stack \ + --stack-name lambda-file-refarch-pipeline + +echo "Waiting for stack deletion..." && aws cloudformation wait stack-delete-complete \ + --stack-name lambda-file-refarch-pipeline + +echo "Clearing out Application CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/lambda/lambda-file-refarch- --query "logGroups[*].logGroupName" --output text); do + echo "Removing log group ${log_group}..." + aws logs delete-log-group --log-group-name ${log_group} + echo +done + +echo "Clearing out CodeBuild CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/codebuild/lambda-file-refarch- --query "logGroups[*].logGroupName" --output text); do + echo "Removing log group ${log_group}..." + aws logs delete-log-group --log-group-name ${log_group} + echo +done \ No newline at end of file From f27c1542da4294f6be5f914e7a3f8ecb4080afe3 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 18 Mar 2020 09:39:38 +0000 Subject: [PATCH 075/115] added -app to isolate from main application and improved cleanup and added to the readme.md --- pipeline/README.md | 20 ++++++++++---------- pipeline/cleanup.sh | 39 ++++++++++++++++++++------------------- pipeline/pipeline.yaml | 18 +++++++++--------- 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/pipeline/README.md b/pipeline/README.md index 7f7ffac..071a6c4 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -46,7 +46,7 @@ Within the buildspec.yml we are: * Running SAM build as per the manual deployment * Running SAM Package again as per the manual deployment steps * Instructing CodeBuild to pass the output template back to the Pipeline for use in the deployment stage. -
+ ### Deploy @@ -55,13 +55,13 @@ Within the buildspec.yml we are: To deploy our application stack we are not using SAM Deploy, instead we are opting to use the CodePipeline native support for CloudFormation. The pipeline has a role it use with appropriate permissions to deploy the template created by the SAM package step which will create a stack containing the resources defined in our SAM Template. We are using [change sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) and [approval actions](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-action-add.html) to demonstrate a manual approval workflow. The first deployment will not require approval however subsequent updates will. Additional resources will be deployed as per the main architecture documentation. -
+ ## Getting started -To get started you just need to deploy the pipeline CloudFormation stack using the template found in this repository under pipeline/pipeline.yaml in order for this to be successful you will need to provide some additional information. +To get started using the template found in this repository under pipeline/pipeline.yaml. You will need to provide additional information to deploy the stack. * GitHubToken: GitHub OAuthToken with access to be able to clone the repository. You can find more information in the [GitHub Documentation](https://github.com/settings/tokens) * AlarmRecipientEmailAddress: You will need to provide an email address that can be used for configuring notifications @@ -71,7 +71,7 @@ Optionally, if you are deploying from your own repository you will need to also * GitHubRepoName: The name of the GitHub repository hosting your source code. By default it points to the AWSLabs repo. * GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. * GitHubRepoOwner: the GitHub repository owner. e.g. awslabs -
+ ### Deploying the template @@ -80,14 +80,14 @@ Optionally, if you are deploying from your own repository you will need to also You can deploy the template using either the [AWS Console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) or the [AWS CLI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html) **[TODO]** Insert quick link to create CFN stack -
+ ##### Example CLI Deployment > aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" -
+ ### Deploying twice for a Development and Production example. @@ -98,19 +98,17 @@ You can actually deploy the pipeline twice to give two separate environments. Al This will allow you to build your application in your development branch and any changes will automatically be picked up and deployed by the pipeline. Once you have tested and are happy the changes can be merged to master and they will be automatically built and deployed to production. Deploy the first stack using a stack name of "lambda-file-refarch-pipeline-dev" update the **AppName** parameter to be environment specific. e.g. "lambda-file-refarch-dev" and make sure to update the branch to the development one. -
##### Example CLI Deployment for development pipeline > aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-dev" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-dev" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="develop" -
+ Once that has deployed and the application stack has also successfully deployed you can provision the production pipeline stack. -
+ > aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-prod" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-prod" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="master" -
## Clean-up @@ -123,3 +121,5 @@ In order to remove all resources created by this example you will first need to Once that is complete you can remove both the Application Stack and the Pipeline Stack. Note that the pipeline stack should not be removed until the application stack has successfully deleted as it is deployed using a role present in the pipeline stack. This role is used to also delete the stack. + +Additionally there will be some codebuild logs and loggroups left over in CloudWatch, these can be deleted. \ No newline at end of file diff --git a/pipeline/cleanup.sh b/pipeline/cleanup.sh index 4969903..05e2155 100644 --- a/pipeline/cleanup.sh +++ b/pipeline/cleanup.sh @@ -1,11 +1,12 @@ #!/bin/bash +command -v jq >/dev/null 2>&1 || { echo >&2 "jq is required but it's not installed. Aborting."; exit 1; } echo "Clearing out resources of lambda-file-refarch and Pipeline stacks..." echo echo "Cleaning up Application S3 buckets..." && for bucket in InputBucket ConversionTargetBucket; do echo "Clearing out ${bucket}..." - BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) + BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch-app --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) aws s3 rm s3://${BUCKET} --recursive echo done @@ -15,19 +16,19 @@ BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-ref echo -echo "Removing all VERSIONS from ${BUCKET}" +echo "Removing all versions from ${BUCKET}" -VERSIONS=`aws s3api list-object-VERSIONS --bucket $BUCKET |jq '.VERSIONS'` -MARKERS=`aws s3api list-object-VERSIONS --bucket $BUCKET |jq '.DeleteMARKERS'` -let COUNT=`echo $VERSIONS |jq 'length'`-1 +VERSIONS=`aws s3api list-object-versions --bucket $BUCKET | jq '.Versions'` +MARKERS=`aws s3api list-object-versions --bucket $BUCKET | jq '.DeleteMarkers'` +let COUNT=`echo $VERSIONS | jq 'length'`-1 if [ $COUNT -gt -1 ]; then echo "removing files from bucket" for i in $(seq 0 $COUNT); do - KEY=`echo $VERSIONS | jq .[$i].KEY |sed -e 's/\"//g'` - VERSIONID=`echo $VERSIONS | jq .[$i].VERSIONID |sed -e 's/\"//g'` - CMD="aws s3api delete-object --bucket $BUCKET --KEY $KEY --version-id $VERSIONID" - echo $CMD + KEY=`echo $VERSIONS | jq .[$i].Key | sed -e 's/\"//g'` + VERSIONID=`echo $VERSIONS | jq .[$i].VersionId | sed -e 's/\"//g'` + CMD="aws s3api delete-object --bucket $BUCKET --key $KEY --version-id $VERSIONID" + echo ${CMD} $CMD done fi @@ -35,22 +36,22 @@ fi let COUNT=`echo $MARKERS |jq 'length'`-1 if [ $COUNT -gt -1 ]; then - echo "removing delete MARKERS" + echo "removing delete markers" for i in $(seq 0 $COUNT); do - KEY=`echo $MARKERS | jq .[$i].KEY |sed -e 's/\"//g'` - VERSIONID=`echo $MARKERS | jq .[$i].VERSIONID |sed -e 's/\"//g'` - CMD="aws s3api delete-object --bucket $BUCKET --KEY $KEY --version-id $VERSIONID" - echo $CMD + KEY=`echo $MARKERS | jq .[$i].Key | sed -e 's/\"//g'` + VERSIONID=`echo $MARKERS | jq .[$i].VersionId | sed -e 's/\"//g'` + CMD="aws s3api delete-object --bucket $BUCKET --key $KEY --version-id $VERSIONID" + echo ${CMD} $CMD done fi -echo "Deleting lambda-file-refarch CloudFormation stack..." && aws cloudformation delete-stack \ - --stack-name lambda-file-refarch +echo "Deleting lambda-file-refarch-app CloudFormation stack..." && aws cloudformation delete-stack \ + --stack-name lambda-file-refarch-app echo "Waiting for stack deletion..." && aws cloudformation wait stack-delete-complete \ - --stack-name lambda-file-refarch + --stack-name lambda-file-refarch-app echo "Deleting lambda-file-refarch-pipeline CloudFormation stack..." && aws cloudformation delete-stack \ --stack-name lambda-file-refarch-pipeline @@ -58,13 +59,13 @@ echo "Deleting lambda-file-refarch-pipeline CloudFormation stack..." && aws clou echo "Waiting for stack deletion..." && aws cloudformation wait stack-delete-complete \ --stack-name lambda-file-refarch-pipeline -echo "Clearing out Application CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/lambda/lambda-file-refarch- --query "logGroups[*].logGroupName" --output text); do +echo "Clearing out Application CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/lambda/lambda-file-refarch-app- --query "logGroups[*].logGroupName" --output text); do echo "Removing log group ${log_group}..." aws logs delete-log-group --log-group-name ${log_group} echo done -echo "Clearing out CodeBuild CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/codebuild/lambda-file-refarch- --query "logGroups[*].logGroupName" --output text); do +echo "Clearing out CodeBuild CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix /aws/codebuild/lambda-file-refarch-app-build --query "logGroups[*].logGroupName" --output text); do echo "Removing log group ${log_group}..." aws logs delete-log-group --log-group-name ${log_group} echo diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 830949b..49e8347 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -3,7 +3,7 @@ Description: "Template for full CI/CD serverless applications." Parameters: AppName: Type: String - Default: lambda-file-refarch + Default: lambda-file-refarch-app Description: Name used for application deployment SAMOutputFile: Type: String @@ -34,7 +34,7 @@ Parameters: Description: Email address for any alerts. Resources: CodeBuildProject: - DependsOn: [S3Bucket] + DependsOn: [PipelineBucket] Description: AWS CodeBuild project Type: AWS::CodeBuild::Project Properties: @@ -46,7 +46,7 @@ Resources: PrivilegedMode: True EnvironmentVariables: - Name: ARTIFACT_BUCKET - Value: !Ref S3Bucket + Value: !Ref PipelineBucket - Name: SAM_OUTPUT_TEMPLATE Value: !Ref SAMOutputFile Image: !Ref CodeBuildImage @@ -59,7 +59,7 @@ Resources: - Key: app-name Value: !Ref AppName TimeoutInMinutes: 5 - S3Bucket: + PipelineBucket: Description: S3 bucket for AWS CodePipeline artifacts Type: AWS::S3::Bucket Properties: @@ -67,11 +67,11 @@ Resources: VersioningConfiguration: Status: Enabled S3ArtifactBucketPolicy: - DependsOn: [S3Bucket] + DependsOn: [PipelineBucket] Description: S3 bucket policy for AWS CodePipeline access Type: AWS::S3::BucketPolicy Properties: - Bucket: !Ref S3Bucket + Bucket: !Ref PipelineBucket PolicyDocument: Version: "2012-10-17" Id: SSEAndSSLPolicy @@ -80,12 +80,12 @@ Resources: Effect: Deny Principal: "*" Action: s3:* - Resource: !Sub "arn:aws:s3:::${S3Bucket}/*" + Resource: !Sub "arn:aws:s3:::${PipelineBucket}/*" Condition: Bool: aws:SecureTransport: false ProjectPipeline: - DependsOn: [S3Bucket, CodeBuildProject] + DependsOn: [PipelineBucket, CodeBuildProject] Description: AWS CodePipeline deployment pipeline for project Type: AWS::CodePipeline::Pipeline Properties: @@ -159,7 +159,7 @@ Resources: RunOrder: 2 ArtifactStore: Type: S3 - Location: !Ref S3Bucket + Location: !Ref PipelineBucket CodeBuildTrustRole: Description: Service role for AWS CodeBuild Type: AWS::IAM::Role From 0e8bf92fc33e278c3a4d93b281297239b4be954a Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 18 Mar 2020 09:42:28 +0000 Subject: [PATCH 076/115] updated Readme JQ requirements --- pipeline/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pipeline/README.md b/pipeline/README.md index 071a6c4..08bb15a 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -122,4 +122,14 @@ In order to remove all resources created by this example you will first need to Once that is complete you can remove both the Application Stack and the Pipeline Stack. Note that the pipeline stack should not be removed until the application stack has successfully deleted as it is deployed using a role present in the pipeline stack. This role is used to also delete the stack. -Additionally there will be some codebuild logs and loggroups left over in CloudWatch, these can be deleted. \ No newline at end of file +Additionally there will be some Codebuild logs and Log Groups left over in CloudWatch, these can be deleted. + +Alternatively you can use the script /pipeline/cleanup.sh + +Things to note: + +* Script will remove only stacks deployed as described in the examples. + +* Both the application and the pipeline stacks will be removed. + +* JQ needs to be installed in order to empty the pipeline bucket as versioning is enabled. The command to delete versions and markers requires it. \ No newline at end of file From 8bec4dcc6854d24171d7fb0fcf7d09023a9bf248 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 09:17:42 +0000 Subject: [PATCH 077/115] fixed some typos --- WELL-ARCHITECTED.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/WELL-ARCHITECTED.md b/WELL-ARCHITECTED.md index 14602de..71d2228 100644 --- a/WELL-ARCHITECTED.md +++ b/WELL-ARCHITECTED.md @@ -61,15 +61,17 @@ For this example a rollout mechanism would involve adopting either a Blue / Gree ##### Notes +This solution doesn't include an API frontend so the question doesn't apply. + #### SEC 2: How do you manage your Serverless application’s security boundaries? * [ ] Question does not apply to this workload
-* [x] **[Required]** Evaluate and define resource policies -* [x] **[Good]** Control network traffic at all layers -* [x] **[Best]** Smaller functions require fewer permissions -* [x] **[Required]** Use temporary credentials between resources and components +* [x] **[Required]** Evaluate and define resource policies +* [x] **[Good]** Control network traffic at all layers +* [x] **[Best]** Smaller functions require fewer permissions +* [x] **[Required]** Use temporary credentials between resources and components
* [ ] None of these @@ -102,7 +104,7 @@ We have individual functions for each different piece of business logic. ##### Notes -This application doesn't have any stored secrets. The GitHub token is required by CodeBuild, this is passed as a string for CloudFormation, it is not however visible within the CloudFormation console. This could be improved by manually creating a secrets manager entry for the token and replacing the CloudFormation parameter for the token with the secrets manager value by utilising Dynamic References. +This application doesn't have any stored secrets. The GitHub token is required by CodePipeline, this is passed as a string for CloudFormation, it is not however visible within the CloudFormation console. This could be improved by manually creating a secrets manager entry for the token and replacing the CloudFormation parameter for the token with the secrets manager value by utilising Dynamic References. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html For reviewing dependencies and libraries we could integrate an automatic check into the pipeline. There are many tools and providers which can check code. Currently this is manual using PEP8 and Bandit manual checks. From 53c5823443483d87d98bf4cf3653046cfa9de995 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 10:15:03 +0000 Subject: [PATCH 078/115] PR comment corrections --- buildspec.yml | 1 - pipeline/README.md | 19 ++++++++++++++----- pipeline/pipeline.yaml | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/buildspec.yml b/buildspec.yml index 40d62d5..a89995b 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -15,4 +15,3 @@ phases: artifacts: files: - $SAM_OUTPUT_TEMPLATE - \ No newline at end of file diff --git a/pipeline/README.md b/pipeline/README.md index 08bb15a..d3dd346 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -6,7 +6,7 @@ We use exactly the same method as in the manual deployment however we utilise [C ## CI/CD Pipeline Diagram -![Reference Architecture - Real-time File Processing CI/CD Pipeline](img/lambda-refarch-fileprocessing-simple-pipeline.png) +![Reference Architecture - Real-time File Processing CI/CD Pipeline](../img/lambda-refarch-fileprocessing-simple-pipeline.png) ## Pipeline Components @@ -15,7 +15,7 @@ We use exactly the same method as in the manual deployment however we utilise [C ### CloudFormation Template -pipeline/pipeline.yml is a CloudFormation template that will deploy all the required pipeline components. Once the stack has deployed the Pipeline will automatically execute and deploy the Serverless Application. See getting started for information on how to deploy the template. +pipeline.yml is a CloudFormation template that will deploy all the required pipeline components. Once the stack has deployed the Pipeline will automatically execute and deploy the Serverless Application. See getting started for information on how to deploy the template. #### Deployed Resources @@ -31,13 +31,13 @@ pipeline/pipeline.yml is a CloudFormation template that will deploy all the requ For this application we are hosting our source code in GitHub. Other [Source Integrations](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source) are available however this template focuses on GitHub. Whenever an update is pushed to the GitHub branch being -monitored our pipeline will begin executing. The source stage will connect to GitHub using the credentials provided and clone the branch into our pipeline artefact bucket for use in the other stages. +monitored (default: master) our pipeline will begin executing. The source stage will connect to GitHub using the credentials provided and clone the branch into our pipeline artefact bucket for use in the other stages. ### Build -In order to run our SAM build and SAM package commands we are using [CodeBuild](https://aws.amazon.com/codebuild/), a fully managed continuous integration service . Codebuild allows us to perform a sequence of commands that we define in the [BuildSpec.yml](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) +In order to run our SAM build and SAM package commands we are using [CodeBuild](https://aws.amazon.com/codebuild/), a fully managed continuous integration service. Codebuild allows us to perform a sequence of commands that we define in the [buildSpec.yml](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) file that will execute inside the [build environment](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html) we define using a docker container. For this project we are using the Amazon Linux 2 version 1.0 container with Python 3.7. Within the buildspec.yml we are: @@ -70,7 +70,7 @@ Optionally, if you are deploying from your own repository you will need to also * GitHubRepoName: The name of the GitHub repository hosting your source code. By default it points to the AWSLabs repo. * GitHubRepoBranch: The GitHub repo branch code pipeline should watch for changes on. This defaults to master, but any branch can be used. - * GitHubRepoOwner: the GitHub repository owner. e.g. awslabs + * GitHubRepoOwner: the GitHub repository owner. e.g. aws-samples @@ -111,6 +111,15 @@ Once that has deployed and the application stack has also successfully deployed > aws cloudformation deploy --template-file pipeline/pipeline.yaml --stack-name "lambda-file-refarch-pipeline-prod" --capabilities "CAPABILITY_IAM" "CAPABILITY_NAMED_IAM" --parameter-overrides AppName="lambda-file-refarch-prod" GitHubToken="**{replace with your GitHub Token}**" AlarmRecipientEmailAddress="**{replace with your admin email}**" GitHubRepoBranch="master" +##### Approval Actions + +For any additional source code updates after the pipeline has been deployed and executed successfully you will be required to approve or reject the change-set execution. There will be an email sent to the admin email address, which will include a link to the approval request. + +Alternatively you can do this via the console or cli [Approve or Reject an Approval Action in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-approve-or-reject.html) + + + + ## Clean-up In order to remove all resources created by this example you will first need to make sure the 3 S3 buckets are empty. diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 49e8347..70c6bf6 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -23,7 +23,7 @@ Parameters: Default: master GitHubRepoOwner: Type: String - Default: "awslabs" + Default: "aws-samples" Description: GitHub Repository Owner. GitHubToken: NoEcho: true From 62309751d84a35d100dd3818f98733669c7170c2 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 10:42:35 +0000 Subject: [PATCH 079/115] added approval notification --- pipeline/pipeline.yaml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 70c6bf6..62f2c2d 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -66,6 +66,12 @@ Resources: BucketName: !Sub "pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}" VersioningConfiguration: Status: Enabled + PipelineNotificationTopic: + Type: AWS::SNS::Topic + Properties: + Subscription: + - Protocol: email + Endpoint: !Ref AlarmRecipientEmailAddress S3ArtifactBucketPolicy: DependsOn: [PipelineBucket] Description: S3 bucket policy for AWS CodePipeline access @@ -144,6 +150,16 @@ Resources: TemplatePath: !Sub "${AppName}-BuildArtifact::${SAMOutputFile}" ParameterOverrides: !Sub '{"AlarmRecipientEmailAddress": "${AlarmRecipientEmailAddress}"}' RunOrder: 1 + - Name: approve-changeset + InputArtifacts: [] + ActionTypeId: + Category: Approval + Owner: AWS + Provider: Manual + Version: '1' + Configuration: + NotificationArn: !Ref PipelineNotificationTopic + RunOrder: 2 - Name: execute-changeset InputArtifacts: [] ActionTypeId: @@ -156,7 +172,7 @@ Resources: StackName: !Sub "${AppName}" ActionMode: CHANGE_SET_EXECUTE ChangeSetName: pipeline-changeset - RunOrder: 2 + RunOrder: 3 ArtifactStore: Type: S3 Location: !Ref PipelineBucket From f6ece51a759d4128d680794302ab9c5bdb8dbf4a Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 10:59:36 +0000 Subject: [PATCH 080/115] added permissions --- pipeline/pipeline.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 62f2c2d..0372712 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -358,6 +358,10 @@ Resources: - iam:PassRole Resource: !GetAtt CloudFormationTrustRole.Arn Effect: Allow + - Action: + - sns:Publish + Resource: !Ref PipelineNotificationTopic + Effect: Allow Roles: [!Ref CodePipelineTrustRole] From 8e97eb75286d5f8685d06afe550dc6554052d3bd Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 11:27:25 +0000 Subject: [PATCH 081/115] added failure notification --- pipeline/pipeline.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 0372712..401eac1 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -176,6 +176,26 @@ Resources: ArtifactStore: Type: S3 Location: !Ref PipelineBucket + PipelineEventRule: + Type: "AWS::Events::Rule" + Properties: + Description: "CodePipelineEventRule" + EventPattern: + source: + - aws.codepipeline + detail-type: + - CodePipeline Pipeline Execution State Change + detail: + state: + - FAILED + State: "ENABLED" + Targets: + - Arn: !Ref PipelineNotificationTopic + Id: "PipelineTopic" + InputTransformer: + InputTemplate: !Sub '"The ${AppName} Pipeline has failed. Go to https://console.aws.amazon.com/codepipeline/home/view/ for more information"' + InputPathsMap: + pipeline: "$.detail.pipeline" CodeBuildTrustRole: Description: Service role for AWS CodeBuild Type: AWS::IAM::Role From 5a5174be0f3a2ee4e3386c9fff523252d46d9b61 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 11:44:53 +0000 Subject: [PATCH 082/115] added failure notification --- pipeline/pipeline.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 401eac1..e3d7ac2 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -181,13 +181,13 @@ Resources: Properties: Description: "CodePipelineEventRule" EventPattern: - source: - - aws.codepipeline - detail-type: - - CodePipeline Pipeline Execution State Change + source: + - aws.codepipeline + detail-type: + - CodePipeline Pipeline Execution State Change detail: - state: - - FAILED + state: + - FAILED State: "ENABLED" Targets: - Arn: !Ref PipelineNotificationTopic From 0ee96cfb609150f2a703901ec5b68eb0e8bc0047 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Tue, 24 Mar 2020 12:09:56 +0000 Subject: [PATCH 083/115] added failure notification --- pipeline/pipeline.yaml | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index e3d7ac2..34a84ec 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -72,6 +72,21 @@ Resources: Subscription: - Protocol: email Endpoint: !Ref AlarmRecipientEmailAddress + PipelineSNSTopicPolicy: + Type: AWS::SNS::TopicPolicy + Properties: + PolicyDocument: + Id: PipelineTopicPolicy + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: + - events.amazonaws.com + Action: sns:Publish + Resource: !Ref PipelineNotificationTopic + Topics: + - !Ref PipelineNotificationTopic S3ArtifactBucketPolicy: DependsOn: [PipelineBucket] Description: S3 bucket policy for AWS CodePipeline access @@ -179,23 +194,26 @@ Resources: PipelineEventRule: Type: "AWS::Events::Rule" Properties: - Description: "CodePipelineEventRule" + Description: "Trigger notifications based on pipeline state change to Failure" EventPattern: source: - - aws.codepipeline + - "aws.codepipeline" detail-type: - CodePipeline Pipeline Execution State Change detail: state: - - FAILED + - "FAILED" State: "ENABLED" Targets: - Arn: !Ref PipelineNotificationTopic Id: "PipelineTopic" InputTransformer: - InputTemplate: !Sub '"The ${AppName} Pipeline has failed. Go to https://console.aws.amazon.com/codepipeline/home/view/ for more information"' + InputTemplate: !Sub '"The ${AppName} Pipeline in has at

$eySdAr6W1%Hb#DKT*!m}56m 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 literal 134504 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

W2v*?fJ3aX6f-|6B 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 aVt$eD-IUQoN;4xBux Date: Tue, 31 Mar 2020 20:41:18 -0400 Subject: [PATCH 089/115] Remove redrive policy from SQS, update ref architecture diagram It is better to standardize on function EventInvokeConfig forerror destinations. --- README.md | 10 +++++----- img/lambda-refarch-fileprocessing-simple.png | Bin 96293 -> 96248 bytes template.yml | 6 ------ 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 47b5ba4..44f5a7d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ The Real-time File Processing reference architecture is a general-purpose, event-driven, parallel data processing architecture that uses [AWS Lambda](https://aws.amazon.com/lambda). This architecture is ideal for workloads that need more than one data derivative of an object. -In this example application we deliver the notes from an interview in Markdown format to S3. CloudWatch Events is used to trigger multiple processing flows - one to convert and persist Markdown files to HTML and another to detect and persist sentiment. +In this example application, we deliver notes from an interview in Markdown format to S3. S3 Events are used to trigger multiple processing flows - one to convert and persist Markdown files to HTML and another to detect and persist sentiment. ## Architectural Diagram @@ -12,7 +12,7 @@ In this example application we deliver the notes from an interview in Markdown f ### Event Trigger -Unlike batch processing, in this architecture we process each individual file as it arrives. To achive this we utilize [AWS S3 Events](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) and [Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/dg/welcome.html). When an object is created in S3, an event is emitted to a SNS topic. We deliver our event to 2 seperate [SQS Queues](https://aws.amazon.com/sqs/), representing 2 different workflows. Refer to [What is Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) for more information about eligible targets. +In this architecture, individual files are processed as they arrive. To achive this, we utilize [AWS S3 Events](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) and [Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/dg/welcome.html). When an object is created in S3, an event is emitted to a SNS topic. We deliver our event to 2 seperate [SQS Queues](https://aws.amazon.com/sqs/), representing 2 different workflows. Refer to [What is Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) for more information about eligible targets. ### Conversion Workflow @@ -186,7 +186,7 @@ creates the following resources: - **ConversionQueue** - A SQS queue that is used to store events for conversion from Markdown to HTML. -- **ConversionDlq** - A SQS queue that is used to capture messages that cannot be processed by the **ConversionFunction**. The *RedrivePolicy* on the **ConversionQueue** is used to manage how traffic makes it to this queue. +- **ConversionDlq** - A SQS queue that is used to capture messages that cannot be processed by the **ConversionFunction**. - **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. Errors in the function will be sent to the **ConversionDlq**. @@ -196,13 +196,13 @@ creates the following resources: - **SentimentQueue** - A SQS queue that is used to store events for sentiment analysis processing. -- **SentimentDlq** - A SQS queue that is used to capture messages that cannot be processed by the **SentimentFunction**. The *RedrivePolicy* on the **SentimentQueue** is used to manage how traffic makes it to this queue. +- **SentimentDlq** - A SQS queue that is used to capture messages that cannot be processed by the **SentimentFunction**. - **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. Errors in the function will be sent to the **SentimentDlq**. - **SentimentTable** - A DynamoDB table that stores the input file along with the sentiment. -- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive alarms from the **ConversionDlqAlarm** and **SentimentDlqAlarm**. +- **AlarmTopic** - A SNS topic that has an email as a subscriber. This topic is used to receive alarms from the **ConversionDlqAlarm**, **SentimentDlqAlarm**, **ConversionQueueAlarm**, **SentimentQueueAlarm**, **ConversionFunctionErrorRateAlarm**, **SentimentFunctionErrorRateAlarm**, **ConversionFunctionThrottleRateAlarm**, and **SentimentFunctionThrottleRateAlarm**. - **ConversionDlqAlarm** - A CloudWatch Alarm that detects when there there are any messages sent to the **ConvesionDlq** within a 1 minute period and sends a notification to the **AlarmTopic**. diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png index ac158a3c44904cde3b1bcea028a08b7a734ee3e8..890f2202d5769a43f465c4faaf676b7ae4d9a6f4 100644 GIT binary patch literal 96248 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

E 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∋Ic5@PtRnS6*FRy`1A7 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

$eySdAr6W1%Hb#DKT*!m}56m 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 diff --git a/template.yml b/template.yml index fe4da7b..d7f4315 100644 --- a/template.yml +++ b/template.yml @@ -104,9 +104,6 @@ Resources: DependsOn: ConversionDlq Properties: VisibilityTimeout: 60 - RedrivePolicy: - deadLetterTargetArn: !GetAtt ConversionDlq.Arn - maxReceiveCount: 5 ConversionDlq: Type: AWS::SQS::Queue @@ -193,9 +190,6 @@ Resources: DependsOn: SentimentDlq Properties: VisibilityTimeout: 60 - RedrivePolicy: - deadLetterTargetArn: !GetAtt SentimentDlq.Arn - maxReceiveCount: 5 SentimentDlq: Type: AWS::SQS::Queue From 7f3560bbd04a91ec028d7799d1444881c3b075cb Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Thu, 2 Apr 2020 11:45:24 -0400 Subject: [PATCH 090/115] Update to reflect better ARN + change of error handling --- README.md | 12 ++--- deploy.sh | 51 ------------------- img/lambda-refarch-fileprocessing-simple.png | Bin 96248 -> 116953 bytes template.yml | 18 +++---- 4 files changed, 13 insertions(+), 68 deletions(-) delete mode 100644 deploy.sh diff --git a/README.md b/README.md index 44f5a7d..c03d9f7 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ We target a SQS queue for this workflow. Sending the JSON event to SQS first rat The Lambda service polls our queue on our behalf. When messages are available they will be delivered to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. -If our Conversion Lambda function fails to process the messages, the function sends the event to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Conversion DLQ. +If our Conversion Lambda function cannot remove the messages from the Conversion queue, they are sent to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Conversion DLQ. Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function execution environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new HTML file to an output S3 bucket. If our function execution results in an error, we will @@ -32,7 +32,7 @@ The Sentiment workflow uses the same SQS-to-Lambda Function pattern as the Cover Once we have our sentiment we persist the result to our [DynamoDB](https://aws.amazon.com/dynamodb/) table. -If our Sentiment Lambda function fails to process the messages, the function sends the event to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Sentiment DLQ. +If our Sentiment Lambda function cannot remove the messages from the Sentiment SQS queue, they are sent to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Sentiment DLQ. ## Building and Deploying the Application with the AWS Serverless Application Model (AWS SAM) @@ -186,9 +186,9 @@ creates the following resources: - **ConversionQueue** - A SQS queue that is used to store events for conversion from Markdown to HTML. -- **ConversionDlq** - A SQS queue that is used to capture messages that cannot be processed by the **ConversionFunction**. +- **ConversionDlq** - A SQS queue that is used to capture messages that cannot be processed by the **ConversionFunction**. The *RedrivePolicy* on the **ConversionQueue** is used to manage how traffic makes it to this queue. -- **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. Errors in the function will be sent to the **ConversionDlq**. +- **ConversionFunction** - A Lambda function that takes the input file, converts it to HTML, and stores the resulting file to **ConversionTargetBucket**. - **ConversionTargetBucket** - A S3 bucket that stores the converted HTML. @@ -196,9 +196,9 @@ creates the following resources: - **SentimentQueue** - A SQS queue that is used to store events for sentiment analysis processing. -- **SentimentDlq** - A SQS queue that is used to capture messages that cannot be processed by the **SentimentFunction**. +- **SentimentDlq** - A SQS queue that is used to capture messages that cannot be processed by the **SentimentFunction**. The *RedrivePolicy* on the **SentimentQueue** is used to manage how traffic makes it to this queue. -- **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. Errors in the function will be sent to the **SentimentDlq**. +- **SentimentFunction** - A Lambda function that takes the input file, performs sentiment analysis, and stores the output to the **SentimentTable**. - **SentimentTable** - A DynamoDB table that stores the input file along with the sentiment. diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index 8ead219..0000000 --- a/deploy.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -if (( ${#} < 3)); then - echo "USAGE: ${0} s3_package_bucket_name aws_region recipient_email" - exit 1 -fi - -### -# Variables -### -export SAM_TEMPLATE="template.yml" -export PACKAGED_TEMPLATE="packaged-template.yml" -export STACK_NAME="lambda-file-refarch" -export S3_CODE_BUCKET=${1} -export AWS_REGION=${2} -export RECIPIENT_EMAIL=${3} -export SAM_BUILD_ARG=${4} # Possible to pass in --skip-pull-image if docker image is already local -export FILE_TO_UPDATE="src/conversion/conversion.py" - -### -# Functions -### -function sam-runner { - sam build --use-container ${SAM_BUILD_ARG} - sam package --output-template-file ${PACKAGED_TEMPLATE} \ - --s3-bucket ${S3_CODE_BUCKET} # 2> /dev/null - sam deploy \ - --template-file ${PACKAGED_TEMPLATE} \ - --stack-name ${STACK_NAME} \ - --region ${AWS_REGION} \ - --tags Project=lambda-refarch-fileprocessing \ - --parameter-overrides AlarmRecipientEmailAddress=${RECIPIENT_EMAIL} \ - --capabilities CAPABILITY_IAM -} - -### -# Main body -### - -# Need to run two passes of the CF template to mitigate race condition. -# Please refer to https://aws.amazon.com/premiumsupport/knowledge-center/unable-validate-destination-s3/ -# for more detailed information. -sed -i '' '30,33 s/^/#/' ${SAM_TEMPLATE} -echo '' >> ${FILE_TO_UPDATE} -sam-runner -echo -sed -i '' '30,33 s/^#//' ${SAM_TEMPLATE} -echo '' >> ${FILE_TO_UPDATE} -sam-runner -git checkout ${FILE_TO_UPDATE} -echo \ No newline at end of file diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png index 890f2202d5769a43f465c4faaf676b7ae4d9a6f4..32a36cd4b58625a031e76406a4d119fe1503b24f 100644 GIT binary patch literal 116953 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 n~ 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 E1N+0vxBvhE literal 96248 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

E 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∋Ic5@PtRnS6*FRy`1A7 zV6NJ_y1G|G%EIi6lTU}s<|?}F^8~cY@`j!p+vpZpAmPP6o&~qpQ)tcQ<>mD>gh|eA z_6VY4cW2Y+Hbfj03U!d4M)%gOkzgiFj{nMz#Xr}0JjrYJ%v>pOU7{yWEGmD4ZrP!q z-Np7vGVLs+JWYBj_nV{u)2^d}bAfq+HXl?{Jrv0AL3Tm6bP0R@reqxX(SAYGu$rn* zgxcA>Al%}mpEYErb540F48bu=oXW)R0~?g@5O7LL`t&Q((u8RDP*p58 zh`%IQYl<&DJki`0m!@f0V@>S z_kV?6b4qZ!R7)r=Elpoo0Zy8sJDj%zv}=GnKm zxV&Jrgz?wDKBM-ZKRwJQB>zOhdgH1iK?TldskZphXysH7$;aeJRD#ppCExk&kk@QJ zJ1gnu4P52Mk$wkDO3?5*w5SVVL|s~9-27Qh$IqQKCm{!Io12>*YiUtmf8n22LJzBi zHyUJ^&LzF&Ud5|vHb5H7h+zyWyyL1(z8yeaO;T)z2Fx6L5YkSMj~~7yZt&p|;)BQ1 zXnJlWkmYj^`a_tGlw)IlpQU5rGneJLYiF0OV|4wxa=oKGsaMFmzy~&g6Nb34w6w&) z-Eptp@dH#x=DdTM{J*Xu?e6Y-H)p>Etq^y(>fnCcso`+b;JBB)w8wt{wu zN4@Q8>LP#jhrm6fGhcMMSsqtDka9pAxVAAUV}t+f2r2gn@nARfsZwyvoYD{kR!HwY zr8}l%Wrmuqrd!&IWy%V~?+7xTwe?WXgW!$L9wp_f#2^K59-x`Z%$q z>a?=LB1An&3DBNEd~h1s2eV&JV+sUOxZ&&q%5kPk8a7>Q^P-=3hGM60q09Q>9bc%P z`ZQcil>Y*I06ae8<>{H4pH?60BBUX#rmh~!_1y7k!1e9z(C$R<*ka5Q&OoNju<*!MB_<~N z7Q96W?V!8;1gx!=2YOioU2s9mFN7Dzb{*jzwy_1u#fal^p})O2j&DJeI1 z)dEyUL7o>5jA7$DU306DfBH;5HW) zl#imk@qQ_u0vGotn8Y%#;zot;2#W{VePBb3kK`3USUaoYDL_sn-4HptHM_p*0~W$HSWiGXdD>7qid9lwA0>Xx6r5v>WApOSOq8|t-V zh-Sp-deNm1<;Ludfjkb1cRtLfvBXL&-I$!wp;ghOF~SV(9l+r zSpyax=K6^6707Y^=e<7_H!#P}6N6{(s_^>;ekSdzR4iqYHK|Nw!gQdyT+KTVhYn+v z;upF=ZBirc%XoluA)q^m2~Y~(UI(tQ4w6mr);)ix`u|)nV6EMqepEnFFzq9!n*2o} zOdD0YQ{zb-P2jH6>b5CKc$J%~Dddb&bFYM3&KMWUs&^`!)*(`Vr}05w`hQ+epaOLn z_e81gI%3HI&p#N-bWoBHw7rAeVe=+|M9)|bQPHT`JTIR+@xA%X#VnD6XKjWUut64E zc2#c2|Clnx(z^+AxBwz@b|*E5b wVg2u Date: Tue, 7 Apr 2020 23:42:06 -0400 Subject: [PATCH 091/115] Remove test messages sent from s3 to queues during stack creation --- src/notification/notification.py | 16 ++++++++++++++-- template.yml | 13 +++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/notification/notification.py b/src/notification/notification.py index 8012b2e..23f62bb 100644 --- a/src/notification/notification.py +++ b/src/notification/notification.py @@ -4,10 +4,12 @@ import cfnresponse s3Client = boto3.client('s3') +sqsClient = boto3.client('sqs') + logger = logging.getLogger() logger.setLevel(logging.DEBUG) -def addBucketNotification(bucket_name, notification_id, sns_arn): +def addBucketNotification(bucket_name, notification_id, sns_arn, sqs_urls): notificationResponse = s3Client.put_bucket_notification_configuration( Bucket=bucket_name, NotificationConfiguration={ @@ -22,13 +24,23 @@ def addBucketNotification(bucket_name, notification_id, sns_arn): ] } ) + + # Purge the SQS Queues once notification configuration has been set. + # This will avoid the issue of s3:Test messages being consumed by + # the Conversion and Sentiment Lambda functions. + for sqs_url in sqs_urls: + logger.info(f'Clearing queue {sqs_url}') + purgeResponse = sqsClient.purge_queue(QueueUrl=sqs_url) + logger.info(f'PurgeQueue response: {json.dumps(purgeResponse)}') + return notificationResponse def create(properties, physical_id): bucket_name = properties['S3Bucket'] notification_id = properties['NotificationId'] sns_arn = properties['SnsArn'] - response = addBucketNotification(bucket_name, notification_id, sns_arn) + sqs_urls = properties['SqsUrls'] + response = addBucketNotification(bucket_name, notification_id, sns_arn, sqs_urls) logger.info(f'AddBucketNotification response: {json.dumps(response)}') return cfnresponse.SUCCESS, physical_id diff --git a/template.yml b/template.yml index cc871db..f0bc5f4 100644 --- a/template.yml +++ b/template.yml @@ -38,14 +38,15 @@ Resources: Version: '2012-10-17' Statement: - Effect: Allow - Principal: "*" + Principal: + Service: "s3.amazonaws.com" Action: SNS:Publish Resource: !Ref NotificationTopic Condition: StringEquals: aws:SourceAccount: !Sub ${AWS::AccountId} ArnEquals: - aws:SourceArn: !Sub "arn:aws:s3:::${AWS::StackName}-${AWS::AccountId}-inputbucket" + aws:SourceArn: !Sub "arn:aws:s3:::${AWS::StackName}-${AWS::AccountId}-input-bucket" Topics: - !Ref NotificationTopic @@ -75,6 +76,13 @@ Resources: CodeUri: ./src/notification/ Timeout: 60 Policies: + - Version: '2012-10-17' + Statement: + - Effect: Allow + Action: sqs:PurgeQueue + Resource: + - !GetAtt ConversionQueue.Arn + - !GetAtt SentimentQueue.Arn - Version: '2012-10-17' Statement: - Effect: Allow @@ -90,6 +98,7 @@ Resources: S3Bucket: !Ref InputBucket SnsArn: !Ref NotificationTopic NotificationId: S3ObjectCreatedEvent + SqsUrls: [ !Ref ConversionQueue, !Ref SentimentQueue ] ConversionSubscription: Type: AWS::SNS::Subscription From 53937ccf1930130a22ec1323e60d20e1f3c69cb3 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 13 May 2020 23:11:15 -0400 Subject: [PATCH 092/115] updatddashboard --- template.yml | 158 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 140 insertions(+), 18 deletions(-) diff --git a/template.yml b/template.yml index f0bc5f4..2a8dc31 100644 --- a/template.yml +++ b/template.yml @@ -549,7 +549,7 @@ Resources: }, { "type":"metric", - "x":0, + "x":12, "y":0, "width":12, "height":6, @@ -568,25 +568,64 @@ Resources: { "type":"metric", "x":0, - "y":0, + "y":6, "width":12, "height":6, "properties":{ "metrics":[ - [ "AWS/Lambda", "Throttles", "FunctionName", "${ConversionFunction}", { "id": "m1", "visible": false } ], - [ { "expression": "100*(m1/m2)", "label": "Throttle Rate", "id": "e1", "region": "${AWS::Region}" } ], - [ "AWS/Lambda", "Invocations", "FunctionName", "${ConversionFunction}", { "id": "m2", "visible": false } ] + [ "AWS/Lambda", "ConcurrentExecutions", "FunctionName", "${ConversionFunction}", { "stat": "Average" } ], + [ "...", { "stat": "Maximum" } ], + [ "...", { "stat": "Minimum", "label": "ConcurrentExecutions (minimum)" } ], + [ "...", { "stat": "p90", "label": "ConcurrentExecutions (p90)"} ], + [ "...", { "stat": "p95", "label": "ConcurrentExecutions (p95)"} ], + [ "...", { "stat": "p99", "label": "ConcurrentExecutions (p99)" } ] + ], + "period":60, + "stat":"Maximum", + "region": "${AWS::Region}", + "title":"Conversion Function Concurrent Executions" + } + }, + { + "type":"metric", + "x":12, + "y":6, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ "AWS/Lambda", "Duration", "FunctionName", "${ConversionFunction}", { "label": "Duration (Avg)", "stat": "Average" } ], + [ "...", { "label": "Duration (Max)" } ], + [ "...", { "stat": "p99", "label": "Duration (p99)" } ] ], "period":60, "stat":"Sum", "region": "${AWS::Region}", - "title":"Conversion Function Throttle Rate" + "title": "Conversion Function Duration" } }, { "type":"metric", - "x":0, - "y":0, + "x": 0, + "y": 18, + "width": 12, + "height": 6, + "properties":{ + "view": "timeSeries", + "stacked": false, + "title": "Conversion Function Throttles", + "metrics":[ + [ "AWS/Lambda", "Throttles", "FunctionName", "${ConversionFunction}" ] + ], + "period":60, + "stat":"Sum", + "region": "${AWS::Region}" + } + }, + { + "type":"metric", + "x":12, + "y":18, "width":12, "height":6, "properties":{ @@ -607,7 +646,7 @@ Resources: { "type":"metric", "x":0, - "y":0, + "y":24, "width":12, "height":6, "properties":{ @@ -627,8 +666,8 @@ Resources: }, { "type":"metric", - "x":0, - "y":0, + "x":12, + "y":24, "width":12, "height":6, "properties":{ @@ -646,25 +685,64 @@ Resources: { "type":"metric", "x":0, - "y":0, + "y":36, "width":12, "height":6, "properties":{ "metrics":[ - [ "AWS/Lambda", "Throttles", "FunctionName", "${SentimentFunction}", { "id": "m1", "visible": false } ], - [ { "expression": "100*(m1/m2)", "label": "Throttle Rate", "id": "e1", "region": "${AWS::Region}" } ], - [ "AWS/Lambda", "Invocations", "FunctionName", "${SentimentFunction}", { "id": "m2", "visible": false } ] + [ "AWS/Lambda", "ConcurrentExecutions", "FunctionName", "${SentimentFunction}", { "stat": "Average" } ], + [ "...", { "stat": "Maximum" } ], + [ "...", { "stat": "Minimum", "label": "ConcurrentExecutions (minimum)" } ], + [ "...", { "stat": "p90", "label": "ConcurrentExecutions (p90)"} ], + [ "...", { "stat": "p95", "label": "ConcurrentExecutions (p95)"} ], + [ "...", { "stat": "p99", "label": "ConcurrentExecutions (p99)" } ] + ], + "period":60, + "stat":"Maximum", + "region": "${AWS::Region}", + "title":"Sentiment Function Concurrent Executions" + } + }, + { + "type":"metric", + "x":12, + "y":36, + "width":12, + "height":6, + "properties":{ + "metrics":[ + [ "AWS/Lambda", "Duration", "FunctionName", "${SentimentFunction}", { "label": "Duration (Avg)", "stat": "Average" } ], + [ "...", { "label": "Duration (Max)" } ], + [ "...", { "stat": "p99", "label": "Duration (p99)" } ] ], "period":60, "stat":"Sum", "region": "${AWS::Region}", - "title":"Sentiment Function Throttle Rate" + "title": "Sentiment Function Duration" } }, { "type":"metric", - "x":0, - "y":0, + "x": 0, + "y": 42, + "width": 12, + "height": 6, + "properties":{ + "view": "timeSeries", + "stacked": false, + "title": "Sentiment Function Throttles", + "metrics":[ + [ "AWS/Lambda", "Throttles", "FunctionName", "${SentimentFunction}" ] + ], + "period":60, + "stat":"Sum", + "region": "${AWS::Region}" + } + }, + { + "type":"metric", + "x":12, + "y":42, "width":12, "height":6, "properties":{ @@ -681,6 +759,50 @@ Resources: "region": "${AWS::Region}", "title":"Sentiment DLQ Length" } + }, + { + "type": "text", + "x": 0, + "y": 48, + "width": 24, + "height": 1, + "properties": { + "markdown": "\n# Alarms" + } + }, + { + "type": "metric", + "x": 0, + "y": 49, + "width": 12, + "height": 6, + "properties": { + "title": "ConversionDlq Alarm", + "annotations": { + "alarms": [ + "${ConversionDlqAlarm.Arn}" + ] + }, + "view": "timeSeries", + "stacked": false + } + }, + { + "type": "metric", + "x": 12, + "y": 49, + "width": 12, + "height": 6, + "properties": { + "title": "SentimentDlq Alarm", + "annotations": { + "alarms": [ + "${SentimentDlqAlarm.Arn}" + ] + }, + "view": "timeSeries", + "stacked": false + } } ] }' From fac4d179fddc04debf535dad32e3a6404ff093f1 Mon Sep 17 00:00:00 2001 From: Brian McNamara Date: Fri, 15 May 2020 07:54:58 -0400 Subject: [PATCH 093/115] Update boto3 clients and resources to use aws region --- src/conversion/conversion.py | 6 ++++-- src/notification/notification.py | 17 +++++++++++------ src/sentiment/sentiment.py | 10 ++++++---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/conversion/conversion.py b/src/conversion/conversion.py index efdad17..a605a1a 100644 --- a/src/conversion/conversion.py +++ b/src/conversion/conversion.py @@ -16,15 +16,17 @@ max_object_size = 104857600 # 100MB = 104857600 bytes +aws_region = os.environ['AWS_REGION'] + conversion_queue = os.getenv('CONVERSION_QUEUE') target_bucket = os.getenv('TARGET_BUCKET') log_level = os.getenv('LOG_LEVEL') -s3_resource = boto3.resource('s3') +s3_resource = boto3.resource('s3', region_name=aws_region) -sqs_client = boto3.client('sqs') +sqs_client = boto3.client('sqs', region_name=aws_region) log = logging.getLogger() diff --git a/src/notification/notification.py b/src/notification/notification.py index 23f62bb..716ffaf 100644 --- a/src/notification/notification.py +++ b/src/notification/notification.py @@ -1,16 +1,21 @@ -import boto3 -import logging import json +import logging +import os + +import boto3 import cfnresponse -s3Client = boto3.client('s3') -sqsClient = boto3.client('sqs') + +aws_region = os.environ['AWS_REGION'] + +s3_client = boto3.client('s3', region_name=aws_region) +sqs_client = boto3.client('sqs', region_name=aws_region) logger = logging.getLogger() logger.setLevel(logging.DEBUG) def addBucketNotification(bucket_name, notification_id, sns_arn, sqs_urls): - notificationResponse = s3Client.put_bucket_notification_configuration( + notificationResponse = s3_client.put_bucket_notification_configuration( Bucket=bucket_name, NotificationConfiguration={ 'TopicConfigurations': [ @@ -30,7 +35,7 @@ def addBucketNotification(bucket_name, notification_id, sns_arn, sqs_urls): # the Conversion and Sentiment Lambda functions. for sqs_url in sqs_urls: logger.info(f'Clearing queue {sqs_url}') - purgeResponse = sqsClient.purge_queue(QueueUrl=sqs_url) + purgeResponse = sqs_client.purge_queue(QueueUrl=sqs_url) logger.info(f'PurgeQueue response: {json.dumps(purgeResponse)}') return notificationResponse diff --git a/src/sentiment/sentiment.py b/src/sentiment/sentiment.py index 7974e3c..3b587cd 100644 --- a/src/sentiment/sentiment.py +++ b/src/sentiment/sentiment.py @@ -16,19 +16,21 @@ max_object_size = 104857600 # 100MB = 104857600 bytes +aws_region = os.environ['AWS_REGION'] + s_table = os.getenv('SENTIMENT_TABLE') s_queue = os.getenv('SENTIMENT_QUEUE') log_level = os.getenv('LOG_LEVEL') -comprehend_client = boto3.client('comprehend') +comprehend_client = boto3.client('comprehend', region_name=aws_region) -s3_resource = boto3.resource('s3') +s3_resource = boto3.resource('s3', region_name=aws_region) -dynamodb_resource = boto3.resource('dynamodb') +dynamodb_resource = boto3.resource('dynamodb', region_name=aws_region) table = dynamodb_resource.Table(s_table) -sqs_client = boto3.client('sqs') +sqs_client = boto3.client('sqs', region_name=aws_region) log = logging.getLogger() From 1f56948f4495e0ce826558ce39035165493d7c9f Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 15 May 2020 15:25:06 +0100 Subject: [PATCH 094/115] Added end to end testing stage --- buildspec-test.yml | 12 +++++++ pipeline/pipeline.yaml | 54 +++++++++++++++++++++++++++++++ tests.sh | 42 ++++++++++++++++++++++++ sample-1.md => tests/sample-01.md | 0 sample-2.md => tests/sample-02.md | 0 tests/sample-03.md | 15 +++++++++ tests/sample-04.md | 15 +++++++++ tests/sample-05.md | 15 +++++++++ tests/sample-06.md | 15 +++++++++ tests/sample-07.md | 15 +++++++++ tests/sample-08.md | 15 +++++++++ tests/sample-09.md | 15 +++++++++ tests/sample-10.md | 15 +++++++++ tests/sample-11.md | 15 +++++++++ tests/sample-12.md | 15 +++++++++ tests/sample-13.md | 15 +++++++++ tests/sample-14.md | 15 +++++++++ tests/sample-15.md | 15 +++++++++ tests/sample-16.md | 15 +++++++++ tests/sample-17.md | 15 +++++++++ tests/sample-18.md | 15 +++++++++ tests/sample-19.md | 15 +++++++++ tests/sample-20.md | 15 +++++++++ tests/sample-21.md | 15 +++++++++ tests/sample-22.md | 15 +++++++++ tests/sample-23.md | 15 +++++++++ tests/sample-24.md | 15 +++++++++ 27 files changed, 438 insertions(+) create mode 100644 buildspec-test.yml create mode 100644 tests.sh rename sample-1.md => tests/sample-01.md (100%) rename sample-2.md => tests/sample-02.md (100%) create mode 100644 tests/sample-03.md create mode 100644 tests/sample-04.md create mode 100644 tests/sample-05.md create mode 100644 tests/sample-06.md create mode 100644 tests/sample-07.md create mode 100644 tests/sample-08.md create mode 100644 tests/sample-09.md create mode 100644 tests/sample-10.md create mode 100644 tests/sample-11.md create mode 100644 tests/sample-12.md create mode 100644 tests/sample-13.md create mode 100644 tests/sample-14.md create mode 100644 tests/sample-15.md create mode 100644 tests/sample-16.md create mode 100644 tests/sample-17.md create mode 100644 tests/sample-18.md create mode 100644 tests/sample-19.md create mode 100644 tests/sample-20.md create mode 100644 tests/sample-21.md create mode 100644 tests/sample-22.md create mode 100644 tests/sample-23.md create mode 100644 tests/sample-24.md diff --git a/buildspec-test.yml b/buildspec-test.yml new file mode 100644 index 0000000..f8d0464 --- /dev/null +++ b/buildspec-test.yml @@ -0,0 +1,12 @@ +version: 0.2 + +phases: + install: + runtime-versions: + python: 3.7 + commands: + - pip install --upgrade awscli + build: + commands: + - chmod +x tests.sh + - ./tests.sh $OUTPUT_STACK_NAME diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index 14dad62..bd1ad8f 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -59,6 +59,31 @@ Resources: - Key: app-name Value: !Ref AppName TimeoutInMinutes: 5 + CodeBuildTestProject: + DependsOn: [PipelineBucket] + Description: AWS CodeBuild project + Type: AWS::CodeBuild::Project + Properties: + Artifacts: + Type: CODEPIPELINE + Description: !Sub "Testing stage for ${AppName}." + Environment: + ComputeType: BUILD_GENERAL1_SMALL + PrivilegedMode: True + EnvironmentVariables: + - Name: OUTPUT_STACK_NAME + Value: !Sub "${AppName}" + Image: !Ref CodeBuildImage + Type: LINUX_CONTAINER + Name: !Sub "${AppName}-test" + ServiceRole: !GetAtt CodeBuildTrustRole.Arn + Source: + Type: CODEPIPELINE + BuildSpec: "buildspec-test.yml" + Tags: + - Key: app-name + Value: !Ref AppName + TimeoutInMinutes: 5 PipelineBucket: Description: S3 bucket for AWS CodePipeline artifacts Type: AWS::S3::Bucket @@ -196,6 +221,19 @@ Resources: ActionMode: CHANGE_SET_EXECUTE ChangeSetName: pipeline-changeset RunOrder: 3 + - Name: Test + Actions: + - Name: end-to-end + InputArtifacts: + - Name: !Sub "${AppName}-SourceArtifact" + ActionTypeId: + Category: Build + Owner: AWS + Version: "1" + Provider: CodeBuild + Configuration: + ProjectName: !Sub "${AppName}-test" + RunOrder: 1 ArtifactStore: Type: S3 Location: !Ref PipelineBucket @@ -251,6 +289,22 @@ Resources: - Effect: Allow Action: ["s3:*"] Resource: !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + - Effect: Allow + Action: ["s3:*"] + Resource: !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + - Effect: Allow + Action: + - dynamodb:GetItem + - dynamodb:DeleteItem + Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table-${AppName}-SentimentTable-*" + - Effect: Allow + Action: + - s3:PutObject + - s3:GetObect + - s3:DeleteObject + Resource: + - !Sub "arn:aws:s3:::*-*-inputbucket" + - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*" - Effect: Allow Action: - kms:GenerateDataKey* diff --git a/tests.sh b/tests.sh new file mode 100644 index 0000000..5975d31 --- /dev/null +++ b/tests.sh @@ -0,0 +1,42 @@ +#!/bin/bash + + +## Get Stack Resources + +BUCKET_IN=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id 'InputBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) +BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id 'ConversionTargetBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) +DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id 'SentimentTable' --query "StackResourceDetail.PhysicalResourceId" --output text) + +echo "Input Bucket: $BUCKET_IN" +echo "Ouput Bucket: $BUCKET_OUT" +echo "Dynamo Table: $BUCKET_IN" + +## Get Samples + +TEST_FILES=(~/tests/*.md) + +## Upload test samples + +for f in "${arr[@]}"; do + echo "Test file found: $f" +done + + + +# echo "Clearing out resources of lambda-file-refarch stack..." +# echo +# echo "Cleaning up S3 buckets..." && for bucket in InputBucket ConversionTargetBucket; do +# echo "Clearing out ${bucket}..." +# BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) +# aws s3 rm s3://${BUCKET} --recursive +# echo +# done + +# echo "Deleting CloudFormation stack..." && aws cloudformation delete-stack \ +# --stack-name lambda-file-refarch + +# echo "Clearing out CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix '/aws/lambda/lambda-file-refarch-' --query "logGroups[*].logGroupName" --output text); do +# echo "Removing log group ${log_group}..." +# aws logs delete-log-group --log-group-name ${log_group} +# echo +# done diff --git a/sample-1.md b/tests/sample-01.md similarity index 100% rename from sample-1.md rename to tests/sample-01.md diff --git a/sample-2.md b/tests/sample-02.md similarity index 100% rename from sample-2.md rename to tests/sample-02.md diff --git a/tests/sample-03.md b/tests/sample-03.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-03.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-04.md b/tests/sample-04.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-04.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-05.md b/tests/sample-05.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-05.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-06.md b/tests/sample-06.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-06.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-07.md b/tests/sample-07.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-07.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-08.md b/tests/sample-08.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-08.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-09.md b/tests/sample-09.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-09.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-10.md b/tests/sample-10.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-10.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-11.md b/tests/sample-11.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-11.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-12.md b/tests/sample-12.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-12.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-13.md b/tests/sample-13.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-13.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-14.md b/tests/sample-14.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-14.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-15.md b/tests/sample-15.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-15.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-16.md b/tests/sample-16.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-16.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-17.md b/tests/sample-17.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-17.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-18.md b/tests/sample-18.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-18.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-19.md b/tests/sample-19.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-19.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-20.md b/tests/sample-20.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-20.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-21.md b/tests/sample-21.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-21.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-22.md b/tests/sample-22.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-22.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-23.md b/tests/sample-23.md new file mode 100644 index 0000000..aea9cb6 --- /dev/null +++ b/tests/sample-23.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with hated the new thing. They used words like 'terrible', 'awful', and 'boring' to describe the new thing. + +## Interview 2 + +The person I spoke with was really not impressed. They used words like 'confusing', 'complex', and 'terrible' to describe the new thing. + +# Summary + +In short, the two people interviewed were not very happy with the new thing. \ No newline at end of file diff --git a/tests/sample-24.md b/tests/sample-24.md new file mode 100644 index 0000000..740534b --- /dev/null +++ b/tests/sample-24.md @@ -0,0 +1,15 @@ +# Introduction + +This is a report that captures important information regarding an interview. + +## Interview 1 + +The person I spoke with was elated. They used words like 'fantastic', 'impressive', and 'ground breaking' to describe the new thing. + +## Interview 2 + +The person I spoke with was really pleased. They used words like 'wow', 'great', and 'cool' to describe the new thing. + +# Summary + +In short, the two people interviewed were very happy with the new thing. \ No newline at end of file From 29e728e140e6c163b9b7578def8595a8e42b3e78 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 15 May 2020 15:25:51 +0100 Subject: [PATCH 095/115] added pycharm --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5cbe22e..a0bbe76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ packaged-template.yml .aws-sam +.idea __pycache__ \ No newline at end of file From a97d1e63ba23aed34bbcf92bc66adfea8d0e1b5d Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 18 May 2020 14:51:50 +0100 Subject: [PATCH 096/115] Added permissions and test failure code. --- buildspec-test.yml | 4 ++++ buildspec.yml | 2 ++ pipeline/pipeline.yaml | 11 +++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/buildspec-test.yml b/buildspec-test.yml index f8d0464..8c21fcd 100644 --- a/buildspec-test.yml +++ b/buildspec-test.yml @@ -10,3 +10,7 @@ phases: commands: - chmod +x tests.sh - ./tests.sh $OUTPUT_STACK_NAME + post_build: + commands: + - bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi" + - echo Test stage successfully completed on `date` diff --git a/buildspec.yml b/buildspec.yml index a89995b..208e225 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -12,6 +12,8 @@ phases: post_build: commands: - sam package --output-template-file $SAM_OUTPUT_TEMPLATE --s3-bucket $ARTIFACT_BUCKET + - bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi" + - echo Build stage successfully completed on `date` artifacts: files: - $SAM_OUTPUT_TEMPLATE diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index bd1ad8f..e870ef0 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -285,13 +285,18 @@ Resources: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents - Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" + Resource: + - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-build*" + - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/${AppName}-test*" - Effect: Allow Action: ["s3:*"] Resource: !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" - Effect: Allow Action: ["s3:*"] Resource: !Sub "arn:aws:s3:::pipeline-${AWS::AccountId}-${AWS::Region}-${AppName}/*" + - Effect: Allow + Action: ["cloudformation:DescribeStackResource"] + Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AppName}/*" - Effect: Allow Action: - dynamodb:GetItem @@ -447,7 +452,9 @@ Resources: - Action: - codebuild:StartBuild - codebuild:BatchGetBuilds - Resource: !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-build" + Resource: + - !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-build" + - !Sub "arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/${AppName}-test" Effect: Allow - Action: - cloudformation:* From eeec833f1ce9fa1cc696438422db6376a36c16ad Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 18 May 2020 15:28:57 +0100 Subject: [PATCH 097/115] updated test script --- tests.sh | 171 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 149 insertions(+), 22 deletions(-) diff --git a/tests.sh b/tests.sh index 5975d31..ef44c9b 100644 --- a/tests.sh +++ b/tests.sh @@ -1,42 +1,169 @@ #!/bin/bash +set -e + +if [ -z $1 ]; then + echo "Stack name not passed, exiting" + exit 1 +fi + +STACK=$1 +echo "$STACK" + + +function clean { + + ## Cleanup DB + + + for f in "${TEST_FILES[@]}"; do + + FILE_NAME=$(cut -d "/" -f2- <<< "$f") + + echo "Removing item from DB : $FILE_NAME" + + aws dynamodb delete-item --table-name $DYNAMO_TABLE \ + --key "{\"id\": {\"S\": \"s3://$BUCKET_IN/$FILE_NAME\"}}" + + + if [ $? -ne 0 ]; then + echo -e "Remove item failed" ; exit 1 + fi + + done + + ## Cleanup Output + + + for f in "${TEST_FILES[@]}"; do + + FILE_NAME=$(cut -d "/" -f2- <<< "$f") + + echo "Removing from output : ${FILE_NAME/md/html}" + + aws s3 rm s3://"$BUCKET_OUT"/"${FILE_NAME/md/html}" + + if [[ $? -ne 0 ]]; then + echo -e "File not processed" ; exit 1 + fi + + done + + ## Cleanup Input + + + for f in "${TEST_FILES[@]}"; do + + FILE_NAME=$(cut -d "/" -f2- <<< "$f") + + echo "Removing from input: $FILE_NAME" + + aws s3 rm s3://"$BUCKET_IN"/"$FILE_NAME" + + if [[ $? -ne 0 ]]; then + echo -e "File not processed" ; exit 1 + fi + + + done + + +} + ## Get Stack Resources -BUCKET_IN=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id 'InputBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) -BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id 'ConversionTargetBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) -DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id 'SentimentTable' --query "StackResourceDetail.PhysicalResourceId" --output text) +BUCKET_IN=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'InputBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) +BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'ConversionTargetBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) +DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'SentimentTable' --query "StackResourceDetail.PhysicalResourceId" --output text) echo "Input Bucket: $BUCKET_IN" echo "Ouput Bucket: $BUCKET_OUT" -echo "Dynamo Table: $BUCKET_IN" +echo "Dynamo Table: $DYNAMO_TABLE" ## Get Samples -TEST_FILES=(~/tests/*.md) +TEST_FILES=(tests/sample-*.md) ## Upload test samples -for f in "${arr[@]}"; do - echo "Test file found: $f" +for f in "${TEST_FILES[@]}"; do + + FILE_NAME=$(cut -d "/" -f2- <<< "$f") + + echo "Upload sample : $FILE_NAME" + + aws s3 cp $f s3://"$BUCKET_IN"/"$FILE_NAME" + + if [ $? -ne 0 ]; then + echo -e "Upload Failed" ; exit 1 + fi + +done + + +# Give Lambda a chance to execute or wait for last file to get to output. + +END=$((SECONDS+30)) + +echo "Wating for execution" + +while [ $SECONDS -lt $END ] + +do + + FILE_NAME=$(cut -d "/" -f2- <<< ${TEST_FILES[-1]}) + + EXISTS=$(aws s3api head-object --bucket $BUCKET_OUT --key ${FILE_NAME/md/html}) || NOT_EXIST=true + + if [[ $EXISTS ]]; then + echo "File exists, continuing" + break + fi + + echo "File doesn't exist yet... Waiting for timeout." + sleep 1 + +done + + +# Check for files in output bucket + +for f in "${TEST_FILES[@]}"; do + + FILE_NAME=$(cut -d "/" -f2- <<< "$f") + + echo "Checking for Output : ${FILE_NAME/md/html}" + + EXISTS=(aws s3api head-object --bucket $BUCKET_OUT --key ${FILE_NAME/md/html}) || $NOT_EXIST=true + + if [[ -z $EXISTS ]]; then + echo -e "File ${FILE_NAME/md/html} not processed" ; exit 1 + fi + + echo "${FILE_NAME/md/html} found" + done +# Check DynamoDB for Sentiment + +for f in "${TEST_FILES[@]}"; do + FILE_NAME=$(cut -d "/" -f2- <<< "$f") -# echo "Clearing out resources of lambda-file-refarch stack..." -# echo -# echo "Cleaning up S3 buckets..." && for bucket in InputBucket ConversionTargetBucket; do -# echo "Clearing out ${bucket}..." -# BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id ${bucket} --query "StackResourceDetail.PhysicalResourceId" --output text) -# aws s3 rm s3://${BUCKET} --recursive -# echo -# done + echo "Checking for Sentiment : $FILE_NAME" -# echo "Deleting CloudFormation stack..." && aws cloudformation delete-stack \ -# --stack-name lambda-file-refarch + SENTIMENT=$(aws dynamodb get-item --table-name $DYNAMO_TABLE \ + --projection-expression "overall_sentiment" \ + --key "{\"id\": {\"S\": \"s3://$BUCKET_IN/$FILE_NAME\"}}") + + if [[ -z $SENTIMENT ]]; then + echo -e "No Sentiment" ; exit 1 + fi + + echo $SENTIMENT + +done -# echo "Clearing out CloudWatch Log Groups..." && for log_group in $(aws logs describe-log-groups --log-group-name-prefix '/aws/lambda/lambda-file-refarch-' --query "logGroups[*].logGroupName" --output text); do -# echo "Removing log group ${log_group}..." -# aws logs delete-log-group --log-group-name ${log_group} -# echo -# done +# Call Clean Up +clean From fed0588993bf2d2d54df9f9aec92161b1777e164 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 18 May 2020 16:50:13 +0100 Subject: [PATCH 098/115] updated test script --- ...refarch-fileprocessing-simple-pipeline.png | Bin 95074 -> 112074 bytes pipeline/README.md | 8 +++++++- pipeline/pipeline.yaml | 8 ++++---- tests.sh | 17 ++++++++++++++--- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/img/lambda-refarch-fileprocessing-simple-pipeline.png b/img/lambda-refarch-fileprocessing-simple-pipeline.png index 1237df86113430dd29a8f1691bd16bf26c647ada..38b1b76cfe53828cf9fee28909c848b7f77e6785 100644 GIT binary patch literal 112074 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%0Ai}OR4R;#xCpV(`5c{I{H8V_iG}cxe#swRK*g2 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 literal 95074 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 diff --git a/pipeline/README.md b/pipeline/README.md index 9b9f3a6..35ad006 100644 --- a/pipeline/README.md +++ b/pipeline/README.md @@ -23,7 +23,7 @@ pipeline.yml is a CloudFormation template that will deploy all the required pipe * Pipeline S3 bucket, used to store pipeline artefacts that are passed between stages. * CodePipeline -* CodeBuild Project +* CodeBuild Build and Test Projects * Roles for CodePipeline, CodeBuild and the CloudFormation Deployment * SNS Topic for Pipeline notifications * CloudWatch Event for Pipeline Failures @@ -59,6 +59,12 @@ To deploy our application stack we are not using SAM Deploy, CodePipeline doesn' You will need to approve the deployment before the pipeline execution actually deploys any resources. Once approved, additional resources will be deployed as per the main architecture documentation. +### Test + +The test stage will execute a bash script to perform an end to end test of the application. It uploads 24 sample files from the tests directory and checks for outputs and sentiment DB entries. + +If it cannot locate either the output files or DB entries the pipeline will fail. Once the tests successfully complete the script removes the test resources. + ## Getting started diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index e870ef0..d68709d 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -301,15 +301,15 @@ Resources: Action: - dynamodb:GetItem - dynamodb:DeleteItem - Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table-${AppName}-SentimentTable-*" + Resource: !Sub "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${AppName}-SentimentTable-*" - Effect: Allow Action: - s3:PutObject - - s3:GetObect + - s3:GetObject - s3:DeleteObject Resource: - - !Sub "arn:aws:s3:::*-*-inputbucket" - - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*" + - !Sub "arn:aws:s3:::${AppName}-${AWS::AccountId}-inputbucket/*" + - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*/*" - Effect: Allow Action: - kms:GenerateDataKey* diff --git a/tests.sh b/tests.sh index ef44c9b..32a9b14 100644 --- a/tests.sh +++ b/tests.sh @@ -73,9 +73,20 @@ function clean { ## Get Stack Resources -BUCKET_IN=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'InputBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) -BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'ConversionTargetBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) -DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'SentimentTable' --query "StackResourceDetail.PhysicalResourceId" --output text) +BUCKET_IN=$(aws cloudformation describe-stack-resource \ +--stack-name "$STACK" --logical-resource-id 'InputBucket' \ +--query "StackResourceDetail.PhysicalResourceId" \ +--output text) || echo -e "Couldn't get stack details" ; exit 1 + +BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name "$STACK" \ +--logical-resource-id 'ConversionTargetBucket' \ +--query "StackResourceDetail.PhysicalResourceId" \ +--output text) || echo -e "Couldn't get stack details" ; exit 1 + +DYNAMO_TABLE=$(aws cloudformation describe-stack-resource \ +--stack-name "$STACK" --logical-resource-id 'SentimentTable' \ +--query "StackResourceDetail.PhysicalResourceId" \ +--output text) || echo -e "Couldn't get stack details" ; exit 1 echo "Input Bucket: $BUCKET_IN" echo "Ouput Bucket: $BUCKET_OUT" From 9d95ad234185974106029aec52ce4ca27e664b63 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 27 May 2020 11:37:45 +0100 Subject: [PATCH 099/115] Improved formatting to make it more readable --- WELL-ARCHITECTED.md | 122 ++++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 56 deletions(-) diff --git a/WELL-ARCHITECTED.md b/WELL-ARCHITECTED.md index 71d2228..d390126 100644 --- a/WELL-ARCHITECTED.md +++ b/WELL-ARCHITECTED.md @@ -3,29 +3,27 @@ #### OPS 1. How do you evaluate your Serverless application’s health? * [ ] Question does not apply to this workload -
* [x] **[Required]** Understand, analyze and alert on metrics provided out of the box * [x] **[Best]** Use application, business, and operations metrics * [x] **[Good]** Use distributed tracing and code is instrumented with additional context -* [ ] **[Good]** Use structured and centralized logging -
- +* [ ] **[Good]** Use structured and centralized logging * [ ] None of these - + ##### Notes -The example uses structured logging output to Cloudwatch. For our example we only deploy to a single account so we don't require the use of cross account centralised logging. - -We have alarms configured with notifications should processing fail. +>* The example uses structured logging output to Cloudwatch. For our example we only deploy to a single account so we don't require the use of cross account centralised logging. +> +>* We have alarms configured with notifications should processing fail. +> +>* We do not have a defined KPI within the application. We could however use a metric such as number of records processed within a given time frame and alert if this is outside of the defined thresholds. -We do not have a defined KPI within the application. We could however use a metric such as number of records processed within a given time frame and alert if this is outside of the defined thresholds. +--- #### OPS 2. How do you approach application lifecycle management? * [ ] Question does not apply to this workload -
* [x] **[Required]** Use infrastructure as code and stages isolated in separate environments * [x] **[Good]** Prototype new features using temporary environments @@ -33,168 +31,180 @@ We do not have a defined KPI within the application. We could however use a metr * [ ] **[Good]** Use configuration management * [ ] **[Good]** Review the function runtime deprecation policy * [ ] **[Best]** Use CI/CD including automated testing across separate accounts -
* [ ] None of these ##### Notes -Our example utilizes infrastructure as code and includes a simple pipeline that will build and deploy within an individual account and to an individual environment. However the nature of this example means it can be deployed many times it's possible. You can for example deploy a staging pipeline that would watch a development branch and deploy and changes to the Staging application stack. You could also deploy a production pipeline stack that watches the master branch and merges here will trigger a production release. +>* Our example utilizes infrastructure as code and includes a simple pipeline that will build and deploy within an individual account and to an individual environment. However the nature of this example means it can be deployed many times it's possible. You can for example deploy a staging pipeline that would watch a development branch and deploy and changes to the Staging application stack. You could also deploy a production pipeline stack that watches the master branch and merges here will trigger a production release. +> +>* For this example a rollout mechanism would involve adopting either a Blue / Green deployment strategy with you controlling which input bucket a particular user hits . Alternatively for application business logic only changes these could be tested by having a notification invoke an alternate version of a lambda under specific conditions. -For this example a rollout mechanism would involve adopting either a Blue / Green deployment strategy with you controlling which input bucket a particular user hits . Alternatively for application business logic only changes these could be tested by having a notification invoke an alternate version of a lambda under specific conditions. +--- -### Security +## Security #### SEC 1: How do you control access to your Serverless API? * [x] Question does not apply to this workload -
+ * [ ] **[Required]** Use appropriate endpoint type and mechanisms to secure access to your API * [ ] **[Good]** Use authentication and authorization mechanisms * [ ] **[Best]** Scope access based on identity’s metadata -
+ * [ ] None of these ##### Notes -This solution doesn't include an API frontend so the question doesn't apply. +>This solution doesn't include an API frontend so the question doesn't apply. + +--- #### SEC 2: How do you manage your Serverless application’s security boundaries? * [ ] Question does not apply to this workload -
+ * [x] **[Required]** Evaluate and define resource policies * [x] **[Good]** Control network traffic at all layers * [x] **[Best]** Smaller functions require fewer permissions * [x] **[Required]** Use temporary credentials between resources and components -
* [ ] None of these ##### Notes -We use IAM policy to ensure that resources can only be called by other resources that should be calling them. - -The pipeline will assume a role with only the permissions it requires to deploy the application. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. - -This application does not use private networking. +> * We use IAM policy to ensure that resources can only be called by other resources that should be calling them. +> +> * The pipeline will assume a role with only the permissions it requires to deploy the application. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. +> +> * This application does not use private networking. +> +> * We have individual functions for each different piece of business logic. -We have individual functions for each different piece of business logic. +--- #### SEC 3: How do you implement Application Security in your workload?*** * [ ] Question does not apply to this workload -
+ * [x] **[Required]** Review security awareness documents frequently * [x] **[Required]** Store secrets that are used in your code securely * [ ] **[Good]** Implement runtime protection to help prevent against malicious code execution * [ ] **[Best]** Automatically review workload’s code dependencies/libraries * [x] **[Best]** Validate inbound events -
+ * [ ] None of these ##### Notes -This application doesn't have any stored secrets. The GitHub token is required by CodePipeline, this is passed as a string for CloudFormation, it is not however visible within the CloudFormation console. This could be improved by manually creating a secrets manager entry for the token and replacing the CloudFormation parameter for the token with the secrets manager value by utilising Dynamic References. -https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html +> * This application doesn't have any stored secrets. The GitHub token is required by CodePipeline, this is passed as a string for CloudFormation, it is not however visible within the CloudFormation console. This could be improved by manually creating a secrets manager entry for the token and replacing the CloudFormation parameter for the token with the secrets manager value by utilising Dynamic References. +>https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html +> +> * For reviewing dependencies and libraries we could integrate an automatic check into the pipeline. There are many tools and providers which can check code. Currently this is manual using PEP8 and Bandit manual checks. +> +> * We only check for particular events and check to make sure the object is valid. -For reviewing dependencies and libraries we could integrate an automatic check into the pipeline. There are many tools and providers which can check code. Currently this is manual using PEP8 and Bandit manual checks. +--- -We only check for particular events and check to make sure the object is valid. - - -### Reliability +## Reliability #### REL 1. How do you regulate inbound request rates? * [ ] Question does not apply to this workload -
+ * [x] **[Required]** Use throttling to control inbound request rates * [ ] **[Good]** Use, analyze and enforce API quotas * [X] **[Best]** Use mechanisms to protect non-scalable resources -
+ * [ ] None of these ##### Notes -We are using SQS queues in front of our Lambda functions, this helps us throttle the rate at which our application processes requests. - -We don't have API's to set quotas for. +> * We are using SQS queues in front of our Lambda functions, this helps us throttle the rate at which our application processes requests. +> +> * We don't have API's to set quotas for. +> +> * Our downstream resources are S3 and DynamoDB on-demand which are more than capable of scaling to match our volumes. -Our downstream resources are S3 and DynamoDB on-demand which are more than capable of scaling to match our volumes. +--- #### REL 2. How do you build resiliency into your Serverless application? * [ ] Question does not apply to this workload -
+ * [x] **[Required]** Manage transaction, partial, and intermittent failures * [ ] **[Required]** Manage duplicate and unwanted events * [ ] **[Good]** Orchestrate long-running transactions * [x] **[Best]** Consider scaling patterns at burst rates -
+ * [ ] None of these -We use SQS queues and DLQ's to ensure any processing failure results in a notification. +##### Notes -Our example does not deal with duplicate events or files. Any duplicate will overwrite the previous, this could be improved inserting another layer of business logic that first checks the inbound file and renames with a UUID, it could additionally check to see if the file hash has already been processed. +> * We use SQS queues and DLQ's to ensure any processing failure results in a notification. +> +> * Our example does not deal with duplicate events or files. Any duplicate will overwrite the previous, this could be improved inserting another layer of business logic that first checks the inbound file and renames with a UUID, it could additionally check to see if the file hash has already been processed. +> +> * The processing time of our transactions is fast and we can handle multiple files in a single invocation. Under heavy load of inbound files the SQS queue handles the work being distributed to lambda up to 1000 concurrent batches. -The processing time of our transactions is fast and we can handle multiple files in a single invocation. Under heavy load of inbound files the SQS queue handles the work being distributed to lambda up to 1000 concurrent batches. +--- -##### Notes +## Performance Efficiency #### PERF 1. How do you optimize your Serverless application’s performance? * [ ] Question does not apply to this workload -
+ * [x] **[Required]** Measure, evaluate, and select optimum capacity units * [x] **[Good]** Measure and optimize function startup time * [ ] **[Good]** Take advantage of concurrency via async and stream-based function invocations * [x] **[Good]** Optimize access patterns and apply caching where applicable * [x] **[Best]** Integrate with managed services directly over functions when possible -
* [ ] None of these ##### Notes -We have looked at how our function performs with different batch sizes and memory configurations to find what we believe is optimal for cost/performance . - -For our example there is no real advantage to async. If concurrency was an issue it would be possible to chain the business logic, rather than perform it in parallel. +> * We have looked at how our function performs with different batch sizes and memory configurations to find what we believe is optimal for cost/performance . +> +> * For our example there is no real advantage to async. If concurrency was an issue it would be possible to chain the business logic, rather than perform it in parallel. +> +> * Data is pulled from S3 and held locally and cached for the execution, however currently there is only a single task performed per invocation so there is no benefit. Caching outside of the function would offer no benefit over S3. +> +> * In our Sentiment function we are utilising comprehend which a managed service. -Data is pulled from S3 and held locally and cached for the execution, however currently there is only a single task performed per invocation so there is no benefit. Caching outside of the function would offer no benefit over S3. +--- -In our Sentiment function we are utilising comprehend which a managed service. +## Cost Optimization #### COST 1. How do you optimize your Serverless application’s costs? * [ ] Question does not apply to this workload -
* [x] **[Required]** Minimize external calls and function code initialization * [x] **[Required]** Optimize logging output and its retention * [x] **[Good]** Optimize function configuration to reduce cost * [x] **[Best]** Use cost-aware usage patterns in code -
* [ ] None of these ##### Notes -We have configurable logging levels and bench marked our function for optimal cost/performance. +>We have configurable logging levels and bench marked our function for optimal cost/performance. From b92623a0004c9276f18717bbba7811ee896190ac Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 1 Jul 2020 17:13:37 +0100 Subject: [PATCH 100/115] Added code notes for extension replacement and updated README.md to reflect new sample test files. --- .gitignore | 1 + README.md | 6 +++--- tests.sh | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index a0bbe76..bbd3428 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ packaged-template.yml .aws-sam .idea +.history __pycache__ \ No newline at end of file diff --git a/README.md b/README.md index bae4777..f310c7f 100644 --- a/README.md +++ b/README.md @@ -91,14 +91,14 @@ You will receive an email asking you to confirm subscription to the `lambda-file ## Testing the Example -After you have created the stack using the CloudFormation template, you can test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use the sample-1.md and sample-2.md files in the repository as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. +After you have created the stack using the CloudFormation template, you can manually test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use the any of the sample-xx.md files in the repository /tests directory as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. ```bash INPUT_BUCKET=$(aws cloudformation describe-stack-resource --stack-name lambda-file-refarch --logical-resource-id InputBucket --query "StackResourceDetail.PhysicalResourceId" --output text) -aws s3 cp ./sample-1.md s3://${INPUT_BUCKET}/sample-1.md -aws s3 cp ./sample-2.md s3://${INPUT_BUCKET}/sample-2.md +aws s3 cp ./tests/sample-01.md s3://${INPUT_BUCKET}/sample-01.md +aws s3 cp ./tests/sample-02.md s3://${INPUT_BUCKET}/sample-02.md ``` Once the input files has been uploaded to the input bucket, a series of events are put into motion. diff --git a/tests.sh b/tests.sh index 32a9b14..30bac90 100644 --- a/tests.sh +++ b/tests.sh @@ -37,6 +37,8 @@ function clean { for f in "${TEST_FILES[@]}"; do + ## We know our output files will have a html extention so we need to substitute md for html when working with the output. + FILE_NAME=$(cut -d "/" -f2- <<< "$f") echo "Removing from output : ${FILE_NAME/md/html}" From 4ec1b6b3153b579f4fff574ea10e4e6ba11d9ab3 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Wed, 1 Jul 2020 17:26:57 +0100 Subject: [PATCH 101/115] Added notes for event duplication and rephrased SEC2 for application as a whole rather than pipeline. --- WELL-ARCHITECTED.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/WELL-ARCHITECTED.md b/WELL-ARCHITECTED.md index d390126..02c88f1 100644 --- a/WELL-ARCHITECTED.md +++ b/WELL-ARCHITECTED.md @@ -81,7 +81,7 @@ > * We use IAM policy to ensure that resources can only be called by other resources that should be calling them. > -> * The pipeline will assume a role with only the permissions it requires to deploy the application. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. +> * All application components will assume a role with only the permissions it requires in order to perform it's function. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. > > * This application does not use private networking. > @@ -146,7 +146,7 @@ * [x] **[Required]** Manage transaction, partial, and intermittent failures -* [ ] **[Required]** Manage duplicate and unwanted events +* [x] **[Required]** Manage duplicate and unwanted events * [ ] **[Good]** Orchestrate long-running transactions * [x] **[Best]** Consider scaling patterns at burst rates @@ -157,7 +157,9 @@ > * We use SQS queues and DLQ's to ensure any processing failure results in a notification. > -> * Our example does not deal with duplicate events or files. Any duplicate will overwrite the previous, this could be improved inserting another layer of business logic that first checks the inbound file and renames with a UUID, it could additionally check to see if the file hash has already been processed. +> * The Dynamo key and converted S3 object for each analysis is tied to the input object being analyzed. Pushing the same document will result in the same artifact. +> +> * Our example does not deal with duplicate files. Any duplicate will overwrite the previous, this could be improved inserting another layer of business logic that first checks the inbound file and renames with a UUID, it could additionally check to see if the file hash has already been processed. > > * The processing time of our transactions is fast and we can handle multiple files in a single invocation. Under heavy load of inbound files the SQS queue handles the work being distributed to lambda up to 1000 concurrent batches. From f640e11838fc44c5ecf079de8e71bb7507326343 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 2 Jul 2020 12:20:23 +0100 Subject: [PATCH 102/115] Corrected a sentence which made no sense, and the spelling error. --- WELL-ARCHITECTED.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WELL-ARCHITECTED.md b/WELL-ARCHITECTED.md index 02c88f1..94b6035 100644 --- a/WELL-ARCHITECTED.md +++ b/WELL-ARCHITECTED.md @@ -37,7 +37,7 @@ ##### Notes ->* Our example utilizes infrastructure as code and includes a simple pipeline that will build and deploy within an individual account and to an individual environment. However the nature of this example means it can be deployed many times it's possible. You can for example deploy a staging pipeline that would watch a development branch and deploy and changes to the Staging application stack. You could also deploy a production pipeline stack that watches the master branch and merges here will trigger a production release. +>* Our example utilizes infrastructure as code and includes a simple pipeline that will build and deploy within an individual account and to an individual environment. However the nature of this example means it can be deployed multiple times with different configurations. You can for example deploy a staging pipeline that would watch a development branch and deploy and changes to the Staging application stack. You could also deploy a production pipeline stack that watches the master branch and merges here will trigger a production release. > >* For this example a rollout mechanism would involve adopting either a Blue / Green deployment strategy with you controlling which input bucket a particular user hits . Alternatively for application business logic only changes these could be tested by having a notification invoke an alternate version of a lambda under specific conditions. @@ -81,7 +81,7 @@ > * We use IAM policy to ensure that resources can only be called by other resources that should be calling them. > -> * All application components will assume a role with only the permissions it requires in order to perform it's function. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. +> * All application components will assume a role with only the permissions it requires in order to perform its function. This will either be only being able to perform a specific action on multiple resources or any action on a particular resource. > > * This application does not use private networking. > From b109c8dd039e32f4194463352fba0fa4c20faf96 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 2 Jul 2020 20:39:03 +0100 Subject: [PATCH 103/115] Update pollicy for input bucket name change --- pipeline/pipeline.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index d68709d..b746b4c 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -308,7 +308,7 @@ Resources: - s3:GetObject - s3:DeleteObject Resource: - - !Sub "arn:aws:s3:::${AppName}-${AWS::AccountId}-inputbucket/*" + - !Sub "arn:aws:s3:::${AppName}-${AWS::AccountId}-input-bucket/*" - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*/*" - Effect: Allow Action: @@ -346,7 +346,7 @@ Resources: - s3:DeleteBucketPolicy - s3:PutBucketPolicy Resource: - - !Sub "arn:aws:s3:::*-*-inputbucket" + - !Sub "arn:aws:s3:::*-*-input-bucket" - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*" Effect: Allow From 19f38bd29e623056dc2cde3eda4ce9dd08a9e967 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 2 Jul 2020 21:02:29 +0100 Subject: [PATCH 104/115] Update pollicy for input bucket name change --- pipeline/pipeline.yaml | 4 ++-- template.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pipeline/pipeline.yaml b/pipeline/pipeline.yaml index b746b4c..d68709d 100644 --- a/pipeline/pipeline.yaml +++ b/pipeline/pipeline.yaml @@ -308,7 +308,7 @@ Resources: - s3:GetObject - s3:DeleteObject Resource: - - !Sub "arn:aws:s3:::${AppName}-${AWS::AccountId}-input-bucket/*" + - !Sub "arn:aws:s3:::${AppName}-${AWS::AccountId}-inputbucket/*" - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*/*" - Effect: Allow Action: @@ -346,7 +346,7 @@ Resources: - s3:DeleteBucketPolicy - s3:PutBucketPolicy Resource: - - !Sub "arn:aws:s3:::*-*-input-bucket" + - !Sub "arn:aws:s3:::*-*-inputbucket" - !Sub "arn:aws:s3:::${AppName}-conversiontargetbucket-*" Effect: Allow diff --git a/template.yml b/template.yml index 2a8dc31..fc6acd0 100644 --- a/template.yml +++ b/template.yml @@ -26,7 +26,7 @@ Resources: InputBucket: Type: AWS::S3::Bucket Properties: - BucketName: !Sub ${AWS::StackName}-${AWS::AccountId}-input-bucket + BucketName: !Sub ${AWS::StackName}-${AWS::AccountId}-inputbucket NotificationTopic: Type: AWS::SNS::Topic From c73072b1f091fdcc5b15aa7bd4b305d11994ca08 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Thu, 2 Jul 2020 21:36:26 +0100 Subject: [PATCH 105/115] Update topic policy due to S3 change --- template.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template.yml b/template.yml index fc6acd0..2d23789 100644 --- a/template.yml +++ b/template.yml @@ -46,7 +46,7 @@ Resources: StringEquals: aws:SourceAccount: !Sub ${AWS::AccountId} ArnEquals: - aws:SourceArn: !Sub "arn:aws:s3:::${AWS::StackName}-${AWS::AccountId}-input-bucket" + aws:SourceArn: !Sub "arn:aws:s3:::${AWS::StackName}-${AWS::AccountId}-inputbucket" Topics: - !Ref NotificationTopic From 4e14faf876d9ce8d7d378e5e9c9d396178e58f11 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 3 Jul 2020 09:47:47 +0100 Subject: [PATCH 106/115] Reverted script to previous version. --- tests.sh | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/tests.sh b/tests.sh index 30bac90..05557a4 100644 --- a/tests.sh +++ b/tests.sh @@ -37,8 +37,6 @@ function clean { for f in "${TEST_FILES[@]}"; do - ## We know our output files will have a html extention so we need to substitute md for html when working with the output. - FILE_NAME=$(cut -d "/" -f2- <<< "$f") echo "Removing from output : ${FILE_NAME/md/html}" @@ -75,20 +73,9 @@ function clean { ## Get Stack Resources -BUCKET_IN=$(aws cloudformation describe-stack-resource \ ---stack-name "$STACK" --logical-resource-id 'InputBucket' \ ---query "StackResourceDetail.PhysicalResourceId" \ ---output text) || echo -e "Couldn't get stack details" ; exit 1 - -BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name "$STACK" \ ---logical-resource-id 'ConversionTargetBucket' \ ---query "StackResourceDetail.PhysicalResourceId" \ ---output text) || echo -e "Couldn't get stack details" ; exit 1 - -DYNAMO_TABLE=$(aws cloudformation describe-stack-resource \ ---stack-name "$STACK" --logical-resource-id 'SentimentTable' \ ---query "StackResourceDetail.PhysicalResourceId" \ ---output text) || echo -e "Couldn't get stack details" ; exit 1 +BUCKET_IN=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'InputBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) +BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'ConversionTargetBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) +DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'SentimentTable' --query "StackResourceDetail.PhysicalResourceId" --output text) echo "Input Bucket: $BUCKET_IN" echo "Ouput Bucket: $BUCKET_OUT" @@ -144,6 +131,8 @@ done for f in "${TEST_FILES[@]}"; do + # We know our output files will have a html extention so we need to substitute md for html when working with the output. + FILE_NAME=$(cut -d "/" -f2- <<< "$f") echo "Checking for Output : ${FILE_NAME/md/html}" From 34b678f5b44f2a60ed8dab62a8f232e0a81b30d9 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 3 Jul 2020 10:28:12 +0100 Subject: [PATCH 107/115] Removed error handling as after testing the script exits correctly on these errors with a meaningful message back from the CLI. --- tests.sh | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/tests.sh b/tests.sh index 05557a4..edc55d8 100644 --- a/tests.sh +++ b/tests.sh @@ -73,13 +73,28 @@ function clean { ## Get Stack Resources -BUCKET_IN=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'InputBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) -BUCKET_OUT=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'ConversionTargetBucket' --query "StackResourceDetail.PhysicalResourceId" --output text) -DYNAMO_TABLE=$(aws cloudformation describe-stack-resource --stack-name "$STACK" --logical-resource-id 'SentimentTable' --query "StackResourceDetail.PhysicalResourceId" --output text) +BUCKET_IN=$(aws cloudformation describe-stack-resource \ +--stack-name "$STACK" --logical-resource-id 'InputBucket' \ +--query "StackResourceDetail.PhysicalResourceId" \ +--output text) -echo "Input Bucket: $BUCKET_IN" -echo "Ouput Bucket: $BUCKET_OUT" -echo "Dynamo Table: $DYNAMO_TABLE" + +BUCKET_OUT=$(aws cloudformation describe-stack-resource \ +--stack-name "$STACK" \ +--logical-resource-id 'ConversionTargetBucket' \ +--query "StackResourceDetail.PhysicalResourceId" \ +--output text) + + +DYNAMO_TABLE=$(aws cloudformation describe-stack-resource \ +--stack-name "$STACK" --logical-resource-id 'SentimentTable' \ +--query "StackResourceDetail.PhysicalResourceId" \ +--output text) + + +echo "Found Input Bucket: $BUCKET_IN" +echo "Found Ouput Bucket: $BUCKET_OUT" +echo "Found DynamoDB Table: $DYNAMO_TABLE" ## Get Samples @@ -131,8 +146,6 @@ done for f in "${TEST_FILES[@]}"; do - # We know our output files will have a html extention so we need to substitute md for html when working with the output. - FILE_NAME=$(cut -d "/" -f2- <<< "$f") echo "Checking for Output : ${FILE_NAME/md/html}" From dd89103af15fc385b5fa4109b6c7d10565e97996 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Fri, 3 Jul 2020 11:07:03 +0100 Subject: [PATCH 108/115] Added note around using the test script instead of manually testing and an "Extra credit" test example that demonstrates X-ray integration. --- README.md | 34 +++++++++++++++++- ...farch-fileprocessing-x-ray-error-trace.png | Bin 0 -> 150904 bytes 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 img/lambda-refarch-fileprocessing-x-ray-error-trace.png diff --git a/README.md b/README.md index dc27dc6..036c12a 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,13 @@ You will receive an email asking you to confirm subscription to the `lambda-file ## Testing the Example -After you have created the stack using the CloudFormation template, you can manually test the system by uploading a Markdown file to the InputBucket that was created in the stack. You can use the any of the sample-xx.md files in the repository /tests directory as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. +After you have created the stack using the CloudFormation template, you can manually test the system by uploading a Markdown file to the InputBucket that was created in the stack. +Alternatively you test it by utilising the pipeline tests.sh script, however the test script removes the resources it creates, so if you wish to explore the solution and see the output files +and DynamoDB tables manually uploading is the better option. + +### Manually testing: + + You can use the any of the sample-xx.md files in the repository /tests directory as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. @@ -126,6 +132,32 @@ aws dynamodb scan --table-name ${DYNAMO_TABLE} --query "Items[*]" You can also view the CloudWatch logs generated by the Lambda functions. + +### Using the test script + +The pipeline end to end test script can be manually executed, you will need to ensure you have adequate permissions to perform the test script actions. + +* Describing stack resources +* Uploading and deleting files from the S3 input bucket +* Deleting files from the S3 output bucket +* Reading and deleting entries from the DynamoDB table + +```bash +./tests.sh lambda-file-refarch +``` + +### Extra credit testing + +Try uploading (or adding to ./tests if you are using the script) an oversized (>100MB) or invalid file type to the input bucket. +You can check in X-ray to explore how you can trace these kind of errors within the solution. + +```bash + fallocate -l 110M ./tests/sample-oversize.md +``` + +![X-Ray Error Tracing - Real-time File Processing](img/lambda-refarch-fileprocessing-x-ray-error-trace.png) + + ## Cleaning Up the Example Resources To remove all resources created by this example, run the following command: diff --git a/img/lambda-refarch-fileprocessing-x-ray-error-trace.png b/img/lambda-refarch-fileprocessing-x-ray-error-trace.png new file mode 100644 index 0000000000000000000000000000000000000000..f552c1fd12c6674ac22d3faf3a4e664557f09cd7 GIT binary patch literal 150904 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 Date: Fri, 3 Jul 2020 11:12:49 +0100 Subject: [PATCH 109/115] Added some more notes. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 036c12a..3c50ca4 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,11 @@ The pipeline end to end test script can be manually executed, you will need to e ./tests.sh lambda-file-refarch ``` +Whilst the script is executing you will see all the stages output to the command line. The samples are uploaded, +the script will then wait for files to appear in the output bucket before checking they have all been processed and the +matching html file exists in the output bucket. It will also check that the sentiment for each of the files has been +recorded in the DynamoDB table. Once complete the script will remove all the files created and the entries from the DynamoDB table. + ### Extra credit testing Try uploading (or adding to ./tests if you are using the script) an oversized (>100MB) or invalid file type to the input bucket. From 054425b13927a8d3547e39a9f7f69ebb007820e0 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 6 Jul 2020 14:15:42 +0100 Subject: [PATCH 110/115] Changed file extension conversion code to work with MacOS and corrected spelling. --- tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests.sh b/tests.sh index edc55d8..3fd8c8a 100644 --- a/tests.sh +++ b/tests.sh @@ -121,13 +121,13 @@ done END=$((SECONDS+30)) -echo "Wating for execution" +echo "Waiting for execution" while [ $SECONDS -lt $END ] do - FILE_NAME=$(cut -d "/" -f2- <<< ${TEST_FILES[-1]}) + FILE_NAME=$(cut -d "/" -f2- <<< ${TEST_FILES[*]: -1}}) EXISTS=$(aws s3api head-object --bucket $BUCKET_OUT --key ${FILE_NAME/md/html}) || NOT_EXIST=true From 4b8c00360f8b6f01dedf59a8af2f05a3e0419801 Mon Sep 17 00:00:00 2001 From: jrrudge Date: Mon, 6 Jul 2020 14:29:04 +0100 Subject: [PATCH 111/115] Rogue curly brace removed. --- tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests.sh b/tests.sh index 3fd8c8a..367502b 100644 --- a/tests.sh +++ b/tests.sh @@ -127,7 +127,7 @@ while [ $SECONDS -lt $END ] do - FILE_NAME=$(cut -d "/" -f2- <<< ${TEST_FILES[*]: -1}}) + FILE_NAME=$(cut -d "/" -f2- <<< ${TEST_FILES[*]: -1}) EXISTS=$(aws s3api head-object --bucket $BUCKET_OUT --key ${FILE_NAME/md/html}) || NOT_EXIST=true From 411c7b780670d924ef65b343131664c886d0d147 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Sun, 2 Aug 2020 22:22:21 -0400 Subject: [PATCH 112/115] Feedback update --- .gitignore | 4 +- README.md | 95 +++++++++--------- ...ambda-refarch-fileprocessing-dashboard.png | Bin 0 -> 146502 bytes src/conversion/conversion.py | 84 +++++++--------- src/conversion/requirements.txt | 5 +- src/sentiment/requirements.txt | 5 +- src/sentiment/sentiment.py | 70 ++++++------- template.yml | 13 ++- 8 files changed, 128 insertions(+), 148 deletions(-) create mode 100644 img/lambda-refarch-fileprocessing-dashboard.png diff --git a/.gitignore b/.gitignore index bbd3428..c4597ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -packaged-template.yml +samconfig.toml .aws-sam .idea .history -__pycache__ \ No newline at end of file +__pycache__ diff --git a/README.md b/README.md index 3c50ca4..fe5779e 100644 --- a/README.md +++ b/README.md @@ -16,28 +16,23 @@ In this architecture, individual files are processed as they arrive. To achive t ### Conversion Workflow -We target a SQS queue for this workflow. Sending the JSON event to SQS first rather than directly to Lambda allows for more control of Lambda invocations and better error handling. +Our function will take Markdown files stored in our **InputBucket**, convert them to HTML, and store them in our **OutputBucket**. The **ConversionQueue** SQS queue captures the S3 Event JSON payload, allowing for more control of our **ConversionFunction** and better error handling. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. -The Lambda service polls our queue on our behalf. When messages are available they will be delivered to our function. Lambda can automatically scale with the number of messages on the queue. Refer to [Using AWS Lambda with Amazon SQS](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) for more details. - -If our Conversion Lambda function cannot remove the messages from the Conversion queue, they are sent to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Conversion DLQ. - -Our function business logic uses this information to retrieve the file from S3 using the [Python AWS SDK (boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?id=docs_gateway) and store it in a temporary location within the function execution environment. The path of the file is then passed to a python function which reads the file contents and converts it to HTML using the Python [Markdown Library](https://pypi.org/project/Markdown/). We then generate the filename for the new HTML file and write it to our temporary location. Finally we upload the new HTML file to an output S3 bucket. If our function execution results in an error, we will +If our **ConversionFunction** cannot remove the messages from the **ConversionQueue**, they are sent to **ConversionDlq**, a dead-letter queue (DLQ), for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the **ConversionDlq**. ### Sentiment Analysis Workflow -We are using AWS' AI/ML service [Amazon Comprehend](https://aws.amazon.com/comprehend/) which is a machine learning powered service that makes it easy to find insights and relationships in text. We use the Sentiment Analysis API to understand whether interview responses are positive or negative. +Our function will take Markdown files stored in our **InputBucket**, detect the overall sentiment for each file, and store the result in our **SentimentTable**. -The Sentiment workflow uses the same SQS-to-Lambda Function pattern as the Coversion workflow. Our function downloads the markdown file, extracts the contents, and sends it to the Comprehend Sentiment Analysis API. This returns a Sentiment and a confidence score which describes the level of confidence that Amazon Comprehend has in the accuracy of its detection of sentiments. +We are using [Amazon Comprehend](https://aws.amazon.com/comprehend/) to detect overall interview sentiment. Amazon Comprehend is a machine learning powered service that makes it easy to find insights and relationships in text. We use the Sentiment Analysis API to understand whether interview responses are positive or negative. -Once we have our sentiment we persist the result to our [DynamoDB](https://aws.amazon.com/dynamodb/) table. - -If our Sentiment Lambda function cannot remove the messages from the Sentiment SQS queue, they are sent to a dead-letter queue (DLQ) for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the Sentiment DLQ. +The Sentiment workflow uses the same SQS-to-Lambda Function pattern as the Coversion workflow. +If our **SentimentFunction** cannot remove the messages from the **SentimentQueue**, they are sent to **SentimentDlq**, a dead-letter queue (DLQ), for inspection. A CloudWatch Alarm is configured to send notification to an email address when there are any messages in the **SentimentDlq**. ## Building and Deploying the Application with the AWS Serverless Application Model (AWS SAM) -This application is deployed using the AWS Serverless Application Model (AWS SAM). AWS SAM is an open-source framework that enables you to build serverless applications on AWS. It provides you with a template specification to define your serverless application, and a command line interface (CLI) tool. +This application is deployed using the [AWS Serverless Application Model (AWS SAM)](https://aws.amazon.com/serverless/sam/). AWS SAM is an open-source framework that enables you to build serverless applications on AWS. It provides you with a template specification to define your serverless application, and a command line interface (CLI) tool. ### Pre-requisites @@ -47,66 +42,56 @@ This application is deployed using the AWS Serverless Application Model (AWS SAM * [Docker](https://docs.docker.com/install/) -### Build +### Clone the Repository -The AWS SAM CLI comes with abstractions for a number of Lambda runtimes to build your dependencies, and copies the source code into staging folders so that everything is ready to be packaged and deployed. The *sam build* command builds any dependencies that your application has, and copies your application source code to folders under *.aws-sam/build* to be zipped and uploaded to Lambda. +#### Clone with SSH ```bash -sam build --use-container +git clone git@github.com:mcnamarabrian/lambda-refarch-fileprocessing.git ``` -**Note** - -Be sure to use v0.41.0 of the AWS SAM CLI or newer. Failure to use the proper version of the AWS SAM CLI will result in a `InvalidDocumentException` exception. The `EventInvokeConfig` property is not recognized in earlier versions of the AWS SAM CLI. To confirm your version of AWS SAM, run the command `sam --version`. - -### Package - -Next, run *sam package*. This command takes your Lambda handler source code and any third-party dependencies, zips everything, and uploads the zip file to your Amazon S3 bucket. That bucket and file location are then noted in the packaged-template.yaml file. You use the generated packaged-template.yaml file to deploy the application in the next step. +#### Clone with HTTPS ```bash -sam package \ - --output-template-file packaged-template.yml \ - --s3-bucket bucketname +git clone https://github.com/mcnamarabrian/lambda-refarch-fileprocessing.git ``` -**Note** +### Build -For *bucketname* in this command, you need an Amazon S3 bucket that the sam package command can use to store the deployment package. The deployment package is used when you deploy your application in a later step. If you need to create a bucket for this purpose, run the following command to create an Amazon S3 bucket: +The AWS SAM CLI comes with abstractions for a number of Lambda runtimes to build your dependencies, and copies the source code into staging folders so that everything is ready to be packaged and deployed. The *sam build* command builds any dependencies that your application has, and copies your application source code to folders under *.aws-sam/build* to be zipped and uploaded to Lambda. ```bash -aws s3 mb s3://bucketname --region region # Example regions: us-east-1, ap-east-1, eu-central-1, sa-east-1 +sam build --use-container ``` -### Deploy +**Note** -This command deploys your application to the AWS Cloud. It's important that this command explicitly includes both of the following: +Be sure to use v0.41.0 of the AWS SAM CLI or newer. Failure to use the proper version of the AWS SAM CLI will result in a `InvalidDocumentException` exception. The `EventInvokeConfig` property is not recognized in earlier versions of the AWS SAM CLI. To confirm your version of AWS SAM, run the command `sam --version`. - * The AWS Region to deploy to. This Region must match the Region of the Amazon S3 source bucket. +### Deploy - * The CAPABILITY_IAM parameter, because creating new Lambda functions involves creating new IAM roles. +For the first deployment, please run the following command and save the generated configuration file *samconfig.toml*. Please use **lambda-file-refarch** for the stack name. ```bash -sam deploy \ - --template-file packaged-template.yml \ - --stack-name lambda-file-refarch \ - --region region \ - --tags Project=lambda-refarch-fileprocessing \ - --parameter-overrides AlarmRecipientEmailAddress= \ - --capabilities CAPABILITY_IAM +sam deploy --guided ``` -You will receive an email asking you to confirm subscription to the `lambda-file-refarch-AlarmTopic` SNS topic that will receive alerts should either the `ConversionDlq` SQS queue or `SentimentDlq` SQS queue receive messages. +You will be prompted to enter data for *ConversionLogLevel* and *SentimentLogLevel*. The default value for each is *INFO* but you can also enter *DEBUG*. You will also be prompted for *AlarmRecipientEmailAddress*. +Subsequent deployments can use the simplified `sam deploy`. The command will use the generated configuration file *samconfig.toml*. + +You will receive an email asking you to confirm subscription to the `lambda-file-refarch-AlarmTopic` SNS topic that will receive alerts should either the `ConversionDlq` SQS queue or `SentimentDlq` SQS queue receive messages. ## Testing the Example After you have created the stack using the CloudFormation template, you can manually test the system by uploading a Markdown file to the InputBucket that was created in the stack. + Alternatively you test it by utilising the pipeline tests.sh script, however the test script removes the resources it creates, so if you wish to explore the solution and see the output files and DynamoDB tables manually uploading is the better option. -### Manually testing: +### Manually testing - You can use the any of the sample-xx.md files in the repository /tests directory as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. + You can use the any of the sample-xx.md files in the repository /**tests** directory as example files. After the files have been uploaded, you can see the resulting HTML file in the output bucket of your stack. You can also view the CloudWatch logs for each of the functions in order to see the details of their execution. You can use the following commands to copy a sample file from the provided S3 bucket into the input bucket of your stack. @@ -143,26 +128,37 @@ The pipeline end to end test script can be manually executed, you will need to e * Reading and deleting entries from the DynamoDB table ```bash -./tests.sh lambda-file-refarch +bash ./tests.sh lambda-file-refarch ``` -Whilst the script is executing you will see all the stages output to the command line. The samples are uploaded, -the script will then wait for files to appear in the output bucket before checking they have all been processed and the -matching html file exists in the output bucket. It will also check that the sentiment for each of the files has been -recorded in the DynamoDB table. Once complete the script will remove all the files created and the entries from the DynamoDB table. +While the script is executing you will see all the stages output to the command line. The samples are uploaded to the **InputBucket**, the script will then wait for files to appear in the **OutputBucket** before checking they have all been processed and the matching html file exists in the **OutputBucket**. It will also check that the sentiment for each of the files has been recorded in the **SentimentTable**. Once complete the script will remove all the files created and the entries from the **SentimentTable**. ### Extra credit testing Try uploading (or adding to ./tests if you are using the script) an oversized (>100MB) or invalid file type to the input bucket. You can check in X-ray to explore how you can trace these kind of errors within the solution. +* Linux command + ```bash - fallocate -l 110M ./tests/sample-oversize.md +fallocate -l 110M ./tests/sample-oversize.md +``` + +* Mac OS X command + +```bash +mkfile 110m ./tests/sample-oversize.md ``` ![X-Ray Error Tracing - Real-time File Processing](img/lambda-refarch-fileprocessing-x-ray-error-trace.png) +## Viewing the CloudWatch dashboard + +A dashboard is created as a part of the stack creation process. Metrics are published for the conversion and sentiment analysis processes. In addition, the alarms and alarm states are published. + +![CloudWatch Dashboard - Real-time File Processing](img/lambda-refarch-fileprocessing-dashboard.png) + ## Cleaning Up the Example Resources To remove all resources created by this example, run the following command: @@ -204,10 +200,11 @@ done ## SAM Template Resources ### Resources + [The provided template](https://s3.amazonaws.com/awslambda-reference-architectures/file-processing/packaged-template.yml) creates the following resources: -- **InputBucket** - An S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger processing functions. +- **InputBucket** - A S3 bucket that holds the raw Markdown files. Uploading a file to this bucket will trigger processing functions. - **NotificationTopic** - A SNS topic that receives S3 events from the **InputBucket**. diff --git a/img/lambda-refarch-fileprocessing-dashboard.png b/img/lambda-refarch-fileprocessing-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..0f614c17a8cf5a050fd27afc8110287d00888935 GIT binary patch literal 146502 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 z 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 NN Date: Sun, 2 Aug 2020 22:27:42 -0400 Subject: [PATCH 113/115] include s3 bucket usage in arch diagram --- img/lambda-refarch-fileprocessing-simple.png | Bin 116953 -> 81741 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png index 32a36cd4b58625a031e76406a4d119fe1503b24f..80d1dee8bbe2c74f591e15560d1e87ffa3760d52 100644 GIT binary patch literal 81741 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%0DT~9-)*{ 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 n~ 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 E1N+0vxBvhE From 5dcf119e6fce8442d0c62ce79839347c938465a9 Mon Sep 17 00:00:00 2001 From: Brian Mcnamara Date: Wed, 5 Aug 2020 10:36:12 -0400 Subject: [PATCH 114/115] updated diagram --- img/lambda-refarch-fileprocessing-simple.png | Bin 81741 -> 77122 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/lambda-refarch-fileprocessing-simple.png b/img/lambda-refarch-fileprocessing-simple.png index 80d1dee8bbe2c74f591e15560d1e87ffa3760d52..dfe4c30c19e878d217cb0997042076ac3a718c45 100644 GIT binary patch literal 77122 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 literal 81741 zcmZs@3H;Mk);EqLgBu9A42TMX3yce-P1+_ZXp=Na*Q9$|*R)BSrfHitOVc1YiUNv) z%P5Wu;`WHUqJs+pDlRCFfV(0fE+B}2!zLi({|0<~-{<+izYo7Q%gxQb=brQZo^$T` zaRZm22OK@@=stb=3 zus;S~>AuyHI(n_uJk-nskM)fW9J*ojH0jV)QL<`f$-N4Pz=VDuIe51A`&f;-r%W{J zsjxp2Rm=pXmw59~CrzR8dnX(i?s=X=odj}lQPp&$!T5zHnQ$N;E~t><)yWWDuq~a1 zi;C`RCb|ihD@Mv4L&!TK(b4>ZFPcqKk#s0_rkBF}Xd02@rZ1dGOIS|M7K$mXs*+tZ zl!-M1L>vz*UFu9PUWg}Bg)yLPmrVcuijGT(3t!%p+>|ueX)UFqJ6VWo^I;yCmBF5@v8ZD+$ zzFyhHfWUBqmRVkwCBBiCLuREM4VgVK@}gI*VuTu}Z4&{fu|Ou^BLWSM5lp3JdGoY4 ztmjh+pGN3$&5-jRD*-xVKvTy~h8?LFXfrrC^M|sjMoaOc?G8du4(j_WBv%*Ew?pnGURgL*7Fl1@G>1P-@)#7=E^tJVxg=m#xq@4<} zF`xi=C>KfxX%#%+aA@7|wy=yJO=e;t_hvQ$8ryP5ll-J8lBm#;Qk;iD9J`yUa!NRq z@v@joa#22B7J7nTXN79F1e7O0@D1=h0r^}V@|(d-FH}|xu7bn8xYi1#up)|AS{!(7 zBtc|E@SSnr2jT9eOe|URav*_ehSz%Z;J)b=N&W~vmWT{sC>>=5{>MfoV# z$~Z|iUMl9CG?wz@CCCC$WF)j+$A;BlDjf)emQ1`L!9|KGTXLw@E4NHB*7dTKZTk|u zPe5v6vzlY@WEYpsR0@LS2uAC*2$UJjMz!JD8`^A;#mOg6T#|g8Ug=twbca^!GYlZ=i@;2qSj_xKD^jsT3Mc#qm%bw8&u!Tqt$;a+XVUz1~W? zLV6kvrJgDz36hSd4FPMLa?C-?E_C5dxYE!%0m|xt@v_}oB-BG2GOp;UE|6_B-@tmM zdft<80oV2r^{RrohYcdgR=K(sty^k`mu$}Iq#J2)ql?((Ld2I$2Hlm0Y48EA(wZ26 z;J5+KVgL_7Pqlgt4TTXNYe$iKTL9OxSi&Ew5Ejrc%7@C45Q{ZJMY5uT6~uKz=A%um z8E-@^yW)18i3(PLV9J>aI1&?7yxI%;B?$Ct)murN zLCu0hgp4GoD;!a2gBhYFJP*+(Y1?SaNmqG0>Z)3Z($JvB`JxyVtP}!S4p+PG5|98` zDHNtiGE4e2E#_gm?RE@K=?pAqzzX15j^J67W(pNNdQfaVh6C^sl0~u3BXpvJ8d$JU z2{dcIM!xFT3{8poYiLO-qIoiDRj7zwDCg2ZSd`@B4YKJ_P8*!WnqgD6fS-UjJ+Ov& z!2y?of+i(Ha+NmR>4vS0lduiTkaCTz;YeCj&ii6Ozwsj8mf}v&l87vyVEi^>_z1+V zGMYse!irw0`@!Q@h9E1P>SekrO-73n?C}JwSepwobusA+*1F9^flaDREtv*Zi|4c= z7Gv~g4!|$o#yfi1$-+qmZomnY4U)~CtI9g=i+XzLP%(*;txD2^R2bD4N!lq0gCiE@ zqp<{QwAmn7H>w1FvvgG#^R6~pb|K#AFkvR*=lCA#Z=sEFu?!Xx_aheOi2<*uY3D7r zltDs8qsx<#u%$u1YEkpkh~S~QRy-54x(eCw)%=Fv?b4e}#5lQb(SC={V<{gSO7u`y za8`|sMUfT;TUxji$9hU3=O4gVU}_7actTyj3bw?^Qe;ZB>(50gX}t zx}0J?VEj1Kl&pr%qo~6eq$k0Jd_EJ+S#+8$fdkOMPk9rA@> zxXx59Oen?tlE2yFYK<0xhQx-Yp)M;Xxj-mdwEdBetALDL^2g#>r`?&lounY67E#AWR>YwaUx3FJ}lAjg;2X}AypnF*h(%yvY^9Q zGlHhWO$-3Kw^T3mgmBfwE5$HY3&aiHjS<$;(^ zqL<0gkO6!a%HRoq+-Gu7wh$^O9lhcDxDw5KB&+F#?Ih4(3dWj=Tma~{56M>(SRfIB zGqUDBY}qG;JC&2qsShtsCb9f~O zIJSqu*`Qpq5qHt(M2fdsaIt`L2|el$=K&_+mAE&Iy7apSM<4b9LS!WF`}fdCGhd;8-LHJOP|!45v;O zA}nPEIe)lOCatc81^wk-o4}K4-ecQvu#5<<*qoG>O?%2kvC)k+>dj0n;%y`0m>wf* zAh>BmY&(=NI698T>R!3z*U|;3tR#ZHrjpD1CBlFyRZ1r!F8zm^DXmBXd8E{AI-WuR zQ;PK#xPdj12TsvH?n;DC#I~*-&f>TaLIRqeQs+d!tc*L6yw=ycEbPZq9 zrxbw8Pn9twZL)@?H=8gQ7h;4)NBs!vh+>HBl`<*A=n$P2ub?NhA4IiUtB` z*Z592XLjK*-okJ|kQ6KjLxEJJM2N+Np7EKwz_-Lw!U|hd!Yj4{fo3e0q~$grk0or| zRU$Sd#Pfs1gV%Fy(ha0o)^5iZcj^RE0XIgP=X4u0fE|;SSk{L6RK0LH^Z59NHjfslorD^ zv6rp0LLi7KPl>18U$=b zg&~V{46emvwq(XS@wVTaDdlmvsTO;wp52TDy-XzKQ?f{+k&Ie?!QyJPbJAjvI-i5o7rX}q!r=3 zV3vcfTR|!?op&s=K&h2(*`H|zs}PnHqvdF+2?0MkU(zU)7q~8AMglkj>Jp;oXnxHlvFBV4wU&wDef*{qt;NU0{F%?3i1n*l46;3-DVm*^}` zW&KPREt9a~kyso_su0vbWh>Ke0Mess0vpm2qMm5PKxk8y3SP(zD@|5x_exBl7fJIO zQi7^{$zRF#ya87@3142Xq{vQ!5W_jCOICRtm368I))r040YGGpT##@MD!dPA)ezaA z1}~%RdN~`CERM~`({uzjYqfmYF;hj+PbI`qwPHJdJ(`OXiK3_Ah5^Aw0+-p88+Yq? z%Ac#kT|m$wUmmyvc*8O(d`=+rYN@2e#Y{KLL`9scWIN50zvPP)45vr&UY}xfL9vXEjBbL^{ZNM;8-SsZ0bl0+TJUC+gc@D2*t4TMn?YPgskmk`DcN#fwy zkkqb}D!{c3Q=MGdV^z31$07b6jg+ujxgY`O)WkiC%II1rnr(TVBwaMChGg-TIBZe{ z-tVcT;zb2%=YkSeNIQ~ac$8XL^0&JYp+luhK}=`DEu%%$xLOEkNFpWj^%Cz24i9_E z2_z-=1T*5e9GnvLdQ?ppJB3=J1V{WmRnEa6QbruUR+34h6jwC3S_24L=Ji5CDJM%& z7Gc6oxZR~Z8I{E;-Q< zXhACJ1depfyxow4B{Ro|WiAvDf@(F)02dX_ddvQpnTaD=jPs!tfO&R_^@W7G>2=Ku z>b1g2)#aO>WXQ!FZC0{fRn4UW2{8pGl};;0y4JBO4Yn2k%_S2#i&vc%6Ce6(qJ-isHU?l0X!ERLiL~)(2JdT zrqot5P%G)FXHic}&qYihUbjuu4kJ!lYUGN9Ap?88>y+dQ}gBQ zqA#7~0Mph>x8GH_k3{# z1G#{_)5~Rqg6!bEUdq#g*`mfKA+m^PI#50krgM3SucsT$rbz0UOs3VN%YK?kl}ITY z3)BqDV=#G7F_#pvLaJTVy|O0aDTtM&OeUAdgc<-75ab)2$)gr)V^$u5>kT55Diz1Qxq2o{);T{>w|a86TZ+QDI#3rC%5rtPK(bu8RIK@Z zIo%iV$b2!Ft!p(Onbo{9tCt~G=j(}1rV5vPTpX)F;i?A~n&r61#5upL*dCqDM*1x4&mi{ ziKH4zmovJ=mA&nBzL|jm_?X4Kk0>{SQQ4|OV30xDr?)#&3?y8+q8^jHQq&^7{)ig` zu|m7la#}2WE7!oLB0ZfoM^W>a||3VI?!+Y#O&IGT#-WdZSn=Fa^5| z6>?b!QUoWS)(SqM2}LkZEsUgj)erM>Q7;B}Ei} z(R|U#(hZuSTD2mk$Pw8xh%UHc2U7I_=XmO6BBZ36>9C~LQ+W!aQNCP)I8F&wGwGrj zHqct6n)jt7Ly}-74wBCa5dVhNP^etcvi`ObX^8<(uVuL^l7@32_fyXY5+Emxv@&!d z6$qsA`3_5Hy(AAsxO@U*L*U?<#^lY&6ZUdJi`Ub4b_zNg6WOY&1?&mT4+S#RU!?xM!ZZl4K^w?#vQJO_^?t43r2%>oCXktr#m6BNVbHa z5UsM5ltjI$gs0rY(jW|SozZAYNBwNBQHLVBm7YeVHItB|a3B>jc&?l)dFy$UksLo@_sp% z5P~`m;z55!GOSVr>v*`9k+G$Gu-MM{R437hdj!Xoct{YnScxRjdd;vx_{(C!s7M>n*53wZmpRBXK?}R&@ua>9kOeCrH4QZK3WYgbh9qE(xG7EE?1m-3}RI3kG|SpbysD6|FR+Yc>)nN0g3G0a-&<#H5UsAbV<^E1F0- zAL|OSt`cgM(7H|Yxn3;Q!Nisss$`)?k!|Eb??RL5FbXa8WC}zpI7DR*I<47Kv4JRY z!|!Q_MPUDYyXTQS@qk(o+oT#v(4-mcX+FFI+wnk5CDfi_I*mk)VPQ5W1zj6pTCHFh zk_-Msy3z@k*p3t9EpJdT7_yeFl>KrAD%XuxI%axowh@kiEn+3)iN}hXP-u#UbUKI? z5=~1C@(Hb&6oKIz86Ra+GRSiQeUJedksx0bD;rST<7Ly`G}wF*!cdP3c;E`lFfF|z zu}H8{Q{;{w?{wmkR7?ysxe%n6O<0HcknUlk(Qqv6Ms+6K=H$waglE-Ri{(3=+wzy+#TQG#6=s77WJLSQU?^tMPyzSJ^ff z$s`=UX_mt!M-l9lDPwu2-mF`k;Nv<{tE$z!MWkNpa0P<0*t#NA316XJ_BnN)PS+iQ zjkz08V0<0Mb(qvjDBSA$Vh~@dBoJJo<6am-2!us38;p*36qMb;GI;b z%c@Q!S0kH|WYCvvvV0nN1>IVwAmj|e7IY+l$r+8)IiB3^)DW<2Yg#_>$ zLXEE8h$a-7Xjj4^N(km_RRK$appXzHCdilTwRjtH@?_SG)EgX$d2;zovTioCQnn|m z-ZXC|wH&EjR^k_rjD4l4~`}1x}AsOBXN;cjZeE?P#f&DY0oQrE9UMkB(=l5-yAF zj>Wnw!FysX*#50YH7#3*eQ~HlW%(@cr1`ok@&~(6qY70GQh7OQ`Ji^fWh$QyvrCz8BhE}PXNR!+5gT^!;Xa@J`J-V#V7l9gPrTr@c`jpZXC!b@8WkuCBh znUZkPN0sTK2CMCcRySL17;N!U3K{}+sTet^otp+33Z9E*h`gQngcv6hRn2~mz!*%Mb<+M7VE@XHLgV0 zGmK=hWUN9Jw2q+Fs#R0&wxD2|%H{ZWg=%Pd%5Ihvhe~z8zDPC1pe&DBV6POzvv|v+ z1`WCgd9xN69^{2ncm!!tU6R!bL?B{-+^mOIS>Sh8V$njALh z3o~pw?4&AjgvbLE7GF0uA-4f&k_aWEYsn=PyhXC)-iLDQX%dDekb-qOC7BJ2q8p!qs+5oo zGi{Qqm%EmQwpwaU6dW9NI!weC{H$LrgFI5vZd0w27Dt?Vl2ar+ikfONq9{QgY}fVD zDO}VgUxvxp!FJUI8Pi%#fuvv#Ca`qX29yh25uD`B5bKZI0XkJLdx{EcMnpCZV51T3 zVC81I4MPwVD=Dp(>!rwO$fFw|V9q3oe63etyD5*i>drY`m&GUrmkXpQ#VH5Kl5g{d z*Bg)#p%E%2qej#(8#RRKq6A*>=mElsqo8CY-+~)nC?>&Ri?b4I+c6}CwIs7j3(=_P z6?_HAn=z0iT%+>kNVHYKHA3b(rAQqz*|cV|N;c00@S@&rL%QWIx~Xa;%PV!S&rUL> zj>xG7i-wtAoo;%NDyZ*5V`;Y?(;=vi+ny?NQr+JGy95cE_Q{Z`d=mdK>! zWVK6!+88X&gshTQZ3MHbO+ihy9r3`13jxJ!C#sTd$B0yzLK2}xUFj8J;F?G!C~4Fs zKT`>%vQ8NVR98Uq4V(kp;Xw3a0ZL$ejbl7zjPQU9&4Ro389iyF!FMbi4{HIh>qWHD zTu!u$L4Qc_2fVZvuZn29P9&XBT_|f>y~~+u*UWc4kd}@V1F>|6z%@iEMQxl5fIuCW z$$*x_X^@N*55hMY&86DF4Q_f{EiB^CqXD6r76Ux*)9`#1WI4PHs8;E9A-pbU90EAV zRFK!BV33r?31F|5FXA#}S2G=hD~CIv-b~Wvb_4BYTSBc!x5yrvlPYl#aW^fws+c70 zM;+HD3V{&K0g5XSYMq7)q%LW_w1k2?*+eAU0?8JrCm3z1B{oZBA<=f?CZ1`4-R(*W zIP0_=tg)P)gQ9ZN>g5w;L6MRMMVE|*VHM+Pm1iSRwFi@pu)^o{Zivr{`C1o96^9D> zcEpj5y4;Oge1z^AA*1V%8sjI(UO8WZjcg+Bv@<3RVYyLF=%tXHwVFx_DV9RTVJn1Rt6U9ad_N!_;6s;$6 zT)JgtTC5ZgDSo|USY*_yf_j01S1Ee(-Y$%y-gGMCItgW(fM3(k|!W$kCq@gLv4yOAD7gy;LlQG8OCaDTV_$8 zr&YJIU>$uR+fXXO8DJ@OE85daf|zl_!IS{9b?Kf|EzhUMAj5zCK@irS-;&Yf%-&{BL~U(I0gn7Z^4Odr%3q`C)FVeosLIs(x#H>#0V~u zKoS8^H%7TOQ1nW;KO5<$Dnwg}t9B4G*@%pj6o?nve5S^CeQ>2BA#$e@jYDn0Nw=~Q zOHsT;$JeOJ5Ly&l35|h0K2U$>(jDtW1=JKvF^V?9x0oq$8I7xHv0Sc}tPv&28_eL2 z&<>=$bu{NCU1Rcfu~M&{HC!jgR&;j(eGMc~OX>u0?vfe96UI|`6Qrwxno2N28RT&I zkRw;Xv)%$)hf5|@>IPdbdQ@3jQ1ehO(3N^1Nucr=Q_K-$8OoBto4_MXbKo`$)QRk5eo!u z23WVB!BUM(s;-)#G^-?ny}4E@nezt<`9uI%Zajh@bUV~+h1hs0=4Sr*VmB+0py&j$ zdI=t>JE=7A4ymk&CVCc>EXn!0rek!V70Mu>+|m>6YGT13@>jbtH5-@0P!aVPgJm+n z@O8(h%6O}nu>fP334)Ih76TBKQoFVb$YHgd18)Sum@GQ9Q&h#2*Y>r|Rv?ip+GgFu zX(>&B(~6=>YOP_1144%dRRba%fP!>55*NI^G)P>TQdsT+M+>M#!IFaAM6CiAtfBgo zO1GS5b0%XNQqbX(Ng?N$5wuXU3r&A1oiXEO(jbFQjn1R4Y6LxHq*{V_QQ+!Pwo|A$ z;G*AEW`eRUp=Ic*;46pSO*&8p9i-D)TY{KYs*SN|71Uw&;=ype0)sM-4(hr>EtqRZ zG)``%^_~WIK@kdz#Bx|Uki>dXEDjuLDk&l^-qKyC=>)?_gJR1BY+67rRE5!z_`wk* z2&4{$;X+CiZM6yUfs`eriomnb{h?ww*=&mmlOcp&*DGZ)KG=kPijI|FP;6+F0wKQ* zs$!bG$U#l6b$t~CCEV;sC0yrRCnrX_yrFa>86R3pViiPZ-OFqx5b9tUZ-N8_-o}(z zv7EHjsvCBL?JzY2^231$i{oIOjT8gL1vf5;ssXFXF?LJLz@VWAP-4;D`ct`1uXbo# zu*%t>9HQ3n0`Ms(+J}2oBjc5r zQs#cnO-6P^Ul{K3wBiR|4sQDl-EG^*RS3Rkw|l(5>gd5ZrZ}~#(oSW; z{3!u4C`3khvr<8lqPq$LDoQE`Zb2d}W-B-sfdlCbnLD5^FU(Zza>zomK<2nXxOxbhrP)d>Py{PPiGmen zPzw)$V?BN_W0gp<;3OaeapHudAYQlxNSmtbEM{Rc6LKnsN5=3jcm&5dGNRNDmR4~+ zn^YY?*L4f!-G6R^=D+LX4;IUV^WXmf01na62fy~|b6TG;8O+%CZdo(QNbi|+(RTLs zbK?uYdfOBFSIWmI8`QNF+%00+MX#uT?+iWtrezmx4r;gDe&+iR-_kt1IQ+Y*gBHAS z{b5Jla?2|hpPU*k{Jpbmy65TF-#qM$4(ea0LCYyT5sHeat{(sLhK76Z(swS% zbvr-&{QAbPzZmw|@Ewz1H|^cqcg%68?R>v|9)0y!(rbg}pE7*c53`P+w3a-)u4+HZ@YFD@H#mbQ%DsSn+J)$V(L9DiWTkDr$I zWHy{3A`ISj{k#8ID=!^&BlXhrd(K$+1pcRKzummCH!yJEIPbjsZ#JD% zr>W1+-+zvbiuc^nxNykAN1wjv+NmplIwWasH_;%$Ddxj!|!0?l^9xLBIk`r`>d9=2rZ zN6Lgd%k~YKx55L@tm)?tU3!L-P6(a<3e2O)50{?w-1ziyM;$wC=I6urTUWey^yZfb zJw{KdO?qa<7blD%j~@2^j}yP0{?l_USUwHt-GjrAx$l?fE*Lo_G2rBDUpZ>YC--lR zAbj6H_kDNk+*Y=xVDMYvkJJs94`_{kdBm1|V>TbvZ@@tbc{o zb;nDwjqk6#&Q;4-Hax%agnO#RZ3MRMAMdRn+8Org(ez7KuN!fD;O=Scn~%ppK4sZ< z^rSO@)Cce4uRdbH`mK8=@Uw{p^!|^3nY(^UaOu}e=Z?Ja(40Ol9~f_x#{7A}mdAo? z-kK|H7gi1$KINcrHb3{DIsI=79zKBHusZqn+47i#Gv?hfFi`Rt-oO4WNZ9>{x#O9a zzxL#hpIfx(`wMb=Hs09yB0RcGuQ)u~7{iX9B zp0gA@OMdxc`o7n79+Kxadl$TW;L6kFWfz`2!~3rnUpzN9*>0Zu-ot+b@_g&`HQhVE znBR~VsF!S7H0!I+KGVl8+H>pvo&Ua(er4MhWm4;e)$_NlTz>ZR(&~NA2kr_Zu`LTX zuDW&PqG82_$NT4vobu==S8Z`&<)r31nHaNk(t`&|xhu`9$9`z7TeEc`SgmR6Zk@7J z_~3$_=%jDndwS0O3&u_9xA~4Y#O|Wu{ZF`AtL}N^$!{L6`FH%Oi;@0$C-=Xc(BLT$uHLw4Mj zSiNP=ZA@^fu&_FHSYP|gS)X6HWM<~+_SpWz#vFU}?IY&YhfPT4@7>A0xo2{I_f6W6 zd#1+KS>N|=yD@mUs|U%8wyz$){Egk`KRfYp08M+`-)pyy9sKHw`Lfgv$lI|CFF0Va z?<`J!^c#7_)vs+m382mSS6M4we|G$^E!bz1tQD&#PyFEOX{$e&d(CkYJAdJO$Ti)V~4%-_+d*Qop8^_BObWInDphT|4`o(j^DqvXNW)ay>+nTdG*9vVk-CcDFb%j z>nvH5estW1qgL%4_sh1M{~g33${bhq!5>W*Ju1HWG{n^#B^FOC3QccW|d_m6+{bC&~G>yu3vImSOl4;*&Y zg2Ini`B$7hsrSz2#HV{aSHHgJi}6Fif*cK+ztP%r?=A#sZu+v3_iUWFueYiD+K~f>UG>oL_(!{6-tywa50vQ5>ux=K$$1-- z`pZC{R=I2GLduA-%=DK4iyVFX@DG@sFAqGT|FAd8D=&5pWxSu8((k~~`~UU)dpo<_ z%CBFXxOUYN=AI#DXW6|!Zs?qZth_jR*G}#2Ip4j1#nhkHU-`=OeK(e;kLx#Jz2|qZ zK6zP?xXXL(lz#NFZ>;^`!wEmOC(S%!(nb9SAcIakYy7>3o(8nD3Gi-WY4#7m9=SG1 zycAmZ=;+|m_4_}D)?fDH=?@WmCVuws1LO9d3jXe3kNVm20Yea@_`=JlUAtLac` zbjaXtyw&zSyzaSIZeOl`u|S)#nEl6jt8?n|#iyrE+IH4&%ZKbdFz}1{+x`mB00{rO z)i3T`OK+XHXZdfXPnP>WOYgg*uxIK811DV#_Zx7+F)l&eaN(R+-ky7ni-BXPYft`g z&M_0FjlO?I?YW6#0WvLynyr6qdHS5#2bZ3-X~CTjtW9(-nzwd?cgK^~ua7@H>%q0( zoHAg2d*&ge_2?^KJ9FO~bFXnu-*Vqsx2-WJQZLPzaT`2)>ez{t_@8G6kG<~P8zzq> zPMR`x`+xK4-c#oUj$iY)5f{$b_%CwF<;X8Pf4TF{{_W*ESmW;-B% zyXMXfE}SH_KSVAO042K)#>z+J>n>P*;jF`_O#S7`Kj>oAgNL1U>B^PI|Bnvlz4OL^ z`=A!k@Nw6j9O16owr7dF<#^$xAcqa!y?4!`+b67B)0y1e_V9{5kBpr(@#jVBek)zK ze(*T*+(+-9mN07X?1yGbM&%(ySObsH(Q{j^$Nt>^U)v+6zxrXH zXJWImUl4C`FJH3s;$w#mHU13AO#i8ux;8}Ig2~%~>7&M|hfi6!5r6X9e)jhZZu#3` zU#3>i?o4}p?%a{sjstHD-nwp&2w3@~DNld!&0s{EIknI4&-2>KK?|?gGVMnG@)7p; zL$<$XreEuG?j8P**4^>;;uXvCN9@?g51l?>=h~rTR!j-z4Pd@A%$2X*G6Tp$9*T;~ z7eD&`osDyV!UM+L7T&qHKl0qG6SlwCSa!_nl?#VHvE$T8zsTW>p6U1Ajw@H5cq-7n z(qIJo&UKtd-8kiz*RENz`FamG?1xD{Zq5-?p8jDda@~-J=8klh-7z|P^Q0Z(Uq2f- zeb<)t44CVpJpg%s8+pm@DK5z`F7Nv4{vURnB=6h5Pad%3FZTD5CzlW3a_D8>fR}yZ zDthVDhprj<+1%2xBizMvZqgBQ$TL44{>-n$)pv~N-+JPj#esJZ{Iqzi>pX_ezWTI& z1J3Vv*q?X=?8n#aig~e ziOz=o*MkUP+q-Yf6@HjbujEeKx_SoC!?zY}dD!)zckR0Om~Ga&M`q{2jfKT^C%<)D z`<}~l&z*O{H-knFD}H_A{M6)y8=qXa75lMkFF0%8RsDute*c>{bXP)m z{Wy2=w*VsEa%T1$cFG~6Uv&$T!TaRjR>njIso$>JAW1i@_IC|5hH`HyJ#C4P2KkVZC_rTk_eP3$!;zdB| zj#fKly!LKOZ@4dcR{1daNIh zo~F*4e1Y=NeZeWuoicy?myf=E#IE=MnE&)Y9a^pFQy>0ggl_x+*0@ca+4sto5DF}4 zJ4zpPi*~)YZR>qI_cC2==+^FiD`&4;bHSz^lU{!NWBvEGkbLB<;L`1HK5#scv-|2f z+uAdyZv9}@*LyF&e;jJA{^P|!@X&>AFLO`~Yt0Au2M^zN{@^SAS3d{oV&8Q^uz=Sn z|7+rhwCv4OkY`7(Iq4bpoBnqU`Wt|{*Zwair?00eCEnO2KN7#2tbh&W*O@WmE{ZW0RHhKdnRk;|D4tDw(~!39tzsZ#QEm~ zmH&MP*Ze^}^WORVmYFmEm(osMe*-ZZ3}qg>_Bm(kMdI?w+d&xpdiTjW`;VVA;qU=K zYJGhxZ(p65|LgA&80jfBnf*V_d1d9>F94_U0^kLLzh(sB{LZD+OJ}|?M~nWS%3cX0AVq6_mXGto(;I{ zU!RYDe|O@0^7BVQJn`|Gj%&q}9*eHK9IXHKYes)JQYRB8CZ1by>qno0i2wPG8RO_%0E&%2vat?W zz^~d5eSrjb-LP&$@Ae?E=h}Wt{tHWW_$e9nO@AMUuJ-^Y7)fIP|ht$`yD@|R05TD^M3hm&9a1^HS#WL&V@`6WPSnR%KpE~^FI91-m~~0S8RJ`?)o+RE0Zr< zxAnz|kMBDjP_F*;p5<>ndf2o>#xlU^KWr#+#+Uz{J=)n`M&31Y;2+teMJzFT=V>3` z`mOJ?pFs$5%6T{aw0`ALPaV5r&ZIpTp6|W$vwQoEJ@&qX${c*gU0>jWkDEPw?C;p@ z;`1LrOaC-2aR`kDC*MCbpMzw2(xG4+v^xR*e?13oe0<6MgKvFi`mzI~IukGY%)I2H z*&`nN;F9CGaf6ew_CcYWM_t^n&$f#T$Bvlr>yG+oPmlj-^|#MlzUY-L%WggWqUg>Y z)1MX3*tcu=+_PpdQ>I^h$uRQGhZ_6uoc{6K&py56z9Z=Nmx^8AFqd$tIF`|}f*4t@Jr>R=vXUUX=m;L`sb*gtaAn6uBuFS+F8nWtda z-f;ZrH#Ql6>f>*G*>~_Y503feyW82DzMVgR{bdFavCsc!T}XVq?-2uDym8s6!H@mrpR<>)2z{r2 zx!{T$m-YSV=X*lmjd}d-p<%#cr*xg7D}5rF`|8 zW5&Jux5JM(_RaMt8TSNMJ+r6J$EPXZ29DELZog~yFYCxt*K+46#1-U#9Dd+xvSEJ~IZYn=(D>nh9d-3nA;P1g`GdF8Z&0h4=?=Zy*thsH2C9>KYsJUVXaZ?Mz|Jw!s)ICO&c*; z?%!Rud^yo>dy2*4O+Ve^Z{Uh@_It~h1Jyd`oWobXOi!79+BxSO18%&r>7z%F|M#V@ zd>!BN#Q3j&xOwB%Gv|ZA3O(bRD}&^Le=aFbJms&lo%#5I0k2#N6vLTy{ZS9@p8NTK zJvDB~KLc;6NA0wSp0k;}fSl_AFqWA|BpPo1V+^GYM)8(OXrT^vj`ahQ^ zO`bgA?VC-+1Z;7J1pg zKFep1qrnVQ;6IjVt-bJt7hgQQ&&*RVnEG7#ol!pDiQw+E)jz$xcgMzuJ{_UFb>oRl zIDE|~%3JV?3#ZJSIdk4S&s?!&_>3Xr-rl+CBjGt765i;0=_|%jGyZbkwbNfy{`ugu z&qDKN-gHy{=|@tthTj~WJ$C(@Hypog*|NVqI7U1FzA@*W_tSqypK;OYH@NTT$T_&xr^j_f<2k2|uPhL0cCXf%RBLf7F>pT2Ac7~!xb6K0+q z82inT?R|efYxgI^Z%NEpcJ;KvZ{r8=r9tj^7*T|*bM3_D2{(Ls z`u|7Tdq6e01#P3j0xE{0h#C|yBIpqXq)JBuh=_M;X3Umm2ErU{CcDtIg)n4IO${oc@#X%*toJt7*Y2k4)6z*v7#m*@JMBTU z4GB^!zfW?6IxnC57!>49^aUpXc=X(7Xk_H})O~r`0cKCs%x&6-X=`tHbJyhII|LAStdu7U9;lXk5~^$X2gaUb*e3)>n`hOE1hSnoD;T?>Sr7l zKK?K}?39|wpRoHc=NCuYxYEuD=yNW-<7`f#K%dSa9_I-dk|-*B%jO-9Qc2Nz?s+Uf z8G<&|V&K}{B;`n3*Mg1blt(%7^N*uGf9@TsjT{;p`UVN3wxNN}d<`;%S@6HG3v<_&%R?5c<8)Yvt$ zX&}|1a`>%&CuMa#^$ZISFKkIZdqB&HbjMkm>eLp4&Y>Ikvdz05DtapW@z@aa^!3Fz@Q)AYph1P}CmQ3Z$YI+*h`MR$t zQ6FT+YS&doN}QjhSKN)hdhe?&(Q`Fn-p<1_4~w-mSh?ecIb_AA@2L#vWvA9)_J>aq z&$cKPRdM^GoBO^R@38QK0!Ez@pPxC_qhB7C)4w{-P2QZM&HvQBqeCOI`JMe`hq<%y z2?@Ox1ZJ$6z=^wQx@Z(m!)1Ndz9N9DXz1tXvj_6DIDi_wN>AtM>u76hdj*HNraL}9 z9&p(*T5(=ULF9RKbaZS9hw9fot*x!n$ImM#etUOL31!8hf0yX&RHMg>%GS7;s6luW z>L>>E1jcj`m1@Lbf14#5Wi^zWIKC%`(h5Aa0y8n8H&34`cv4uU+$5abYzox z{d}63$gYuVgLZAxhc!+)9A2NR$a~?GL6JCo=omRl(L>2mseS$eAoar4dw0oj=#z8z zQQf>r9EV9%ln!od==#iYaOfel-K_CNsRo*&j`|1Tnc8l#`DbkctBeSHo_d>JoqFva z*CyJz9~03S89KN-f}A`ig9Lf%Q|7pNl7??wo|#0^(F|f}L&)HlCnn@*2xUoWX>wNi zkI&wpS0UevMv$|97^kFk7?So)ZEfGWx?Aa)nZLnh^&da}L9iVB;y^O=+;`)X0Im62 z2f>m{x8m6CJ9o%X9VYx>WG(zS@7b3RDw?OJOPClWB-58Gb1D2!OsPj${|yVsNr~WXYEq00 z3=9@KC!Hx!!B5Fi0uFPrv^*$rRn_AssAOt5+~Dja-d>|Zb>Rw{c6S&@be$>uYvlEl zt0qURzy4VHKDMB$h-ZGLbC@@F$m^lfQt1A;^QybD67nv5U-}ur$dyFYPLRWmOH30u zSN!(p9Or>7eJoTeMj@2y0A}v;{%hB+nXN5b_YVvdK1dBqN|~drdgDe)SgfGmGnVY z%(kCp1#d}pAdSS9$WUVH>gv8YuPxtbPD)Ou!afDp?=ALb05}+JPLTn2X*1roS4vSZ zm|;6}W$SC_^^LYMYwefBm|4LdfPIKY0Cg>(6JvoA_(Z+|P#E!UA0Z zpCU9a`g1uJp5Q@!t5*;+-a`vn0H7Y_nvY)~e;)i&nZ0Z0E`UR%NZoR0t}Vmp2`Ue+ z#NM@q?vkb?buNcFeNRs=y~;SHn207*o9W*_!^*5RFCIC8OgxxVsBS?7|ftf3Rq8J6w0>gop!= zK2{x-Z8MGmEUj&6X-OhoxNt$h^3N--%YC2a{2|9Y%9}1`&^I-Oi&E#SLdB?Q_m3Q> ziCeGvs_;pm)*zyEf{|$i_*U^3&zpZ-v%#D)zKl{zN=jMfO?HRZ7{ily>K9Oh%7TWP zgY*T8n3wX5jEp3&T{{r15b9$++Eh4fW%H5K)^mn+S>%dl-^15PO?2kq8;&kX#I6f8 z7C@NqH0-B}B;46$$yUSZAu(rW=DFH4|0aAU;+<5{LHD7- zPMY6a18r6OXXa*)PJ%fe{HX{mcIr_G5kCIbA|XEhm2BAoN=l$bs8}+$@`0xjX9b{4 ziZQPgNi}Zg)0yF2v!C{D>#$hf%u5cS0@Mk0?2O!L--mrH|s{PD~+Ztgc9 z9on}CyBBS1RC0qlZJaG){_(#2&ksX9$LRdJJux@O4*AixWzu55N~ml9g}ofz7wvg9 zRr!xD?b4M1LH?JezPPBXxOHZ1EB5PcTztk%LHxLFu4f{RUp@BsQ9pyuShl)l9$I@z zp}}D6o8%z2C|?h>ss{jGMZ6H8k8l`|>GJ zkjR`I46O1=QLn4#y^)4E0mnto=<9(`A^M`Cqp#o)lKe@`g%P;9KDasH$%l)Y2Vg!J zAyGB0I93O!8w@W60r00X$YXxqhFvXvA9fe;x9{Jt^x30EjHfPLx)gTyz^5B**W~29 zN8bkqzJU4-s1EG&IN3fTjsXr(POAU)yuhs*PHCa}^81-ia=S#%RLrE4s$Z5CMYyB9 z(v1_O(0dBb7}}93;$#M)=2p7kuw&p^^dt!-!b}7#D#8F<2Ko-NhJ@mY0uAZwo{v>ME5?>}4E!@r9x1Y7O zsR3#2eZdyu>d7o7CZ?M-ko?rWK1N|7R@idLfJzmg5E)sN?KB981{mX+lOtFWD#nC; zD(OK*idz+(Vx3u&=q%a}HI$afL%TInbE-i-tLMI#US5iK@9OjXp*(N^PLLUUH^cA< z0Q+8A32SR!HFb3ezArZ8Y9~Y;kHMK0LB1r5U3e7Ar6c_#EF3}r`}EyAy0NZ&21Z{B z?9)GgbWeympTItaH2b^Lw)-dWb|5u1u&RM_|Dp$}-zFCrB-wx;ry4f?1*Z*SLRk1= z2q(xiEd)!p%*U+{R^t~7DVV-JNWHf*KMv&o$eSY!K}%3tS$V=~{o$pj3Vw|9Bu4~Q z-&uO=x?eR~$AYBLm$8k9lhzH|W>r{dd^%1U#@?seZ(~@U#t#SQP&2i@GD+b?bpe*7 zoY1%^BqqibDdX!7&JM-KtNS$0L?)$}8_!`|V4hUdZqdGgW^I>~Kn$RylXeritpZ(I zhsy9la9+17%Hn7N(ra5NNfG@8{s!*iPmV8k(+?^>@>2SWt=rucS=PJr=+UDZ2NBl* zK4T1qfuYw*5Uv#O79S^rSLVZYpJPeMnz{7V!n3aw|9s>%`tsoC0n|6(^REK~_e0!3 z_U{FqE8PEE(6=lK>%(krEO5Q&Vn#;Bz>9szkvP@|ap{l)I_o$dZ=8HCYShFIWD@nQ zGKe3_dZ^EUdrkcbGTn7^vN9wn$Y`v&Gwl9kS3b(s-JM*A2s1qZB3oQ=28;3lqGIL2l$R^+@nVCPJnP2YiM6{_V+bikhx2pZNH{1cGna<&WqenoaRs zp0yiI%3{Xq>+5s=x<$7)rC>SUJYRHeP6_o*-83I4#p32^_YOwzxk_Ov&<@8qPgP{P zyb+IVXIH>E8!WHLV86=aKb;y$S)|E`al3qWF?>(XyGc4fF|?9iTx`)9Ttf)WAI2jJ zhV3L$c)4i~g0-y?R6(w>`E+xG8s`mZB3DvlB_vHpnce_G0N(%w2uN|R&G=K#d!&)Z zv+V588Vz|xg+LIPTI}=fo9ZoE?4@?`1aPvlvI>Lx2>Uc9#Nhx4AeXMR-mHDFQVjven;5iQk}V@YZQcRITrWdMn@0{RR|Jhaji}Jft@&a?N^oeYl`b4iN;^lTG}n z*v70FM4V6(MFZo0lIMs7p7dQaUbF^sX~FOad1?G{fIED|dvq$4>Z~ zh+or2lCp<$mbZU8QH;Zo)ADLV_-XBCpJqw7kS4K*QU@@ZrrjovCQ(sQRtL05A+j8K zQ%`HvC78a~bacD|4sn{FzxnJWq?2*;ErUv$n3!aD{RPF-S+Ku55SSYz)Hf&}PGRp) z@=VXwE1VV)$ycgD==EtR%T4ub5CyCvM1%nfxck1UStcj9D-R5+i%X}NnVb8twY9Z? z^Qu6i@_D|;Ej8m|y?SCR$05j&QUu%u;RTY6%ZGRt*PN01@M!^v;NV01QC}~hZJ`|X~zX0J(d1SO_8BJ>v_Y`i~4qw z_`Djc)r}Wz=OZNAmBWk^j#%$1Hg&hZ*!$F-!_Y0Fb__sLIkxeB3?-Dz?is5goeDq>&|-TSn}mWNI+I*OiV zX-PLY3|U)IOUq;rS}UblfDz?PO3)?==zHGgpt-D%=wY93#F$@qauNYTRom8v;ni;; zx`^TSq!8D0QZI6FP=jpuGU8t4M_%cgum!$)yc5)>xFlPEs?w?|zF)z@_Lp?4L%g9( zlf;=#|CZ{@2G3=%6rJKm8mRjF$a*etaCiW=VoV^z7kV@B=N#b~>&!jM%gYObL~+e- zr?GK&G{YCD%PT%zuHT2b0lS%d&VQ@srj{0ntyI^8_$n74RX<4W=_zzWxdJ@Fxq;j5 z*^B=9^Jnp8NJS#3+Hy764C>y(L}#(R&q)EsoIx}8P22zrS|^OA6%kT#0z@H&fZ$ZGmSD?%!NsWPBjkB9=8piT3M6s69Hs`M#L4+ z8CexVUK!L!_rl7hC38Wk@fDdrhWnwZqrKM(p9Jnxs6|o<&_*SsB1H6B*Cs54m*vx|nszG$lS9$b2J}#~hQ5(NnBbxNvOEwaN~i~NB4_FlEp?u z{I=gee2&}vH*Tyg zXFt;q`Fv=m!?Ic`@u>Js#AIaFv2M<BP5^0F7I3Fj|bFLR_B77BG|#E5W=(TYA5s!fYR?n>6@5P z_7VSmiLt z@gTBu`M@QULW~^HS!iwSMX_tf9$)K|>2y zg~<$SzSz(Hf$`Rk^SpcaP8|1uZ#b=$+GSBvXICvau2s$j8wHkSUREp?lZkpLzBW_& zdBY!8iD)&T1#InOzb7LPyLQ2exVSjz(G=#{&%P=X7h$9hahg|sbyA4_+_`h5)zu!& zqt6=+VV&PWGeQB+0e?kWeqKL!r8FD8GoKq$>{~n|_u*KUwU2U2a&$B~j7LLzJ%E$U z+uIxXeep?Igs=juMfyBY`IJCX;Bs2F0w_YBf&<+ZHvbY~@{k+AiBs_lCXd@QE3*gY zp!fR))LM4+%!95DG6BcAb&q95I)fOAihcW4F!%;iX2Wy{$$%%HzSfxhDrvL0TJaXelK2oDh8UXp`%*nOyjP_9rmOX6OgI&@wo87D36PRq)!mDh5%e%wZ9d2V=d zs)+g&HrsLO5~>I4A!%S6T4|sret(dP68A^`f@Y3+$M@%ye(&EuhdTlixG%PoTBwnS z?`8+9OJtaw=yD8mge23oOt)iIi=_xaG7G!@b7!k%j=((_?*Y(S0|d;m7M7M|C@7I%MjR_*b~wZX ze#yhb(*qSD(zAnO1)&ro1IpN%hK6SVkPPTqeUkJ63=})ydm;FV%K&c}OBNg@26YdV zDkQ;yaP1cwN}bSXcrd)QqT=8Icx$G=Y|2hJ77!Ao4mznP)q~sD|8O{#L;El|7X9P= zCMTc)Xnar;;TKW9lf(_@7D&;iy+4m?^ZdcVZ?7sS@c*iW%NY(_pp~}WowOhz0Z?8Z z*<_@wp>YsqTn+a3*LxR3o$pD<11aYSYHA{P@`@sz=RV+?U3PtF)VHc&p;K6>y?!ER zW%=hiO5DI8E|uu{t#3LkKVRelLSW##1BfaIeO})ioqMi8b=Ff6$PH~c6bg_eu0Dx1 zw+{-fY>)}p@1Vx^B8HD5i?%}ot^N2f}za5fZ+)fk7 z63?0(>fGo18LD?WIy#iA`B6`Rggv20{yuo=&G(_)`POR&6-ig#i#Kl$L0F$zOx(II z2AVqOp;2jTXvRb18x0HuKox0NKw^9bx@L$79)-%aokYq@h_Y8eMi9}9%40XsYXqJY zn-G}uF9%V8)3}Z2wz6_WYAP+j8L&l^tAf}X9lZ9SW&&AeOJxK-Ny5QF5ZZ9HAUx=W z*pn+K9072g{Zm;4DC)9=szTA+#F&9%7z8tl^%TY?4+?c>(3djZ^dMtnc- zDab<(2Y#lHl#^#Lk`HOw4;%r$i$Xzz1IoX9Kvv$oLDcL%keZ}VYxC_!cM26fNl?t;#< zI@KW}HK94>16Q1#3pVo$?9G^+gYs{`5q;1a#t4P%pXyNG=xA1?g$@Gq)9S(9VdO|A zg8~C?sUU?F$Y9X3O4ac&uK=E@sH*w`fcy%srm2Zs9DPPPMay^(dbyJY?m5*xs(J0_ zM@z?;xA@!Z7+eH`WXHMi4^}r&q&~jM0b(9700EHDp`VZ3)`DUJjhX^U4h#8dusReJ zOe8r%qW}kaY-D7_Y<1Bb1m(vqU&x@<0N}+@u!sejX6nabg?pf-LFjV&m_B~|tfY_Y zse7=HEuOw}S*&d|&4oQ@w~8g7K#=H>1}+NeT0Z?H2sJJWQgHQMF*s~U3UP5Duu5FJ z_L3F}lHZWtj)^!}-Bd-=(7&d=cZKcmzogQujnUR15o& zu6_*M1tS5dQmZRVN=n8c$qMog(s#{q(n@`^$s`dUIcxH}?KflezvCx@p|?olUoa$V zb=pzj>YUN_EhnbqpMGqXm7Wd?$+?g_RQp~ydn4Cg;O951miIW+g8-^v?Nh%+{|HG5 zuZ*Pyh&nms-AK_sv&sFokjsuYll#&oP(WYCu5{$tABG-|zM-+@dKgY#hk8IG4Kt)619aK3)j6#`_M(zlc8kC^13{8ul&~N%Z z-LOO6;9Hg~un20gRT^M+i?zPa&!B9Dc_=RWQ?4vbmVf{P)FLj9%l!s2K3wlnQ^O#d z?K}SuAKafl-37In1P*c%5U`snDilDvK<*8P#Zl6;yLyI!cvvmAAzbXsL>*e~0lZuS zS5sGa$Tz0?pJ>ibPbWjX5TFp{3d$e?rci;(_?&p+83webSwa$U8ue{(7Jv#I1SJjy z7l0&^+z`YG}NIIz|!)n1nyU1AQLo z<%1B6LO})*#|d6Q8vT%`k)H1}9S{+w9Y+2|`c!n(sgY|n084&BL0$c+ z&NGxx4-*3vNk~db?cJ>FL9&HQi=eV0C*ND-0TMaVtfd2n4hixEfWt|;n{!#u3chW5 z9&Vb>{{!Ey&6`tj>qkO@49QrltB#)gpg(z<91YwCX*y_Xo&*AYj7uM(khndFU7>}N z3i^=eKIBdq0Fe&#m=SnF0GO7G_2ro9engq23#kW%cKw);(LIKKH6 zV#udcv{_9yo{$@QpyEJ*j=J1;6<9z{hfFi{XP`sz8x%B&(G<;G_n8?B;861uQTTKJ zVgWxgeu`ZGcP#zCuz;--{@1_BPxhD9;X*gRJpdUKO*?g9P!zfR3qKJpf0JVz*H*J? z+xY+a56`o$e)nd^J-FGZ*!*Hp8C8+2S6+?-5D zADy&an8^;0;%}Zv!_F+-4J~EnyRxXYX$I^_TFT3PxF22AkJK~1P7W0pxWtXOAGYk$PysR5g0D)ZWTt$w?@2>&`iC?YD3Ww2$-IT%wyh zvEFA%gW7l0$AZ?}$afq&qqlZbhMmNtf0o{FY0c`QTiKwL6ZM*h=W42_qZCeAe{_Q0 zkJ!Yx;Tt>Y(TDxYa{Y2#oAZL#)i=sF3Nn+k@}*a?m*PB10=lz`4s0J8MgXqK)4y!X zUUu_b)xd$+FCf5z6{E?xuk_bQN`bmml=8}gCD3qaw?a$Rh41~^mssyO$wT@bQVGpt zTE;?f1<}({31<_KnTuQ7tA^{>mg;B2ew7mP)x=)9)jqFsXy{1lod);c+-iizi1oH{ zT0bVEl?_6y_Z<0no@U!J@d$L|+x8_jg)|=<9!trXU8Yt{33eV69q-`tYJ0Ao?!vD> zDkrtZtGVEhy%nVyDm?B;3cFvBS)hiae^IJ;rRsio=7xcyw(n8gLm%a?(-C~{_>HQk z(>;ZwPd0Zpi!?N+8`U$9WZ=csnc_mknnnmJD=Rm~C;e!XyNlXplaBZ`9@>|Q)l^Aa z$uOEeS)Wt=!a;uWh@btT)dDsB_~z@>80n8qYiXGmWh01Ulk}uEUe9HWql&sI6(-uK zdf+_PA~$wJ`-aiV_4@h!PTf@Jw-J%tM_-~y`$gN;Aa=vaCu)khx}(HhOh-x0^$*4; z{nMRJVK)?ZNfezj&R?fYk;h5P_W1vnN&iZ6zY^t8IYEPVjTc1#RNs8yyoLF?BcLd)v1)~*5MIq<3SWC=pFU)O6xdwMlH&6H*hb7++qt0LHt)SsitmkTs@`PO5y#8c$x9748ize=a(WvQr@tQCSdI!5OkAu`+%PthyH>ZLTzuo@s z0r~_q?8J_e{9Dwe(ByDs{nmaSfeo#8Q}_9-h_!sl2JJdhn1m@a+~0JoI&G*^v084H zya(y=xi9;~qQ(4@-N-FZTY?vM>_60z(RmSDZQxs}Swjlz#hXX(}u9<6$w8s<17gYCK^)j6|JcioO!%8yNuCG$MLPVcNt&mc@)U3fe#@ z^o(LTWWzk3i4wn8OF0oo82OEZ=+#_d*;qxlSf@in;Zv7itgbhtxOGMT=2LWg#^HtG zdEAgWD)Pjnc0I)8FQc^BCofAm8MnSshue*)8|NeV9xxk5#!0}}l=D+#d^MYo=&uY* z6fp&5=3f{|$ydic^fp-IXQAQ2#q-}z54-;rz9g^|Z9FSAZa%*t(bhPo-O72Mm=_YhT!o^r7X#N5X z>7(_6HGe%`rz7HhT=nJfjW zlT3rQGpU{O+B*kHxFTNLHtiDg-c}=r3S-jz%lQ`m#wd#!gB&qdOL!c{&)I()vB#e^9cvT1Z96)CpUe@R zPY2d8EX;#V*AMoS(OaO{P)xX!FgjYd5*9Aeu;8yh*d6x%NF1ZcZPhSM3a3T!>@W!z zCIW8!WN&lwov2ZVpgr}wpE7wmXqx(cd;KxBjaTr($fu*)G#MUO1FfR{XXO8;7dnf~~c+iJH66vw$XD1zeK5yjR*;Xq0*M2SCT0 zJHElh9b9xuk--EzB1}~iq8_qmm!}JNBbnmhZkl1|nyCxJ!nQ@#*9UK&H{7klVrJ_} zu2|%z8LcxI;8Q#KF`NR|7~OYGisf>J{n*=Y0vlLGm)2&&^=j$}tz7lbc({|IE>^`W zl0{ByAK~SIJ1?W1LLEs^5!5ECvv8K3#TloM+6H@CX-e8(Ul}gCO>fvfK~HkJU(j^? z{;$Q^*Owp@+T+?8$Jdt7_13ZUesOIMaE&^0zU8y=23}EHZ;jVIHoO&1HW0DPR>>bx z*q0W;$4-(ZNnaaOm$xZVVX++Rg*$5vJHUENy zsrTx}Sf~A`GuBR%8~kY~s@(@Ui!K?3#=8fG=O*N=e5tfjsb%hcnSIDl>fIfQ56oWd zUnQTO{!5xpCg1GNA;uR!yq+!2=6pFefjjslTVmg-$U-jGNcdy^pESzWoFunG*PZz8@uo z{PR!ypaTk}yT^#M3x%qYZLx;`yz87z(t?i(?x%3uv-xqfWF#4*jo;kkgro32JXj15 zGTJm}#vCU{g^fSod>r-4h(nh6m~;h&>hT&5g2%=UK14lA(%OeYIo9fVvH19{D zZrXf;SzJ$gx=Cyf=IS0^i=tkUTekVn=*m}@W0W~y{sMtf__sLz0E_W|2lt6O^M5%w zh1~LnT0RZ3bXUIOtQpPIBwB=1s6+*LkbNsFW;+Qz+Eb&pCPI7jqcdmCVgwNJWw%w$NmQ zNn1A`w_&Cthfl!|#$9^1@Cmlzs{f4siDg(}YpK5z55rUA!?$G@wg%fCJv}H2j^zKs z?5^W2SyQvJZ$$5A=ao}w(IbWi^nwA0tnJlhAz7g;lUfui z08=GM1}-4lb#b`+%-XHG`ZopVhxt`STfYzNLf!inPymas(OQ=>VHnS{kf(S%w;}hj z^Vf5DFJ7Mqh5E7^OcdR7P?n?II3_Skg~ciRJ>?#hD>X9gH>w|n%v@5$+ex)kF6w#g z$bwvLz(z_|PddzxJD(qprstqUejBEVSbEh%1F_%n=V>?Kcj+?x9x^G z-vtEbTmAEpnCK-Bcqbt=uvLg?c6Rz;1_f;892Yl!IF`Xvucap$-f?lXqk?x-#JJOJ zo!4*vK5j^@Pledw>`Cr4ZSM|o;UaR|wTg=MwM@bf?glM*d1IyH6ue}tIpO#Ph5D?c zJ74ZM`T`k`$(tO5PI{m_?^Av93apQ;vT%EoMBy2S-^cl~NA+~)XFUEK+TJ9|<;3=L zs^ERdP^QDyJDVJ^wtS%%o4*_w80=vC{$G0x(30C;Rc2y);Pw{J*{Zf5>?L1^%{`WNV!_NO}nx7S8 z{#j$!wzq97cJeS7T-kbu5c zQZW`9?@znA{J&3-92U*v7uf2X;D2a)W0lQSr?)3^_gz2^aC>7+)LPg6_Tkp_w{UCk+hLYz-g9W@I8vBeytf^HRLq7GF*Xkc6FVSI zK%nuM3)9a2{i(;Kx4j_SH);EL0kd7}xVTqJ79Z@4$DuO0^PF{73i2E*pYx2aZgt7g z!`oX7)#QaE+Qbu=l_5jK>EIzH2zSRh{N|bXZhE)5xBH!c4y}fdoSfXp;Kyu0;F{$2 za{ybRDW4RC>*F$1l9Z29QBg^I+g;>N(-Hgn(k@!bh+3ad^e)OZlS@Eg@m7XfrywV% znW{)Nz=K9N_+D^cVP`38vzRtlDDrd)k+{*>XlOm!)6-K#;yVFQIaqZ5g`Qx>ysK^> zIE6mL+S*!-N9MuxlvsG++(Zu0QaI#aiShZJQ`R38DK3JiL%BEOWpZ- zy*HDTRhEQ(16#SWP9l>a*o#S2OA=LUi9K!nuCP#o;lv5YM-?P>3JMA_?#6}Yim}!Z zN>4pOC%0Th`DA(j$s59bO8BI8hQ=r&o`@M-)?R5y32Zeo74o!;uHTq|q(dIBobdQ= zdR$>)VW{uPG19_Y_Cybi=E#=~Prv(7=g ze+q2nPN;?<`e6t@WC%tWLJbc`Gk80pvAd!EUTI+9$&3kcSVWRYSnJ|FvZ1Rym^LLB zmyJoD-!OWJ7D)@_&IUTb7qUn4 z|8^Nl|1k;VFq+T8e!JS_kvN14;Ni75O#sF;>=}3BCPr=^!T6Cu4Eod-k^vKvBmiFC z8?fKOpU|!>w(Ve@qrUPt2#1}n)j!M6oi@p2b#Z6B>7V%RoG0fj_IGyq=gCFJ{{Sd@ z!&!U_BPb}vWg<40*DW+9vNN*`{7u#EnS0fD{qLD=h(SB}J`}MRf)UBv?k34wxD<9@ zpXXgrV5@DB?M`faAHA@-Up?K-`9BB#yJKU7A#C!KcDr6=G6W`#Oh&L^AV?N~CW42& z-7UDe@qY;b;n+$meb2%B0K;qb!)j6KhasGI9=as(_uBgQ;*k`9(4F7K7q_eJ5{Cu7HfKhrtNDuugU~!z`p8YgDOd%|ZsYuVZ~osi zjx7%$D1}1lAH$#rbam%{yyV{D3}Tc_mK}E2!z;H% zeQG#)Fuy7*#@gk&cbEeF5fjnv^CuVm@(#&tC=?V^;Sd_@hGjxKJ5C!M+h&xHdq&Ru z4c}YNhuAayB>-k{8uhkW))V{@XWGoBHGW(E;IUvVoZG{_{t73uq(!Hu1;4sf3h1% ze?SbV>9-D|qM{&U^4!judBkua5djRc$#Q9Z%Yy&f@=yWWPOve3D)8J|WNV@Sq{9F5 zuF{CNJI6xZmBF!X$438gng8IGFT3!IZ6i8u1g~u4i@MXW^MB1V_5JN8z1U&rnIm;h zf79TdoiMfyj_>RQA2TioGeLFnc;L+Dxc@rl`)yFYR9YoDZ|HtiCfagqCUg@66B{Q_ z-jv?nEsz3nOEbuoCtpZ|v%wD%VVf@ygDF5tKQDN-!{wukHF^!a$d>*~AF+i$))b*FrMXyM@vg-Z1{i^e` ztrs*SUR1tSFP>25D7C40H}IG(^vxVwpN6Rg@AA1uL#xMK9K&5>gOMe|&c-%tPOSsE zXF3~u9+`edzp2tEUAf0lBHNZ&YwZvd)qK4-Rpu%tewNf7|H7BS_DPi9fpU^-)SXsi zAz4A~IyZ~Zw}(eGr~q%4YxD#Bd_J_-2rJcT$j+vP%Gae{&`5q!@#ftxbbov6b=4}H zuUd6SO9)*o`BHVeWWCZHB~57FX@_t$N0m}oN@YE2b~%^3dYParse16LU|1vN6GbgH z6-$5FHu<{81oviX0@>=kBd)zEHDyvx(EQV=#~q{6O235Al&cQd+%-o6dD+UH6=F}U zp#NTRx9u}1dNmgtg)b(oTgVcF*75{%yXgtuwW~pymS;NIhkg6`t`q+<@QdQV>To?H z?z`pJ5~g!m>cxTt^h69x@TX2aoB0mCUrzNlVIBMyOQT(<4X6nQ1-`OsA4UGC$p(FG zCTeDwQck{EX_}}V%T#!{z;yltLx)M(MDC?r=lJp^kJiyY4qw|BF0c=tkmc7cpMDiZ zNx2{CzPcbFH?gpuy~=>bKdL53)fL6_ zcF~tM_R$j-#yeX{xxexk^vd(A8O{WsR@tpk+9*9?BkTWAEHr%DsON_4(MKt37v(h) zY_AE5uCy+sz5LU{%wMFNsM9~PbdNw(Xr?#Gy;=9(!et@zA>mfCs(EBbqFdz~QI3VI zo2}I)M?(5S#&}K2wDgp02t%*NGV>2KC%v(9nxA!h)1{I<&R|g~h%$EF^3c*Z!wTe0PA@tTOjYDFB&z&c2RiRCR@F1)ExWtq0Z6neq;(WtG){H#=~pvf&`9pd36e}*va%dDc_ z?$l+C_t(*5_brGkVy|5yd%Y~&NVvKr3lgWg32Nz66u+#XR7R`V5`JC7W+{1WCb`u? zGgxHOB)+l!A@7u#O}k$Ih<=1xCv)@S$11%e-u&tlwoWqwS(TM0_=FC;YR7ZEV2%1A z6rl|-Zql4UYSp>;I>FET&BZFl*>@e?bVn|Ro^5{Cc6Nc0<3!p)ig@Li=JLk-(*o$U z0h>^Pn;FqRT6Fii(%+Y4*o^hQez!km^M#c$s7bAC6R!@`C@Vq2dP2Fe;OB~ahkIH- z`7;-mg>ehf#p=$}!#>}?e)7{K3g4STI!oBwIZk&r1)FOh=CmqA?<`Au^m2 zy)AZE?`9c4$InSpt#Y)VF+CFMw<3)nv!M4M5GE8~EuglVU?+HQ+{n;M&MXi_3}@X+ z3N1}u3G3(?mtNw<%-0N^>$Chis1;{ydp<`c`8cO(g^o@2#gsQz?>m@pw&pzkz)&Nv zyqj9D{3An(@@KWk`#GU^c$%~@Yy9E*dX4Lu*BkU-OHT@>YSlF#SP)V*X?n?H9x3tB zu6ci1W%5#NM|XLi`EoMX0>P|9wQ%PyK#Z9>PvI=8rEr_m-j{BRosRigaKq%Nr{w^7 zwG>0Y?*5Lb+TG#j&vb^aIZDrWEH#k&`sY70O^Q2f-!?`ObEX{qk4(%SAxPlOQADW; z<|l;a_@*%?ylY-cnbT>3CZjt-_u3Czq)|Eg&stizJy{Li6q!qg4+;i$7(^M!!i(FwVJu!~=4BrOiv&#&7 z?l;<$zb;O>6W634Faf@k@wNkRH7k&H(y#M_VY_tE_{Z$psao?8oy<&Q9^uGwe$1cp z%CBXlQm2XQCi8N&SVHu4B&ehMM=)say0tbNvrBR&t~M__$fxNWeN4Y7+1Mv_^nA_^ z*Eo^a-#rrizSBjoG5Qrz5&o}n3KI;!R~t;1vWRaOO0CP~hefVUw71}S9Z(yw()`q2 z32po?3_K3I9rL7%E?Q7r2|Baj-Kp14Zh?1TkLmw-Dd>!*;@yqk7NXH@xAn>@nJ?oq z;-;32*!^zb88o~ddEZB)QZrm_yz?wkx@dLGnj)<{tzWmfKX;Cf*qg7AJU_dTcS*Ok zZ)}jQ-^P!Vkn@%`<%!3gpy%9*NmX}}YB@Wr|H4c%SnOU)P5yvan16@w_Nok}0FMY? z>qwbpQo|Psz z*&i)4?lJLOX)-dIpCwrA&hEP{)Y3Ii&at3Z?IhEiQ!+sQma?D9GgGz>pFWOq=EMgx z=Q_UaNOb>=T7N(&RA=T7aJ-)379gKd`S2G<7ujiaFM<9}ufND=jGkp`z@}7fOAtO?$%0!P2Ia zx7Df2KZtb4Zw0Rx&wI2fZeF$2_MF-&0CG1&im7~s2`3Hata9bl+NpOM7hb*Zp42B4 zH(s>JwHe6m?6{z^qG>_Om*}gmLe=crArd;l(QV?b{d~@l0f^!m=Q@|z_ZqAgmir&@ zSE!iKc1*sSvGx>D+dkQF_u~8KD_#DYS*j+SnaYtdF_Rn%Nt){#ORbDialDwQwkKGA zy;0jPo)1bEC3`p;yYFoo;>>s>pou0 z#CwJo*^Ey8nI}u$79%7{SYjlcsS_S^aY0{y*QGW0>z&6vrGGlEVe#N!OO|a9bJ03MW;PYCj?|FY!#Pkwt9=Xk@ zRK2Jc7Tb?yWgpYtE`>$43o|Jto^~^+mN#C}^&u@-a`8MaIg<@lJD$XhhpE z_4$ZtzItOnqv#8-g^YgS2MqOcc5hf)@cxdxtAx@;@uia?H2bxcZ^u%PmygnT`!M>= z1ZL2@q;ze={!0}1*HEweYLzmlcK(o%F?)X9g(Y{5$i7{&&GZwt;T`s4XPWn@`iuNI zC(EYSJjvQzQ(CPgCYGCbHrLTTYEsWPSGGP>&9_XxNk3c7B(vPoB290mexdWs@a{K^ zRVG4`b!dxjI@6oR#lzCFwhtFtKXtOX_;h{mGkud#lvm4HJNkz{fsb-9;bY#1s`plD zQDVP7^d`hNwrIUs$C)rMe~HpLlh2!*Czb48{lQA!W@E2KXzqp9oP42N=jJg|Rn-Th z$SBLqCF6)YnO7a;dS})xGAt8WQ-UvBaI5i^=cgRiT{y>w!OHsTRiE+Rur+!tPZmJ7 zok__oxG~pFT&?^%9zSyw=M%~uk1}WE=g%EavXI~PmZ3(I!vOb|DW>_WNmZI?S4 zg}s8_CWeV%#N52HDL&cBUyR&XgX*!tYc|Batph(T(1**LMvpZ{3r0?}8uH9N%F0(Y zng6Cs_~@s>UD!|F6k6)+e7!EHpWI+HZN>N zmLq_lIL%{!VL<-X=zyVFnqkJ=&&T$M34vk^XD*Z_yNFL@v+|em9%UKUB2@nhVhN6D zyJsC@7#gWFAWHe+0-KttSCoRRpi=U=kNnv-wfz~ECi5+Q1DNckwHfK6Ut{y5UrTPx z*^Z*Tlg~lfGLMTS3(UHjqmbeBI`pkoYzKb^YgVriqmuC-N#7{nU&eIm^BR+wK`yzp z_E}T6-NwXPPNNDVS(6$Y57zE)E@l<8!S9n8Fs2dGMTP`TV_i7_X=dW7Tw}Km{`^}> zR5O|^U2Ma(V}srnY5Oe}$|~7Q88j%pLJfIB)1sR$HfZm@EGAwomR%D<89{Wy~zCytEkK!Jb%Y;WDXgFwPs5scg-=jeQ}DoxipF!e#?{9E9n9KF`_C{krAoxq{F~Yy|HCYMt zUNE4``^j6DCY`;c`7u?c&Q;xgd0JgTofiqxlIHiEGdkGa(|B_}%p4b(w$aMc|0*q+ z`oZMQ9N~Lk^1Gn-^-9^*cVUW|l}V-SZg~s0^1RxctC>03=l7`@jU^wp?EgrWWi->) ziskRqO|*_*({%V^w)W5^3t*1>pk6QvkzB<4sA*=0^KThDm?g`YEHA%r)fp^v%5_`_ z7##W)5-Ip+S?M+;8xvj0)Y_XTDnyvG6!X<>Liu%5_!UfY%(Dy`7MFV1HMw==eG_| zAJ~&!hSghX{zCAr)iF`GR#IC3d||hCA3tVB_sVU%S?gR0jBm_{ zY{#JWAV&7bx}Mb_d&($Y`ui#E*$zqpK^IaQ3n-LLpRc#jFQ7#cG%cCBrW&4u9VAhqbV=c{J7!r3eu6x#eQE{AHzVMFkN@% zD>J3$ghV9sG$_!j>zsULP5g?CwI?SU?A0v_Uwr8p?|xLrS>AEGZlOW(JJmLW?Jn@J zngD!`$Nj&;klkBr02vDfhL8_Bwwm$|cP(5DYyGb4kZ#CS*t?vyINPYZ<6{TMRU_A1 ztOtEB!FFd$7J|gL*W6-9tZmYP@o$hCS}%_Oqv}F>kW_-=%}Mf|*=PIV|Jbo@sa~zm z9@!1EEFb;QcHlr~OMZ)an-y9g<>u{iLvEo74cZLHbCB>cGg0zA5Rx4AOy?TuhC?2j z3E?|ejVnJ7BnRv)M$5FAqHcN{x#}hin6i*`!4m{(`lTY`xIF(Y%bFTN%>HfJhPjMa zooqjoe4(>EWaQr)2YaG@i0t^pH?`at$*%RYGj)5cJNs&Qcix<=wy*D)DZ)(xWyJRx zA9zIXc)(Je9U8x0H^2z#=JOZHMDC5oe|S$)8hjA7PDi9}c~66Xp%$c{dHk^};B zdFh$=L8K(lwJMbR9A_jP{Nna@j4Jo?Nm99bY;GkytN(KFo(V8dz94gYcMSKeZRyEK zJcJHcz8;%=9L@_IZ|`&=c^)ngXau0rsqxVxEny^aV>!HJ%7hiZtVKJ>lZN>{L0$PiU+MvEDkA16gvT6t{C1fA;^`(#UXtwgx67OXOQ z3rP}h#0V|0N?#6*G$V6fP2f;2NAMjO1j7%$&ySx3_iYr2vVbkse+t0<(;;2q+v7^& z!k&Hh`K)oujOh~j?%~_j-UA!um&~K=&P;uK$+z|1+gs|cIWyoT%+gbFC!0SUWC0uL ztiD_;6zdNh2y?uJIx|%|!^|h2xGxaer}R>4OEt@Jvo}k|cEe%)>Sw~8v(&%tbSM4o z&LuIia8U;H-1Qtb?Rc$Ie$p_>Q}+9}r{nj?{zg&TuKTbUSUf{c4ShVy$lpwV>`7fP%e&5D`t+5*DDw%o7giPVSr zBCu``k}aY?JnR&I3i9o~KA3_g6%7(>pl6Sn9FP7W#uTjb{%X4nw7v8gb@~5Z6KHto3~G^HUIK$j1a*xkJ&1T8fAlhm8}B#Nybwi zo#s{>A=8GFjK9XQ6m|-lbEnafViH&XvTk}|QL*ST7&&g7EZCZ1=sIC@6YL259Ep_z z5Q`p;f|X7Y?O)8?96rND2`CH{i}8(LK~xw7YwZy;iUb=jO^WNYd7G*1=)zR3x%dEV zsUIwotWc0v{}8)|x`_j%h@XSF7Rf{j|3*hyFA^F#eyVqwD}-Ku_BsqHofL-*PGJSB z`oI_nyAKbI4(%ZB2^clGcM#Q?bT?ZXZtClrt~#Bq)zB!(K}56>=!E zIjnm}0d~Ndg~NM*=u5Z?z^30%UD@~AyoQUObl&!nc@nhF$91jbf-K#!!yU3Neu_vt z=7hJwK*s1XtAZ%T9rOgCRQwWnF-1>DF&pN~*F|AZ#bc#p2bswKra&I%R8iRvRbruV zYBJ5$BE>Aag%@bBX}89^^O~seIOO}rvEL1waEFXdC!9mAp6yFpMwqhT0BJvw;{gHe zfwnX(?{9OmWK4~cmgs95qBq;1Xc~H-<>R_+L|{WXB%6uv`HkS^Toq_N%uMxVBAjPFxKl7sD9Y33nLk{qIRpmN%=AiS)-UBWKk#TVt_6``#09om0|3Cwt?(UeX zN8jViI$(i8Mk!o@8z|9XdugKXb{yGF0B?vW>f{JfK->6lDTdjK=UoEZ_Af^N`RAW2 zozG0KmCR<0bAfNXg&>C!J<9UAY0SFKUrS3%GN;JMQkWPRD)Po=uU>;}Z~?cF_I)UM zM8g<<%_Ma7+D_0M9(-NP))9Ufc@7oEWcl#nzy9Fdsr>Ix*Cp2}Hh$7Dd>;-14uLn| zaa;urVb=#90_Sk`r9ap0<}DM$dKg3xB`vO8W@sV{u5u|eEb~4Ev$AUOdBzQ52L#Xz z_R|gXho!DdSyy#GvD(1bf(HJ>EEY^6Uc7k0Mc_N|X#*NZKY{Jxx%iO45Bc_S-xSaj zDlr_BjN>m%HvA0Yz+h~^6@{Udegx)-^{!l6nfLC_*x6v~_l6N*61{qZlyL*r82$de z`@rADPllb!uCMpEaB^Dy0-uR{TDEN#5Y}7MyBtnz+!ThAZ@T95N{Et*YTqYuxVpwL zzbk3UH9k%TxT=x<}s zj`0jC41cz(Jl~Zv98kw}8Qht0Dzl zmP5tmJ}s*%(**nrTX6#82EG2k<0zEcJ+G^AlsY|yqc@ML8=3#pc{?}NQFYvHAfw+R zyWFSv+^d_{N-_pm0mTJPTD`x&KmO#)8kkMVwhy3L6t)x}g-ef9b0vbcLD<3Xu5<PrBom0Q3rUero?#zY1U}b!!9Y^%Gc7y+MOOjQT}*Pj6?l1RxoObWpT zfQ<1oe*O}?$DDh|AwG#iUJ&g1J*)o8K%9fZyhq^9zjl}6H~IZ$b3_Wpp+zOlSpPon zwo`K<-rhg-sn}$Tay{oV^|JdQxQ&8>{geF$)b~^34A$c|TrFCVq9x)ABZ`{24y&!Ji+o^@*dUleg{;a~0kB?UYV0`!VQmdDlsLd#FoeH5c5 zt*l7(MURu7f7x`>{}A()YYX+>XNc~U3M764MJybKe~Iv-S=nDlc4_~>hv|RhMB@ze zE64sgPL>Fmfj=|SuZ&2fVGxu>WNG}bE9wNP4iTJ{RRrdM>VK+X-PHLQ8}4-MssD~> zf9lf!yMsU0=lC#|_J22ITqk!t=7GBG-}T9%oLq1R-4c7(7FNAIkQe{Nz;9VYorc=~ z>TCF{;a;^60AQ~~3G5DH@Q|s(w*4+wK_=--q1p*(^gJuulXYxy=-01$W(YvBBswU} zqWAZ!pAaDC0|a=yN56Y`KQ1O!6oV4{u!Ni+H#dlj%dc~jI}T&51X{+ig+FI({%ZF< z3y>`itF9pW%( z2t2L=L6HK8LBwzV|E1#pz3AF^A*d^OW+AQ;JX~?VEl*jzRI9*ac%XQ!%$yLt@=dAk ztCEft#(c9R{2Jn|_ygNIcxM(6zDP*siwxn=VX-cIvkr%ln<-%D+##W1uPf56e%4j8 zQLA#D#WB@6G*i|6Cf^NexqUp~6G z+?EM5^!sW|%#$)yG0YYTncM*j^cM^8_TqVwxOe;`jy&Q_8!_TKEw27%eZhp`zqHxh zzcP_ic?*9)@fL+e zntjzJ3u}svs>ms@qO9P7;)E}C_>J8#Di4Dv!`)maDtD%>0_@)5c;QvtfH8sPsf;`K z_xnX=)a;u<-R(g2JX{w2y*{{Z5avP?da%UtnHl*GT=4RfiT1S7SA1S+#oicl==_qb z52(;h9~4R7;FwbpIg@VTOT%k+W@@@)35CW*%11d+rdznu@DA2*Z)|>ruKOIJ@NUUX{Q&;qu^qZE zZFd1kV)%kylTREodu9wol2paA?(OWYOT)eJif_wGf^^bRKTnP7El@v+%E`zyQA!3GG;Sm;6UT| zV&vZ)X1Hw3C_aAC&n(g{>SF?Oxo}HgJ(GbuD<5TN`t90PxzN4{LO57d4_r0jZLqO-9Evrbkfm;OHy`hD z2Ij}ogw7tt@&I$u&IL0h*r}MB@SJM6rV|oh})}v&}WM5Cd(PH88Rw!+@f#m zWNM9AZ~~9>K;&qKr7J&gSV5alAZ6gPh7~^kF@u(cC9nyEuuJFj$eDQ3_GB!7<*C+l z$eE<#nTopQA>PYL*Q{jl8u>+UtMwi9?u^;ATC;v_H$AZX&O}+FV{1h_I7u`KWG zC@5@Y%~p6c7##TV4!Zg!pRbVZDS~P0ZTGo(jW3&S{UcQGNC?l)t23DEOfUIHbMhPr z9zAsHbo%uCC&#&p$%m?Npv*ooWiu8>M*TZ&4;i@ee*tHb#mFAKuiV(gEflJ?MMO3- z?b^N!Y8xx80c&K$)WItksrZAInX<3R{l-Qah?pf(JDk9cPie09Sga@1Zsb<0O@{?8 zZqJ$~HG_2{0pCVm0He1GsH1IcEbH>j6O*fJ9G?{y?7ur1EmbKNs%>PP-zB&tt!XFz zr{=1{*n`%AwN)^#uGq(4t!Dz1qfAW?ATK=>2>JFKm!tS1Kia%AJ6BHGA70vTnn@@n^e>n3&t-=GIM~Furel$q1~Yd1(Yr&7dE<+XEiFnG{m`7 zYa5G5+H%xm83S7UR2_cY)l}cOdC0M;tLgn@G=XruSEW#<*f`lBO}Ex;x22?-A_7>? zBr1BWh=`o;yI(m<1bdg6M++$0y7dUs%a-t#+s1WqsHFh9MQa_Mh&U5GXtm`p=WS&_ zjhb}3?V7MQ!N=IaQQu9rklgPz$SCSZ^>kl83LD)ht#~$0mm5j?l5bC*CaYWG-@#W; zhQ@Yu?ZkyJ1|{VQFW#CO*@@rRi+yY+`nnI&$hY^@??xyb)xfv6VX-akv}4FUlzA1;UXd<*b+c@&?z|cPW{Fhe|3#S z^{#K_iM?8v5+Ot@#>!c1!Ykw&x# zH}{ogd89mh&?~+@O^}+6F$i4FF7u!1s5(1&L9e7#|#n~ zBPE%5a>p0lWtb=%9i0j>;hg7j6r$AWxInsE^t>H?M94+`+_lwFd7hNsx3bI|S%Y;| zrkblSIMnLEd*8U#M1*!7070APSg>iE`M#;WVSy?$R;*v&K|C6?T}s$8SHNE1XAZ|$ z<`3PG5Q#=@mse|Sm7jO_;6K{0Q+IVHA5<*5$U4Jfb)55>u%ddDfPf4vZ%umRUd|S&6(YLFs zUk#~>XP9rsh$%~+1hU*J|7u=}kbK>*9;CTF`DV;*y*T=I2uO!&4A~JN;4iwpS`s?d zmse2m&ZMz!I$TUGKiA(v9-sv0YI6$qDB-C!`KUbhotr~f5O}{Zu<$$FM!BS&d!31= zup>Q~i4wVXU#H&XdYmaY*!J!j9jy&Xh>P@jsM*~L&>ogLW7^++om&Y65&7=rRbnrE zdus}jOPQcT&oNAb}m1O;8cCWgN=>Z?Wg!CFLwf`wRx!-I6qduYP_kVY#~y zpxCHHz&QI%9ePy4R2gpC`%GK==%os(!aBrB&D91_5==;i+<-s?Z`sp_@Qu>mY0SQd z)I2EpxPV-hllZ*$u;uUFy%O5)45oFSZzDdQs zsCcpX>&TR_oEwUs^BFhky@qh2|~v!t~%()N95S-I4@(QO^QLX)C&Z0q%A z-vw6?9lZq8Ek0Eg!W_UdOl|B&9ug){SaeBQkO2BaE4{Nh*kt+URCcCi$u7*Z-Mbi2 ziymHjVbLp5?(T`zLaV0F_%^~+Ee(2nB5TdGuN#=CeYaR=R2rlRd7pU%YaVqbnNf12hSxOPaF8sxE%&R;9L|?C|`_ z6JXB7YQKl&#R$I$erSvpJji>2APn$1Cf|42Ip3rZKUFsUwOu_nxQm#)NSp>#s?y}U z%d$rpZ~IVDYP|@>=SXl(tii(tNAPUW77IB%boi~z5A|uaDMLH)uW(%N;?@tq5$vPq zwvPeT2`OB_MfFr9E{iA6Na@TZE{8*T03fbT;sV)rxu6~|*}Wz4G=SP!n+Vw3fqV*Q zjQ@K&Lq2MZA8I0FyF&mUxuQ3;;0<-tZvb+a*>E4(>$7f@@&(A9UclMgZetryrn&uq zhPT_YTqY{zk81=(KZ*MjYIr_O2$Wt%#6kl{X6{%uAhXt*2pT~bs7sJJyZCZ588Q<3 zO*Ew8W&R?fg1=SF7uv4`z&>|qWcJ!1z&zamr*MK_8l@_2($`}%KgltYPg>k2)WLjS z#ez(Jqt6NV)2N`biPczOq3PC%$bu_Na;-gh)emFY7}_@WoUUkO<9f-pWk`P~+Bp@yLe zeFi|)y8x5b!yfip)QgJK6Y?_2KL(=cm4=zM87uyK7bKa&BW-EF62SCzYJgX^7jHBy zZanqy)%Wn?t^Cn|ePhDQ!~^iwsN|Fy19uAWLQZH2=ymeSd9VlR&A{tl1ws-*A~qIJ zXtK?yLC7Z5lZ5>9<>N`;CuS?x1vFO?J~X@YfOjD%pO_fiX|t(`sY71}l82AZZYd`k zGc+|eE}=FiUKLkkXo2uk9XG#%a=Vq8%fT1$_v+H7c!ud75>P$Twf3{gwX3|Z`>U(B zBj(7brqN=`_3@+b4eQ-8m=QwEb6<}T`q0!C00uSr)ZKK&o!4ZEFjQ{*H$N=8yu}tI zgY7#sy#AWiH+`OfiopsyN(}-K$|MCW3UQAo+EoH7SltpK3WAv`cRPJ8xR8Ii(nSbf zSx#Q}3i!p0fL@Z{fxQkv^bLDKNAc+!m#g=it_;rJP#0$+%Ixeb+W<`$BZjPTD(}G9 zYDav_W#zh=rPw+KTox8M*bLb8{C=GwFanfjGxny9nB=0$XC?!8DsH^)-wCNU)S1K$ ziK(gfEdt6`a9>G_Q4EK20o4>PdWGtdRPR4tccUl(9GGGSl?QO@x@mIg@YuF~IxgN$ z|3Zf+1VHeiF&DCxWrH$2XQg|M;;V!kMV+oS@LErL>%!}Tulw?&$8eZPVb3v}2V;>e z#?RREzzXC`#oG&qERV$X9E<=b)Vh_mP#z>pz~J|>@r^Jx0H+1)*9$1kP4OWZ+ zj^@U#EE=2HHsF8Pu}T`%Jef|YltI}ou^$>3918)Mutf-;5&_BJRQ9KBLXU1u5$$Vo z!W{kmvFZaFYBQ!UXkzZYj~MaFNIOrN@3ZdyM7)&c(5u=!UFTvT-=|MO^#SXM7wrc< zdpRi|Jeo1Pcm*46%aj)jak5x>_*O+Xq3n~`&erN;QHymftT;t7ccAniaX{{Bb=c8l z;2tM#pXfEAZvo3BbN0^CL9t#s2pm`KRu=}?zuXJFQ6XtmaucoF*O~~Z0KveE(x19J zc!UP(S52iQf3jBf1UWQFbJZL?3o$p(h?Gk><7A6~eSw-M#wR3+`KT~tC4j0o)d!&f zLJ=icFgiq#)t%DSqvz_1ORYP{ z|NCH4yNf4KA^<5p*PnhFb)W193kMbHk|wnvnoa^b%Y`p!t}?vfp2q-gvmYajw+IVt z^E0y%0U%+Y9foJ)Rx+7AI5_#Iyc5S|i#sg$tejq*qKIQtD)}q;L}hDnUa{D@>$h6} z3?+YAelm)(>FmGWCn`S}kMMz$3u}s4sB$mUyztS5Gm2eu37&XFL38&d7w4HXUVHnS zI;#4fRlFwsGNW z1*w|_G~)OA41!x?pz*18Jv8HGlL`U19))I7^WjT_H!r=~5&V-fK&|-}dBDrS%`Vc; zAorSURj)I4MD(7uau!AwbCJgLs_oU#nm{<*R+-P{&!(2E*GjQ%u(JnHcPDK3#{{!> zK`HWUbzIO+M~IKzH!puq zf1@v~-c6;?APpbcl@b{T23K}|G`{zfPA*IttnZh<0I4d;R=8iwUA53Wxx0Q5we*TA z$@^AEQ+QdhHgnb4(G^Z(sjGGOW^~H$FFyP6{5G}R2S?_N{%eLj9yQi5l!=gyjcndj z(q63@gE4qHHjqxiD4obah4vV3lvd4)&w|?WcCZ#$ZqTrN^?K+ul#)N@)e9S2RN2;B zE-Ge-^HbN#5brgk@f%e$J^WY(*VaY2PRlL-?3K^@!cd}aF z_LZ`+ix0)X`(z1oqGNG;&{Emym?B*^fI2}T0p2!C_-I@qP8lH9M~7{Y+-jyF-a+#G z4d)TnjqY|2;aZ)s0=Pr){>kU&0jY#dj}J9xFWbZ2%=0DxB*_Uo`YH_0vUirGkzAhe zII4yLJ)fk_Lmg7WEopU(qS(fcDKKDK!MB#iT=fpps z6nZqq?W*xIYagPTsXVvrcA^U-QnfDH7y2Of3R4!dz>m})63<3cGI@i4A~`dPCvIIo zC;m+mwZEeotHmF}y0nVi5Hw?!&k`Co1^1hEA3&muZD6-%0F{y+>aTa2ap0aIvntth z^A})D$PE=G6Xh%+kBSa!)Iz<)OJ#%7TF^p$GX6aAHcJ*^^hxNo^zkXtfl!<6D`i7` zBp)Qe8@#PhqO4wLqKk(nL{jVv59Ut`SoUtTTcdb=Cb@G z%JGzD4u+$N-2|kXvl2Qv6#smJeZ7>u2(d+Wc~be?`9m9LX6x>OiGWAvKQJ8jSqD43 zBE|k-O0XJC7@;qV+K+YJS0r2~CPkIAev0IlFbz>8sBZ_ES{ETBGbI>*<03&qUxXjG zHpf3i-9?d}A~O>rX*@4~+qVQm|K9Zekr-Dk;Inx0a5A6i&;Il24q+-gg{<`2 zhl2LN&J<=GYR7lCWgp0qFoX(lriFPh5N<%~#F|d~qo8V_JbZ_#(veCwBlZJ8```c} zg88j?A`V=dW4 z5%)h1hevE7AQk9V&u*vIT2B3NOq-8RFvOf@0y38K-@JR&RPB;VwI)G=bu{8P38Mpp z|LsD2H~q0eRf#SUjfhCt6Z#L$%0agN5U?z2 zG?7L5t(>g}@+0U?w!oJ1KQ1eb^Eq*3QU~^9KU+&$w?5JWI690%c?ouCjIng(G+~vmC?}R~~c=by3;-Q+58}puiG0FyuPO;qx zvx@2U<4MGA@&4a#zwH|wwYtB+U6_5O{jZGO8emS~=oNuLqFbemtuX$)Zsce0KXBGW z(<31PQH5Ykah^W$M_nJRroae|5CpT0%l>$1qMk`4VnRd@_p8G6A8PJT%0DT~9-)*{ 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 Date: Fri, 7 Aug 2020 15:06:10 -0400 Subject: [PATCH 115/115] Update repository link --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fe5779e..39f3b14 100644 --- a/README.md +++ b/README.md @@ -47,13 +47,13 @@ This application is deployed using the [AWS Serverless Application Model (AWS SA #### Clone with SSH ```bash -git clone git@github.com:mcnamarabrian/lambda-refarch-fileprocessing.git +git clone git@github.com:aws-samples/lambda-refarch-fileprocessing.git ``` #### Clone with HTTPS ```bash -git clone https://github.com/mcnamarabrian/lambda-refarch-fileprocessing.git +git clone https://github.com/aws-samples/lambda-refarch-fileprocessing.git ``` ### Build