Terraform에서 Serverless Framework로 만든 API 참조
5252 단어 TerraformServerlessFrameworkAWS
소개
개발에 있어서, 인프라는 Terraform, 백엔드는 Serverless Framework로 만들고 싶었기 때문에,
각각을 어떻게 정의하면 좋은 느낌에 참조할 수 있는지 검토했으므로 비망 메모✍️
사고방식
/api
부하에 온 요청을 API Gateway에 흘린다 방법
Serverless Framework는 sls deploy
그러면 뒤에서 CloudFormation 스택을 만들므로,
Terraform에서 aws_cloudformation_stack로 참조
serverless.yml(발췌)service:
name: example-backend
provider:
name: aws
runtime: nodejs10.x
stage: ${opt:stage, self:custom.defaultStage}
region: ap-northeast-1
# リージョナルのAPI Gatewayを作成
endpointType: REGIONAL
# Lambdaで使うRoleはこちらで作る。ActionやResourceは適宜設定
iamRoleStatements:
- Effect: Allow
Action:
- secretsmanager:GetSecretValue
Resource: "*"
functions:
example:
handler: src/example.lambdaHandler
# これだけでLambda Proxy統合のAPI Gatewayができる
events:
- http: POST api/example
custom:
defaultStage: prod
ServiceEndpoint
라는 키 값을 사용할 수 있습니다.
Terraform은 다음과 같은 느낌 (거의 생략이지만 ...)
실제로 스택 이름은 var로 주입하는 등
terraform.tf(발췌)data "aws_cloudformation_stack" "backend" {
# これでCloudFormationの出力が参照できる
name = "example-backend-prod"
}
resource "aws_cloudfront_distribution" "infra" {
# 省略
# API Gatewayのオリジンを作る
origin {
# ServiceEndpointから xxx.execute-api.ap-northeast-1.amazonaws.com と prod を抜き出す
domain_name = "${split("/", data.aws_cloudformation_stack.backend.outputs["ServiceEndpoint"])[2]}"
origin_path = "/${split("/", data.aws_cloudformation_stack.backend.outputs["ServiceEndpoint"])[3]}"
# 省略
}
# S3のオリジンを作る
origin {
# 省略
}
# API Gatewayの定義
ordered_cache_behavior {
# Serverless Frameworkで指定したのと合わせる
path_pattern = "/api/*"
# 省略
}
# こっちでS3を定義。/api/*にマッチしないリクエストを扱う
default_cache_behavior {
# 省略
}
}
Reference
이 문제에 관하여(Terraform에서 Serverless Framework로 만든 API 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yktakaha4/items/a6fb117085f1fa546ed9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
service:
name: example-backend
provider:
name: aws
runtime: nodejs10.x
stage: ${opt:stage, self:custom.defaultStage}
region: ap-northeast-1
# リージョナルのAPI Gatewayを作成
endpointType: REGIONAL
# Lambdaで使うRoleはこちらで作る。ActionやResourceは適宜設定
iamRoleStatements:
- Effect: Allow
Action:
- secretsmanager:GetSecretValue
Resource: "*"
functions:
example:
handler: src/example.lambdaHandler
# これだけでLambda Proxy統合のAPI Gatewayができる
events:
- http: POST api/example
custom:
defaultStage: prod
data "aws_cloudformation_stack" "backend" {
# これでCloudFormationの出力が参照できる
name = "example-backend-prod"
}
resource "aws_cloudfront_distribution" "infra" {
# 省略
# API Gatewayのオリジンを作る
origin {
# ServiceEndpointから xxx.execute-api.ap-northeast-1.amazonaws.com と prod を抜き出す
domain_name = "${split("/", data.aws_cloudformation_stack.backend.outputs["ServiceEndpoint"])[2]}"
origin_path = "/${split("/", data.aws_cloudformation_stack.backend.outputs["ServiceEndpoint"])[3]}"
# 省略
}
# S3のオリジンを作る
origin {
# 省略
}
# API Gatewayの定義
ordered_cache_behavior {
# Serverless Frameworkで指定したのと合わせる
path_pattern = "/api/*"
# 省略
}
# こっちでS3を定義。/api/*にマッチしないリクエストを扱う
default_cache_behavior {
# 省略
}
}
Reference
이 문제에 관하여(Terraform에서 Serverless Framework로 만든 API 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yktakaha4/items/a6fb117085f1fa546ed9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)