티스토리 뷰

IaC를 통해 람다를 배포하는 여러가지 방법이 있다.

CDK를 통해 cdk-cli를 통하여 배포하는 방법, SAM(Serverless Application Model)을 통하여 sam-cli를 통해 배포하는 방법. 또는 CloudFormation을 통해 직접 배포 코드를 작성 하는 방법.

지금까지 내가 알고 있던 세 방법의 공통점은, Lambda Handler를 S3 Bucket에 올린 후, Ref: 를 통해 가져오는 방식이라는 점이었다. 이런 방식에서는 CD(Continous Delivery)를 통해서는 어찌 배포 해야 하는가... 고민에 빠진 시점이 있었다.

최근 AWS CodeBuild의 IaC를 작성하다가.. BuildSpec의 내용을 CloudFormation의 yaml에 직접 작성하는 것을 보고 삘이 왔다. 아 분명히 Lambda Handler도 CloudFormation의 yaml으로 작성하는 방법이 있을 것이다.

찾아도 찾아도 안나왔었는데.. 드디어 방법을 찾아냈다.

https://docs.aws.amazon.com/lambda/latest/dg/services-cloudformation.html

위 링크를 토대로 아래의 코드를 만들었다.

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  FnHelloServiceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
        Version: "2012-10-17"
      ManagedPolicyArns:
        - Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  FnHello:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      InlineCode: |
        exports.handler = async (event) => {
          console.log("request:", JSON.stringify(event, undefined, 2));
          return {
              statusCode: 200,
              headers: { "Content-Type": "text/plain" },
              body: `Hello, Lambda`
          };
        };
      Role:
        Fn::GetAtt:
          - FnHelloServiceRole
          - Arn
      Runtime: nodejs12.x
      Description: HelloLambda
      MemorySize: 128
      Timeout: 8
    DependsOn:
      - FnHelloServiceRole

위 yaml을 AWS CloudFormation의 콘솔에 가서 업로드 후 배포하면..

놀랍게도 CloudFormation을 통한 람다 배포가 가능해 진다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함