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 |