AWS 환경을 SDK for Ruby로 만들어 보십시오.

6341 단어 AWSRubySDK

개요


코드로 AWS 환경을 구축하는데 이른바 Infrastructure as Code(Iac)라면 CloudFormtion과Terraform이 주류지만 AWS는 주요 프로그래밍 언어로 자원과 조작을 구축할 수 있는 SDK를 제공한다.
SDK에서는 이번에는 루비구축 환경(VPC, IGW, Subnet, RouteTable)을 사용하는 해슨을 소개하고 싶다!
※ MacOS, SDK for Ruby 버전 3

장생불로

  • 사전 준비
  • SDK 설치 및 설정
  • 코드 계속 쓰기
  • 코드를 어떻게 썼어요?
  • 향후
  • 요약
  • 1. 사전 준비


    필요한 물건

  • AWS 계정
    물론 각 자원을 가동하기 위해서는 AWS의 계정이 필요하다.이미 보유한 것을 전제로 진행하오니 양해해 주십시오
  • 루비(버전 1.9 이후)
    이것도 말할 필요도 없이... 루비로 코드를 쓰고 작업 단말기에 설치하세요.
  • 사이트 축소판 그림


    AWS SDK for Ruby Developer Guide
    이쪽 공식 홈페이지에 따라 진행하겠습니다.

    2. SDK 설치 및 설정


    SDK 설치


    SDK for Ruby는gem으로 배포됩니다.루비의 외부 라이브러리죠.
  • bundler를 사용하는 경우
    Gemfile에서 다음bundle install을 보완하고 실행
  • gem 'aws-sdk'
    
  • bundler를 사용하지 않을 경우
    다음 명령을 실행하여gem
  • 설치
    sudo gem install aws-sdk
    
    ※ 시간이 오래 걸립니다.터미널 화면이 5분 정도 머물렀지만 다운된 것은 아니다.

    인증 정보 설정


    SDK를 통해 AWS에 액세스하는 인증 정보는 로컬 파일에 기술되어 있습니다.장소는~/.aws/credentials입니다.
    # ディレクトリを作成
    mkdir ~/.aws
    
    # 移動
    cd ~/.aws
    
    # vimでcredentialsファイルを編集
    sudo vim credentials
    
    vim로 다음과 같은 내용을 기술하다
    [default]
    aws_access_key_id = your_access_key_id
    aws_secret_access_key = your_secret_access_key
    
    ※ 위your_access_key_idyour_secret_access_key에 방문키, 비밀방문키를 입력하기 위해서는 아래 작업을 한쪽에 놓고

    액세스 키 및 비밀 액세스 키 만들기

  • AWS 관리 콘솔에 로그인
  • 관리 콘솔 오른쪽 위에 있는 계정 부분
  • 을 클릭
  • 드롭다운 메뉴에서 내 보안 자격 정보를 선택합니다.

  • 보안 인증 정보 화면으로 이동한 후 "액세스 키 제작"버튼을 누릅니다.
    ※ 계정당 2개의 방문키만 만들 수 있습니다.만약 이미 두 가지 상황이 있다면, 사용하지 않은 내용을 삭제하십시오

  • 액세스 키 만들기 버튼을 눌러 창의 정보를 기록합니다.
    ※ 이 창을 닫으면 비밀 방문버튼이 보이지 않습니다!닫으면 생성된 키를 삭제하고 다시 만듭니다
    ※ 이미지 액세스 키가 삭제되어 사용할 수 없으니 탓하지 마세요(웃음)

  • vim에 기록된 접근 키와 기밀 접근 키의 정보를 각각 복사
  • esc키=>:wq를 통해 편집 내용을 저장하고vim
  • 을 닫습니다.

    환경 변수를 사용하여 영역 설정하기


    도쿄 지역 설정
    export AWS_REGION=ap-northeast-1
    

    3. 코드 쓰기


    이번 목표는 VPC, 서브넷, 네트워크 게이트웨이, 로드맵 작성이다.완료된 rb 파일 AWS 리소스만 실행하면 시작됩니다!이런 핸디캡을 느낄 수 있도록 하기 위해서 일단 여기까지 하겠습니다.
    # sdkをrubyファイルに読み込み
    require 'aws-sdk'
    
    # VPCなどはEC2のカテゴリなのでAws::EC2::Clientクラスからインスタンスを作成
    client = Aws::EC2::Client.new(region: "ap-northeast-1")
    
    
    # VPC ----------------------------------------------------------------
    # VPCを作成 上で作成したclientインスタンスに対してcreate_vpc()メソッドを適用する
    resp_vpc = client.create_vpc({
      cidr_block: "10.0.0.0/16", # 必須項目 IPアドレス範囲を指定する
    })
    
    # 出来上がったVPCのIDを取得(他のリソース作成時やアタッチする時に使用する)
    VPC_ID = resp_vpc.vpc.vpc_id
    
    puts VPC_ID
    
    
    # IGW ----------------------------------------------------------------
    # インターネットゲートウェイ(IGW)を作成
    resp_igw = client.create_internet_gateway({
    })
    
    # IGWのID
    IGW_ID = resp_igw.internet_gateway.internet_gateway_id
    
    # IGWをVPCにアタッチ
    client.attach_internet_gateway({
      internet_gateway_id: IGW_ID, # 上で作成したIGWのID 
      vpc_id: VPC_ID, # 上で作成したVPCのID 
    })
    
    puts IGW_ID
    
    
    # Subnet ----------------------------------------------------------------
    # サブネットを作成(インターネット向けパブリックサブネット)
    resp_pubsub1 = client.create_subnet({
      availability_zone: "ap-northeast-1a",
      cidr_block: "10.0.0.0/24", # 必須項目
      vpc_id: VPC_ID, # 必須項目
    })
    
    # サブネットのID
    SUB_ID1 = resp_pubsub1.subnet.subnet_id
    
    puts SUB_ID1
    
    
    # RouteTable ----------------------------------------------------------------
    # ルートテーブルを作成
    resp_rt = client.create_route_table({
      vpc_id: VPC_ID, # 必須項目
    })
    
    # ルートテーブルのID
    RT_ID = resp_rt.route_table.route_table_id
    
    # ルートを作成(IGWに向けたルート)
    resp_route = client.create_route({
      destination_cidr_block: "0.0.0.0/0", # インターネット向けルート
      gateway_id: IGW_ID, # IGWのID
      route_table_id: RT_ID, # 必須項目 ルートテーブルのID
    })
    
    # ルートテーブルをサブネットに紐付け
    client.associate_route_table({
      route_table_id: RT_ID, # 必須項目 ルートテーブルのID
      subnet_id: SUB_ID1, # 紐付けるサブネットのID
    })
    
    puts RT_ID
    
    
    # まとめてリソースにタグ(名前)を追加 ----------------------------------------------------------------
    client.create_tags({
      resources: [VPC_ID, IGW_ID, SUB_ID1, RT_ID], # 必須項目 名前をつけるリソースのID
      tags: [
        {
          key: 'Name',
          value: 'HogeTestVPC', # VPCの名前
        },
        {
          key: 'Name',
          value: 'HogeTestIGW', # IGWの名前
        },
        {
          key: 'Name',
          value: 'HogeTestPublicSubnet1a', # Subnetの名前
        },
        {
          key: 'Name',
          value: 'HogeTestPublicRT', # RTの名前
        },
      ],
    })
    
    puts "Create environment successfully done!"
    
    적당한 디렉터리에 상술한 코드를 입력하세요.rb 파일로 저장하고 cd 명령으로 저장하는 디렉터리로 이동합니다.ruby 保存したファイル名.rb 실행 후 AWS에서 리소스 작성을 시작합니다.

    4.코드를 어떻게 썼어요?


    아래의 공식 문서에서 상응하는 코드를 끌어와 필요한 요소를 기술할 뿐이다.여기가 가장 큰 혈인데 어떤 자원에 대해 뭘 하고 싶으세요?이렇게 하면 문서에서 (쓰기 방법의 좋고 나쁨을 잠시 논하지 않고) 찾을 수 있다면, 조작 자원의 코드를 쓸 수 있다.
    AWS SDK for Ruby V3

    5.앞으로


    공식 문서의 독법, EC2와 다른 자원에 대한 기술 방법 등도 기사에 썼으면 좋겠다.또 이번에는 리소스를 만드는 데 그쳤지만 SDK의 능력은 프로그래밍이 가능하고 쓰기 방법에 따라 AWS 리소스도 자기 생각대로 작동할 수 있기 때문에 이 부분도 연구해서 기사로 썼으면 좋겠다고 생각했다.

    6. 요약


    제가 루비와 AWS에서 완전히 벗어난 초보자가 아닐까요?이런 수준에서 작업 중에 SDK for Ruby를 사용했다.의외로 일본어로 쓴 기사가 적어 고민하면서 영어 문서와 싸우면서 썼기 때문에 같은 SDK를 쓰기 시작한 분들을 도와주면 좋겠다고 생각했어요.
    또 SDK가 제공하는 언어를 배우는 사람이라면 기릿에서 버전 관리를 하면서 기릿허브로 끌어올리는 것도 그룹으로 나쁘지 않다.(CFn도 Terraform도 아닌데 왜 SDK일까? 이렇게 토로하면 더 좋을 것 같은데 웃음...개인적으로는 SDK의 학습 원가가 낮고 자원 조작을 유연하게 할 가능성도 크다고 생각한다.)
    마지막으로 게재된 코드가 정상적으로 작동하는 것으로 확인되었으나 "잘 못 썼으니 더 좋은 작법이 있다"는 댓글이나 지적이 있으면 사정을 봐주십시오(>인서함;)

    좋은 웹페이지 즐겨찾기