React+AWS環境を使ってアンテナサイト(RSS)を作成③
Reactでアンテナサイトを作成してみます。
いわゆるアンテナサイトをReactで作ってみよう思い、その時のメモを公開しておきます。 今回はバックエンド部分をCloudFormationを使って作成します。
環境
前回PyCharmをAWS SAMのプロジェクトを作成しました。 今回はCloudFormationを使ってデプロイします。
- PyCharm 2021.3.3 (Community Edition)
- Package Type: Image
- Architecture: x86_64
- Runtime: python 3.9
本記事で出来上がるもの
- AWSサービス(Lambda, CloudWatch Event, Role…)
YAMLファイル作成
以下のYAMLファイルで作成するAWSリソースを定義します。 作成したLambdaはCloudWatch Eventで10分ごとにキックする設定にしています。 これで指定したS3バケットに各サイトの記事リンクが記載されたjsonファイルがたまっていきます。
また今回作成したDockerコンテナはAWS ECRにプッシュしておきましょう。 PyCharmではデプロイの際にECRのレポジトリを指定する必要があります。(手順は別途記載するかも…)
■ template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
python3.9
Lambda and EventBridge SAM Template for crawlRSS
Globals:
Function:
Timeout: 3
Environment:
Variables:
TZ: Asia/Tokyo
# S3バケット名を記載
S3_BUCKET_NAME: <bucket_name>
Resources:
LambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: CrawlRssLambdaRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- arn:aws:iam::aws:policy/AmazonS3FullAccess
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: CrawlRssLambda
Role: !GetAtt LambdaRole.Arn
# タイムアウト値をデフォルトから変更(30秒)
Timeout: 30
# メモリサイズ変更(512MB)
MemorySize: 512
PackageType: Image
Architectures:
- x86_64
Metadata:
Dockerfile: Dockerfile
DockerContext: ./src
DockerTag: python3.9-v1
Rule:
Type: AWS::Events::Rule
Properties:
Description: Scheduled Rule
Name: CrawlRssLambdaRule
# 10分ごとに実行
ScheduleExpression: 'cron(0/10 * * * ? *)'
State: ENABLED
Targets:
- Arn: !GetAtt LambdaFunction.Arn
Id: lambda
FunctionPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref LambdaFunction
Principal: events.amazonaws.com
SourceArn: !GetAtt Rule.Arn
Outputs:
LambdaFunction:
Description: "Lambda Function ARN"
Value: !GetAtt LambdaFunction.Arn
LambdaRole:
Description: "Implicit IAM Role created for function"
Value: !GetAtt LambdaRole.Arn
これで表示するデータがS3にたまっていきます。 次回フロントエンド部分を改良していきます。
Share this post
Twitter
Facebook
Email