5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CloudFormationでLambdaを構築してみる

Posted at

はじめに

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

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?