設定値の指定
設定値の指定
手順に必要な設定値を変数に格納をします。
1. リソースファイルディレクトリ
リソースファイルディレクトリを指定します。
変数の設定:
DIR_CLOUDFORMATION_RESOURCE="${HOME}/environment/conf-handson-cli-cfn-lambda-Function/resources"
2. CloudFormationテンプレート名
CloudFormationテンプレート名を指定します。
変数の設定:
CLOUDFORMATION_TEMPLATE_NAME='handson-cli-cfn-lambda-Function'
3. CloudFormationテンプレートの説明
CloudFormationテンプレートの説明を指定します。
変数の設定:
CLOUDFORMATION_TEMPLATE_DESCRIPTION='Template for handson-cli-cfn-lambda-Function.'
4. テンプレートファイルディレクトリ
テンプレートファイルディレクトリを指定します。
変数の設定:
DIR_CLOUDFORMATION_TEMPLATE="${HOME}/environment/conf-handson-cli-cfn-lambda-Function"
ディレクトリが存在することを確認します。
コマンド:
ls -d ${DIR_CLOUDFORMATION_TEMPLATE}
結果(例:存在する場合):
${HOME}/environment/conf-handson-cli-cfn-lambda-Function
存在しない場合は作成します。
コマンド:
mkdir -p ${DIR_CLOUDFORMATION_TEMPLATE}
5. テンプレートファイル名の指定
テンプレートファイル名の指定します。
変数の設定:
FILE_CLOUDFORMATION_TEMPLATE="${DIR_CLOUDFORMATION_TEMPLATE}/${CLOUDFORMATION_TEMPLATE_NAME}.template" \
&& echo ${FILE_CLOUDFORMATION_TEMPLATE}
結果(例):
${HOME}/environment/conf-handson-cli-cfn-lambda-Function/handson-cli-cfn-lambda-Function.template
設定値の確認
各変数に正しい設定値が格納されていることを確認しながら保存します。
変数の確認:
cat << END
# 1. DIR_CLOUDFORMATION_RESOURCE:"${HOME}/environment/conf-handson-cli-cfn-lambda-Function/resources"
DIR_CLOUDFORMATION_RESOURCE="${DIR_CLOUDFORMATION_RESOURCE}"
# 2. CLOUDFORMATION_TEMPLATE_NAME:"handson-cli-cfn-lambda-Function"
CLOUDFORMATION_TEMPLATE_NAME="${CLOUDFORMATION_TEMPLATE_NAME}"
# 3. CLOUDFORMATION_TEMPLATE_DESCRIPTION:"Template for handson-cli-cfn-lambda-Function."
CLOUDFORMATION_TEMPLATE_DESCRIPTION="${CLOUDFORMATION_TEMPLATE_DESCRIPTION}"
# 4. DIR_CLOUDFORMATION_TEMPLATE:"${HOME}/environment/conf-handson-cli-cfn-lambda-Function"
DIR_CLOUDFORMATION_TEMPLATE="${DIR_CLOUDFORMATION_TEMPLATE}"
# 5. FILE_CLOUDFORMATION_TEMPLATE:"${HOME}/environment/conf-handson-cli-cfn-lambda-Function/handson-cli-cfn-lambda-Function.template"
FILE_CLOUDFORMATION_TEMPLATE="${FILE_CLOUDFORMATION_TEMPLATE}"
END
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。
処理の実行
CloudFormationテンプレート共通部分を作成します。
変数の確認:
cat << END
# FILE_CLOUDFORMATION_TEMPLATE:"${HOME}/environment/conf-handson-cli-cfn-lambda-Function/handson-cli-cfn-lambda-Function.template"
FILE_CLOUDFORMATION_TEMPLATE="${FILE_CLOUDFORMATION_TEMPLATE}"
# CLOUDFORMATION_TEMPLATE_DESCRIPTION:"Template for handson-cli-cfn-lambda-Function."
CLOUDFORMATION_TEMPLATE_DESCRIPTION="${CLOUDFORMATION_TEMPLATE_DESCRIPTION}"
END
コマンド:
cat << EOF > ${FILE_CLOUDFORMATION_TEMPLATE}
AWSTemplateFormatVersion: 2010-09-09
Description:
${CLOUDFORMATION_TEMPLATE_DESCRIPTION}
EOF
cat ${FILE_CLOUDFORMATION_TEMPLATE}
結果(例):
AWSTemplateFormatVersion: 2010-09-09
Description:
Template for handson-cli-cfn-lambda-Function.
CloudFormationテンプレートにリソース部分を追加します。
コマンド:
echo 'Resources:' >> ${FILE_CLOUDFORMATION_TEMPLATE}
for i in $( ls ${DIR_CLOUDFORMATION_RESOURCE}/*.txt ); do \
cat $i | sed '/^$/d' >> ${FILE_CLOUDFORMATION_TEMPLATE}; \
echo '' >> ${FILE_CLOUDFORMATION_TEMPLATE} \
; done
cat ${FILE_CLOUDFORMATION_TEMPLATE}
結果(例):
AWSTemplateFormatVersion: 2010-09-09
Description:
Template for handson-cli-cfn-ec2-vpc.
Resources:
LambdaFunction0:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Ref AWS::StackName
Description: Stack for handson-cli iam novice role.
Handler: index.lambda_handler
Runtime: python3.8
Role: !GetAtt Role0.Arn
Code:
ZipFile: |
import os
def lambda_handler(event, context):
print('## ENVIRONMENT VARIABLES')
print(os.environ)
print('## EVENT')
print(event)
message = 'Hello Lambda World!'
print(message)
return message
LogsGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Join
- ''
- - /aws/lambda/
- !Ref AWS::StackName
Role0:
Type: AWS::IAM::Role
Properties:
Path: /handson-cli/
RoleName: !Join
- ''
- - !Ref AWS::StackName
- '-role'
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
完了確認
本手順の主処理は、以下の完了条件を満たしたときに成功したものとします。
完了条件1: CloudFormationテンプレート"handson-cli-cfn-lambda-Function"が存在する。
「CloudFormationテンプレート"handson-cli-cfn-lambda-Function"が存在する。」ことを確認します。
コマンド:
ls ${FILE_CLOUDFORMATION_TEMPLATE}
結果(例):
${HOME}/environment/conf-handson-cli-cfn-lambda-Function/handson-cli-cfn-lambda-Function.template
完了条件2: CloudFormationテンプレート"handson-cli-cfn-lambda-Function"がYAMLフォーマットとして正常である。
「CloudFormationテンプレート"handson-cli-cfn-lambda-Function"がYAMLフォーマットとして正常である。」ことを確認します。
コマンド:
yamllint ${FILE_CLOUDFORMATION_TEMPLATE}
結果(例):