(Aktualizacja: Od Aug 9 2016, AWS CloudFormation obsługuje teraz ACM pomocą właściwości AcmCertificateArn
, więc zwyczaj zasób opisany poniżej nie jest już potrzebna.)
Chociaż AWS :: :: CloudFront zasób Dystrybucja nie został zaktualizowany, aby obsługiwać właściwość ACMCertificateArn, ale obecnie można użyć funkcji custom CloudFormation resource do implementowania funkcji wymaganych przy użyciu interfejsu API AWS bezpośrednio do momentu zaktualizowania oficjalnego zasobu.
Zobacz stanowisko Ryana S. Browna, CloudFormation To Build A CDN With (Free) Custom SSL, w którym opisuje on swoją implementację zasobu Custom::CloudFrontAcmAssociation
, który wiąże certyfikat ACM z dystrybucją CloudFront. Kod jest dostępny pod adresem ryansb/acm-certs-cloudformation
.
Aby z niego skorzystać, należy udostępnić implementację zasobu CloudFormation za pomocą funkcji AWS Lambda. Realizacja Ryana jest już opublikowana do publicznej łyżką S3, więc można odwoływać się do tego bezpośrednio do celów testowych w szablonie CloudFormation tak:
"AcmAssociationFunction": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Handler": "cloudfront_associator.handler",
"MemorySize": 128,
"Runtime": "python2.7",
"Code": {
"S3Bucket": "demos.serverlesscode.com",
"S3Key": "acm-certificate-resource-functions.zip"
},
"Role": {"Fn::GetAtt": ["ExecRole", "Arn"]},
"Timeout": 300
}
},
Zasób Lambda::Function
ma zależność IAM usługa roli i związane Politykę delegować niezbędne uprawnienia do funkcji lambda (odniesienie ExecRole
wyżej), więc trzeba dodać, że zbyt:
"ExecRolePolicies": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "ExecRolePolicy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"acm:*",
"cloudfront:List*",
"cloudfront:Get*",
"cloudfront:UpdateDistribution"
],
"Resource": [ "*" ],
"Effect": "Allow"
},
{
"Action": [ "logs:*" ],
"Resource": "arn:aws:logs:*:*:*",
"Effect": "Allow"
}
]
},
"Roles": [{"Ref": "ExecRole"}]
}
},
"ExecRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": ["sts:AssumeRole"],
"Effect": "Allow",
"Principal": {"Service": ["lambda.amazonaws.com"]}
}
]
}
}
},
Dzięki funkcji lambda w miejscu, w końcu dodać zasób Custom::CloudFrontAcmAssociation
, zapewniając identyfikator dystrybucji, certyfikat ARN, i niestandardowy resourc ARN e lambda funkcyjnego:
"DistributionCertificateSetting": {
"Type": "Custom::CloudFrontAcmAssociation",
"Properties": {
"DistributionId": {
"Ref": "SiteCDN"
},
"CertificateArn": {
"Ref": "AcmCertificate"
},
"ServiceToken": {
"Fn::GetAtt": [
"AcmAssociationFunction",
"Arn"
]
}
}
},
tldr: skopiuj cały powyższy kod w szablonie CloudFormation należy ustawić odpowiednie SiteCDN
i AcmCertificate
właściwości (lub edytować szablon z zakodowane wartości), i trzeba mieć własny zasób obejście, dopóki Amazon nie zaktualizuje oficjalnego zasobu CloudFront.
Możliwe, że cloudformation nie obsługuje acm dla CloudFront. Zazwyczaj występuje opóźnienie, dopóki chmura nie obsługuje nowych funkcji. – imperalix
Podejrzewam, że tak jest. Smutny. –
Być może możesz rozważyć oznaczenie mojej odpowiedzi, która zawiera zaktualizowane informacje jako poprawną odpowiedź. –