実践CloudFormation Microsoft AD編

続き!!

ここめっちゃ時間かかります！！（約40分）

先にスタックを作成します。

![スクリーンショット 2020-10-05 22.58.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253981/87c6b246-34cc-ae5e-1a06-b3df187508ac.png)

## パラメータ

![スクリーンショット 2020-10-05 22.58.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253981/9d966815-fa71-5ed8-3e19-12747a29b94a.png)

PJPrefixのみをhandsonにします

スタックの作成を押すと約40分ぐらいで完成します。

このスタックが完成しないとFSxもWorkSpacesも作ることができません。

皆さんはまだですが、こちらに作成していた物をご用意しました。

![スクリーンショット 2020-10-06 3.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253981/681afe5e-636c-f3b5-1887-82dec9b3a9bb.png)

その間にソースの解説

[ADのドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-microsoftad.html)

[DHCPOptionのドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html)

[DHCPのアソシエーション](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-dhcp-options-assoc.html)

[DHCPについて](https://www.nic.ad.jp/ja/basics/terms/dhcp.html)

MicorsoftADを使用する際にDHCPのオプションをセットする必要があります。

Fn: Selectはリストの項目を呼び出すことができます
[ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-select.html)

## ソース

```yaml
AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  PJPrefix:
    Description: Enter a prefix of this system.
    Type: String
    Default: "test"
    AllowedPattern: "[a-zA-Z][a-zA-Z0-9][ -~]*"
    ConstraintDescription: must begin with a letter and contain only alphanumeric characters.

  DomainName:
    Type: String
    AllowedPattern: "^^(?!\\-)[\\-0-9A-Za-z]{1,63}(?<!\\-)(?:\\.(?!\\-)[\\-0-9A-Za-z]{1,63}(?<!\\-))*$"
    ConstraintDescription: DomainName format is not correct.
    Default: "sample.example.com"

  DomainShortName:
    Type: String
    MaxLength: '15'
    Default: "sample"
    AllowedPattern: "[a-zA-Z0-9]*"
    ConstraintDescription: must use only alphanumeric characters. Max characters 15.

  Password:
    Type: String
    MinLength: 8
    MaxLength: 64
    Default: aaaaaaaS!09-@
    AllowedPattern: ((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9\s])(?=.*[a-z])|(?=.*[^A-Za-z0-9\s])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\s]))^(?!.*admin).*$
    ConstraintDescription: Password format is not correct.
    # FYI : パスワードポリシーは 8～64 文字で指定し、「admin」という語は含めず、英小文字、英大文字、数字、特殊文字の4つのカテゴリのうちの3つを含める必要があります
    # https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-settings-policies.html
    # https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/directoryservice-admin-guide.pdf
    # https://www.it-swarm.dev/ja/regex/4%E3%81%A4%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E3%81%86%E3%81%A13%E3%81%A4%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E8%A4%87%E9%9B%91%E3%81%AA%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%BC%B7%E5%88%B6%E3%81%99%E3%82%8B%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/969166602/


Resources:
  DirectoryServiceMicrosoftAD:
    Type: "AWS::DirectoryService::MicrosoftAD"
    Properties:
      Name: !Ref DomainName
      ShortName: !Ref DomainShortName
      Edition: "Standard"
      Password: !Ref Password
      EnableSso: false
      VpcSettings:
        VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }
        SubnetIds:
          - { "Fn::ImportValue": !Sub "${PJPrefix}-private-subnet-a" }
          - { "Fn::ImportValue": !Sub "${PJPrefix}-private-subnet-c" }

  EC2DHCPOptions:
        Type: "AWS::EC2::DHCPOptions"
        Properties:
            DomainName: !Ref DomainName
            DomainNameServers:
              - !Select ['0', !GetAtt 'DirectoryServiceMicrosoftAD.DnsIpAddresses']
              - !Select ['1', !GetAtt 'DirectoryServiceMicrosoftAD.DnsIpAddresses']
            Tags:
              -
                Key: "Name"
                Value: !Ref DomainName

  EC2VPCDHCPOptionsAssociation:
        Type: "AWS::EC2::VPCDHCPOptionsAssociation"
        Properties:
            DhcpOptionsId: !Ref EC2DHCPOptions
            VpcId: { "Fn::ImportValue": !Sub "${PJPrefix}-vpc" }

Outputs:
  myDirectory:
    Description: The WindowsAD
    Value: !Ref DirectoryServiceMicrosoftAD
    Export:
      Name: !Sub "${PJPrefix}-windows-ad"
```


これだけしか書いていません。

ここではDirectoryService:MicrosiftADについて解説できればと思います。

## AWS Directory Serviceとは

ここでは時間があるのでドキュメントを一緒に読んでいきましょう！！
[ドキュメント](https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/what_is.html)

ここの詳細は現在イベントを企画中です。

[FSx編](https://qiita.com/kazumasamatsumo/private/1aaa7469267b1908faf4)