LoginSignup
5
1

More than 5 years have passed since last update.

Amazon CloudFrontをAnsibleで構成管理(cloudfront_distribution)

Posted at

経緯

仕事でもSPA(single-page application)を利用した構成を依頼される機会が増えてきました。
IaaS中心での構成に比べ、コストが安く済むため、スモールスタートでコストを抑えたいという時にメリットがあるためです。
今回はSPAの構成でよく使われるAWS CloudFrontをAnsibleの「cloudfront_distribution」で設定する方法を紹介したいと思います。

cloudfront_distributionモジュールについて

Ansibleの中でAWS CLIを用いて設定する方法もありますが、今回はモジュールを用いた設定例を紹介します。

cloudfront_distribution
基本的には公式ドキュメントに書いてある通りなので、説明は省きます。

Ansible Playbookの設定例

なにはともあれ実際の設定例。

main.yml

- set_fact:
    origin_domain_name: "s3.hogehoge"
    origin_website_domain_name: "s3.hogehoge.s3-website-ap-northeast-1.amazonaws.com"
    domain_name: "hogehoge.com"
    default_root_object: "index.html"
    # logファイルをs3に格納する場合は利用
    # bucket_for_logs: "log.s3.hogehoge"
    # log_prefix: "logs/"

# create distribution
- cloudfront_distribution:
    default_origin_domain_name: "{{ origin_website_domain_name }}"
    # origin settings
    origins:
        - domain_name: "{{ origin_domain_name }}"
          id: "{{ origin_domain_name }}" 
        - domain_name: "{{ origin_website_domain_name }}"
          id: "{{ origin_website_domain_name }}" 
    #  cache behavior settiongs
    cache_behaviors:
        - path_pattern: "/static/*"
          target_origin_id: "{{ origin_domain_name }}"
          viewer_protocol_policy: "redirect-to-https"
          min_ttl: 0
          max_ttl: 31536000
          default_ttl: 86400
          forwarded_values:
            query_string: false
        - path_pattern: "/index.html"
          target_origin_id: "{{ origin_domain_name }}"
          viewer_protocol_policy: "redirect-to-https"
          min_ttl: 0
          max_ttl: 31536000
          default_ttl: 86400
          forwarded_values:
            query_string: false
    default_cache_behavior:
          target_origin_id: "{{ origin_website_domain_name }}"
          viewer_protocol_policy: "redirect-to-https"
          min_ttl: 0
          max_ttl: 31536000
          default_ttl: 86400
          forwarded_values:
            query_string: false
            cookies:
              forward: none
            headers: 
              - "*"
          smooth_streaming: false
          compress: false
          allowed_methods:
            items:
              - GET
              - HEAD
            cached_methods:
              - GET
              - HEAD

    # distribution settings
    price_class: "PriceClass_All"
    aliases : 
      - "{{ domain_name }}" 
    default_root_object: "{{ default_root_object }}"
    state: present
    #logging:
    #  enabled: true
    #  include_cookies: false
    #  bucket: "{{ bucket_for_logs }}"
    #  prefix: "{{ log_prefix }}"

説明と備考

  • リソースはS3に配置するものとしてoriginに指定しています。
  • キャッシュの設定はデフォルトのものを入れているが必要に応じて変更を行ってください。
  • Updateをかける際は冪等性を保つために「Distribution ID」を指定して実行した方が良さそうです。

あとがき

現状のAnsibleモジュールでは、SSL証明書を設定する部分が未実装のため、そこも設定を入れようという場合にはAWS CLIを使った方が良い気がします。ただし、cloudfrontにACMの証明書を使う際は米国東部で作成したものだけ利用できます。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1