2013-12-17 14 views
15

AWSのバケット作成とスクリプトを使用した配布に取り組んでいます。私はスクリプトを作成し、AWSクラウド形成コンソールでスタックテンプレートスクリプトを実行しています。AWS - S3バケットとディストリビューションを作成するためのスクリプト

私はS3バケット用のバケットポリシーをスクリプトと標準IDを使用して作成しています。バケツポリシーを作成したら、それをスクリプト内の "OriginAccessIdentity"に動的に割り当てる必要があります。バケットポリシーから生成されたIDを "OriginAccessIdentity"属性に追加したいとします。

この機能を実現する方法は?

スクリプト:

{ 
    "AWSTemplateFormatVersion" : "2010-09-09", 

    "Description" : "AWS CloudFormation Template S3_With_CloudFront_Distribution", 

    "Parameters" : { 
     "bucketname" : { 
      "Type" : "String", 
      "Description" : "test"   
     }, 

     "cannonicalid" : { 
      "Type" : "String", 
      "Description" : "234213523145314534523452345234523452345"  
     } 
    }, 

    "Conditions" : { 
     "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]} 
    }, 

    "Resources" : { 
     "testbucket" : { 
      "Type" : "AWS::S3::Bucket", 
      "Properties" : {  
      "BucketName" : { "Ref" : "bucketname" },   
      "WebsiteConfiguration" : { 
       "IndexDocument" : "index.html"    
      } 
      } 
     }, 


     "mybucketpolicy" : { 
      "Type" : "AWS::S3::BucketPolicy", 
      "Properties" : { 
       "PolicyDocument" : { 
       "Id" : "MyPolicy", 
       "Statement" : [ { 
        "Sid" : "Grant a CloudFront Origin Identity access to support private content", 
        "Action" : [ "s3:GetObject" ], 
        "Effect" : "Allow", 
        "Resource" : { "Fn::Join" : [ 
          "", [ "arn:aws:s3:::", { "Ref" : "testbucket" } , "/*" ] 
         ] }, 
        "Principal" : { 
         "CanonicalUser":{ "Ref" : "cannonicalid" } 
        } 
       } ] 
       }, 
       "Bucket" : { "Ref" : "testbucket" } 
       } 
     }, 


     "testdistribution" : { 
      "Type" : "AWS::CloudFront::Distribution", 
      "Properties" : { 
       "DistributionConfig" : { 
        "Origins" : [ { 
          "Id" : "S3Origin", 
          "DomainName" : { "Fn::GetAtt" : [ "testbucket", "DomainName" ] }, 
          "S3OriginConfig" : { 
           "OriginAccessIdentity" : "How to configure the id dynamically here" 
          } 
         } 
        ], 

        "Enabled" : "true", 
        "Comment" : "", 
        "DefaultRootObject" : "index.html",      
        "Aliases" : [ "test.com" ], 

        "CacheBehaviors" : [ { 
          "TargetOriginId" : "S3Origin", 
          "ForwardedValues" : { 
           "QueryString" : "false" 
          },        
          "ViewerProtocolPolicy" : "allow-all", 
          "MinTTL" : "1", 
          "PathPattern" : "resources/*.json" 
         } 
        ], 
        "DefaultCacheBehavior" : { 
         "TargetOriginId" : "S3Origin", 
         "ForwardedValues" : { 
          "QueryString" : "false" 
         },      
         "ViewerProtocolPolicy" : "allow-all", 
         "MinTTL" : "1" 
        } 
       } 
      } 
     } 
    }, 
    "Outputs" : { 
     "DistributionId" : { 
      "Description" : "CloudFront Distribution Id", 
      "Value" : { "Ref" : "testdistribution" } 
     }, 
     "DistributionName" : { 
      "Description" : "URL to access the CloudFront distribution", 
      "Value" : { "Fn::Join" : [ "", ["http://", {"Fn::GetAtt" : ["testdistribution", "DomainName"]} ]]} 
     }, 
     "S3OriginDNSName" : { 
      "Description" : "Name of S3 bucket to hold website content.", 
      "Value" : { "Fn::GetAtt" : [ "testbucket", "DomainName"] } 
     } 
    } 
} 
+0

:あなたと配布の設定でそれを参照することができ

"OriginAccessId": { "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", "Properties": { "CloudFrontOriginAccessIdentityConfig": { "Comment": "MyDescription" } } } 

:として定義され、原点アクセスアイデンティティリソースと

クラウドにユーザーを作成するのに少し時間がかかるかもしれないという理由があります。そこで、.NETコードを使用してOAIユーザーを作成し、OAIユーザーをスクリプトで使用しています。 OAIユーザーの作成に他にも優れたソリューションがあるかどうか教えてください。 –

+0

は、.NETコードを使用してOAIを作成するためのURLを参照します。 http://irfanshirur.blogspot.in/2014/01/create-oai-and-canonical-user-using-net.html –

答えて

6

アン起源アクセスアイデンティティは、CloudFormationを使用して作成することができません。 CloudFormを通じて利用できるCloudFrontリソースは、AWS::CloudFront::Distributionリソースのみです。

テンプレートのOAIへの参照をハードコーディングするのは、スタックの作成時にパラメータを使用して既存のOAIを渡すことを避けることができます。このパラメータは、S3OriginConfigキーに関連付けられたS3OriginタイプのOriginAccessIdentityの値として使用できます。

これは理想的ではありませんが、テンプレートをより汎用的にすることができます。

2

2017年11月2日以降、CloudFormationはAWS :: CloudFront :: CloudFrontOriginAccessIdentityリソースを使用してこれをサポートしています。雲の形成にOAIユーザーを作成するためのスクリプトにそのことはお勧めできませんを使用して

"OriginAccessIdentity" : { 
    "Fn::Sub": "origin-access-identity/cloudfront/${OriginAccessId}" 
} 
関連する問題