AWS CloudFormation
2018/06/08
株式会社 Rosso
1/20
自己紹介
小田島
お だ し ま
靖
や す し
(yo_dazy)
• 株式会社 Rosso 技術推進室 TechLead
• Citrixを使用したVDI環境の運用業務
• Ansibleを使用した某キャリアのシステム運用作業の自動化
• オンプレミス環境からクラウド環境へのリプレース(Azure)
• 機械学習ソリューションのインフラ設計と構築
2/20
今回やること
3/20
クラウド環境の自動構築
• 「AWS CloudFormation」と構成管理[Ansible]を使用してPHP
のフレームワーク[Laravel]の環境をコードで作成します。
10.1.0.0/16
SUBNET:10.1.1.0/24
Ansible
Laravel
Provisioning
4/20
Security
Group
Security
Group
Internet
gateway
Instance
Instance
SUBNET:10.1.2.0/24
SSH
SSH
HTTP
CloudFormationとは?
• CloudFormation :
• リソースを[JSON]、[YAML]でコード化する。コード化することで環
境移行や、複数作成などを可能にした、AWSのオートメーションツー
ル
メリット:
⇒コードで記載されている為環境の再作成が簡単!
⇒削除の際に複数のリソースを一括で削除できる!
⇒環境を別の環境で再現することも簡単
5/20
CloudFormationによる作成
• 今回二つのYAMLファイルを使用し、以下のAWSの環境をすべ
てコードで行います!
AWS
CloudFormation
AWS
CloudFormation
実はすでに作ってます
6/20
Ansible
10.1.0.0/16
10.1.2.0/24
CF.yaml 10.1.1.0/24
Laravel
CF-machine.yaml
こちらをデモします
すでに存在してますがコードの説明
7/20
AWS環境に最低限必要なもの
• AWS環境では、最低限以下のリソースが必要になります。
• 通常は手作業で作成しますが今回はコードで作成します。
項番 リソース アイコン 意味
1 インスタンス 仮想マシン。デフォルトでは鍵認証によるログ
イン。
2 VPC 仮想ネットワーク。異なるネットワーク間の通
信は別途設定が必要になる
3 サブネット アイコン
なし
サブネット。サブネットに約250のアドレスを
割り当てることが可能。
4 セキュリティグループ いわゆるファイアウォール。受信規則は拒否さ
れているため必要に応じて許可設定を行う。
5 インターネットゲートウェイ インターネット通信を許可する設定。
6 ルートテーブル アイコン
なし
サブネットとVPCの通信を制御。
8/20
VPC生成
• VPCを作成し、インターネットゲートウェイを作成します。
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.1.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: VM-vpc
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: VM-igw
10.1.0.0/16
⇒ インターネットに出ることができる仮想ネットワークが完成
9/20
サブネット生成
• VPCに関連付けるためVPC-IDを紐づけてIPを指定します。
10.1.0.0/16 PublicSubnet:
Type: AWS::EC2::Subnet
DependsOn: AttachGateway
Properties:
VpcId: vpc-af87c3c7
AvailabilityZone: !Select
- 0
- Fn::GetAZs: !Ref "AWS::Region"
CidrBlock: 10.1.1.0/24
Tags:
- Key: Name
Value: vm-sub1
⇒ インスタンスを格納する環境が完成
10/20
10.1.1.0/24
10.1.2.0/24
セキュリティグループ生成
• デフォルトでは拒否されているので[SSH]と[HTTP]を許可
10.1.0.0/16
EC2SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable ssh access to the instances
VpcId: !Ref VPC
SecurityGroupIngress: // セキュリティグループ
- IpProtocol: tcp // プロトコルの指定
FromPort: 22 // ポート範囲:開始
ToPort: 22 // ポート範囲:終了
CidrIp: 0.0.0.0/0 // IPv4 CIDR の範囲
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: !Join [ "-", [ !Ref NameTagPrefix, sg ] ]
⇒ 格納するインスタンスにファイアウォールを設定
11/20
10.1.1.0/24
10.1.2.0/24
インスタンス生成
• Userdata部分にコマンドを記載してマシンに設定を加える
10.1.0.0/16
EC2:
Type: AWS::EC2::Instance
Properties:
InstanceType: !FindInMap [ StackConfig, EC2, InstanceType ]
<<中略>>
UserData: !Base64 |
#!/bin/bash
echo xxxxxx | passwd --stdin root
sed -i 's/^#PermitRootLogin yes/PermitRootLogin yes/'
/etc/ssh/sshd_config
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/'
/etc/ssh/sshd_config
yum --enablerepo=epel install -y ansible
service sshd restart
Tags:
- Key: Name
Value: !Join [ "", [ !Ref NameTagPrefix, 01 ] ]
Ansible
⇒ [rootログイン]と[Ansible]のインストールを行っています
12/20
10.1.1.0/24
10.1.2.0/24
CloudFormation
-デモによるインスタンス作成ー
13/20
CloudFormation 実践
• 作成するリソースの数により時間の増減は変わりますが、大体
10分程度で作業は終わります。
<<作成中>>
<<作成完了>>
10分程度
14/20
実践!!
15/20
CloudFormation まとめ
• リソースの作成や削除を簡単にすることが可能。
• インフラ構築をコードにすることで再構築が可能。
• 他のリージョンへ複製したり、開発環境で作成した環境をコー
ド化し、本番環境へ移しこむことも可能
⇒ スピードアップ、作業効率化、オペレーションミスの減少
⇒ テンプレートして利用可能
⇒ リプレース、再作成が効率よく行うことが可能
16/20
The End
17/20

Cloudformation

Editor's Notes

  • #3 社内勉強会を開始してみたレポート
  • #5 Provisioning
  • #6 Provisioning
  • #7 Provisioning
  • #9 Provisioning
  • #10 Provisioning
  • #11 Provisioning vpc-af87c3c7
  • #12 Provisioning vpc-af87c3c7 AWS::EC2::SecurityGroupEgress
  • #13 Provisioning vpc-af87c3c7 AWS::EC2::SecurityGroupEgress
  • #15 Provisioning vpc-af87c3c7 AWS::EC2::SecurityGroupEgress
  • #17 Provisioning vpc-af87c3c7 AWS::EC2::SecurityGroupEgress