Zappa를 활용하여 Django 프로젝트를 API Gateway + Lambda를 활용한 서버리스 아키텍쳐로 배포하는 과정에 대해 공유합니다.
이번 글에서는 zappa deploy 도중 겪었던 에러들과 해결 과정을 공유합니다.
IAM role 관련 에러
| 1 |  | 
IAM 계정의 퍼미션을 제대로 주지 않았다면, 위와 같이 deploy 도중 permission 관련 에러가 뜰 수 있습니다.
API Gateway, lambda등의 설정들에 대해 zappa에서 설정 해 주어야 할 것들이 있는데, zappa에게 준 IAM계정이 그럴 권한이 없을 때 생기는 문제 입니다.
관련 내용은 Zappa 공식 Github에서 찾아 볼 수 있습니다.
위 문서에서, AWS polices Git issue를 소개 하고 있습니다.
Permission 추가 방법

AWS 콘솔에 접속 및 IAM 서비스 콘솔로 이동 후 Users 항목으로 이동 하면 위의 화면을 볼 수 있습니다.

여기서 Add permission을 누르고 Attach existing policies directly클릭 후 Create policy클릭

이후 나오는 화면에서, JSON 클릭 후 원하는 Permission을 입력하고 추가적인 진행을 해주면 됩니다.
저는 위에 적은 AWS polices Git issue를 참고하여 아래와 같이 IAM에 permission을 추가 해주었습니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:GetRole",
                "iam:CreateRole",
                "iam:PassRole",
                "iam:PutRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::[본인의 iam account 번호]:role/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListVersionsByFunction",
                "lambda:DeleteFunctionConcurrency",
                "logs:DescribeLogStreams",
                "events:PutRule",
                "lambda:GetFunctionConfiguration",
                "cloudformation:DescribeStackResource",
                "apigateway:DELETE",
                "apigateway:UpdateRestApiPolicy",
                "events:ListRuleNamesByTarget",
                "apigateway:PATCH",
                "events:ListRules",
                "cloudformation:UpdateStack",
                "lambda:DeleteFunction",
                "events:RemoveTargets",
                "logs:FilterLogEvents",
                "apigateway:GET",
                "lambda:GetAlias",
                "events:ListTargetsByRule",
                "cloudformation:ListStackResources",
                "events:DescribeRule",
                "logs:DeleteLogGroup",
                "apigateway:PUT",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:UpdateFunctionConfiguration",
                "cloudformation:DescribeStacks",
                "lambda:UpdateFunctionCode",
                "events:DeleteRule",
                "events:PutTargets",
                "lambda:AddPermission",
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack",
                "apigateway:POST",
                "lambda:RemovePermission",
                "lambda:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:CreateBucket",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}
이후 zappa deploy를 다시 진행하면, permission 에러는 더이상 뜨지 않는것을 확인 할 수 있습니다.
"Django" 카테고리의 최근 포스팅
카테고리 모든 글 보기| Zappa를 활용하여 Django 배포하기 - S3에 연결하기 | 2020. 10. 11 | 
|---|---|
| Zappa를 활용하여 Django 배포하기 - MySQL RDS에 연결 & Migrate 하기 | 2020. 10. 10 | 
| Django - django-dotenv 사용하기 | 2020. 10. 09 | 
| That port is already in use error in macOS | 2020. 10. 08 | 
| Zappa를 활용하여 Django 배포하기 - not authorized to perform error | 2020. 10. 04 | 
| Zappa를 활용하여 Django 배포하기 | 2020. 10. 03 | 
| Elastic Beanstalk - Django AWS S3 연결하기 ( static file ) | 2020. 09. 29 | 
| Elastic Beanstalk - Django AWS postgresql RDS migration 진행하기 | 2020. 09. 28 | 
| Elastic Beanstalk "Command 01_migrate failed" Error | 2020. 09. 28 | 
| Django 서버 에러 받기 - sentry 사용하기 | 2020. 09. 28 |