0

opsworks 스택을 생성하는 AWS cloudformation 템플리트에서 작업하고 있습니다. 내 스택에 하나의 인스턴스 (Ubuntu 14.04)가 있으며 인스턴스에 설치 될 모든 응용 프로그램과 패키지는 S3 버킷에서 제공되는 요리사 요리 책에 구성됩니다.opsworks의 사용자 정의 json에 환경 변수 설정

:

{ 
    "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" 
     } 
    }, 


    } 




} 

내가 내 인스턴스가이 환경 변수를 갖고 싶어 : 내 인스턴스에서 환경 변수를 설정해야하고 그 값이 cloudformation 템플릿의 매개 변수에 의해 설정되는,이 템플릿입니다

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

값은 사용자가 선택할 항목에 따라 다릅니다. 이 변수를 설정하는 방법? CustomJson을 통해 가능합니까? 또는 요리 책에서 직접? 도와주세요. 고맙습니다. 나는 다음과 같은 설정으로 원하는 것을 내가 acheived successfly

+0

'CustomJson'은 요리사를 사용하는'AWS :: Opsworks :: Stack' 리소스의 속성입니다. – JavaQueen

답변

0

:

내 템플릿에 CustomJson이 추가

:

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

내가

settings/recipes/defaults.rb : 



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

을 다음과 같은 요리 책을 추가 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 %>