DNS-01 เจšเฉเจฃเฉŒเจคเฉ€ เจ…เจคเฉ‡ AWS เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ Let's Encrypt SSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฆเจพ เจ†เจŸเฉ‹เจฎเฉ‡เจธเจผเจจ

เจชเฉ‹เจธเจŸ SSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฆเจฎเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ†เจ“ CA เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเฉ€เจ เจตเจฐเจค DNS-01 เจšเฉเจฃเฉŒเจคเฉ€ ะธ เจชเฉเจฐเจธเจฅเจฟเจคเฉ€.

acme-dns-route53 เจ‡เฉฑเจ• เจธเจพเจงเจจ เจนเฉˆ เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค เจ‡เจน Let's Encrypt เจคเฉ‹เจ‚ SSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ Amazon Certificate Manager เจตเจฟเฉฑเจš เจธเฉ‡เจต เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, DNS-53 เจšเฉเจฃเฉŒเจคเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ Route01 API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš, SNS เจจเฉ‚เฉฐ เจธเฉ‚เจšเจจเจพเจตเจพเจ‚ เจชเฉเจธเจผ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค IN acme-dns-route53 AWS Lambda เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจตเจฐเจคเจฃ เจฒเจˆ เจฌเจฟเจฒเจŸ-เจ‡เจจ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจตเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจ‰เจนเฉ€ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจธเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ 4 เจญเจพเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆ:

  • เจ‡เฉฑเจ• เจœเจผเจฟเจช เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃเจพ;
  • เจ‡เฉฑเจ• IAM เจญเฉ‚เจฎเจฟเจ•เจพ เจฌเจฃเจพเจ‰เจฃเจพ;
  • เจ‡เฉฑเจ• เจฒเจพเจ‚เจฌเจกเจพ เจซเฉฐเจ•เจธเจผเจจ เจฌเจฃเจพเจ‰เจฃเจพ เจœเฉ‹ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ acme-dns-route53;
  • เจ‡เฉฑเจ• CloudWatch เจŸเจพเจˆเจฎเจฐ เจฌเจฃเจพเจ‰เจฃเจพ เจœเฉ‹ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจฆเจฟเจจ เจตเจฟเฉฑเจš 2 เจตเจพเจฐ เจšเจพเจฒเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ;

เจจเฉ‹เจŸ: เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ GoLang 1.9+ ะธ AWS CLI

เจ‡เฉฑเจ• เจœเจผเจฟเจช เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃเจพ

acme-dns-route53 GoLang เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ 1.9 เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจธเจพเจจเฉ‚เฉฐ เจฌเจพเจˆเจจเจฐเฉ€ เจจเจพเจฒ เจ‡เฉฑเจ• เจœเจผเจฟเจช เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ acme-dns-route53 เจ…เฉฐเจฆเจฐ. เจ‡เจน เจ•เจฐเจจ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ acme-dns-route53 เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ GitHub เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจคเฉ‹เจ‚ go install:

$ env GOOS=linux GOARCH=amd64 go install github.com/begmaroman/acme-dns-route53

เจตเจฟเฉฑเจš เจฌเจพเจˆเจจเจฐเฉ€ เจ‡เฉฐเจธเจŸเจพเจฒ เจนเฉˆ $GOPATH/bin เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€. เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจงเจฟเจ†เจจ เจฆเจฟเจ“ เจ•เจฟ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฆเฉŒเจฐเจพเจจ เจ…เจธเฉ€เจ‚ เจฆเฉ‹ เจฌเจฆเจฒเฉ‡ เจนเฉ‹เจ เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ: GOOS=linux ะธ GOARCH=amd64. เจ‰เจน เจ—เฉ‹ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจจเฉ‚เฉฐ เจธเจชเฉฑเจธเจผเจŸ เจ•เจฐเจฆเฉ‡ เจนเจจ เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ เจฒเฉ€เจจเจ•เจธ OS เจ…เจคเฉ‡ amd64 เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฒเจˆ เจขเฉเจ•เจตเฉ€เจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ - เจ‡เจน เจ‰เจน เจนเฉˆ เจœเฉ‹ AWS 'เจคเฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆเฅค
AWS เจธเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจœเจผเจฟเจช เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ†เจ“ เจฌเจฃเจพเจ“ acme-dns-route53.zip เจชเฉเจฐเจพเจฒเฉ‡เจ– เจœเจฟเจธ เจตเจฟเฉฑเจš เจจเจตเฉ€เจ‚ เจธเจฅเจพเจชเจฟเจค เจฌเจพเจˆเจจเจฐเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€:

$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53

เจจเฉ‹เจŸ: เจฌเจพเจˆเจจเจฐเฉ€ เจœเจผเจฟเจช เจ†เจฐเจ•เจพเจˆเจต เจฆเฉ‡ เจฐเฉ‚เจŸ เจตเจฟเฉฑเจš เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚ -j เจเฉฐเจกเจพ

เจนเฉเจฃ เจธเจพเจกเจพ เจœเจผเจฟเจช เจ‰เจชเจจเจพเจฎ เจคเฉˆเจจเจพเจคเฉ€ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเฉˆ, เจœเฉ‹ เจ•เฉเจ เจฌเจšเจฟเจ† เจนเฉˆ เจ‰เจน เจœเจผเจฐเฉ‚เจฐเฉ€ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเจพเจฒ เจ‡เฉฑเจ• เจญเฉ‚เจฎเจฟเจ•เจพ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• IAM เจฐเฉ‹เจฒ เจฌเจฃเจพเจ‰เจฃเจพ

เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจฆเฉ‡ เจ…เจฎเจฒ เจฆเฉŒเจฐเจพเจจ เจธเจพเจกเฉ‡ เจฒเจพเจ‚เจฌเจกเจพ เจฆเฉเจ†เจฐเจพ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• IAM เจญเฉ‚เจฎเจฟเจ•เจพ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ.
เจ†เจ“ เจ‡เจธ เจจเฉ€เจคเฉ€ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเฉ€เจ lambda-acme-dns-route53-executor เจ…เจคเฉ‡ เจคเฉเจฐเฉฐเจค เจ‰เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจญเฉ‚เจฎเจฟเจ•เจพ เจฆเจฟเจ“ AWSLambdaBasicExecutionRole. เจ‡เจน เจธเจพเจกเฉ‡ เจฒเจพเจ‚เจฌเจกเจพ เจจเฉ‚เฉฐ AWS CloudWatch เจธเฉ‡เจตเจพ 'เจคเฉ‡ เจฒเฉŒเจ— เจšเจฒเจพเจ‰เจฃ เจ…เจคเฉ‡ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค
เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• JSON เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจธเจพเจกเฉ‡ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจฒเจพเจœเจผเจฎเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเจพเจ‚เจฌเจกเจพ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจญเฉ‚เจฎเจฟเจ•เจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพ lambda-acme-dns-route53-executor:

$ touch ~/lambda-acme-dns-route53-executor-policy.json

เจธเจพเจกเฉ€ เจซเจพเจˆเจฒ เจฆเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจ‡เจธ เจชเฉเจฐเจ•เจพเจฐ เจนเฉˆ:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup"
            ],
            "Resource": "arn:aws:logs:<AWS_REGION>:<AWS_ACCOUNT_ID>:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:CreateLogStream"
            ],
            "Resource": "arn:aws:logs:<AWS_REGION>:<AWS_ACCOUNT_ID>:log-group:/aws/lambda/acme-dns-route53:*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "route53:ListHostedZones",
                "cloudwatch:PutMetricData",
                "acm:ImportCertificate",
                "acm:ListCertificates"
            ],
            "Resource": "*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "sns:Publish",
                "route53:GetChange",
                "route53:ChangeResourceRecordSets",
                "acm:ImportCertificate",
                "acm:DescribeCertificate"
            ],
            "Resource": [
                "arn:aws:sns:${var.region}:<AWS_ACCOUNT_ID>:<TOPIC_NAME>",
                "arn:aws:route53:::hostedzone/*",
                "arn:aws:route53:::change/*",
                "arn:aws:acm:<AWS_REGION>:<AWS_ACCOUNT_ID>:certificate/*"
            ]
        }
    ]
}

เจนเฉเจฃ เจ•เจฎเจพเจ‚เจก เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ aws iam create-role เจ‡เฉฑเจ• เจญเฉ‚เจฎเจฟเจ•เจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ:

$ aws iam create-role --role-name lambda-acme-dns-route53-executor 
 --assume-role-policy-document ~/lambda-acme-dns-route53-executor-policy.json

เจจเฉ‹เจŸ: เจชเจพเจฒเจฟเจธเฉ€ ARN (Amazon Resource Name) เจจเฉ‚เฉฐ เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹ - เจธเจพเจจเฉ‚เฉฐ เจ…เจ—เจฒเฉ‡ เจ•เจฆเจฎเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจชเจตเฉ‡เจ—เฉ€เฅค

เจญเฉ‚เจฎเจฟเจ•เจพ lambda-acme-dns-route53-executor เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ, เจนเฉเจฃ เจธเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจงเจฟเจ•เจพเจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฆเจพ เจธเจญ เจคเฉ‹เจ‚ เจ†เจธเจพเจจ เจคเจฐเฉ€เจ•เจพ เจนเฉˆ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ aws iam attach-role-policy, เจชเจพเจธเจฟเฉฐเจ— เจชเจพเจฒเจฟเจธเฉ€ ARN AWSLambdaBasicExecutionRole เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ:

$ aws iam attach-role-policy --role-name lambda-acme-dns-route53-executor 
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

เจจเฉ‹เจŸ: เจนเฉ‹เจฐ เจจเฉ€เจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฒเฉฑเจญเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ เจ‡เฉฑเจฅเฉ‡.

เจ‡เฉฑเจ• เจฒเจพเจ‚เจฌเจกเจพ เจซเฉฐเจ•เจธเจผเจจ เจฌเจฃเจพเจ‰เจฃเจพ เจœเฉ‹ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ acme-dns-route53

เจนเฉ‚เจฐเฉ‡! เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ AWS เจตเจฟเฉฑเจš เจคเฉˆเจจเจพเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ aws lambda create-function. lambda เจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

  • AWS_LAMBDA - เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ acme-dns-route53 เจ‰เจน เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ AWS Lambda เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค
  • DOMAINS - เจ•เจพเจฎเจฟเจ†เจ‚ เจจเจพเจฒ เจตเฉฑเจ– เจ•เฉ€เจคเฉ‡ เจกเฉ‹เจฎเฉ‡เจจเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€เฅค
  • LETSENCRYPT_EMAIL - เจธเจผเจพเจฎเจฟเจฒ เจนเฉˆ เจ†เจ“ เจˆเจฎเฉ‡เจฒ เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเฉ€เจ.
  • NOTIFICATION_TOPIC - SNS เจธเฉ‚เจšเจจเจพ เจตเจฟเจธเจผเฉ‡ เจฆเจพ เจจเจพเจฎ (เจตเจฟเจ•เจฒเจชเจฟเจ•)เฅค
  • STAGING - เจฎเฉเฉฑเจฒ 'เจคเฉ‡ 1 เจธเจŸเฉ‡เจœเจฟเฉฐเจ— เจตเจพเจคเจพเจตเจฐเจจ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
  • 1024 MB - เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจธเฉ€เจฎเจพ, เจฌเจฆเจฒเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค
  • 900 เจธเจ•เจฟเฉฐเจŸ (15 เจฎเจฟเฉฐเจŸ) โ€” เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจคเฅค
  • acme-dns-route53 โ€” เจธเจพเจกเฉ€ เจฌเจพเจˆเจจเจฐเฉ€ เจฆเจพ เจจเจพเจฎ, เจœเฉ‹ เจ•เจฟ เจชเฉเจฐเจพเจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจนเฉˆเฅค
  • fileb://~/acme-dns-route53.zip โ€” เจ†เจฐเจ•เจพเจˆเจต เจฆเจพ เจฎเจพเจฐเจ— เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจฌเจฃเจพเจ‡เจ† เจนเฉˆเฅค

เจ†เจ‰ เจนเฉเจฃ เจคเฉˆเจจเจพเจค เจ•เจฐเฉ€เจ:

$ aws lambda create-function 
 --function-name acme-dns-route53 
 --runtime go1.x 
 --role arn:aws:iam::<AWS_ACCOUNT_ID>:role/lambda-acme-dns-route53-executor 
 --environment Variables="{AWS_LAMBDA=1,DOMAINS="example1.com,example2.com",[email protected],STAGING=0,NOTIFICATION_TOPIC=acme-dns-route53-obtained}" 
 --memory-size 1024 
 --timeout 900 
 --handler acme-dns-route53 
 --zip-file fileb://~/acme-dns-route53.zip

 {
     "FunctionName": "acme-dns-route53", 
     "LastModified": "2019-05-03T19:07:09.325+0000", 
     "RevisionId": "e3fadec9-2180-4bff-bb9a-999b1b71a558", 
     "MemorySize": 1024, 
     "Environment": {
         "Variables": {
            "DOMAINS": "example1.com,example2.com", 
            "STAGING": "1", 
            "LETSENCRYPT_EMAIL": "[email protected]", 
            "NOTIFICATION_TOPIC": "acme-dns-route53-obtained", 
            "AWS_LAMBDA": "1"
         }
     }, 
     "Version": "$LATEST", 
     "Role": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/lambda-acme-dns-route53-executor", 
     "Timeout": 900, 
     "Runtime": "go1.x", 
     "TracingConfig": {
         "Mode": "PassThrough"
     }, 
     "CodeSha256": "+2KgE5mh5LGaOsni36pdmPP9O35wgZ6TbddspyaIXXw=", 
     "Description": "", 
     "CodeSize": 8456317,
"FunctionArn": "arn:aws:lambda:us-east-1:<AWS_ACCOUNT_ID>:function:acme-dns-route53", 
     "Handler": "acme-dns-route53"
 }

เจ‡เฉฑเจ• เจ•เจฒเจพเจ‰เจกเจตเจพเจš เจŸเจพเจˆเจฎเจฐ เจฌเจฃเจพเจ‰เจฃเจพ เจœเฉ‹ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจฆเจฟเจจ เจตเจฟเฉฑเจš 2 เจตเจพเจฐ เจšเจพเจฒเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ

เจ†เจ–เจฐเฉ€ เจชเฉœเจพเจ… เจ•เฉเจฐเฉ‹เจจ เจจเฉ‚เฉฐ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ เจนเฉˆ, เจœเฉ‹ เจธเจพเจกเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจฆเจฟเจจ เจตเจฟเฉฑเจš เจฆเฉ‹ เจตเจพเจฐ เจ•เจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ:

  • เจฎเฉเฉฑเจฒ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• CloudWatch เจจเจฟเจฏเจฎ เจฌเจฃเจพเจ“ schedule_expression.
  • lambda เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ‡ ARN เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎ เจŸเฉ€เจšเจพ (เจ•เฉ€ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ) เจฌเจฃเจพเจ“เฅค
  • เจฒเจพเจ‚เจฌเจกเจพ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจจเจฟเจฏเจฎ เจจเฉ‚เฉฐ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเจ“เฅค

เจนเฉ‡เจ เจพเจ‚ เจฎเฉˆเจ‚ เจ†เจชเจฃเฉ€ เจŸเฉˆเจฐเจพเจซเจพเจฐเจฎ เจธเฉฐเจฐเจšเจจเจพ เจจเฉฑเจฅเฉ€ เจ•เฉ€เจคเฉ€ เจนเฉˆ, เจชเจฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‡เจน AWS เจ•เฉฐเจธเฉ‹เจฒ เจœเจพเจ‚ AWS CLI เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเจนเฉเจค เจนเฉ€ เจ…เจธเจพเจจเฉ€ เจจเจพเจฒ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

# Cloudwatch event rule that runs acme-dns-route53 lambda every 12 hours
resource "aws_cloudwatch_event_rule" "acme_dns_route53_sheduler" {
  name                = "acme-dns-route53-issuer-scheduler"
  schedule_expression = "cron(0 */12 * * ? *)"
}

# Specify the lambda function to run
resource "aws_cloudwatch_event_target" "acme_dns_route53_sheduler_target" {
  rule = "${aws_cloudwatch_event_rule.acme_dns_route53_sheduler.name}"
  arn  = "${aws_lambda_function.acme_dns_route53.arn}"
}

# Give CloudWatch permission to invoke the function
resource "aws_lambda_permission" "permission" {
  action        = "lambda:InvokeFunction"
  function_name = "${aws_lambda_function.acme_dns_route53.function_name}"
  principal     = "events.amazonaws.com"
  source_arn    = "${aws_cloudwatch_event_rule.acme_dns_route53_sheduler.arn}"
}

เจนเฉเจฃ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ SSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฒเจˆ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹