はじめに
CloudFormationを用いて、AWS Lambda構築していきたいと思います。
今回はLambdaを構築するところまで実施していきます。
また、Lambda@EdgeとしてCloudFrontと連携して利用するところは次回以降に記載予定です。
AWS Lambda@EdgeはCloudFront が配信するコンテンツをカスタマイズする関数を実行できるコンピューティングサービスです。
目次
・Lambdaの設定項目
・CloudFormation作成
・最後に
・参考
Lambdaの設定項目
今回はnodejs.18.xを利用し、コードについてはS3から取得してくるようにします。
Lambda@Edgeはバージニア北部にのみ作成可能なため取得してくるS3もバージニア北部であるひつようがあります。また、今回作成するLambdaもバージニア北部に作成するので注意してください
また、IAMロールとCloudFrontへのアクセスを許可するためのポリシーステートメントを作成します
上記以外の項目についてはCloudFormationの設定を見てご確認ください
また、S3については前回の記事を参考に作成してください
CloudFormation作成
LambdaとIAMロール、リソースベースのポリシーステートメントを作成します
LambdaEdge.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Lambda@Edge Deployment
#------------------------------------------------------------#
#Parameters
#------------------------------------------------------------#
Parameters:
PJPrefix:
Description: Project Name
Type: String
Default: pj-ogataro
AllowedPattern: ^[a-zA-Z0-9\-]*$
Environment:
Description: Environment Name
Type: String
Default: dev
AllowedPattern: ^[a-zA-Z0-9\-]*$
#------------------------------------------------------------#
#Resources
#------------------------------------------------------------#
Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub '${PJPrefix}-${Environment}-LambdaEdge'
Runtime: nodejs18.x
Handler: index.handler
Code:
S3Bucket: !Sub '${PJPrefix}-${Environment}-storage-useast1'
S3Key: lambda/lambda_edge.zip
Role: !GetAtt LambdaExecutionRole.Arn
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub '${PJPrefix}-${Environment}-LambdaEdge-IAMRole'
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
- edgelambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: LambdaExecutionPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: arn:aws:logs:*:*:*
- PolicyName: LambdaFunctionPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- lambda:InvokeFunction
- lambda:GetFunction
Resource: !Sub 'arn:aws:lambda:us-east-1:${AWS::AccountId}:function:${PJPrefix}-${Environment}-LambdaEdge'
LambdaPermission:
Type: 'AWS::Lambda::Permission'
Properties:
FunctionName: !Ref LambdaFunction
Action: lambda:GetFunction
Principal: cloudfront.amazonaws.com
SourceArn: !Sub 'arn:aws:lambda:us-east-1:${AWS::AccountId}:function:${PJPrefix}-${Environment}-LambdaEdge'
#------------------------------------------------------------#
#Outputs
#------------------------------------------------------------#
Outputs:
LambdaFunction:
Value: !Ref LambdaFunction
Export:
Name: !Sub '${PJPrefix}-${Environment}-LambdaEdge-Output'
最後に
こちらでLambda@Edgeを導入する手順は完了です。
参考になれば、幸いです。
参考サイト
Lambda