この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。大阪オフィスの林です。
本日2020年6月16日(火)より、弊社主催のオンラインイベントDevelopers.IO 2020 CONNECTが始まりました!合計7日間(6/16~7/7までの火曜日と金曜日)で約100本のセッションをお届する予定ですので、ぜひ様々なセッションをご視聴頂けますと幸いです!
本記事では私のビデオセッションをご紹介させて頂きます。
セッション動画
セッション動画の目次
下記のような流れでお話しさせて頂きました。
動画では「Infrastructure as a Code」という文言・名称で説明を進めてしまっていましたが、一般的には「Infrastructure as Code (Codeの前の「a」はなし)」と言ったり書いたりするようでした。動画の修正は追いついていないのでひとまずご了承頂ければと思います。
セッション動画のコンセプト
本セッション動画では、あまりテクニカルな内容になり過ぎず、どちらかというと初心者の方であったり、これからCloudFormationをお使いになる方に向けてお話をさせて頂きました。
セッション動画のサマリ
冒頭はCloudFormationをすごく簡単におさらいさせて頂きました。
続いて、CloudFormationをお使いになる前に少し立ち止まって考えて頂きたいことなんかをお話させて頂きました。
後半は、実際にコードの解説をしながら、AWSマネージメントコンソールとセットで「6つ」のデモを行わせて頂きました。
デモの後半は、私自身が過去経験した、初心者の方が遭遇しやすいエラーを「4個」お伝えさせて頂きました。
最後に、Infrastructure as Codeに対して私自身が考えていることをサクッとお伝えさせて頂きました。
まとめ
CloudFormationやInfrastructure as Codeに対して、改めて向き合う機会になって自分自身大変勉強になったというのが、今の実感です。
本セッションの動画がこれからCloudFormationをお使いになる方の参考になったり、既にお使いの方にも参考になって頂けると幸いです。
以上、大阪オフィスの林がお送りしました!
参考
デモの中で使用したコードです。
VPCとサブネットを作成したコード
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create BaseNetwork"
Resources:
# ------------------------------------------------------------#
# VPC
# ------------------------------------------------------------#
MyVPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: Sample-prd-vpc
# ------------------------------------------------------------#
# Subnet
# ------------------------------------------------------------#
MySubnet01:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref MyVPC
AvailabilityZone: ap-northeast-1a
CidrBlock: 10.0.0.0/24
Tags:
- Key: Name
Value: Sample-prd-subnet01
MySubnet02:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref MyVPC
AvailabilityZone: ap-northeast-1c
CidrBlock: 10.0.1.0/24
Tags:
- Key: Name
Value: Sample-prd-subnet02
# ------------------------------------------------------------#
# Output
# ------------------------------------------------------------#
Outputs:
MyVPC:
Value: !Ref MyVPC
Export:
Name: !Sub "${AWS::StackName}-MyVPC"
MySubnet01:
Value: !Ref MySubnet01
Export:
Name: !Sub "${AWS::StackName}-MySubnet01"
MySubnet02:
Value: !Ref MySubnet02
Export:
Name: !Sub "${AWS::StackName}-MySubnet02"
インプットパラメータを使ったコード
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create BaseNetwork"
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Parameters:
- SystemName
- EnvType
Parameters:
SystemName:
Description: Please type the SystemName.
Type: String
Default: Sample
EnvType:
Description: Select Environment Type.
Type: String
Default: prd
AllowedValues:
- stg
- prd
CidrBlock:
Description: Please type the CidrBlock.
Type: String
Default: 10.0.0.0/16
Resources:
# ------------------------------------------------------------#
# VPC
# ------------------------------------------------------------#
MyVPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: !Sub ${CidrBlock}
Tags:
- Key: Name
Value: !Sub ${SystemName}-${EnvType}-vpc
# ------------------------------------------------------------#
# Subnet
# ------------------------------------------------------------#
MySubnet01:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref MyVPC
AvailabilityZone: ap-northeast-1a
CidrBlock: !Select [ 0, !Cidr [ !GetAtt MyVPC.CidrBlock, 1, 8 ]]
Tags:
- Key: Name
Value: !Sub ${SystemName}-${EnvType}-subnet01
MySubnet02:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref MyVPC
AvailabilityZone: ap-northeast-1c
CidrBlock: !Select [ 1, !Cidr [ !GetAtt MyVPC.CidrBlock, 2, 8 ]]
Tags:
- Key: Name
Value: !Sub ${SystemName}-${EnvType}-subnet02
# ------------------------------------------------------------#
# Output
# ------------------------------------------------------------#
Outputs:
MyVPC:
Value: !Ref MyVPC
Export:
Name: !Sub "${AWS::StackName}-MyVPC"
MySubnet01:
Value: !Ref MySubnet01
Export:
Name: !Sub "${AWS::StackName}-MySubnet01"
MySubnet02:
Value: !Ref MySubnet02
Export:
Name: !Sub "${AWS::StackName}-MySubnet02"
EC2を作ったコード
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create EC2"
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Parameters:
- SystemName
- EnvType
- ImageID
- EC2KeyPair
- BaseNetworkStackName
Parameters:
SystemName:
Description: Please type the SystemName.
Type: String
Default: Sample
EnvType:
Description: Please Select Environment Type.
Type: String
Default: prd
AllowedValues:
- stg
- prd
ImageID:
Description: Please type the EC2 image ID.
Type: String
Default: ami-0a1c2ec61571737db # Amazon Linux 2 AMI
EC2KeyPair:
Description: Please Select EC2 key name.
Type: AWS::EC2::KeyPair::KeyName
BaseNetworkStackName:
Description: Please type the BaseNetwork stack name.
Type: String
Default: Mynetwork1
Resources:
# ------------------------------------------------------------#
# EC2
# ------------------------------------------------------------#
MyEC2:
Type: "AWS::EC2::Instance"
Properties:
AvailabilityZone: ap-northeast-1a
ImageId: !Sub ${ImageID}
InstanceType: m4.large
KeyName: !Sub ${EC2KeyPair}
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp2
VolumeSize: 20
SubnetId: { "Fn::ImportValue": !Join [ "-", [ "Ref":"BaseNetworkStackName","MySubnet01"]] }
Tags:
- Key: Name
Value: !Sub ${SystemName}-${EnvType}-ec2
作ったEC2を更新したコード
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create EC2"
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Parameters:
- SystemName
- EnvType
- ImageID
- EC2KeyPair
- BaseNetworkStackName
Parameters:
SystemName:
Description: Please type the SystemName.
Type: String
Default: Sample
EnvType:
Description: Please Select Environment Type.
Type: String
Default: prd
AllowedValues:
- stg
- prd
ImageID:
Description: Please type the EC2 image ID.
Type: String
Default: ami-0a1c2ec61571737db # Amazon Linux 2 AMI
EC2KeyPair:
Description: Please Select EC2 key name.
Type: AWS::EC2::KeyPair::KeyName
BaseNetworkStackName:
Description: Please type the BaseNetwork stack name.
Type: String
Default: Mynetwork
Resources:
# ------------------------------------------------------------#
# EC2
# ------------------------------------------------------------#
MyEC2:
Type: "AWS::EC2::Instance"
Properties:
AvailabilityZone: ap-northeast-1a
ImageId: !Sub ${ImageID}
InstanceType: m4.large
KeyName: !Sub ${EC2KeyPair}
DisableApiTermination: true
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp2
VolumeSize: 20
SubnetId: { "Fn::ImportValue": !Join [ "-", [ "Ref":"BaseNetworkStackName","MySubnet01"]] }
Tags:
- Key: Name
Value: !Sub ${SystemName}-${EnvType}-ec2