Serverless로 독자 도메인 적용 + Lambda에 여러가지 정리해 배포
8914 단어 람다초보자ServerlessFrameworkcognito
이전에 프론트 배포에 대한 메모 을 썼습니다만, 이번은 백엔드편입니다.
하고 싶은 것 (최종 구성)
다음과 같이 람다에서 실행되는 애플리케이션을 AWS에 배포하기 위해,
필요한 구성 파일을 만듭니다.
전제
· 자신의 도메인과 인증서가 이미 획득되었습니다.
· node.js 및 Serverless Framework가 설치되었습니다.
절차
대략적인 절차는 다음과 같습니다.
-Serverless.yml 설정
1. API 기본 경로 매핑
2.Function 및 대응하는 API의 기술
3.DynamoDB 지정
4.Cognito 명세
- 최초 배포 전 필요한 작업
1. AWS 계정 인증
2.create_domain
좀 더 자세히 써 갑니다.
serverless.yml 설정
1.API 베이스 패스 매핑(custom:area)
아래와 같이 custom: 에리어에 필요한 정보를 기재한다.
basePath에 API 콜할 때의 베이스가 되는 도메인을 기재.
(API는 https://[api.domain.name]/[bathPath]/***의 형태로 호출된다)
serverless.ymlservice: [service-name]
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, env:STAGE, 'dev'}
region: ${opt:region, env:REGION, '[region]'}
plugins:
- serverless-domain-manager
custom:
customDomain:
domainName: [api.domain.name]
stage: ${self:provider.stage}
basePath: '[basePath_name]'
certificateName: '[*.api.domain.name]'
createRoute53Record: true
2.Function과 대응하는 API의 기술(functions:area)
이하와 같이 대응하는 Function을 기술해 간다.
(API는 https://[api.domain.name]/[bathPath]/[api_name]의 형태로 호출된다)
serverless.ymlservice: [service-name]
functions:
Function_name:
handler: bin/[Functionのmain.goが配置されたフォルダ名]
events:
- http:
path: /[api_name]
method: post
cors: true
3.DynamoDB의 지정(environment: 에어리어)
API 콜을 트리거로서 S3나 DynamoDB에 접속하고 싶은 경우, environment에 S3bucketName나 DynamoDB의 이름을 기재한다.
접속처가 CloudFormation을 이용해 만들어지고 있는 경우, "cf:"를 붙여 지정하는 것만으로 좋다.
참고 : Serverless Framework에서 CloudFormation 출력 값(Outputs) 참조
serverless.ymlservice: [service-name]
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, env:STAGE, 'dev'}
region: ${opt:region, env:REGION, '[region]'}
environment:
STAGE: ${self:provider.stage}
REGION: ${self:provider.region}
TABLE_NAME: ${cf:[スタック名].[テーブル名]}
4. 사용자 인증의 기술(custom:area, functions:area)
이번에는 AWS Cognito를 사용하여 사용자 인증을 수행하므로이 경우 authorizer 필드에
arn: COGNITO_USER_POOL_ARN을 지정한다.
CloudFormtaion을 사용하여 UserPool을 만드는 경우 다음과 같이 작성합니다.
serverless.ymlservice: [service-name]
custom:
authorizer:
arn: arn:aws:cognito-idp:${self:provider.region}:99999999999:userpool/${cf:[スタック名].[UserPool名]}
identitySource: method.request.header.Authorization
customDomain:
domainName: [api.domain.name]
stage: ${self:provider.stage}
basePath: '[basePath_name]'
certificateName: '[*.api.domain.name]'
createRoute53Record: true
functions:
Function_name:
handler: bin/[Functionのmain.goが配置されたフォルダ名]
events:
- http:
path: /[api_name]
method: post
cors: true
authorizer: ${self:custom.authorizer}
처음 배포하기 전에 필요한 작업
1. AWS 계정 인증
먼저 Serverless용 IAM 사용자를 만듭니다.
・Policy는 「AdministratorAccess」
・액세스의 종류는, 「프로그램에 의한 액세스」만 체크.
생성 후 표시되는 액세스 키 ID와 비밀 액세스 키를 이용하여 다음 명령을 실행합니다.
serverless config credentials --provider aws --profile serverless --key [アクセスキーID] --secret [シークレットアクセスキー]
create_domain
다음 기사를 참고하여 create_domain 명령을 실행합니다.
Serverless (node.js)에서 자체 도메인 SSL을 적용하는 방법
실행이 성공하면 사용자 지정 도메인 이름이 등록되어 있는지 확인할 수 있습니다.
이상!
sls deploy를 하면 배포됩니다.
참고
배포 성공 후 다음 CORS 오류가 발생하고 왜? ? ? 라고 생각했지만,
지정한 UserPool이 잘못되었기 때문입니다.
전혀 관계없는 HTTP 헤더의 세트 개소라든지 봐 버리고 있어 해결에 시간 걸렸습니다…
Access to XMLHttpRequest at 'https://api.domain.name/bath-path/function' from origin 'https://reqested.url' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Reference
이 문제에 관하여(Serverless로 독자 도메인 적용 + Lambda에 여러가지 정리해 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wata_miki/items/13f83f9e5fd84113a365
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· 자신의 도메인과 인증서가 이미 획득되었습니다.
· node.js 및 Serverless Framework가 설치되었습니다.
절차
대략적인 절차는 다음과 같습니다.
-Serverless.yml 설정
1. API 기본 경로 매핑
2.Function 및 대응하는 API의 기술
3.DynamoDB 지정
4.Cognito 명세
- 최초 배포 전 필요한 작업
1. AWS 계정 인증
2.create_domain
좀 더 자세히 써 갑니다.
serverless.yml 설정
1.API 베이스 패스 매핑(custom:area)
아래와 같이 custom: 에리어에 필요한 정보를 기재한다.
basePath에 API 콜할 때의 베이스가 되는 도메인을 기재.
(API는 https://[api.domain.name]/[bathPath]/***의 형태로 호출된다)
serverless.ymlservice: [service-name]
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, env:STAGE, 'dev'}
region: ${opt:region, env:REGION, '[region]'}
plugins:
- serverless-domain-manager
custom:
customDomain:
domainName: [api.domain.name]
stage: ${self:provider.stage}
basePath: '[basePath_name]'
certificateName: '[*.api.domain.name]'
createRoute53Record: true
2.Function과 대응하는 API의 기술(functions:area)
이하와 같이 대응하는 Function을 기술해 간다.
(API는 https://[api.domain.name]/[bathPath]/[api_name]의 형태로 호출된다)
serverless.ymlservice: [service-name]
functions:
Function_name:
handler: bin/[Functionのmain.goが配置されたフォルダ名]
events:
- http:
path: /[api_name]
method: post
cors: true
3.DynamoDB의 지정(environment: 에어리어)
API 콜을 트리거로서 S3나 DynamoDB에 접속하고 싶은 경우, environment에 S3bucketName나 DynamoDB의 이름을 기재한다.
접속처가 CloudFormation을 이용해 만들어지고 있는 경우, "cf:"를 붙여 지정하는 것만으로 좋다.
참고 : Serverless Framework에서 CloudFormation 출력 값(Outputs) 참조
serverless.ymlservice: [service-name]
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, env:STAGE, 'dev'}
region: ${opt:region, env:REGION, '[region]'}
environment:
STAGE: ${self:provider.stage}
REGION: ${self:provider.region}
TABLE_NAME: ${cf:[スタック名].[テーブル名]}
4. 사용자 인증의 기술(custom:area, functions:area)
이번에는 AWS Cognito를 사용하여 사용자 인증을 수행하므로이 경우 authorizer 필드에
arn: COGNITO_USER_POOL_ARN을 지정한다.
CloudFormtaion을 사용하여 UserPool을 만드는 경우 다음과 같이 작성합니다.
serverless.ymlservice: [service-name]
custom:
authorizer:
arn: arn:aws:cognito-idp:${self:provider.region}:99999999999:userpool/${cf:[スタック名].[UserPool名]}
identitySource: method.request.header.Authorization
customDomain:
domainName: [api.domain.name]
stage: ${self:provider.stage}
basePath: '[basePath_name]'
certificateName: '[*.api.domain.name]'
createRoute53Record: true
functions:
Function_name:
handler: bin/[Functionのmain.goが配置されたフォルダ名]
events:
- http:
path: /[api_name]
method: post
cors: true
authorizer: ${self:custom.authorizer}
처음 배포하기 전에 필요한 작업
1. AWS 계정 인증
먼저 Serverless용 IAM 사용자를 만듭니다.
・Policy는 「AdministratorAccess」
・액세스의 종류는, 「프로그램에 의한 액세스」만 체크.
생성 후 표시되는 액세스 키 ID와 비밀 액세스 키를 이용하여 다음 명령을 실행합니다.
serverless config credentials --provider aws --profile serverless --key [アクセスキーID] --secret [シークレットアクセスキー]
create_domain
다음 기사를 참고하여 create_domain 명령을 실행합니다.
Serverless (node.js)에서 자체 도메인 SSL을 적용하는 방법
실행이 성공하면 사용자 지정 도메인 이름이 등록되어 있는지 확인할 수 있습니다.
이상!
sls deploy를 하면 배포됩니다.
참고
배포 성공 후 다음 CORS 오류가 발생하고 왜? ? ? 라고 생각했지만,
지정한 UserPool이 잘못되었기 때문입니다.
전혀 관계없는 HTTP 헤더의 세트 개소라든지 봐 버리고 있어 해결에 시간 걸렸습니다…
Access to XMLHttpRequest at 'https://api.domain.name/bath-path/function' from origin 'https://reqested.url' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Reference
이 문제에 관하여(Serverless로 독자 도메인 적용 + Lambda에 여러가지 정리해 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wata_miki/items/13f83f9e5fd84113a365
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
service: [service-name]
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, env:STAGE, 'dev'}
region: ${opt:region, env:REGION, '[region]'}
plugins:
- serverless-domain-manager
custom:
customDomain:
domainName: [api.domain.name]
stage: ${self:provider.stage}
basePath: '[basePath_name]'
certificateName: '[*.api.domain.name]'
createRoute53Record: true
service: [service-name]
functions:
Function_name:
handler: bin/[Functionのmain.goが配置されたフォルダ名]
events:
- http:
path: /[api_name]
method: post
cors: true
service: [service-name]
provider:
name: aws
runtime: go1.x
stage: ${opt:stage, env:STAGE, 'dev'}
region: ${opt:region, env:REGION, '[region]'}
environment:
STAGE: ${self:provider.stage}
REGION: ${self:provider.region}
TABLE_NAME: ${cf:[スタック名].[テーブル名]}
service: [service-name]
custom:
authorizer:
arn: arn:aws:cognito-idp:${self:provider.region}:99999999999:userpool/${cf:[スタック名].[UserPool名]}
identitySource: method.request.header.Authorization
customDomain:
domainName: [api.domain.name]
stage: ${self:provider.stage}
basePath: '[basePath_name]'
certificateName: '[*.api.domain.name]'
createRoute53Record: true
functions:
Function_name:
handler: bin/[Functionのmain.goが配置されたフォルダ名]
events:
- http:
path: /[api_name]
method: post
cors: true
authorizer: ${self:custom.authorizer}
serverless config credentials --provider aws --profile serverless --key [アクセスキーID] --secret [シークレットアクセスキー]
sls deploy를 하면 배포됩니다.
참고
배포 성공 후 다음 CORS 오류가 발생하고 왜? ? ? 라고 생각했지만,
지정한 UserPool이 잘못되었기 때문입니다.
전혀 관계없는 HTTP 헤더의 세트 개소라든지 봐 버리고 있어 해결에 시간 걸렸습니다…
Access to XMLHttpRequest at 'https://api.domain.name/bath-path/function' from origin 'https://reqested.url' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Reference
이 문제에 관하여(Serverless로 독자 도메인 적용 + Lambda에 여러가지 정리해 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wata_miki/items/13f83f9e5fd84113a365텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)