ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡΠ° ΠΎΠΏΠΈΡΠ²Π° ΡΡΡΠΏΠΊΠΈ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΎΡ
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° 4 ΡΠ°Π·Π΄Π΅Π»Π°:
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° zip ΡΠ°ΠΉΠ»;
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° IAM ΡΠΎΠ»Ρ;
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π»Π°ΠΌΠ±Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° acme-dns-route53;
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠΌΠ΅Ρ CloudWatch, ΠΊΠΎΠΉΡΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ 2 ΠΏΡΡΠΈ Π½Π° Π΄Π΅Π½;
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° zip ΡΠ°ΠΉΠ»
acme-dns-route53 Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° GoLang ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π²Π΅ΡΡΠΈΡ Π½Π΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠ° ΠΎΡ 1.9.
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ zip ΡΠ°ΠΉΠ» Ρ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ» 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
. Π’Π΅ ΠΏΠΎΡΡΠ½ΡΠ²Π°Ρ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Go, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ», ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π·Π° Linux OS ΠΈ amd64 Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° - ΡΠΎΠ²Π° Π΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π½Π° AWS.
AWS ΠΎΡΠ°ΠΊΠ²Π° Π½Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½Π° Π² zip ΡΠ°ΠΉΠ», ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ΠΊΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ acme-dns-route53.zip
Π°ΡΡ
ΠΈΠ², ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π½ΠΎΠ²ΠΎΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈΡ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ»:
$ zip -j ~/acme-dns-route53.zip $GOPATH/bin/acme-dns-route53
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠ²ΠΎΠΈΡΠ½ΠΈΡΡ ΡΠ°ΠΉΠ» ΡΡΡΠ±Π²Π° Π΄Π° Π΅ Π² ΠΊΠΎΡΠ΅Π½Π° Π½Π° zip Π°ΡΡ
ΠΈΠ²Π°. ΠΠ° ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ -j
Π·Π½Π°ΠΌΠ΅.
Π‘Π΅Π³Π° Π½Π°ΡΠΈΡΡ zip ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π΅ Π³ΠΎΡΠΎΠ² Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅, ΠΎΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠΎΠ»Ρ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΡΠ°Π²Π°.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° 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) - ΡΠ΅ Π½ΠΈ ΡΡΡΠ±Π²Π° Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ.
Π ΠΎΠ»Ρ 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
. ΠΠ°ΠΌΠ±Π΄Π° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°:
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"
}
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠΌΠ΅Ρ CloudWatch, ΠΊΠΎΠΉΡΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ 2 ΠΏΡΡΠΈ Π½Π° Π΄Π΅Π½
ΠΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ cron, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π½Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π²Π° ΠΏΡΡΠΈ Π½Π° Π΄Π΅Π½:
- ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° CloudWatch ΡΡΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ°
schedule_expression
. - ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅Π» Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ (ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ), ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ARN Π½Π° Π»Π°ΠΌΠ±Π΄Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°.
- Π΄Π°ΠΉΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ° Π»Π°ΠΌΠ±Π΄Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°.
ΠΠΎ-Π΄ΠΎΠ»Ρ ΠΏΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Terraform, Π½ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° 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