料金

AWS Certificate Manager でプロビジョニングされたパブリック SSL/TLS 証明書は無料です。お支払いいただくのは、アプリケーションを実行するために作成した AWS リソースの料金のみです。

無料。

証明書を発行する

certmanager.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
AWSTemplateFormatVersion: "2010-09-09"
Description: Amazon CertManager

Metadata:
# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "Route53 public zone"
Parameters:
- DomainName

ParameterLabels:
DomainName:
default: "example.com"

Parameters:
DomainName:
Type: String

Resources:
# ------------------------------------------------------------ #
# CertificateManager
# ------------------------------------------------------------ #
MyZoneCertificate:
Type: AWS::CertificateManager::Certificate
Properties:
DomainName: !Ref DomainName
ValidationMethod: DNS

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
MyHostedZoneName:
Description: "DomainName."
Value: !Ref DomainName
MyZoneCertificateID:
Description: "Certificate ID."
Value: !Ref MyZoneCertificate

parameters.json

証明書を発行するドメイン名を指定する。

1
2
3
4
5
6
[
{
"ParameterKey": "DomainName",
"ParameterValue": "xxxxx.xxxxxx.xxxxxx"
}
]

証明書発行を実行

リージョンはus-east-1を指定する必要があるので注意する。

1
2
3
4
$ aws cloudformation create-stack --stack-name tutorial-certmanager --template-body "file://./certmanager.yml" --parameters "file://./parameters.json" --region us-east-1
{
"StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXX:stack/tutorial-certmanager/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

DNS認証はCloudformationで簡潔に表現できない

CertificateManagerでは検証保留中のまま。

CertificateManagerの状態 width=640

CloudFormationはエラーにならず、CREATE_IN_PROGRESSで止まっている。

CertificateManagerの状態 width=640

イベントを確認するとDNS検証で止まっていることがわかる。

CertificateManagerの状態 width=640

aws-cliを使ってDNSレコードを登録するシェルスクリプトを使用する

aws-cliを使ってCloudFormationの実行結果からDNS検証のために登録するDNSレコードを取得して、Route53に登録する。

aws cloudformationを実行している箇所でオプションに--region us-east-1を追加する。

1
2
3
4
5
6
7
8
$ bash dns-validation.sh <ドメイン名> <スタック名>
{
"ChangeInfo": {
"Id": "/change/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"Status": "PENDING",
"SubmittedAt": "2019-12-06T05:27:00.867Z"
}
}

Route53上で登録されたDNS検証のためのに登録したレコードを確認できる。

CertificateManagerの状態 width=640

保留中になっていた処理が継続され、証明書が発行される。

CertificateManagerの状態 width=640

CertiticateManager上でも証明書発行済になる。

CertificateManagerの状態 width=640

取得した証明書を使うためのARNを取得。

1
2
$ aws cloudformation describe-stacks --region us-east-1 | jq '.Stacks[].Outputs[] | select( .OutputKey == "MyZoneCertificateID" ) | .OutputValue'
"arn:aws:acm:us-east-1:XXXXXXXXX:certificate/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"