モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

ネストされた ALB/NLB/EC2 を CloudFormation で構築

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2017/10/18
最終更新最終更新
2020/02/24
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    0
    ステッカーを贈るとは?

    AWS ELB に ALBNLB が追加され、従来の ELB は CLB (Classic Load Balancer) とよばれるようになりました。本ページでは CloudFormation の基本的な使い方を把握する目的で ALB/NLB/EC2 スタックを作成するテンプレートを YAML で記述します。その際、共通部分は別テンプレートに分離してスタックをネストさせます。

    テンプレートを記述する際は、以下のようなドキュメントを参照します。

    EC2 インスタンス用のテンプレート (ALB/NLB 共通部分)

    以下のような設定で EC2 インスタンスを一つだけ起動します。

    • 事前に作成した VPC、Subnet、SSH 鍵 をスタック作成時に引数として指定
    • 事前に作成した AMI をスタックを作成するリージョンに応じて指定
    • SSH/HTTP ポートのみ開放
    • ルートボリューム以外に EBS 32 GB をアタッチ
    • インスタンスタイプ t2.micro
    • 固定 EIP を付与

    ec2.yaml

    AWSTemplateFormatVersion: 2010-09-09
    Description: Launch EC2 Instance
    Parameters:
      MyVpcId:
        Type: AWS::EC2::VPC::Id
      MySubnetId:
        Type: AWS::EC2::Subnet::Id
      MyKeyName:
        Type: AWS::EC2::KeyPair::KeyName
    Mappings:
      MyRegionMap: # Amazon Linux AMI 2017.09.0 (HVM), SSD Volume Type
        us-east-1: # US East (N. Virginia)
          AMI: ami-8c1be5f6
        us-east-2: # US East (Ohio)
          AMI: ami-c5062ba0
        us-west-1: # US West (N. California)
          AMI: ami-02eada62
        us-west-2: # US West (Oregon)
          AMI: ami-e689729e
        ca-central-1: # Canada (Central)
          AMI: ami-fd55ec99
        eu-west-1: # EU (Ireland)
          AMI: ami-acd005d5
        eu-west-2: # EU (London)
          AMI: ami-1a7f6d7e
        eu-central-1: # EU (Frankfurt)
          AMI: ami-c7ee5ca8
        ap-southeast-1: # Asia Pacific (Singapore)
          AMI: ami-0797ea64
        ap-southeast-2: # Asia Pacific (Sydney)
          AMI: ami-8536d6e7
        ap-northeast-1: # Asia Pacific (Tokyo)
          AMI: ami-2a69be4c
        ap-northeast-2: # Asia Pacific (Seoul)
          AMI: ami-9bec36f5
        ap-south-1: # Asia Pacific (Mumbai)
          AMI: ami-4fc58420
        sa-east-1: # South America (São Paulo)
          AMI: ami-f1344b9d
    Resources:
      MyEc2SecurityGroup:
        Type: AWS::EC2::SecurityGroup
        Properties:
          GroupDescription: Allow incoming SSH/HTTP connections.
          SecurityGroupIngress:
            - IpProtocol: tcp
              FromPort: 22
              ToPort: 22
              CidrIp: 0.0.0.0/0
            - IpProtocol: tcp
              FromPort: 80
              ToPort: 80
              CidrIp: 0.0.0.0/0
          VpcId: !Ref MyVpcId
      MyEc2Instance:
        Type: AWS::EC2::Instance
        Properties:
          BlockDeviceMappings:
            - DeviceName: /dev/sdf
              Ebs:
                DeleteOnTermination: false
                VolumeSize: 32
                VolumeType: gp2
          ImageId: !FindInMap [ MyRegionMap, !Ref 'AWS::Region', AMI ]
          InstanceType: t2.micro
          KeyName: !Ref MyKeyName
          SecurityGroupIds:
            - !Ref MyEc2SecurityGroup
          SubnetId: !Ref MySubnetId
          Tags:
            - Key: Name
              Value: my-ec2-instance
      MyEip:
        Type: AWS::EC2::EIP
        Properties:
          InstanceId: !Ref MyEc2Instance
          Domain: vpc
    Outputs:
      MyOutputEc2Instance:
        Value: !Ref MyEc2Instance
    

    ALB/NLB 用のテンプレート

    以下のような設定で ALB/NLB および EC2 インスタンスを起動します。内部的に EC2 インスタンス用のテンプレートを利用します。

    • 事前に作成した VPC、Subnet 二つ、SSH 鍵、テンプレート URL をスタック作成時に引数として指定
      • EC2 インスタンス用のテンプレートは S3 にアップロードしたものを指定
    • EC2 インスタンスは二つのサブネットでそれぞれで一つずつ起動
    • ALB 経由では HTTP ポートのみ待ち受け
      • EC2 インスタンスの HTTP ポートにリバースプロキシ
      • EC2 インスタンスの HTTP ポートのパス /status でヘルスチェック
    • NLB 経由では TCP 80 番ポートのみ待ち受け
      • EC2 インスタンスの TCP 80 番ポートにリバースプロキシ
      • EC2 インスタンスの HTTP ポートのパス /status でヘルスチェック
    • DefaultActions 以外のアクション設定が不要なため AWS::ElasticLoadBalancingV2::ListenerRule 未設定

    alb-nlb-ec2.yaml

    AWSTemplateFormatVersion: 2010-09-09
    Description: Create ALB (or NLB) and attached EC2 instances.
    Parameters:
      MyVpcId:
        Type: AWS::EC2::VPC::Id
      MySubnetId1:
        Type: AWS::EC2::Subnet::Id
      MySubnetId2:
        Type: AWS::EC2::Subnet::Id
      MyKeyName:
        Type: AWS::EC2::KeyPair::KeyName
      MyEc2StackTemplateURL:
        Type: String
        AllowedPattern: ^https://s3.amazonaws.com/.+$
    Resources:
      MyEc2Stack1:
        Type: AWS::CloudFormation::Stack
        Properties:
          Parameters:
            MyVpcId: !Ref MyVpcId
            MySubnetId: !Ref MySubnetId1
            MyKeyName: !Ref MyKeyName
          TemplateURL: !Ref MyEc2StackTemplateURL
      MyEc2Stack2:
        Type: AWS::CloudFormation::Stack
        Properties:
          Parameters:
            MyVpcId: !Ref MyVpcId
            MySubnetId: !Ref MySubnetId2
            MyKeyName: !Ref MyKeyName
          TemplateURL: !Ref MyEc2StackTemplateURL
      MyLbSecurityGroup:  # NLB では削除します。
        Type: AWS::EC2::SecurityGroup
        Properties:
          GroupName: MyLbSecurityGroup
          GroupDescription: Allow incoming HTTP connections.
          SecurityGroupIngress:
            - IpProtocol: tcp
              FromPort: 80
              ToPort: 80
              CidrIp: 0.0.0.0/0
          VpcId: !Ref MyVpcId
      MyTargetGroup:
        Type: AWS::ElasticLoadBalancingV2::TargetGroup
        Properties:
          HealthCheckIntervalSeconds: 30
          HealthCheckPath: /status
          HealthCheckPort: 80
          HealthCheckProtocol: HTTP
          HealthCheckTimeoutSeconds: 10  # NLB では削除します。
          HealthyThresholdCount: 4
          Matcher:  # NLB では削除します。
            HttpCode: 200
          Name: MyTargetGroup
          Port: 80
          Protocol: HTTP  # NLB では `TCP` に変更します。
          Targets:
            - Id: !GetAtt MyEc2Stack1.Outputs.MyOutputEc2Instance
              Port: 80
            - Id: !GetAtt MyEc2Stack2.Outputs.MyOutputEc2Instance
              Port: 80
          UnhealthyThresholdCount: 3  # NLB では `HealthyThresholdCount` と同じ値にします。
          VpcId: !Ref MyVpcId
      MyLb:
        Type: AWS::ElasticLoadBalancingV2::LoadBalancer
        Properties:
          Name: MyLbName
          Scheme: internet-facing
          SecurityGroups:  # NLB では削除します。
            - !Ref MyLbSecurityGroup
          Subnets:
            - !Ref MySubnetId1
            - !Ref MySubnetId2
          Type: application  # NLB では `network` に変更します。
      MyListener:
        Type: AWS::ElasticLoadBalancingV2::Listener
        Properties:
          DefaultActions:
            - TargetGroupArn: !Ref MyTargetGroup
              Type: forward
          LoadBalancerArn: !Ref MyLb
          Port: 80
          Protocol: HTTP  # NLB では `TCP` に変更します。
    

    成功すれば以下のように root stack と nested stack が作られます。インスタンスに SSH ログインして nginx 等をインストールした後 /status で 200 を返すように設定すれば ALB 経由でインターネットから HTTP 接続できるようになります。

    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • AWS EC2 インスタンスの選定方法
        準仮想化と完全仮想化 AWS のインスタンスタイプが準仮想化と完全仮想化のどちらの仮想化技術を採用したハードウェアであるかによって、使用できる AMI (OS) が異なるのは以下の理由によります。 準仮想化 ParaVirtualization (PV) において OS は自分が仮想化用のハードウェア上で動作していることを知っています。つまり仮想化用にカスタマイズされた専用の OS が必要になりま...
        yuki_coderyuki_coder9/30/2017に更新
        いいねアイコン画像0
      • OpenVPN で二つの VPC をつなぐための設定
        インターネット VPN (Virtual Private Network) には二拠点間の通信を暗号化する方式によって IPsec-VPN や SSL-VPN などがあります。OpenVPN は SSL-VPN の実装のひとつです。AWS VPC を二つ用意してそれらを OpenVPN で接続してみます。 VPC の構成 myvpc-1 (10.1.0.0/16) mysubnet-1-1 (10...
        takuyatakuya9/11/2017に更新
        いいねアイコン画像0
      • Windows Server EC2 インスタンスへの CAL インストール
        サムネイル画像-8bae43ea3b
        Windows サーバを AWS EC2 インスタンスとして起動した後は、RDP 接続が必要となります。RDP 接続を行なうためには Remote Desktop Services (RDS) ライセンスが必要となります。 Windows Server のライセンスは、管理用途の RDS 接続を許可しています。その際に RDS ライセンスは不要です。ただし、[同時接続数が 2 という制限があります...
        けんちゃんけんちゃん12/18/2023に更新
        いいねアイコン画像0
      • AWS Lambda の基本的な使い方
        サムネイル画像-9285163f6b
        AWS Lambda はイベントドリブンな「関数」を登録できるサービスです。例えば S3 に画像がアップロードされたときにサムネイル用のサイズに加工する処理が記述された関数を登録できます。基本的な使い方をまとめます。 事前準備 関数の登録はブラウザで AWS コンソールにログインして行うこともできますが、本ページでは AWS C
        yuki_coderyuki_coder2/18/2020に更新
        いいねアイコン画像0
      • AWS 落穂拾い (Data Engineering)
        Kinesis Kinesis Streams データは 3 AZ にレプリケーションされます。Amazon Kinesis Data Streams FAQs 24 時間 (既定値) から 1 年までデータ保持できます。[Changing the Data Retention Period](https://docs.aws.amazon
        yuki_coderyuki_coder1/22/2025に更新
        いいねアイコン画像0