Tworzę szablon cloudformation, który tworzy niektóre zasoby, takie jak instancje EC2. Ten szablon zostanie użyty na różnych kontach AWS. Mamy 3 konta, jeden do środowiska testowego, jednego do środowiska dev, a jedna do produkcji. Na każdym koncie znajdują się 2 VPC (ten sam region na wszystkich kontach).

Moje pytanie, aby prawidłowo architektować obrócić, tworząc EC2, musimy wybrać VPC, podsieć wewnątrz tego samego VPC oraz strefę dostępności tego samego podsieci. Potrzebuję strefy dostępności, ponieważ montowanie EFS w UserData instancji, dzięki czemu instancja może być podłączona do celu montażu.

Jak wiadomo, istnieje celem ilości w każdym podsieci, a DNS zmienia się zgodnie z AZ. Oto, co umieściłem w UserData, aby zamontować cel:

echo "availability-zone.file-system-id.efs.aws-region.amazonaws.com:/ /efs-mount-point nfs4 nfsvers=4.1 0 0" >> /etc/fstab

Nie tworzę bezpośrednio instancji, ale przez tworzenie konfiguracji uruchomienia i grupę autoskalową.

"Launchconfig":{
        "Type":"AWS::AutoScaling::LaunchConfiguration",
        "Properties":{
          "ImageId":{ "Fn::FindInMap":[ "AWSRegionToAMI", { "Ref":"AWS::Region" }, "AMIID" ] },
          "SecurityGroups":[ { "Ref":"EcsSecurityGroup" } ],
          "InstanceType": {"Ref":"InstanceType" },
          "IamInstanceProfile":{ "Ref":"EC2InstanceProfile" },
          "KeyName":{ "Fn::FindInMap" : [ "KeyPairMapping", {"Ref" : "EnvParam"}, "Key"] },
          "UserData":{  "Fn::Base64" : {
            "Fn::Join" : ["", [
              "#!/bin/bash -xe\n",
              "echo eu-west-1c.",{ "Fn::FindInMap" : [ "FileSystemMap", {"Ref" : "EnvParam"}, "FileSystemID"] },
              ".efs.",{ "Ref" : "AWS::Region" },".amazonaws.com:/ /efs-mount-target nfs defaults,vers=4.1 0 0",
              " >> /etc/fstab\n"
              ]]}
          }
        }
      },

      "AutoScalingGroup":{
        "Type":"AWS::AutoScaling::AutoScalingGroup",
        "Properties":{
          "VPCZoneIdentifier":{ "Ref":"SubnetID" },
          "LaunchConfigurationName":{ "Ref":"Launchconfig" },
          "MinSize":"1",
          "MaxSize":{ "Ref":"MaxSize" },
          "DesiredCapacity":{ "Ref":"DesiredCapacity" }
        }
      },

Moje pytanie: za pomocą mapowania, jak uzyskać wartość strefy dostępności w UserData zgodnie z wybranym podsieci?

0
Souad 15 luty 2017, 16:26

2 odpowiedzi

Najlepsza odpowiedź

Można to osiągnąć na dwa sposoby, w zależności od przypadku użycia:

  1. { {X0}} nieruchomość dla Twoje AutoScalingGroup zasób akceptuje listę ciągów identyfikatorów podsieci. Alternatywnie, AvailabilityZones właściwość akceptuje listę strun strefy dostępności. Jeśli określasz tylko jedną strefę dostępności / podsieci dla automatycznego grupy skalowania, możesz mieć pewność, że instancja zostanie uruchomiona w określonej strefie dostępności.

  2. Jeśli twoja grupa skalowania może uruchomić instancje w wielu strefach dostępności, możesz Pobierz metadane instancji, aby określić aktualną strefę dostępności instancji, np. Uruchamiając następujące polecenie w skrypcie danych użytkownika na instancji:

    AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
    echo "$AZ.${FileSystemId}.efs.${AWS::Region}.amazonaws.com:/ /efs-mount-point nfs4 nfsvers=4.1 0 0" >> /etc/fstab
    
1
wjordan 15 luty 2017, 23:36

Nie sądzę, że możesz uzyskać bezpośredni dostęp do danych użytkownika podczas tworzenia stosu stosu. Ale czy mógłbyś sparametryzować wartość i odniesienie do parametru w obu miejscach, których potrzebujesz?

0
Tim Bassett 15 luty 2017, 19:21