Amazon EC2를 사용하여 가상 디바이스 생성 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EC2를 사용하여 가상 디바이스 생성

이 자습서에서는 클라우드에서 가상 디바이스로 사용할 Amazon EC2 인스턴스를 생성합니다.

이 튜토리얼을 완료하려면 다음이 필요합니다 AWS 계정. 없는 경우 계속하기 전에 설정하기 AWS 계정에서 설명하는 단계를 완료하세요.

Amazon EC2 인스턴스 설정

다음 단계에서는 물리적 디바이스 대신 가상 디바이스 역할을 할 Amazon EC2 인스턴스를 생성하는 방법을 보여 줍니다.

Amazon EC2 인스턴스를 처음 생성하는 경우 Amazon EC2Linux 인스턴스 시작하기가 더 도움이 될 것입니다.

인스턴스 시작
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 왼쪽의 콘솔 메뉴에서 Instances(인스턴스) 섹션을 펼치고 Instances(인스턴스)를 선택합니다. Instances(인스턴스) 대시보드에서 오른쪽의 Launch Instance(인스턴스 시작)를 선택하면 기본 구성 목록이 표시됩니다.

  3. Name and tags(이름 및 태그) 섹션에서 인스턴스의 이름을 입력하고 선택적으로 태그를 추가합니다.

  4. Application and OS Images(Amazon Machine Image)(애플리케이션 및 OS 이미지(Amazon Machine Image)) 섹션에서 Amazon Linux 2 AMI(HVM)와 같이 인스턴스에 대한 AMI 템플릿을 선택합니다. 해당되는 AMI는 "프리 티어 사용 가능"으로 표시됩니다.

  5. Instance type(인스턴스 유형) 섹션에서 인스턴스의 하드웨어 구성을 선택할 수 있습니다. 기본으로 선택된 t2.micro 유형을 선택합니다. 프리 티어에 적격인 인스턴스 유형입니다.

  6. Key pair (login)(키 페어(로그인)) 섹션의 드롭다운 목록에서 키 페어 이름을 선택하거나 Create a new key pair(새 키 페어 생성)를 선택하여 새 키 페어를 생성합니다. 새 키 페어를 생성할 때는 프라이빗 키 파일을 다운로드하여 안전한 곳에 저장해야 합니다. 이때만 다운로드하고 저장할 수 있기 때문입니다. 인스턴스를 시작할 때 키 페어의 이름을 제공하고, 인스턴스에 연결할 때마다 해당 프라이빗 키를 제공해야 합니다.

    주의

    Proceed without a key pair(키 페어 없이 계속) 옵션을 선택하지 마세요. 키 페어 없이 인스턴스를 시작하면 인스턴스에 연결할 수 없습니다.

  7. Network settings(네트워크 설정) 섹션 및 Configure storage(스토리지 구성) 섹션에서 기본 설정을 유지할 수 있습니다. 준비가 완료되면 Launch instances(인스턴스 시작)를 선택합니다.

  8. 확인 페이지에서 인스턴스가 실행 중인지 확인할 수 있습니다. 인스턴스 보기를 선택하여 확인 페이지를 닫고 콘솔로 돌아갑니다.

  9. 인스턴스 화면에서 시작 상태를 볼 수 있습니다. 인스턴스를 출범하는 데 약간 시간이 걸립니다. 인스턴스를 시작할 때 초기 상태는 pending입니다. 인스턴스가 시작된 후에는 상태가 running으로 바뀌고 퍼블릭 DNS 이름을 받습니다. (퍼블릭 DNS(IPv4) 열이 숨겨져 있는 경우 페이지 오른쪽 상단 모서리에 있는 열 표시/숨기기(기어 모양 아이콘)를 선택한 다음 퍼블릭 DNS(IPv4)를 선택합니다.)

  10. 연결할 수 있도록 인스턴스가 준비될 때까지 몇 분 정도 걸릴 수 있습니다. 인스턴스가 상태 확인을 통과했는지 확인하세요. 상태 검사 열에서 이 정보를 볼 수 있습니다.

    새 인스턴스가 상태 확인을 통과한 후 다음 절차를 계속하여 인스턴스에 연결합니다.

인스턴스에 연결하려면

Amazon EC2 콘솔에서 인스턴스를 선택하고 Amazon EC2 Instance Connect를 사용하여 연결하도록 선택하면 브라우저 기반 클라이언트를 사용하여 인스턴스에 연결할 수 있습니다. Instance Connect는 권한을 처리하여 성공적인 연결을 제공합니다.

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 왼쪽 메뉴에서 Instances(인스턴스)를 선택합니다.

  3. 인스턴스를 선택한 다음 연결을 선택합니다.

  4. Amazon EC2 Instance Connect, Connect(연결)를 선택합니다.

이제 새 Amazon EC2 인스턴스에 로그인된 Amazon EC2 Instance Connect 창이 있어야 합니다.

Git, Node.js 설치 및 AWS CLI구성

이 섹션에서는 Linux 인스턴스에 Git과 Node.js를 설치합니다.

Git를 설치하려면
  1. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 인스턴스를 업데이트합니다.

    sudo yum update -y
  2. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 Git를 설치합니다.

    sudo yum install git -y
  3. Git이 설치되어 있고 현재 버전의 Git이 설치되어 있는지 확인하려면 다음 명령을 실행합니다.

    git --version
Node.js를 설치하려면
  1. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 nvm(노드 버전 관리자)를 설치합니다.

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

    nvm을 사용하면 여러 버전의 Node.js를 설치할 수 있고 여러 버전 간을 전환할 수 있기 때문에 여기서는 nvm을 사용하여 Node.js를 설치합니다.

  2. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 nvm을 활성화합니다.

    . ~/.nvm/nvm.sh
  3. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 최신 버전의 Node.js를 설치하기 위해 nvm을 사용합니다.

    nvm install 16
    참고

    이 명령어를 실행하면 Node.js의 최신 LTS 릴리스를 설치합니다.

    Node.js를 설치하면 npm(노드 패키지 관리자)도 설치되므로 필요에 따라 추가 모듈을 설치할 수 있습니다.

  4. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 Node.js가 설치되었고 올바르게 실행되는지 테스트합니다.

    node -e "console.log('Running Node.js ' + process.version)"

    이 자습서에서는 Node v10.0 이상이 필요합니다. 자세한 정보는 자습서: Amazon EC2 인스턴스에서 Node.js 설정(Tutorial: Setting Up Node.js on an Amazon EC2 Instance)을 참조하세요.

구성하려면 AWS CLI

Amazon EC2 인스턴스에는 AWS CLI이(가) 미리 로드됩니다. 하지만 AWS CLI 프로필을 작성해야 합니다. CLI를 구성하는 방법에 대한 자세한 정보는 AWS CLI구성을 참조하세요.

  1. 다음 예제는 샘플 값을 보여줍니다. 이들을 사용자의 고유한 값으로 교체합니다. 이 값은 AWS 콘솔의 계정 정보에 있는 보안 자격 증명(Security credentials)에서 찾을 수 있습니다.

    Amazon EC2 Instance Connect 창에서 다음 명령을 입력합니다.

    aws configure

    그런 다음 표시된 프롬프트에 계정의 값을 입력합니다.

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-west-2 Default output format [None]: json
  2. 다음 명령으로 AWS CLI 구성을 테스트할 수 있습니다.

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    AWS CLI 가 올바르게 구성된 경우 명령은 사용자의 엔드포인트 주소를 반환해야 AWS 계정합니다.

가상 디바이스를 위한 AWS IoT 리소스를 생성하세요.

이 섹션에서는 를 AWS CLI 사용하여 사물 객체와 해당 인증서 파일을 가상 장치에 직접 생성하는 방법을 설명합니다. 이 작업은 다른 컴퓨터에서 디바이스로 복사할 때 발생할 수 있는 잠재적인 복합 문제를 피하기 위해 디바이스에서 직접 수행됩니다. 이 섹션에서는 가상 디바이스를 위한 다음과 같은 리소스를 생성합니다.

  • 가상 디바이스를 나타내는 사물 AWS IoT객체입니다.

  • 가상 디바이스를 인증하기 위한 인증서.

  • 가상 디바이스가 AWS IoT에 연결하고 메시지를 게시, 수신 및 구독할 수 있는 권한을 부여하는 정책 문서.

Linux 인스턴스에서 AWS IoT 사물 객체를 만들려면

연결된 AWS IoT 기기는 AWS IoT 레지스트리의 사물 객체로 표시됩니다. 사물 객체는 특정 디바이스 또는 논리적 엔터티를 나타냅니다. 이 경우 사물 객체는 가상 디바이스인 이 Amazon EC2 인스턴스를 나타냅니다.

  1. Amazon EC2 Instance Connect 창에서 다음 명령을 실행하여 사물 객체를 만듭니다.

    aws iot create-thing --thing-name "MyIotThing"
  2. JSON 응답은 다음과 같아야 합니다.

    { "thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing", "thingName": "MyIotThing", "thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE" }
Linux 인스턴스에서 AWS IoT 키와 인증서를 생성하고 연결하려면

create-keys-and-certificate 명령은 Amazon Root 인증 기관에서 서명한 클라이언트 인증서를 생성합니다. 이 인증서는 가상 디바이스의 자격 증명을 인증하는 데 사용됩니다.

  1. Amazon EC2 Instance Connect 창에서 인증서 및 키 파일을 저장할 디렉터리를 생성합니다.

    mkdir ~/certs
  2. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 Amazon CA(인증 기관) 인증서의 사본을 다운로드합니다.

    curl -o ~/certs/Amazon-root-CA-1.pem \ https://www.amazontrust.com/repository/AmazonRootCA1.pem
  3. Amazon EC2 Instance Connect 창에서 다음 명령을 실행하여 프라이빗 키, 퍼블릭 키 및 X.509 인증서 파일을 생성합니다. 또한 이 명령은 인증서를 등록하고 활성화합니다. AWS IoT

    aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/device.pem.crt" \ --public-key-outfile "~/certs/public.pem.key" \ --private-key-outfile "~/certs/private.pem.key"

    그 응답은 다음과 같습니다. 후속 명령에서 사용할 수 있도록 certificateArn을 저장해 둡니다. 이것은 이후 단계에서 인증서를 사물에 연결하고 정책을 인증서에 연결하는 데 필요합니다.

    { "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2", "certificateId": "9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2", "certificatePem": " -----BEGIN CERTIFICATE----- MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE= -----END CERTIFICATE-----\n", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n" } }
  4. Amazon EC2 Instance Connect 창에서 다음 명령과, 앞의 명령의 응답으로 얻은 certificateArn을 사용하여 방금 만든 인증서에 사물 객체를 연결합니다.

    aws iot attach-thing-principal \ --thing-name "MyIotThing" \ --principal "certificateArn"

    이 명령이 제대로 실행되면 어떤 출력도 표시하지 않습니다.

정책을 생성하여 연결하려면
  1. Amazon EC2 Instance Connect 창에서 이 정책 문서를 복사하여 이름이 ~/policy.json인 파일에 붙여 넣어서 정책 파일을 생성합니다.

    자주 사용하는 Linux 편집기가 없는 경우 다음 명령을 사용하여 nano를 열 수 있습니다.

    nano ~/policy.json

    policy.json에 대한 정책 문서를 붙여넣습니다. nano 편집기를 종료(Ctrl-X)하고 파일을 저장합니다.

    policy.json용 정책 문서의 내용.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect" ], "Resource": [ "*" ] } ] }
  2. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 정책을 생성합니다.

    aws iot create-policy \ --policy-name "MyIotThingPolicy" \ --policy-document "file://~/policy.json"

    출력:

    { "policyName": "MyIotThingPolicy", "policyArn": "arn:aws:iot:your-region:your-aws-account:policy/MyIotThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Receive\", \"iot:Subscribe\", \"iot:Connect\" ], \"Resource\": [ \"*\" ] } ] }", "policyVersionId": "1" }
  3. Amazon EC2 Instance Connect 창에서 다음 명령을 사용하여 정책을 가상 디바이스의 인증서에 연결합니다.

    aws iot attach-policy \ --policy-name "MyIotThingPolicy" \ --target "certificateArn"

    이 명령이 제대로 실행되면 어떤 출력도 표시하지 않습니다.

다음에 대한 AWS IoT 디바이스 SDK를 설치합니다. JavaScript

이 섹션에서는 애플리케이션이 통신하는 데 사용할 수 있는 코드와 샘플 프로그램이 포함된 AWS IoT 기기 SDK를 설치합니다. JavaScript AWS IoT 자세한 내용은 리포지토리용 AWS IoT 기기 SDK를 참조하십시오. JavaScript GitHub

Linux 인스턴스에 AWS IoT 디바이스 SDK를 JavaScript 설치하려면
  1. Amazon EC2 Instance Connect 창에서 이 명령을 사용하여 JavaScript 리포지토리용 AWS IoT 디바이스 SDK를 홈 aws-iot-device-sdk-js-v2 디렉터리의 디렉터리로 복제합니다.

    cd ~ git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
  2. 이전 단계에서 생성한 aws-iot-device-sdk-js-v2 디렉터리로 이동합니다.

    cd aws-iot-device-sdk-js-v2
  3. npm을 사용하여 SKD를 설치합니다.

    npm install

샘플 애플리케이션 실행

다음 섹션의 명령은 이 표에 표시된 대로 키 및 인증서 파일이 가상 디바이스에 저장되어 있다고 가정합니다.

인증서 파일 이름

파일

파일 경로

프라이빗 키

~/certs/private.pem.key

디바이스 인증서

~/certs/device.pem.crt

루트 CA 인증서

~/certs/Amazon-root-CA-1.pem

이 섹션에서는 AWS IoT 디바이스 SDK의 aws-iot-device-sdk-js-v2/samples/node 디렉터리에 있는 pub-sub.js 샘플 앱을 설치하고 실행해 보겠습니다. JavaScript 이 앱은 디바이스인 Amazon EC2 인스턴스가 MQTT 라이브러리를 사용하여 MQTT 메시지를 게시하고 구독하는 방법을 보여줍니다. pub-sub.js 샘플 앱은 topic_1 주제를 구독하고 해당 주제에 10개의 메시지를 게시하고 메시지 브로커로부터 받은 메시지를 표시합니다.

샘플 앱을 설치하고 실행하려면
  1. Amazon EC2 Instance Connect에서 다음 명령을 사용하여 SDK가 생성한 aws-iot-device-sdk-js-v2/samples/node/pub_sub 디렉터리로 이동하고 샘플 앱을 설치합니다.

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub npm install
  2. Amazon EC2 인스턴스 연결 창에서 다음 명령을 사용하여 을 ( AWS IoT 를) your-iot-endpoint가져옵니다.

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  3. Amazon EC2 인스턴스 연결 창에서 표시된 your-iot-endpoint대로 삽입하고 이 명령을 실행합니다.

    node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

샘플 앱은 다음과 같은 작업을 수행합니다.

  1. AWS IoT Core 계정에 연결합니다.

  2. 메시지 주제 topic_1을 구독하고 해당 주제에 대해 수신하는 메시지 표시.

  3. topic_1 주제에 10개의 메시지 게시.

  4. 다음과 유사한 출력 표시.

    Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":1} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":2} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":3} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":4} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":5} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":6} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":7} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":8} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":9} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":10}

샘플 앱을 실행하는 데 문제가 있는 경우 샘플 앱을 사용한 문제 해결를 검토합니다.

샘플 앱이 수행 중인 작업에 대한 자세한 메시지를 표시하도록 명령줄에 --verbosity debug 파라미터를 추가할 수도 있습니다. 이 정보는 문제를 해결하는 데 필요한 도움을 제공할 수 있습니다.

AWS IoT 콘솔에서 샘플 앱의 메시지 보기

AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 사용하여, 샘플 앱의 메시지가 메시지 브로커를 통과할 때 해당 메시지를 볼 수 있습니다.

샘플 앱에서 게시한 MQTT 메시지를 보려면
  1. MQTT 클라이언트에서 MQTT 메시지를 확인하세요 AWS IoT .을(를) 검토합니다. 이는 MQTT 메시지가 메시지 브로커를 통과할 때 해당 메시지를 보기 위해 AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 사용하는 방법을 파악하는 데 도움이 됩니다.

  2. AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 엽니다.

  3. Subscribe to a topic(주제 구독)에서 topic_1 주제를 구독합니다.

  4. Amazon EC2 Instance Connect 창에서 샘플 앱을 다시 실행하고 AWS IoT 콘솔MQTT 테스트 클라이언트에서 메시지를 확인합니다.

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

MQTT 및 프로토콜 AWS IoT Core 지원 방법에 대한 자세한 내용은 MQTT를 참조하십시오.