0

Ich arbeite an einer AWS-Cloud-Vorlage, die einen Opsworks-Stapel erstellt. In meinem Stapel habe ich eine Instanz (Ubuntu 14.04), alle Anwendungen und Pakete, die in der Instanz installiert werden, werden im Kochkochbuch aus einem S3-Bucket konfiguriert. Ich brauche eine Umgebungsvariable in meinem Beispiel zu setzen und sein Wert ist durch einen Parameter der Cloudformation-Vorlage festgelegt wird, ist dies die Vorlage:Legen Sie eine Umgebungsvariable in der benutzerdefinierten JSON in opsworks

{ 
    "AWSTemplateFormatVersion": "2010-09-09", 
    "Description": "AWS CloudFormation Template : Stack OpsWorks Slave pour deployer les instances script", 


    "Mappings": { 

    "Region2Principal": { 

     "us-east-1": { 
     "EC2Principal": "ec2.amazonaws.com", 
     "OpsWorksPrincipal": "opsworks.amazonaws.com" 
     }, 

     "us-west-2": { 
     "EC2Principal": "ec2.amazonaws.com", 
     "OpsWorksPrincipal": "opsworks.amazonaws.com" 
     }, 

     "us-west-1": { 
     "EC2Principal": "ec2.amazonaws.com", 
     "OpsWorksPrincipal": "opsworks.amazonaws.com" 
     }, 

     "eu-west-1": { 
     "EC2Principal": "ec2.amazonaws.com", 
     "OpsWorksPrincipal": "opsworks.amazonaws.com" 
     } 
    }, 

    "AWSInstanceType2Arch" : { 

      "t1.micro" : { "Arch" : "PV64" }, 
      "t2.micro" : { "Arch" : "HVM64" }, 
      "m1.small" : { "Arch" : "PV64" }, 
      "m1.large" : { "Arch" : "PV64" }, 
      "m4.large" : { "Arch" : "HVM64" }, 
      "m4.xlarge" : { "Arch" : "HVM64" }, 
      "m4.2xlarge" : { "Arch" : "HVM64" }, 
      "m4.4xlarge" : { "Arch" : "HVM64" }, 
      "m4.10xlarge" : { "Arch" : "HVM64" }, 
      "m4.16xlarge" : { "Arch" : "HVM64" }, 
      "c3.large" : { "Arch" : "HVM64" }, 
      "c3.xlarge" : { "Arch" : "HVM64" }, 
      "c3.2xlarge" : { "Arch" : "HVM64" }, 
      "c3.4xlarge" : { "Arch" : "HVM64" }, 
      "c3.8xlarge" : { "Arch" : "HVM64" }, 
      "c4.large" : { "Arch" : "HVM64" }, 
      "c4.xlarge" : { "Arch" : "HVM64" }, 
      "c4.2xlarge" : { "Arch" : "HVM64" }, 
      "c4.4xlarge" : { "Arch" : "HVM64" }, 
      "c4.8xlarge" : { "Arch" : "HVM64" } 
    }, 

    "AWSRegionArch2AMI" : { 

     "us-east-1" : { "PV64" : "ami-5fb8c835", "HVM64" : "ami-60b6c60a" }, 
     "us-west-1" : { "PV64" : "ami-56ea8636", "HVM64" : "ami-d5ea86b5" }, 
     "eu-west-1" : { "PV64" : "ami-95e33ce6", "HVM64" : "ami-bff32ccc" }, 
     "us-west-2" : { "PV64" : "ami-d93622b8", "HVM64" : "ami-f0091d91" } 
    } 

    }, 


    "Parameters": { 

    "OpsWorksStackColor": { 
     "Description": "RGB Color to use for OpsWorks Stack", 
     "Type": "String", 
     "Default": "rgb(38, 146, 168)" 
    }, 

    "Region" : { 
     "Type":"String", 
     "Description": "Region location of the template resources", 
     "Default": "eu-west-1", 
     "AllowedValues" : [ "us-east-1", "us-west-1", "us-west-2", "eu-west-1" ] 
    }, 

    "SecurityGroupIds": { 
     "Description": "Security groups that can be used to access the EC2 instances, do not select more than 5 SG", 
     "Type": "List<AWS::EC2::SecurityGroup::Id>", 
     "ConstraintDescription": "must be list of EC2 security group ids" 
    }, 

    "VpcId": { 
     "Type": "AWS::EC2::VPC::Id", 
     "Description": "VPC associated with the provided subnets", 
     "Default": "vpc-69e3320c", 
     "ConstraintDescription": "must be an existing VPC ID" 
    }, 

    "SubnetId": { 
     "Type": "String", 
     "Default": "subnet-6820eb31", 
     "ConstraintDescription": "must be an existing subnet ID" 
    }, 

    "InstanceType": { 
     "Type": "String", 
     "Default": "c3.large", 
     "AllowedValues" : ["t2.micro", "m1.small", "m1.large","m4.large","m4.xlarge","m4.2xlarge","m4.4xlarge","m4.10xlarge","m4.16xlarge","c4.large" , "c4.xlarge" ,"c4.2xlarge" , "c4.4xlarge","c4.8xlarge" , "c3.large" , "c3.xlarge", "c3.2xlarge", "c3.4xlarge" ,"c3.8xlarge"], 
     "ConstraintDescription": "must be a valid EC2 instance type" 
    }, 

    "KeyPairName": { 
     "Type": "AWS::EC2::KeyPair::KeyName", 
     "Default": "test-generic-ec2", 
     "ConstraintDescription": "must be the name of an existing EC2 KeyPair" 
    }, 

    "CookbookS3" : { 
     "Type": "String", 
     "Default": "https://s3-eu-west-1.amazonaws.com/MybucketJRBLO.cookbooks/cookbook-v2.tar.gz", 
     "ConstraintDescription": "the Url to the cookbook" 
    }, 

    "CookbookS3AccessID": { 
     "Type": "String", 
     "ConstraintDescription": "username to the appropriate IAM access key ID" 
    }, 

    "CookbookS3AccessKey": { 
     "Type": "String", 
     "NoEcho" : "true", 
     "ConstraintDescription": "password to the appropriate IAM secret access key" 
    }, 


    "Environnement" : { 
     "Description": "The Environnement variable ", 
     "Type": "String", 
     "Default": "test", 
     "AllowedValues" : ["dev", "test", "int", "prod"] 
    } 

    }, 

    "Conditions" : { 
    "CreateProdResources" : { "Fn::Not" : [{ "Fn::Equals" : [ {"Ref" : "Environnement"},"test" ] }] } 
    }, 

    "Resources": { 

    "MabStack": { 
     "Type": "AWS::OpsWorks::Stack", 
     "Properties": { 
     "AgentVersion" : "LATEST", 
     "Name": { "Ref": "AWS::StackName" }, 
     "Attributes": { "Color": { "Ref": "OpsWorksStackColor" } }, 
     "ChefConfiguration": {}, 
     "ConfigurationManager": { "Name": "Chef", "Version": "12" }, 
     "CustomCookbooksSource": { 
      "Type": "s3", 
      "Password" : { "Ref": "CookbookS3AccessKey" }, 
      "Username" : { "Ref": "CookbookS3AccessID" }, 
      "Url": { "Ref": "CookbookS3" } 
     }, 
     "CustomJson": { "awscli": { "profils": { 
          "default": {"role_arn": { "Fn::GetAtt": [ "OpsWorksInstanceProfile", "Arn" ] } } 
            } 
        } 


      , 

     "chef_environment": {"Ref" : "Environnement"} 

     }, 
     "DefaultInstanceProfileArn": { "Fn::GetAtt": [ "OpsWorksInstanceProfile","Arn" ] }, 
     "DefaultOs": "Ubuntu 14.04 LTS", 
     "DefaultRootDeviceType": "ebs", 
     "DefaultSshKeyName": { "Ref": "KeyPairName" }, 
     "DefaultSubnetId" : {"Ref" : "SubnetId" }, 
     "ServiceRoleArn": { "Fn::GetAtt": ["OpsWorksServiceRole", "Arn"] }, 
     "UseCustomCookbooks": true, 
     "UseOpsworksSecurityGroups" : true, 
     "VpcId" : { "Ref" : "VpcId" } 
     } 
    }, 

    "MabLayer": { 
     "Type": "AWS::OpsWorks::Layer", 
     "DependsOn" : "OpsWorksServiceRole", 
     "Properties": { 
     "AutoAssignElasticIps" : false, 
     "AutoAssignPublicIps" : true, 
     "CustomRecipes" : { 
      "Configure" : ["cassandra-php-driver::configure"], 
      "Setup"  : ["cassandra-php-driver::setup", "security::setup"] 
     }, 
     "CustomSecurityGroupIds" : { "Ref" : "SecurityGroupIds" }, 
     "EnableAutoHealing" : true, 
     "InstallUpdatesOnBoot": false, 
     "LifecycleEventConfiguration": { 
      "ShutdownEventConfiguration": { 
      "DelayUntilElbConnectionsDrained": false, 
      "ExecutionTimeout": 120 } 
     }, 
     "Name": "script-node", 
     "Shortname" : "node", 
     "StackId": { "Ref": "MabStack" }, 
     "Type": "custom", 
     "UseEbsOptimizedInstances": true, 
     "VolumeConfigurations": [ { 
      "Iops": 10000, 
      "MountPoint": "/dev/sda1", 
      "NumberOfDisks": 1, 
      "Size": 20, 
      "VolumeType": "gp2" 
     }] 
     } 
    }, 

    "OpsWorksServiceRole": { 
     "Type": "AWS::IAM::Role", 
     "Properties": { 
     "AssumeRolePolicyDocument": { 
      "Version" : "2012-10-17", 
      "Statement": [ { 
      "Effect": "Allow", 
      "Principal": { "Service": [ { "Fn::FindInMap": [ "Region2Principal",{ "Ref": "AWS::Region" },"OpsWorksPrincipal" ] } ] }, 
          "Action" : [ "sts:AssumeRole" ] 
      } ] 
      }, 
     "Path": "/", 
     "Policies": [ { 
      "PolicyName": "opsworks-service", 
      "PolicyDocument": { 
      "Version" : "2012-10-17", 
      "Statement": [ { 
      "Effect": "Allow", 
      "Action": "*", 
      "Resource": "*" 
      } ] 
      } 
      } ] 
     } 
    }, 

    "OpsWorksInstanceRole": { 
     "Type": "AWS::IAM::Role", 
     "Properties": { 
     "AssumeRolePolicyDocument": { 
      "Version" : "2012-10-17", 
      "Statement": [ { 
       "Effect": "Allow", 
       "Principal": { "Service" : [ { "Fn::FindInMap": [ "Region2Principal", { "Ref": "AWS::Region" },"EC2Principal" ] } ] }, 
          "Action" : [ "sts:AssumeRole" ] 
      }] 
     }, 
     "Path": "/", 
     "Policies": [{ 
      "PolicyName": "aws-opsworks-instance", 
      "PolicyDocument": { 
      "Statement": [{ 
       "Effect": "Allow", 
       "Action": "*", 
       "Resource": "*" 
      }] 
      } 
     }] 
     } 
    }, 

    "OpsWorksInstanceProfile": { 
     "Type": "AWS::IAM::InstanceProfile", 
     "Properties": { 
     "Path": "/", 
     "Roles": [ { "Ref": "OpsWorksInstanceRole" } ] 
     } 
    }, 



    "MabInstance": { 
     "Type": "AWS::OpsWorks::Instance", 
     "Properties": { 
     "Hostname": "Script", 
     "RootDeviceType": "ebs", 
     "StackId": {"Ref": "MabStack"}, 
     "LayerIds": [{"Ref": "MabLayer"}], 
     "InstanceType": {"Ref" : "InstanceType"} 
     } 
    }, 

    "MabApp": { 
     "Type": "AWS::OpsWorks::App", 
     "Properties": { 
     "AppSource" : { 
      "Type" : "git", 
      "Url" : "git://github.com:soumab/JRLapplication.git", 
      "Revision" : "develop" 
     }, 
     "Description": "Dataimport and connectors", 
     "Name" : "JRL-App", 
     "Shortname" : "JRL_app", 
     "StackId" : {"Ref": "MabStack"}, 
     "Type" : "other" 
     } 
    }, 


    } 




} 

Ich mag meine Instanz diese Umgebungsvariable haben:

export $Apps_ENV = "test"/"int"/"prod" 

so hängt der Wert davon ab, was der Benutzer auswählen wird. Wie setze ich diese Variable? Ist es möglich durch CustomJson? Oder direkt im Kochbuch? bitte hilfe. Vielen Dank.

+0

'CustomJson' ist eine Eigenschaft der Ressource' AWS :: Opsworks :: Stack', die Chef verwendet. – JavaQueen

Antwort

0

I acheived successfly, was ich mit den folgenden Einstellungen gesucht:

ich dies in meiner Vorlage CustomJson hinzugefügt:

"settings" : { "var" : { 
          "default": { "Apps_ENV": {"Ref" : "Environnement"} } } 
          } 

Und fügte ich ein Kochbuch, wie folgend

settings/recipes/defaults.rb : 



template '/etc/environment' do 
    source 'env.erb' 
    owner 'root' 
    group 'root' 
    mode '0755' 
end 

und settings/templates/default/env.erb:

<% node['settings']['var'].each do |var_name, var_att| %> 
<%= sprintf("[%s]", var_name) %> 
    <% var_att.each do |attr_name, attr_value| %> 
<%= sprintf("%s=%s", attr_name, attr_value) %> 
    <% end 
end %> 
Verwandte Themen