AWSクラウド形成入門📜


AWS上のサービスのほんの一握り以上を展開し、手動で一人一人を設定すると、かなり退屈なことができます.また、手で各AWSリソースを設定することは、エラーを作るか、矛盾を導入することの非常により高い危険にあなたを残します.
AWS CloudFormationを入力します.
CloudFormationは、コントロールされ、予測可能な方法でAWSリソースのコレクションを作成し、管理する簡単な方法を提供するサービスです.

AWSクラウド形成はどのように機能しますか?
CloudFormationの重要な概念は、テンプレート、スタック、および変更セットです.

  • テンプレート: JSONまたはYAMLで書かれたインフラストラクチャの説明です.

  • スタック:CloudFormationによって作成されたインフラストラクチャは、テンプレートを使用してスタックとして知られています.

  • 変更設定:それらの変更がそれらを実行する前にあなたの既存のリソースに影響を及ぼすかもしれないかを見ることができるスタックへの提案された変更の概要
    最初に行うのは、JSONまたはYAML形式でCloudFormationテンプレートを作成することです.
    次に、CloudFormationコンソール、API、またはAWS CLIを使用してテンプレートを展開します.CloudFormation規定と、テンプレートで説明されているAWSサービスへの呼び出しを行うことでリソースを設定します.

    すべてのリソースが作成された後、CloudFormationは、スタックが作成されていることを報告します.スタック作成が失敗した場合、CloudFormationは作成したリソースを削除して変更をロールバックします.
    スタックを更新するには、元のスタックテンプレートの変更されたバージョン、異なる入力パラメーター値、またはその両方を送信することによって変更セットを作成します.CloudFormationは、変更されたテンプレートを元のテンプレートと比較し、変更セットを生成します.変更を実行する前に展開される変更を表示できます.


    テンプレートの基礎
    テンプレートは次のセクションから成ります.

  • フォームのバージョン:テンプレートが一致するAWS CloudFormationテンプレートバージョン.

  • 説明:テンプレートを記述するテキスト文字列.

  • メタデータ:テンプレートに関する追加情報を提供する任意のJSONまたはYAMLオブジェクト.

  • パラメータ:ランタイムでテンプレートに渡す値.

  • ルール:スタック作成またはスタック更新中にテンプレートに渡されるパラメーターまたはパラメーターの組み合わせを検証します.

  • マッピング:条件付きパラメータ値を指定するために使用するキーと関連する値のマッピング.

  • 条件:特定のリソースが作成されるか、特定のリソースプロパティがスタック作成または更新中に値を割り当てられているかどうかを制御する条件.

  • Transform :テンプレートを処理するマクロのセット.基本的に、テンプレートの処理済みのバージョンを作成します.

  • リソース:あなたのスタックに含めるAWSリソース.

  • 出力:あなたが他のスタックにインポートすることができます出力値を宣言し、応答(スタックコールを記述する)、またはコンソールで表示を返します.
  • これは基本的なテンプレートのようです👇

    いくつかのセクションでもう少し詳細に行きましょう.

    パラメータ
    パラメータは値を持つテンプレートをカスタマイズするために使用されます.テンプレートコードを変更することなく設定を変更する柔軟性を与えます.


    資源
    これはテンプレートの大部分です.ここでは、CloudFormationが管理するリソースを定義し、設定する場所です.リソースを定義するときは、型とその型のプロパティを知る必要があります.


    出力
    これらはテンプレートの戻り値のようです.我々はそれが簡単にCloudFormationは私たちのために作成されるリソースのいくつかを見つけるためにそれらを使用します.


    内在関数
    CloudFormationには、他のリソースとそのプロパティを参照するために使用できるいくつかの固有の機能があります.実行時まで使用できないプロパティに値を割り当てるには、それらを使用できます.

  • fn::base 64 -入力文字列
  • のbase 64表現を返す

  • fn::cidr - CIDRアドレスブロックの配列を返す

  • 条件関数-条件付きでスタックリソースを作成するために使用します.これらはfn::, fn ::equals , fn ::if , fn ::not , fn ::orです.

  • fn::findinmap -マッピングセクション
  • で宣言された2レベルマップのキーに対応する値を返す

  • fn ::getatt -テンプレート
  • のリソースから属性の値を返す

  • fn::getAzs -指定した領域の可用性ゾーンをアルファベット順
  • に示す配列を返す

  • fn::importValue -別のスタック
  • でエクスポートされた出力の値を返す

  • fn ::join -指定した区切り文字
  • で区切られた値のセットを単一の値に追加します.

  • fn::select -インデックス
  • でオブジェクトのリストから単一のオブジェクトを返す

  • FN::split -区切り文字を使用して文字列のリストに文字列を分割する

  • fn::sub入力文字列の変数を
  • を指定した値で置換する

  • fn ::transform -スタックテンプレートの一部でカスタム処理を実行するマクロを指定する

  • ref -指定したパラメータまたはリソース
  • の値を返す
    CloudFormationを使用すると、完全な関数名(fn ::sub)または短いフォーム(. sub . sub)を使用することができます.
    これは、サンプルテンプレートが固有の関数でどのように見えるかです👇
    AWSTemplateFormatVersion: '2010-09-09'
    Description: 'Creating an EC2 instance using a security group that has already been created or a new security group'
    
    Parameters:
      ExistingSecurityGroup: 
        Description: An existing security group ID (optional).
        Default: NONE
        Type: String
    
    Conditions:
      CreateNewSecurityGroup: !Equals [!Ref ExistingSecurityGroup, NONE]
    
    Resources:
      MyInstance:
        Type: "AWS::EC2::Instance"
        Properties: 
          ImageId: "ami-0ff8a91507f77f867"
          SecurityGroups: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]
                Tags:
                  - Key: Name
                    Value: !Sub '${AWS::StackName}-webserver'
    
      NewSecurityGroup:
        Type: "AWS::EC2::SecurityGroup"
        Condition: CreateNewSecurityGroup
        Properties:
          GroupDescription: Enable HTTP access via port 80
          SecurityGroupIngress:
            - IpProtocol: tcp
              FromPort: 80
              ToPort: 80
              CidrIp: 0.0.0.0/0
    
    Outputs:
      SecurityGroupId:
        Description: The group ID of the security group used.
        Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]
    

    結論
    CloudFormationなどのIACツールを活用することで、AWS展開プロセスを合理化できます.リソース構成を一度定義することができます.単一のAmazon EC 2インスタンスから複雑なマルチ階層マルチ領域アプリケーションに何かを管理できます.
    お気軽に私に手を差し伸べる!😊