日本語化したWindows InstanceをデプロイするCloudFormationテンプレートを作ってみた

# Windows EC2を簡単に日本語化する方法を探したい
最近、同僚から「Windows EC2を簡単に日本語化する方法って知ってます？」という質問が来ました。ワークショップやる上で日本語の方が参加者も分かりやすいという観点で、「Windows EC2を簡単に日本語化する方法を探す」が課題になったようでした。
自分はこの課題をCloudFormationで解決方法を探そうと思います。

# Keyword
* CloudFormation
    * インフラストラクチャをコードとして扱うことで、AWS およびサードパーティーのリソースをモデル化、プロビジョニング、管理することができます。
* YAML
    * 構造化データやオブジェクトを文字列にシリアライズ（直列化）するためのデータ形式の一種。テキストのため可読であることは特徴です。

# いきなりまとめ
* CloudFormationで日本語化したWindows Instanceをデプロイできるテンプレートを作りました！
* 方法：CloudFormationテンプレートにWindows Instanceをデプロイするとこる、Community AMIsにある既に日本語化したAMIを指定すればOKです！

# Community AMIsとは
EC2サービスのAMI Catalogから入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2781205/e0649104-9545-04e6-7e53-4f37b6cffe38.png)
ここに置いたAMIはAWSユーザーから作ってCommunityに共有したものですです。
誰でもこのコミュニティーにAMIを共有できるので、検証しなくて使うとセキュリティリスクもありますが、今回使うのAMIはVerified Providerというタグがあって、説明もちゃんと「provided by Amazon」がありますので、安心して使えると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2781205/ad46e02a-2335-b64f-0bd0-928310aeddb1.png)
検索バーに「Windows_Server-2022-Japanese-Full-Base-2022.11.10」を入力して、AMI IDをメモしましょう！
次はCloudFormationテンプレートの作成です！

# YMALコード
https://github.com/NetAppJpTechTeam/FSxN-Demo-Environment/blob/development/windows_instance_launch_jp.yaml

# テンプレート詳細：パラメータの設定
```yaml:
Parameters:
  InstanceName:
    Description: Input your instance name.
    Type: String
  InstanceType:
    Description: Select the instance type.
    AllowedValues:
    - t2.micro
    - m5.large
    - c5n.xlarge
    - c5n.2xlarge
    - c5n.9xlarge
    - c5n.18xlarge
    - r5n.8xlarge
    - r5n.16xlarge
    - r5n.24xlarge
    Default: t2.micro
    Type: String
  KeyPair:
    Type: AWS::EC2::KeyPair::KeyName
  SubnetId:
    Type: AWS::EC2::Subnet::Id
  SecurityGroupId:
    Type: AWS::EC2::SecurityGroup::Id
```
今回のテンプレートは最初に以下のパラメーターを入力できます：
* InstanceName
    * Instanceの名前を設定します。
* InstanceType
    * Windows Instanceを立ち上がる時のインスタンスタイプを選択します。
    * デフォルトは一番安いのt2.microです。
* KeyPair
    * 現在CloudFormationを実行するリージョンに使用可能なKeyPairを選択します。
    * 選択できない場合、現在のリージョンにはKeyPairを作ってないことを示します。
    * [KeyPairの作成手順](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/create-key-pairs.html)
* SubnetId
    * 現在CloudFormationを実行するリージョンに使用可能なサブネットを選択します。
    * 選択できない場合、現在のリージョンにはVPCとSubnetを作ってないのを示します。
    * [VPCとSubnetの作成手順](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html)
* SecurityGroupId
    * 現在CloudFormationを実行するリージョンに使用可能なセキュリティーグループを選択します。
    * 選択できない場合、現在のリージョンにはSecurityGroupを作ってないのを示します。
    * [SecurityGroupの作成手順](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)


# テンプレート詳細：リソース作成
```yaml: 
Resources:
  WindowsInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0610a81d45d7c9b1a
      InstanceType: !Ref InstanceType
      KeyName: !Ref KeyPair
      Monitoring: true
      Tags:
        - Key: Name
          Value: !Ref InstanceName
      NetworkInterfaces:
      - AssociatePublicIpAddress: "true"
        DeviceIndex: "0"
        GroupSet:
          - !Ref SecurityGroupId
        SubnetId: !Ref SubnetId
```
この部分はデプロイするインスタンスを定義します。
* InstanceName、Instance Type、Key Pair、SubnetId、SecurityGroupIdは最初パラメーター入力のところ指定しました。
* ImageIdのところにさっきCommunity AMIsでメモしたAMI IDを設定すれば、このテンプレートを実行する時は日本語したWindows Instance(Windows_Server-2022-Japanese-Full-Base-2022.11.10)をデプロイします。
* AssociatePublicIpAddressを設定しないと、作成されたInstanceはPublic IPがついてないので、必ずTrueを設定してください。


# Reference
* [KeyPairの作成手順](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/create-key-pairs.html)
* [VPCとSubnetの作成手順](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html)
* [SecurityGroupの作成手順](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)