HoneyBee

AWS SDK 활용하여 인스턴스 생성 본문

클라우드/AWS

AWS SDK 활용하여 인스턴스 생성

아포갸토 2024. 7. 28. 14:23
  • 사내 교육 시간에 SDK 를 통해 EC2 인스턴스를 생성하는 과제가 있었는데 하는법을 알고 있었지만 그래도 문서화 및 구체적으로 이해하고 싶어 정리했다.
  • nodejs 기반으로 되어 있다.
  • 방법론 위주로 되어 있기에 문의는 댓글로 요청드립니다.

AWS SDK를 통한 생성

  • node js 기반 진행

생성 순서

  • 디렉토리 생성 및 nodejs 프로젝트 생성
mkdir aws-ec2-demo 
cd aws-ec2-demo 
npm init -y
  • aws-sdk 모듈 설치
npm install aws-sdk
  • 액세스 키 환경 변수로 등록| 액세스 키 추가하는 법 : AWS Console -> IAM 서비스로 이동 -> 좌측 LNB 목록에 사용자 선택 -> 사용자 목록에서 해당하는 사용자 선택 -> 자격 증명 관리 -> 중간쯤에 '보안 자격 증명' 클릭 후 하단에 '액세스 키 만들기' 클릭 후 생성
export AWS_ACCESS_KEY_ID=your_access_key_id 
export AWS_SECRET_ACCESS_KEY=your_secret_access_key
  • index.js 코드
const AWS = require('aws-sdk');

// AWS 자격 증명 및 한국 리전 설정
AWS.config.update({ 
  region: 'ap-northeast-2', // 한국 리전
  // accessKeyId와 secretAccessKey를 명시적으로 설정할 필요 없음
  // AWS SDK는 환경 변수를 통해 자격 증명을 자동으로 검색함
});

// EC2 서비스 객체 생성
const ec2 = new AWS.EC2();

const params = {
  ImageId: 'ami-045f2d6eeb07ce8c0', // AMI ID
  InstanceType: 't2.micro', // 인스턴스 유형
  MinCount: 1, // 최소 인스턴스 개수
  MaxCount: 1, // 최대 인스턴스 개수
  SubnetId: '{ 노출 위험으로 가리기 }', // 서브넷 ID를 명시합니다
  // KeyName: 'your-key-pair-name', // (옵션) SSH 키 페어를 지정하려면 여기에 추가
};

// EC2 인스턴스 생성
ec2.runInstances(params, (err, data) => {
  if (err) {
    console.error('Could not create instance', err);
    return;
  }

  const instanceId = data.Instances[0].InstanceId;
  console.log('Created instance', instanceId);

  // 인스턴스 태그 설정
  const tagParams = {
    Resources: [instanceId],
    Tags: [
      {
        Key: 'Name',
        Value: 'SDK Sample'
      }
    ]
  };

  ec2.createTags(tagParams, (err) => {
    if (err) {
      console.error('Error tagging instance', err);
      return;
    }
    console.log('Instance tagged');
  });
});
  • 실행 명령어
node index.js

첫번째 시도

  • ami id 에러
    • ami id 가 존재하지 않는 id 여서 발생
    • 존재하는 id로 AWS console에서 찾아서 기입
      {
      code: 'InvalidAMIID.Malformed',
      time: 2024-07-28T05:02:47.765Z,
      requestId: '{ 노출 위험으로 가림 처리 }',
      statusCode: 400,
      retryable: false,
      retryDelay: 10.635335762119524
      }

두번째 시도

  • AMI AWS console 상에 있는거로 변경하고 두번째 시도
    • subnet이 없어서 발생한 문제
    • subnetId 추가하고 실행
      {  
      code: 'VPCIdNotSpecified',  
      time: 2024-07-28T05:03:06.258Z,  
      requestId: '{ 노출 위험으로 가림 처리 }',  
      statusCode: 400,  
      retryable: false,  
      retryDelay: 9.14876437626888  
      }

세번째 시도

  • 성공
    (node:67531) NOTE: The AWS SDK for JavaScript (v2) will enter maintenance mode
    on September 8, 2024 and reach end-of-support on September 8, 2025.
    

Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check blog post at https://a.co/cUPnyil
(Use node --trace-warnings ... to show where the warning was created)
Created instance i-0acc9a893239546e4
Instance tagged

```