CloudFormation을 사용하여 CloudFormation 매크로 만들기
12189 단어 CloudFormationAWS
소개
이 기사에서는 AWS CloudFormation 관리 콘솔을 사용하여 CloudFormation 매크로를 생성하는 단계를 설명합니다. (초보자용)
또한,
이 기사에서 샘플로서 소개하고 있는 템플릿의 매크로의 처리는, 매크로에 「Key」와 「Description」을 인수로서 건네주면, 10 자리수의 랜덤인 캐릭터 라인을 생성해, Systems Manager의 파라미터 스토어에, 키 그리고 그 값으로 10 자리 무작위 문자열과 설명을 등록하는 처리를 제공합니다.
본 기사에서 게재하고 있는 템플릿의 최신판은 아래에 두고 있습니다.
htps : // 기주 b. 코 m / 오쿠 보 t / 아 ws-c ぉ d d ぉ r 마치 온
CloudFormation 매크로란?
CloudFormation 템플릿의 표준 정의만으로는 실현할 수 없는 처리를,
템플릿 내에서 Lambda 함수(매크로)를 호출하여 실현할 수 있는 CloudFormation 확장 프로그램입니다.
참고
AWS 블로그
AWS CloudFormation을 AWS Lambda로 매크로로 확장
설정 절차
1 AWS CloudFormation 관리 콘솔에서 스택 생성을 클릭합니다.
2 후술하는 템플릿을 선택합니다.
3 각 파라미터를 입력합니다.
매개변수 이름
용도
비고
스택 이름
템플릿에서 만들 리소스 집합의 이름
예 prd-stack-vpc-20180801
CFnMacroName
만들 CloudFormation 매크로의 이름
4 후속 작업은 기본값으로 다음으로 생성됩니다.
만들기 전에 다음을 확인하십시오.
AWS CloudFormation에서 사용자 지정 이름이 있는 IAM 리소스를 생성할 수 있음을 승인합니다.
5 상황이 CREATE COMPLETE가 되면 CloudFormation 매크로의 작성이 완료됩니다.
6 Lambda 관리 콘솔에서 작성한 Lambda 함수(매크로)가 작성되었는지 확인할 수 있습니다.
템플릿
cfn-macro-01.ymlAWSTemplateFormatVersion: "2010-09-09"
Description:
CloudFormation Macro Create
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
CFnMacroName:
Type: String
# ------------------------------------------------------------#
# LambdaExecutionRole
# ------------------------------------------------------------#
Resources:
LambdaExecutionRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub "${CFnMacroName}-LambdaExecutionRole"
Policies:
- PolicyName: !Sub "${CFnMacroName}-LambdaExecutionRole-Policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Resource: "arn:aws:logs:*:*:*"
- Effect: Allow
Action:
- "ssm:PutParameter"
Resource: "*"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: ""
Effect: Allow
Principal:
Service: "lambda.amazonaws.com"
Action: "sts:AssumeRole"
# ------------------------------------------------------------#
# Lambda Function for CloudFormation Macro
# example : generate random string(10) and register SSM
# ------------------------------------------------------------#
LambdaFunction:
Type: "AWS::Lambda::Function"
Properties:
FunctionName: !Ref CFnMacroName
Role: !GetAtt LambdaExecutionRole.Arn
Handler: index.handler
Code:
ZipFile: !Sub |
import boto3
import string
import random
ssm = boto3.client('ssm')
def handler(event, context):
key = event['params']['Key']
description = event['params']['Description']
randomstr = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
ssm.put_parameter(
Name=key,
Value=randomstr,
Type='SecureString',
Description=description
)
return {'requestId': event['requestId'], 'status': 'success', 'fragment': randomstr}
Runtime: "python3.6"
MemorySize: 128
Timeout: 5
# ------------------------------------------------------------#
# CloudFormation Macro
# ------------------------------------------------------------#
CFnMacro:
Type: "AWS::CloudFormation::Macro"
Properties:
FunctionName: !Ref LambdaFunction
Name: !Ref CFnMacroName
Description: !Ref CFnMacroName
CloudFormation 매크로 사용
템플릿 내에서 CloudFormation 매크로를 호출할 때 정의하는 방법은 다음과 같습니다.
(이 예에서는 RDS의 MasterUserPassword에서 사용합니다.)
Resources:
DBInstance:
Type: "AWS::RDS::DBInstance"
Properties:
MasterUserPassword:
"Fn::Transform":
- Name: CFnMacroName #呼び出したいCloudFormationマクロの名前
Parameters:
Key: MasterUserPassword #各引数
Description: "MasterUserPassword for RDS" #各引数
DBInstanceIdentifier: !Ref DBInstanceIdentifier
Engine: MySQL
EngineVersion: 5.7
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: 100
StorageType: gp2
DBName: !Ref DBName
## 以下 省略
Reference
이 문제에 관하여(CloudFormation을 사용하여 CloudFormation 매크로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/okubot55/items/f54110c844a1c61bc3b7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CloudFormation 템플릿의 표준 정의만으로는 실현할 수 없는 처리를,
템플릿 내에서 Lambda 함수(매크로)를 호출하여 실현할 수 있는 CloudFormation 확장 프로그램입니다.
참고
AWS 블로그
AWS CloudFormation을 AWS Lambda로 매크로로 확장
설정 절차
1 AWS CloudFormation 관리 콘솔에서 스택 생성을 클릭합니다.
2 후술하는 템플릿을 선택합니다.
3 각 파라미터를 입력합니다.
매개변수 이름
용도
비고
스택 이름
템플릿에서 만들 리소스 집합의 이름
예 prd-stack-vpc-20180801
CFnMacroName
만들 CloudFormation 매크로의 이름
4 후속 작업은 기본값으로 다음으로 생성됩니다.
만들기 전에 다음을 확인하십시오.
AWS CloudFormation에서 사용자 지정 이름이 있는 IAM 리소스를 생성할 수 있음을 승인합니다.
5 상황이 CREATE COMPLETE가 되면 CloudFormation 매크로의 작성이 완료됩니다.
6 Lambda 관리 콘솔에서 작성한 Lambda 함수(매크로)가 작성되었는지 확인할 수 있습니다.
템플릿
cfn-macro-01.ymlAWSTemplateFormatVersion: "2010-09-09"
Description:
CloudFormation Macro Create
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
CFnMacroName:
Type: String
# ------------------------------------------------------------#
# LambdaExecutionRole
# ------------------------------------------------------------#
Resources:
LambdaExecutionRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub "${CFnMacroName}-LambdaExecutionRole"
Policies:
- PolicyName: !Sub "${CFnMacroName}-LambdaExecutionRole-Policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Resource: "arn:aws:logs:*:*:*"
- Effect: Allow
Action:
- "ssm:PutParameter"
Resource: "*"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: ""
Effect: Allow
Principal:
Service: "lambda.amazonaws.com"
Action: "sts:AssumeRole"
# ------------------------------------------------------------#
# Lambda Function for CloudFormation Macro
# example : generate random string(10) and register SSM
# ------------------------------------------------------------#
LambdaFunction:
Type: "AWS::Lambda::Function"
Properties:
FunctionName: !Ref CFnMacroName
Role: !GetAtt LambdaExecutionRole.Arn
Handler: index.handler
Code:
ZipFile: !Sub |
import boto3
import string
import random
ssm = boto3.client('ssm')
def handler(event, context):
key = event['params']['Key']
description = event['params']['Description']
randomstr = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
ssm.put_parameter(
Name=key,
Value=randomstr,
Type='SecureString',
Description=description
)
return {'requestId': event['requestId'], 'status': 'success', 'fragment': randomstr}
Runtime: "python3.6"
MemorySize: 128
Timeout: 5
# ------------------------------------------------------------#
# CloudFormation Macro
# ------------------------------------------------------------#
CFnMacro:
Type: "AWS::CloudFormation::Macro"
Properties:
FunctionName: !Ref LambdaFunction
Name: !Ref CFnMacroName
Description: !Ref CFnMacroName
CloudFormation 매크로 사용
템플릿 내에서 CloudFormation 매크로를 호출할 때 정의하는 방법은 다음과 같습니다.
(이 예에서는 RDS의 MasterUserPassword에서 사용합니다.)
Resources:
DBInstance:
Type: "AWS::RDS::DBInstance"
Properties:
MasterUserPassword:
"Fn::Transform":
- Name: CFnMacroName #呼び出したいCloudFormationマクロの名前
Parameters:
Key: MasterUserPassword #各引数
Description: "MasterUserPassword for RDS" #各引数
DBInstanceIdentifier: !Ref DBInstanceIdentifier
Engine: MySQL
EngineVersion: 5.7
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: 100
StorageType: gp2
DBName: !Ref DBName
## 以下 省略
Reference
이 문제에 관하여(CloudFormation을 사용하여 CloudFormation 매크로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/okubot55/items/f54110c844a1c61bc3b7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cfn-macro-01.yml
AWSTemplateFormatVersion: "2010-09-09"
Description:
CloudFormation Macro Create
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
CFnMacroName:
Type: String
# ------------------------------------------------------------#
# LambdaExecutionRole
# ------------------------------------------------------------#
Resources:
LambdaExecutionRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub "${CFnMacroName}-LambdaExecutionRole"
Policies:
- PolicyName: !Sub "${CFnMacroName}-LambdaExecutionRole-Policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Resource: "arn:aws:logs:*:*:*"
- Effect: Allow
Action:
- "ssm:PutParameter"
Resource: "*"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: ""
Effect: Allow
Principal:
Service: "lambda.amazonaws.com"
Action: "sts:AssumeRole"
# ------------------------------------------------------------#
# Lambda Function for CloudFormation Macro
# example : generate random string(10) and register SSM
# ------------------------------------------------------------#
LambdaFunction:
Type: "AWS::Lambda::Function"
Properties:
FunctionName: !Ref CFnMacroName
Role: !GetAtt LambdaExecutionRole.Arn
Handler: index.handler
Code:
ZipFile: !Sub |
import boto3
import string
import random
ssm = boto3.client('ssm')
def handler(event, context):
key = event['params']['Key']
description = event['params']['Description']
randomstr = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
ssm.put_parameter(
Name=key,
Value=randomstr,
Type='SecureString',
Description=description
)
return {'requestId': event['requestId'], 'status': 'success', 'fragment': randomstr}
Runtime: "python3.6"
MemorySize: 128
Timeout: 5
# ------------------------------------------------------------#
# CloudFormation Macro
# ------------------------------------------------------------#
CFnMacro:
Type: "AWS::CloudFormation::Macro"
Properties:
FunctionName: !Ref LambdaFunction
Name: !Ref CFnMacroName
Description: !Ref CFnMacroName
CloudFormation 매크로 사용
템플릿 내에서 CloudFormation 매크로를 호출할 때 정의하는 방법은 다음과 같습니다.
(이 예에서는 RDS의 MasterUserPassword에서 사용합니다.)
Resources:
DBInstance:
Type: "AWS::RDS::DBInstance"
Properties:
MasterUserPassword:
"Fn::Transform":
- Name: CFnMacroName #呼び出したいCloudFormationマクロの名前
Parameters:
Key: MasterUserPassword #各引数
Description: "MasterUserPassword for RDS" #各引数
DBInstanceIdentifier: !Ref DBInstanceIdentifier
Engine: MySQL
EngineVersion: 5.7
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: 100
StorageType: gp2
DBName: !Ref DBName
## 以下 省略
Reference
이 문제에 관하여(CloudFormation을 사용하여 CloudFormation 매크로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/okubot55/items/f54110c844a1c61bc3b7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Resources:
DBInstance:
Type: "AWS::RDS::DBInstance"
Properties:
MasterUserPassword:
"Fn::Transform":
- Name: CFnMacroName #呼び出したいCloudFormationマクロの名前
Parameters:
Key: MasterUserPassword #各引数
Description: "MasterUserPassword for RDS" #各引数
DBInstanceIdentifier: !Ref DBInstanceIdentifier
Engine: MySQL
EngineVersion: 5.7
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: 100
StorageType: gp2
DBName: !Ref DBName
## 以下 省略
Reference
이 문제에 관하여(CloudFormation을 사용하여 CloudFormation 매크로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/okubot55/items/f54110c844a1c61bc3b7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)