CloudFormationを使用して、AWSでいくつかのクラウドリソースの作成を自動化する方法を見つけようとしています。
ここで、SES(Simple Email Service)ドメインの作成を含める必要がありますが、ドキュメントが見つかりませんでしたが、すでに確認しました。
AWSはCloudFormationでSESをサポートしていますか?
残念ながら、これは現在サポートされていませんが、Re:Invent 2017が間近に迫っていることを誰が知っていますか、、、
カスタム関数を作成することで可能になります。 blog SESとクラウドフォーメーションについて。
CloudFormationはいくつかの組み込み Amazon SESリソースタイプ を提供しますが、2020年の時点では、多くの人が必要とするものがまだありません:domainおよびメール検証。
幸い、CloudFormationには、独自の カスタムリソースタイプ を定義する機能があります。他のCloudFormationリソースとうまく連携するように設計されたCustom::SES_Domain
およびCustom::SES_EmailIdentity
リソースを構築しました。ここで入手してください: https://github.com/medmunds/aws-cfn-ses-domain 。
カスタム CfnSESResources
をテンプレートに取り込んだら、次のようにSESドメインを確認できます。
Resources:
# Provision a domain with Amazon SES:
MySESDomain:
Type: Custom::SES_Domain
Properties:
ServiceToken: !GetAtt CfnSESResources.Outputs.CustomDomainIdentityArn
Domain: "example.com"
EnableSend: true
EnableReceive: false
# Then add all required DNS records for SES verification and usage:
MyRoute53RecordsForSES:
Type: AWS::Route53::RecordSetGroup
Properties:
HostedZoneName: "example.com."
RecordSets: !GetAtt MySESDomain.Route53RecordSets
完全な手順はリポジトリにあります。 Custom::SES_Domain
には、いくつかの一般的なSESドメインオプションを制御するための properties があり、CloudFormation DNSリソースにフィードする attributes を公開します:標準のAWS::Route53::RecordSetGroup
リソースとして上に示した、またはゾーンファイルエントリを介した他の(外部)DNSプロバイダー。
AWS Cloudformationは現在サポートされていませんが、AWS SDK(例: Node SDK )を使用して必要なSESリソースをプロビジョニングします。
AWSSDKおよびAWSCLIコマンドとCloudFormationを組み合わせてカスタムコードを使用してリソースAWSをプロビジョニングするのが一般的な方法です。これは、各アプローチがパラメーター、リソースの数、繰り返しなどに基づいて利点になる可能性があるためです。
これが現在のリストです CloudFormationでサポートされているSESリソースタイプ :
AWS :: SES :: ConfigurationSet
AWS :: SES :: ConfigurationSetEventDestination
AWS :: SES :: ReceiptFilter
AWS :: SES :: ReceiptRule
AWS :: SES :: ReceiptRuleSet
AWS :: SES :: Template
サポートされていません。ただし、ラムダで処理することはできます。
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: >-
A simple email example
Resources:
FunctionEmailHandler:
Type: 'AWS::Serverless::Function'
Properties:
Handler: email.handler
Runtime: nodejs6.10
CodeUri: ..
Description: >-
...
Tags:
App: your app
MemorySize: 128
Timeout: 10
Policies:
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 's3:GetObject'
Resource: '*'
LambdaInvokePermission:
Type: "AWS::Lambda::Permission"
Properties:
Action: 'lambda:InvokeFunction'
FunctionName: !GetAtt FunctionEmailHandler.Arn
Principal: ses.amazonaws.com
SESEmailRecievedRule:
Type: "AWS::SES::ReceiptRule"
Properties:
RuleSetName: your default rule set name
After: store-email-to-s3
Rule:
Name: email-recieved-rule
Enabled: true
Actions:
- LambdaAction:
FunctionArn: !GetAtt FunctionEmailHandler.Arn
InvocationType: Event