はじめに
クロスリージョン間のCloudFormationでACMを構築するためにRoute53のHostedZoneIdをパラメータストアに登録する。
例えば、東京リージョンのCloudFormationでRoute53のHostedZoneを構築し、バージニアリージョンのCloudFormationでACMを構築する場合、AWS CLIを利用して、HostedZoneIdをパラメータストアに登録し、利用するようにする。
GitHub Actionsでも利用できるように、シェルスクリプトで作成する。
スクリプト
put_params.sh
#!/bin/bash
set -e
if [ $# != 4 ] || [ $1 = "" ] || [ $2 = "" ] || [ $3 = "" ] || [ $4 = "" ]; then
echo -e "Two parameters are required
1st - string: Hosted Domain Name on Route 53 (e.g. example.com)
2nd - string: Target Region (e.g. us-east-1)
3rd - string: System Name (e.g. akane)
4th - string: EnvType (e.g. dev)
example command
\t sh ./create_param.sh example.com us-east-1 akane dev"
exit
fi
HOSTED_DOMAIN=$1
REGION=$2
SYSTEM_NAME=$3
EnvType=$4
RECORD_SET_ID_HOSTED_DOMAIN=$( \
aws route53 list-hosted-zones \
--query "HostedZones[?Name=='${HOSTED_DOMAIN}.'].Id" \
--output text \
| sed 's/\/hostedzone\///g'
) \
&& echo -e "\t RECORD_SET_ID_HOSTED_DOMAIN = ${RECORD_SET_ID_HOSTED_DOMAIN}"
aws ssm delete-parameter \
--name ${SYSTEM_NAME}-${EnvType}-route53-hostzone-id \
--region ${REGION}
aws ssm put-parameter \
--name ${SYSTEM_NAME}-${EnvType}-route53-hostzone-id \
--value ${RECORD_SET_ID_HOSTED_DOMAIN} \
--type 'String' \
--region ${REGION}
CloudFormationのテンプレート
acm.yml
Parameters:
SystemName:
Type: String
Default: akane
EnvType:
Type: String
Default: dev
DomainName:
Description: The domain to which validation
Type: String
Default: 'dev.akane.com'
Conditions:
RegionTokyo: !Equals [!Ref Region, "ap-northeast-1"] ## 変数:Regionが東京であった場合
RegionVirginia: !Equals [!Ref Region, "us-east-1"] ## 変数:Regionがバージニアであった場合
Resources:
akaneVirginiaACM:
Type: AWS::CertificateManager::Certificate
Condition: RegionVirginia
Properties:
DomainName: !Sub "*.${DomainName}"
DomainValidationOptions:
- DomainName: !Sub "*.${DomainName}"
HostedZoneId: !Sub '{{resolve:ssm:${SystemName}-${EnvType}-route53-hostzone-id}}'
ValidationMethod: DNS