[AWS SAM] 템플릿 계층화(스택 중첩)
9957 단어 samCloudFormationAWS
AWS::Serverless::Application을 사용하여 템플릿 계층화
서비스별로 템플릿 파일을 나누어 다음과 같은 구성을 만듭니다.
src/
├─ api-gateway/
│ ├─ template.yaml # API Gateway定義、API GatewayからコールされるLambda等の定義
│ ├─ swagger.yaml
│ ├─ aaa/function.py # Lambda関数
│ └─ bbb/function.py # Lambda関数
│
├─ iot-core/
│ ├─ template.yaml # IoT Coreの定義、デバイス間通信時にコールされるLambda定義等
│ └─ ccc/function.py # Lambda関数
│
├─ cognito/
│ ├─ template.yaml # Cognitoのユーザプール定義、認証時にコールされるLambda等の定義
│ └─ ddd/function.py # Lambda関数
│
│
├─ s3/
│ ├─ template.yaml # S3のバケット定義、バケット操作時にコールされるLambda等の定義
│ └─ eee/function.py # Lambda関数
│
└─ template.yaml # 各サービスのtemplate.yamlをまとめるためのtemplate.yaml
각 서비스 폴더 아래 template.yaml
(api-gateway/template.yaml
등)는 평소와 같이 CloudFormation 또는 SAM 형식에 따라 설명합니다.
src/template.yaml
에서 각 서비스 폴더 아래의 template.yaml
에 정의 된 리소스를 응용 프로그램 (AWS::Serverless::Application
)으로 정의
AWS::Serverless::Application
구문은 공식 문서 참조
src/template.yaml
는 다음과 같습니다.
src/template.yamlAWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
CognitoStack:
Type: AWS::Serverless::Application
Properties:
Location: cognito/template.yaml # template.yamlのパス
Parameters:
StackName: !Ref AWS::StackName
ApiGatewayStack:
Type: AWS::Serverless::Application
Properties:
Location: api-gateway/template.yaml
Parameters:
StackName: !Ref AWS::StackName
S3BucketName: !GetAtt S3Stack.Outputs.S3BucketName
IoTCoreStack:
Type: AWS::Serverless::Application
Properties:
Location: iot-core/template.yaml
Parameters:
StackName: !Ref AWS::StackName
S3Stack:
Type: AWS::Serverless::Application
Properties:
Location: s3/template.yaml
Parameters:
StackName: !Ref AWS::StackName
Location
에 각 template.yaml의 경로를 지정하십시오.Parameters
는 각 template.yaml에 전달할 매개 변수를 지정합니다.
Parameters
로 건네받은 값은 이하와 같이 참조한다
Parameters:
StackName:
Type: String
Resources:
testFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub '${StackName}_testFunction'
...
템플릿 간의 매개 변수 전달
예를 들어 s3/template.yaml
에서 생성 된 버킷 이름을 api-gateway/template.yaml
에서 참조하려는 경우,s3/template.yaml
는 다음과 같이 Outputs
를 사용하여 버킷 이름을 출력합니다.
s3/template.yamlAWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
StackName:
Type: String
Resources:
InfoS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub '${StackName}-test-bucket'
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
Outputs:
S3BucketName: # バケット名を出力
Value: !Ref InfoS3Bucket # 上記InfoS3Bucketで定義したバケットの名前を出力する
출력 된 값은 src/template.yaml
에서 다른 template.yaml
로 Parameters
로 전달합니다.
src/template.yamlAWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
...
ApiGatewayStack:
Type: AWS::Serverless::Application
Properties:
Location: api-gateway/template.yaml
Parameters:
StackName: !Ref AWS::StackName
S3BucketName: !GetAtt S3Stack.Outputs.S3BucketName # s3/template.yamlで出力した値を渡す
...
S3Stack:
Type: AWS::Serverless::Application
Properties:
Location: s3/template.yaml
Parameters:
StackName: !Ref AWS::StackName
생성되는 스택
스택을 중첩하여 정의하면 출력 결과는 다음과 같이
각 template.yaml
에 대해 "중첩"된 스택이 생성됩니다.
부모가 된 스택을 삭제하면 중첩 된 모든 스택의 모든 리소스가 삭제됩니다.
Reference
이 문제에 관하여([AWS SAM] 템플릿 계층화(스택 중첩)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takmot/items/74104197ce0a070a5401
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
src/
├─ api-gateway/
│ ├─ template.yaml # API Gateway定義、API GatewayからコールされるLambda等の定義
│ ├─ swagger.yaml
│ ├─ aaa/function.py # Lambda関数
│ └─ bbb/function.py # Lambda関数
│
├─ iot-core/
│ ├─ template.yaml # IoT Coreの定義、デバイス間通信時にコールされるLambda定義等
│ └─ ccc/function.py # Lambda関数
│
├─ cognito/
│ ├─ template.yaml # Cognitoのユーザプール定義、認証時にコールされるLambda等の定義
│ └─ ddd/function.py # Lambda関数
│
│
├─ s3/
│ ├─ template.yaml # S3のバケット定義、バケット操作時にコールされるLambda等の定義
│ └─ eee/function.py # Lambda関数
│
└─ template.yaml # 各サービスのtemplate.yamlをまとめるためのtemplate.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
CognitoStack:
Type: AWS::Serverless::Application
Properties:
Location: cognito/template.yaml # template.yamlのパス
Parameters:
StackName: !Ref AWS::StackName
ApiGatewayStack:
Type: AWS::Serverless::Application
Properties:
Location: api-gateway/template.yaml
Parameters:
StackName: !Ref AWS::StackName
S3BucketName: !GetAtt S3Stack.Outputs.S3BucketName
IoTCoreStack:
Type: AWS::Serverless::Application
Properties:
Location: iot-core/template.yaml
Parameters:
StackName: !Ref AWS::StackName
S3Stack:
Type: AWS::Serverless::Application
Properties:
Location: s3/template.yaml
Parameters:
StackName: !Ref AWS::StackName
Parameters:
StackName:
Type: String
Resources:
testFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub '${StackName}_testFunction'
...
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
StackName:
Type: String
Resources:
InfoS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub '${StackName}-test-bucket'
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
Outputs:
S3BucketName: # バケット名を出力
Value: !Ref InfoS3Bucket # 上記InfoS3Bucketで定義したバケットの名前を出力する
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
...
ApiGatewayStack:
Type: AWS::Serverless::Application
Properties:
Location: api-gateway/template.yaml
Parameters:
StackName: !Ref AWS::StackName
S3BucketName: !GetAtt S3Stack.Outputs.S3BucketName # s3/template.yamlで出力した値を渡す
...
S3Stack:
Type: AWS::Serverless::Application
Properties:
Location: s3/template.yaml
Parameters:
StackName: !Ref AWS::StackName
Reference
이 문제에 관하여([AWS SAM] 템플릿 계층화(스택 중첩)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takmot/items/74104197ce0a070a5401텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)