2016-06-20 5 views
1

현재 Amazon AMI를 사용하여 간단한 EC2 인스턴스를 생성하는 구름 형성 템플릿을 만드는 중입니다. 이 인스턴스를 만든 후에 Jenkins, Git, Apache Maven 등을 설치하고 PATH 변수 및 ./bashrc 파일을 업데이트하기 위해 새 인스턴스에 bash 코드를 실행하는 UserData 필드가 있습니다.AWS CloudFormation 스크립트에서 .bashrc 파일을 업데이트 할 수 없습니다.

이 요구 사항의 대부분을 성공적으로 완료했지만 bashrc 파일에 아무 것도 에코하려고 시도 할 때마다 작동하지 않는 것 같습니다. 심지어 bash 코드를 실행 한 후에 생성 된 EC2 인스턴스의 로그 파일을 검사했는데 오류가 없거나 잘못 된 것이 있습니다.

여기에 전체 내 cloudformation 코드 : 심지어 단지 일반적으로 echo 명령을 사용하여 테스트

{ 
    "AWSTemplateFormatVersion" : "2010-09-09", 

    "Description" : "AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example creates an EC2 security group for the instance to give you SSH access. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template.", 

    "Parameters" : { 
    "KeyName": { 
     "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", 
     "Type": "AWS::EC2::KeyPair::KeyName", 
     "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." 
    }, 

    "InstanceType" : { 
     "Description" : "WebServer EC2 instance type", 
     "Type" : "String", 
     "Default" : "t2.small", 
     "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge"] 
, 
     "ConstraintDescription" : "must be a valid EC2 instance type." 
    }, 

    "SSHLocation" : { 
     "Description" : "The IP address range that can be used to SSH to the EC2 instances", 
     "Type": "String", 
     "MinLength": "9", 
     "MaxLength": "18", 
     "Default": "0.0.0.0/0", 
     "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", 
     "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." 
    } 
    }, 

    "Mappings" : { 
    "AWSInstanceType2Arch" : { 
     "t1.micro" : { "Arch" : "PV64" }, 
     "t2.nano"  : { "Arch" : "HVM64" }, 
     "t2.micro" : { "Arch" : "HVM64" }, 
     "t2.small" : { "Arch" : "HVM64" }, 
     "t2.medium" : { "Arch" : "HVM64" }, 
     "t2.large" : { "Arch" : "HVM64" }, 
     "m1.small" : { "Arch" : "PV64" }, 
     "m1.medium" : { "Arch" : "PV64" }, 
     "m1.large" : { "Arch" : "PV64" }, 
     "m1.xlarge" : { "Arch" : "PV64" }, 
     "m2.xlarge" : { "Arch" : "PV64" }, 
     "m2.2xlarge" : { "Arch" : "PV64" }, 
     "m2.4xlarge" : { "Arch" : "PV64" }, 
     "m3.medium" : { "Arch" : "HVM64" }, 
     "m3.large" : { "Arch" : "HVM64" }, 
     "m3.xlarge" : { "Arch" : "HVM64" }, 
     "m3.2xlarge" : { "Arch" : "HVM64" }, 
     "m4.large" : { "Arch" : "HVM64" }, 
     "m4.xlarge" : { "Arch" : "HVM64" }, 
     "m4.2xlarge" : { "Arch" : "HVM64" }, 
     "m4.4xlarge" : { "Arch" : "HVM64" }, 
     "m4.10xlarge" : { "Arch" : "HVM64" }, 
     "c1.medium" : { "Arch" : "PV64" }, 
     "c1.xlarge" : { "Arch" : "PV64" }, 
     "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" }, 
     "g2.2xlarge" : { "Arch" : "HVMG2" }, 
     "g2.8xlarge" : { "Arch" : "HVMG2" }, 
     "r3.large" : { "Arch" : "HVM64" }, 
     "r3.xlarge" : { "Arch" : "HVM64" }, 
     "r3.2xlarge" : { "Arch" : "HVM64" }, 
     "r3.4xlarge" : { "Arch" : "HVM64" }, 
     "r3.8xlarge" : { "Arch" : "HVM64" }, 
     "i2.xlarge" : { "Arch" : "HVM64" }, 
     "i2.2xlarge" : { "Arch" : "HVM64" }, 
     "i2.4xlarge" : { "Arch" : "HVM64" }, 
     "i2.8xlarge" : { "Arch" : "HVM64" }, 
     "d2.xlarge" : { "Arch" : "HVM64" }, 
     "d2.2xlarge" : { "Arch" : "HVM64" }, 
     "d2.4xlarge" : { "Arch" : "HVM64" }, 
     "d2.8xlarge" : { "Arch" : "HVM64" }, 
     "hi1.4xlarge" : { "Arch" : "HVM64" }, 
     "hs1.8xlarge" : { "Arch" : "HVM64" }, 
     "cr1.8xlarge" : { "Arch" : "HVM64" }, 
     "cc2.8xlarge" : { "Arch" : "HVM64" } 
    }, 

    "AWSInstanceType2NATArch" : { 
     "t1.micro" : { "Arch" : "NATPV64" }, 
     "t2.nano"  : { "Arch" : "NATHVM64" }, 
     "t2.micro" : { "Arch" : "NATHVM64" }, 
     "t2.small" : { "Arch" : "NATHVM64" }, 
     "t2.medium" : { "Arch" : "NATHVM64" }, 
     "t2.large" : { "Arch" : "NATHVM64" }, 
     "m1.small" : { "Arch" : "NATPV64" }, 
     "m1.medium" : { "Arch" : "NATPV64" }, 
     "m1.large" : { "Arch" : "NATPV64" }, 
     "m1.xlarge" : { "Arch" : "NATPV64" }, 
     "m2.xlarge" : { "Arch" : "NATPV64" }, 
     "m2.2xlarge" : { "Arch" : "NATPV64" }, 
     "m2.4xlarge" : { "Arch" : "NATPV64" }, 
     "m3.medium" : { "Arch" : "NATHVM64" }, 
     "m3.large" : { "Arch" : "NATHVM64" }, 
     "m3.xlarge" : { "Arch" : "NATHVM64" }, 
     "m3.2xlarge" : { "Arch" : "NATHVM64" }, 
     "m4.large" : { "Arch" : "NATHVM64" }, 
     "m4.xlarge" : { "Arch" : "NATHVM64" }, 
     "m4.2xlarge" : { "Arch" : "NATHVM64" }, 
     "m4.4xlarge" : { "Arch" : "NATHVM64" }, 
     "m4.10xlarge" : { "Arch" : "NATHVM64" }, 
     "c1.medium" : { "Arch" : "NATPV64" }, 
     "c1.xlarge" : { "Arch" : "NATPV64" }, 
     "c3.large" : { "Arch" : "NATHVM64" }, 
     "c3.xlarge" : { "Arch" : "NATHVM64" }, 
     "c3.2xlarge" : { "Arch" : "NATHVM64" }, 
     "c3.4xlarge" : { "Arch" : "NATHVM64" }, 
     "c3.8xlarge" : { "Arch" : "NATHVM64" }, 
     "c4.large" : { "Arch" : "NATHVM64" }, 
     "c4.xlarge" : { "Arch" : "NATHVM64" }, 
     "c4.2xlarge" : { "Arch" : "NATHVM64" }, 
     "c4.4xlarge" : { "Arch" : "NATHVM64" }, 
     "c4.8xlarge" : { "Arch" : "NATHVM64" }, 
     "g2.2xlarge" : { "Arch" : "NATHVMG2" }, 
     "g2.8xlarge" : { "Arch" : "NATHVMG2" }, 
     "r3.large" : { "Arch" : "NATHVM64" }, 
     "r3.xlarge" : { "Arch" : "NATHVM64" }, 
     "r3.2xlarge" : { "Arch" : "NATHVM64" }, 
     "r3.4xlarge" : { "Arch" : "NATHVM64" }, 
     "r3.8xlarge" : { "Arch" : "NATHVM64" }, 
     "i2.xlarge" : { "Arch" : "NATHVM64" }, 
     "i2.2xlarge" : { "Arch" : "NATHVM64" }, 
     "i2.4xlarge" : { "Arch" : "NATHVM64" }, 
     "i2.8xlarge" : { "Arch" : "NATHVM64" }, 
     "d2.xlarge" : { "Arch" : "NATHVM64" }, 
     "d2.2xlarge" : { "Arch" : "NATHVM64" }, 
     "d2.4xlarge" : { "Arch" : "NATHVM64" }, 
     "d2.8xlarge" : { "Arch" : "NATHVM64" }, 
     "hi1.4xlarge" : { "Arch" : "NATHVM64" }, 
     "hs1.8xlarge" : { "Arch" : "NATHVM64" }, 
     "cr1.8xlarge" : { "Arch" : "NATHVM64" }, 
     "cc2.8xlarge" : { "Arch" : "NATHVM64" } 
    } 
, 
    "AWSRegionArch2AMI" : { 
     "us-east-1"  : {"PV64" : "ami-8ff710e2", "HVM64" : "ami-f5f41398", "HVMG2" : "ami-4afd1d27"}, 
     "us-west-2"  : {"PV64" : "ami-eff1028f", "HVM64" : "ami-d0f506b0", "HVMG2" : "ami-ee897b8e"}, 
     "us-west-1"  : {"PV64" : "ami-ac85fbcc", "HVM64" : "ami-6e84fa0e", "HVMG2" : "ami-69106909"}, 
     "eu-west-1"  : {"PV64" : "ami-23ab2250", "HVM64" : "ami-b0ac25c3", "HVMG2" : "ami-936de5e0"}, 
     "eu-central-1"  : {"PV64" : "ami-27c12348", "HVM64" : "ami-d3c022bc", "HVMG2" : "ami-8e7092e1"}, 
     "ap-northeast-1" : {"PV64" : "ami-26160d48", "HVM64" : "ami-29160d47", "HVMG2" : "ami-91809aff"}, 
     "ap-northeast-2" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-cf32faa1", "HVMG2" : "NOT_SUPPORTED"}, 
     "ap-southeast-1" : {"PV64" : "ami-f3dd0a90", "HVM64" : "ami-1ddc0b7e", "HVMG2" : "ami-3c30e75f"}, 
     "ap-southeast-2" : {"PV64" : "ami-8f94b9ec", "HVM64" : "ami-0c95b86f", "HVMG2" : "ami-543d1137"}, 
     "sa-east-1"  : {"PV64" : "ami-e188018d", "HVM64" : "ami-fb890097", "HVMG2" : "NOT_SUPPORTED"}, 
     "cn-north-1"  : {"PV64" : "ami-77a46e1a", "HVM64" : "ami-05a66c68", "HVMG2" : "NOT_SUPPORTED"} 
    } 

    }, 

    "Resources" : { 
    "EC2Instance" : { 
     "Type" : "AWS::EC2::Instance", 
     "Properties" : { 
     "InstanceType" : { "Ref" : "InstanceType" }, 
     "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], 
     "KeyName" : { "Ref" : "KeyName" }, 
     "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, 
          { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, 
     "UserData"  : { "Fn::Base64" : { "Fn::Join" : ["", [ 
      "#!/bin/bash\n", 
      "#Automation script to set-up Continuous Integration environment in AWS\n", 
      "#Installs Jenkins, Git, JDK, Grails, Apache Maven, and SonarQube Scanner\n", 
      "#Connects to AWS Artifactory repo to download software\n", 
      "#Update these fields with the version numbers you would like for each software installation\n", 
      "jenkinsVersion='2.9'\n", 
      "gitVersion='2.7.4'\n", 
      "jdkVersion='8'\n", 
      "jdkUpdate='91'\n", 
      "grailsVersion='3.1.8'\n", 
      "mavenVersion='3.3.9'\n", 
      "sonarqubeVersion='2.6.1'\n", 

      "#Install Jenkins\n", 
      "sudo wget http://172.31.62.161:8081/artifactory/ext-release-local/jenkins-$jenkinsVersion.zip\n", 
      "sudo unzip jenkins-$jenkinsVersion.zip\n", 
      "sudo rm jenkins-$jenkinsVersion.zip\n", 
      "cd jenkins-$jenkinsVersion\n", 
      "sudo mv jenkins.repo /etc/yum.repos.d/jenkins.repo\n", 
      "sudo rpm --import jenkins.io.key\n", 
      "sudo yum install jenkins -y\n", 
      "sudo rm jenkins.io.key \n", 
      "cd\n", 

      "#Install Git\n", 
      "sudo wget http://172.31.62.161:8081/artifactory/ext-release-local/git-$gitVersion.zip\n", 
      "sudo unzip git-$gitVersion.zip\n", 
      "sudo rm git-$gitVersion.zip\n", 
      "cd git-$gitVersion\n", 
      "sudo rpm -Uvh *rpm\n", 
      "sudo rm -rf git-$gitVersion\n", 
      "cd\n", 

      "cd /opt #Change directory to /opt\n", 

      "#Install Oracle JDK\n", 
      "sudo wget http://172.31.62.161:8081/artifactory/ext-release-local/jdk-$jdkVersion'u'$jdkUpdate-linux-x64.tar.gz\n", 
      "sudo tar xzf jdk-$jdkVersion'u'$jdkUpdate-linux-x64.tar.gz\n", 
      "sudo rm jdk-$jdkVersion'u'$jdkUpdate-linux-x64.tar.gz\n", 
      "echo 'export JAVA_HOME=/opt/jdk1.'$jdkVersion'.0_'$jdkUpdate >> ~/.bashrc\n", 
      "echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc\n", 

      "#Install Grails\n", 
      "sudo wget http://172.31.62.161:8081/artifactory/ext-release-local/grails-$grailsVersion.zip\n", 
      "sudo unzip grails-$grailsVersion.zip\n", 
      "sudo rm grails-$grailsVersion.zip\n", 
      "echo 'export GRAILS_HOME=/opt/grails-'$grailsVersion >> ~/.bashrc\n", 
      "echo 'export PATH=$GRAILS_HOME/bin:$PATH' >> ~/.bashrc\n", 

      "#Install Apache Maven\n", 
      "sudo wget http://172.31.62.161:8081/artifactory/ext-release-local/apache-maven-$mavenVersion-bin.tar.gz\n", 
      "sudo tar xzf apache-maven-$mavenVersion-bin.tar.gz\n", 
      "sudo rm apache-maven-$mavenVersion-bin.tar.gz\n", 
      "echo 'export MAVEN_HOME=/opt/apache-maven-'$mavenVersion >> ~/.bashrc\n", 
      "echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc\n", 

      "#Install SonarQube Scanner\n", 
      "sudo wget http://172.31.62.161:8081/artifactory/ext-release-local/sonar-scanner-$sonarqubeVersion.zip\n", 
      "sudo unzip sonar-scanner-$sonarqubeVersion.zip\n", 
      "sudo rm sonar-scanner-$sonarqubeVersion.zip\n", 
      "echo 'export SONAR_SCANNER_HOME=/opt/sonar-scanner-'$sonarqubeVersion >> ~/.bashrc\n", 
      "echo 'export PATH=$SONAR_SCANNER_HOME/bin:$PATH' >> ~/.bashrc\n" 
      ]]}} 
     } 
    }, 

    "InstanceSecurityGroup" : { 
     "Type" : "AWS::EC2::SecurityGroup", 
     "Properties" : { 
     "GroupDescription" : "Enable SSH access via port 22", 
     "SecurityGroupIngress" : [ { 
      "IpProtocol" : "tcp", 
      "FromPort" : "22", 
      "ToPort" : "22", 
      "CidrIp" : { "Ref" : "SSHLocation"} 
     } ] 
     } 
    } 
    }, 

    "Outputs" : { 
    "InstanceId" : { 
     "Description" : "InstanceId of the newly created EC2 instance", 
     "Value" : { "Ref" : "EC2Instance" } 
    }, 
    "AZ" : { 
     "Description" : "Availability Zone of the newly created EC2 instance", 
     "Value" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ] } 
    }, 
    "PublicDNS" : { 
     "Description" : "Public DNSName of the newly created EC2 instance", 
     "Value" : { "Fn::GetAtt" : [ "EC2Instance", "PublicDnsName" ] } 
    }, 
    "PublicIP" : { 
     "Description" : "Public IP address of the newly created EC2 instance", 
     "Value" : { "Fn::GetAtt" : [ "EC2Instance", "PublicIp" ] } 
    } 
    } 
} 

하고 그것을 잘 작동합니다. 내가 bashrc 파일에 어떤 것을 울리려고한다면 그것은 작동하지 않는다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

시도할만한 몇 가지가 있습니다.

먼저 스크립트가 루트로 실행되므로 sudo 명령이 필요하지 않습니다. 그렇게해서는 안되지만 스크립트가 실행중인 사용자를 알아야합니다.

둘째로, 처음에는 관련이 있지만 /root/.bashrc 또는 /home/ec2-user/.bashrc에서 변경 사항을 찾으십니까? 후자이면 전체 경로를 지정하십시오.

+0

나는 이것을 시도하고 당신에게 돌아갈 것이다. 감사합니다 :) – BlueMoose

+0

안녕하세요 크리스 난 그냥이 방법이 효과가 확인. 정말 고마워. 정말 감사! – BlueMoose

관련 문제