一番シンプルなcloudformationは、S3作成らしい。aws cliからスタックを作って、削除してみる。
s3.ymlとか適当なファイル名で保存。
1 2 3 4 5 6 7 8 9 10 |
AWSTemplateFormatVersion: '2010-09-09' # 定型文 # 説明はオプションだけど、一覧に表示されるので、入力した方が良い。 Description: A simple CloudFormation template to create an S3 bucket. # 生成するリソース Resources: SimpleS3Bucket: # AWSリソース名 Type: 'AWS::S3::Bucket' # AWSリソースの種類 Properties: # リソースの設定 BucketName: my-simple-s3-bucket # S3バケット名(重複不可) |
aws cliから、スタック作成・確認・削除してみる。
S3バケットが、ちゃんと生成された!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 書き方に問題がないかチェック aws cloudformation validate-template --template-body file://C:\Users\xxxxxx\Desktop\s3.yml # 実際にスタック生成 aws cloudformation create-stack --stack-name my-simple-stack --template-body file://C:\Users\xxxxxx\Desktop\s3.yml { "StackId": "arn:aws:cloudformation:ap-northeast-1:1234567890:stack/my-simple-stack/xxxxxxxxxxxxxxxxxxxxxxxx" } # なにか問題があると、エラーになる。 An error occurred (ValidationError) when calling the CreateStack operation: Template format error: unsupported structure. # スタック一覧で、確認できる(ブラウザから確認してもOK) aws cloudformation list-stacks # 作ったスタックを削除する aws cloudformation delete-stack --stack-name my-simple-stack |
典型的なcloudformationによるVPC作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
AWSTemplateFormatVersion: '2010-09-09' # CloudFormationテンプレートのバージョン指定 Description: 'Create a VPC with Public and Private Subnets for a test environment using Class C IP addresses.' Resources: # VPCの作成 VPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: '192.168.0.0/16' # クラスCのアドレス範囲を使用したVPCのCIDRブロック EnableDnsSupport: true # DNSサポートを有効化 EnableDnsHostnames: true # DNSホスト名の割り当てを有効化 Tags: - Key: Name Value: TestEnvironmentVPC # VPCに名前を付ける # インターネットゲートウェイの作成 InternetGateway: Type: 'AWS::EC2::InternetGateway' Properties: Tags: - Key: Name Value: TestEnvironmentIGW # インターネットゲートウェイに名前を付ける # VPCとIGWのアタッチもAWSリソースって、違和感ある・・・。 # インターネットゲートウェイをVPCにアタッチ GatewayAttachment: Type: 'AWS::EC2::VPCGatewayAttachment' Properties: VpcId: !Ref VPC InternetGatewayId: !Ref InternetGateway # パブリックサブネットの作成 PublicSubnet: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC CidrBlock: '192.168.1.0/24' # パブリックサブネットのCIDRブロック MapPublicIpOnLaunch: true # インスタンス起動時にパブリックIPを自動割り当て AvailabilityZone: !Select [0, !GetAZs ''] # 最初の利用可能ゾーンを選択 Tags: - Key: Name Value: PublicSubnet # サブネットに名前を付ける # プライベートサブネットの作成 PrivateSubnet: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC CidrBlock: '192.168.2.0/24' # プライベートサブネットのCIDRブロック MapPublicIpOnLaunch: false # パブリックIPの自動割り当てを無効化 AvailabilityZone: !Select [1, !GetAZs ''] # 2番目の利用可能ゾーンを選択 Tags: - Key: Name Value: PrivateSubnet # サブネットに名前を付ける # パブリックサブネット用ルートテーブルの作成 PublicRouteTable: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref VPC Tags: - Key: Name Value: PublicRouteTable # パブリックサブネット用ルートテーブルにインターネットへのルートを追加 PublicRoute: Type: 'AWS::EC2::Route' DependsOn: GatewayAttachment # インターネットゲートウェイのアタッチメントが完了するのを待つ Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: '0.0.0.0/0' # すべての宛先 GatewayId: !Ref InternetGateway # トラフィックをインターネットゲートウェイにルーティング # パブリックサブネットとルートテーブルの関連付け PublicSubnetRouteTableAssociation: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: SubnetId: !Ref PublicSubnet RouteTableId: !Ref PublicRouteTable # プライベートサブネット用ルートテーブルの作成 (この例では、プライベートサブネット用の特定のルートは追加していませんが、必要に応じてNATゲートウェイ経由のルートを追加できます) PrivateRouteTable: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref VPC Tags: - Key: Name Value: PrivateRouteTable # プライベートサブネットとルートテーブルの関連付け PrivateSubnetRouteTableAssociation: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: SubnetId: !Ref PrivateSubnet RouteTableId: !Ref PrivateRouteTable |