스트림 관리자를 사용하는 사용자 지정 구성 요소 생성
사용자 지정 Greengrass 구성 요소의 스트림 관리자를 사용하여 IoT 디바이스 데이터를 저장하고 처리하고 내보낼 수 있습니다. 이 섹션의 절차와 예제를 사용하여 스트림 관리자와 함께 작동하는 구성 요소 레시피, 아티팩트, 애플리케이션을 생성합니다. 구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.
스트림 관리자를 사용하는 구성 요소 레시피 정의
사용자 지정 구성 요소에서 스트림 관리자를 사용하려면 aws.greengrass.StreamManager
구성 요소를 종속성으로 정의해야 합니다. 스트림 관리자 SDK도 제공해야 합니다. 다음 태스크를 완료하여 원하는 언어로 스트림 관리자 SDK를 다운로드하고 사용하세요.
Java용 스트림 관리자 SDK는 구성 요소를 컴파일하는 데 사용할 수 있는 JAR 파일로 제공됩니다. 그런 다음 스트림 관리자 SDK가 포함된 애플리케이션 JAR을 생성하고, 애플리케이션 JAR을 구성 요소 아티팩트로 정의하고, 구성 요소 수명 주기에서 애플리케이션 JAR을 실행할 수 있습니다.
Java용 스트림 관리자 SDK를 사용하려면
-
Java JAR용 스트림 관리자 SDK 파일을 다운로드합니다.
-
다음 중 하나를 수행하여 Java 애플리케이션과 스트림 관리자 SDK JAR 파일에서 구성 요소 아티팩트를 생성합니다.
구성 요소 레시피는 다음 예제와 유사할 수 있습니다. 이 구성 요소는 StreamManagerS3.jar
에 스트림 관리자 SDK JAR이 포함된 StreamManagerS3.java 예제의 수정된 버전을 실행합니다.
- JSON
-
{
"RecipeFormatVersion": "2020-01-25",
"ComponentName": "com.example.StreamManagerS3Java",
"ComponentVersion": "1.0.0",
"ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.",
"ComponentPublisher": "Amazon",
"ComponentDependencies": {
"aws.greengrass.StreamManager": {
"VersionRequirement": "^2.0.0"
}
},
"Manifests": [
{
"Lifecycle": {
"run": "java -jar {artifacts:path}/StreamManagerS3.jar"
},
"Artifacts": [
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Java/1.0.0/StreamManagerS3.jar"
}
]
}
]
}
- YAML
-
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.StreamManagerS3Java
ComponentVersion: 1.0.0
ComponentDescription: Uses stream manager to upload a file to an S3 bucket.
ComponentPublisher: Amazon
ComponentDependencies:
aws.greengrass.StreamManager:
VersionRequirement: "^2.0.0"
Manifests:
- Lifecycle:
run: java -jar {artifacts:path}/StreamManagerS3.jar
Artifacts:
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Java/1.0.0/StreamManagerS3.jar
구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.
Python용 스트림 관리자 SDK는 구성 요소에 포함할 수 있는 소스 코드로 사용할 수 있습니다. 스트림 관리자 SDK의 ZIP 파일을 생성하고 ZIP 파일을 구성 요소 아티팩트로 정의한 다음 구성 요소 수명 주기에 SDK의 요구 사항을 설치합니다.
Python용 스트림 관리자 SDK를 사용하려면
-
aws-greengrass-stream-manager-sdk-python 리포지토리를 복제하거나 다운로드합니다.
git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-python.git
-
Python용 스트림 관리자 SDK의 소스 코드를 포함하는 stream_manager
폴더를 포함한 ZIP 파일을 생성합니다. 이 ZIP 파일을 구성 요소 아티팩트로 제공하면 AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 설치할 때 압축을 해제합니다. 다음을 따릅니다.
-
이전 단계에서 복제하거나 다운로드한 리포지토리가 포함된 폴더를 엽니다.
cd aws-greengrass-stream-manager-sdk-python
-
stream_manager
폴더를 stream_manager_sdk.zip
이라는 이름의 ZIP 파일로 압축합니다.
- Linux or Unix
-
zip -rv stream_manager_sdk.zip stream_manager
- Windows Command Prompt (CMD)
-
tar -acvf stream_manager_sdk.zip stream_manager
- PowerShell
-
Compress-Archive stream_manager stream_manager_sdk.zip
-
stream_manager_sdk.zip
파일에 stream_manager
폴더와 해당 콘텐츠가 포함되어 있는지 확인합니다. 다음 명령을 실행하여 ZIP 파일의 내용을 나열합니다.
- Linux or Unix
-
unzip -l stream_manager_sdk.zip
- Windows Command Prompt (CMD)
-
tar -tf stream_manager_sdk.zip
출력은 다음과 유사합니다.
Archive: aws-greengrass-stream-manager-sdk-python/stream_manager.zip
Length Date Time Name
--------- ---------- ----- ----
0 02-24-2021 20:45 stream_manager/
913 02-24-2021 20:45 stream_manager/__init__.py
9719 02-24-2021 20:45 stream_manager/utilinternal.py
1412 02-24-2021 20:45 stream_manager/exceptions.py
1004 02-24-2021 20:45 stream_manager/util.py
0 02-24-2021 20:45 stream_manager/data/
254463 02-24-2021 20:45 stream_manager/data/__init__.py
26515 02-24-2021 20:45 stream_manager/streammanagerclient.py
--------- -------
294026 8 files
-
스트림 관리자 SDK 아티팩트를 구성 요소의 아티팩트 폴더에 복사합니다. 구성 요소는 스트림 관리자 SDK ZIP 파일 외에도 SDK의 requirements.txt
파일을 사용하여 스트림 관리자 SDK의 종속성을 설치합니다. ~/greengrass-components
를 로컬 개발에 사용하는 폴더의 경로로 바꿉니다.
- Linux or Unix
-
cp {stream_manager_sdk.zip,requirements.txt} ~/greengrass-components
/artifacts/com.example.StreamManagerS3Python/1.0.0/
- Windows Command Prompt (CMD)
-
robocopy . %USERPROFILE%\greengrass-components
\artifacts\com.example.StreamManagerS3Python\1.0.0 stream_manager_sdk.zip
robocopy . %USERPROFILE%\greengrass-components
\artifacts\com.example.StreamManagerS3Python\1.0.0 requirements.txt
- PowerShell
-
cp .\stream_manager_sdk.zip,.\requirements.txt ~\greengrass-components
\artifacts\com.example.StreamManagerS3Python\1.0.0\
-
구성 요소 레시피를 생성합니다. 레시피에서 다음을 수행합니다.
-
stream_manager_sdk.zip
및 requirements.txt
를 아티팩트로 정의합니다.
-
Python 애플리케이션을 아티팩트로 정의합니다.
-
설치 수명 주기에서 requirements.txt
의 스트림 관리자 SDK 요구 사항을 설치합니다.
-
실행 수명 주기에서 스트림 관리자 SDK를 PYTHONPATH
에 추가하고 Python 애플리케이션을 실행합니다.
구성 요소 레시피는 다음 예제와 유사할 수 있습니다. 이 구성 요소는 stream_manager_s3.py 예제를 실행합니다.
- JSON
-
{
"RecipeFormatVersion": "2020-01-25",
"ComponentName": "com.example.StreamManagerS3Python",
"ComponentVersion": "1.0.0",
"ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.",
"ComponentPublisher": "Amazon",
"ComponentDependencies": {
"aws.greengrass.StreamManager": {
"VersionRequirement": "^2.0.0"
}
},
"Manifests": [
{
"Platform": {
"os": "linux"
},
"Lifecycle": {
"install": "pip3 install --user -r {artifacts:path}/requirements.txt",
"run": "export PYTHONPATH=$PYTHONPATH:{artifacts:decompressedPath}/stream_manager_sdk; python3 {artifacts:path}/stream_manager_s3.py"
},
"Artifacts": [
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip",
"Unarchive": "ZIP"
},
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py"
},
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt"
}
]
},
{
"Platform": {
"os": "windows"
},
"Lifecycle": {
"install": "pip3 install --user -r {artifacts:path}/requirements.txt",
"run": "set \"PYTHONPATH=%PYTHONPATH%;{artifacts:decompressedPath}/stream_manager_sdk\" & py -3 {artifacts:path}/stream_manager_s3.py"
},
"Artifacts": [
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip",
"Unarchive": "ZIP"
},
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py"
},
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt"
}
]
}
]
}
- YAML
-
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.StreamManagerS3Python
ComponentVersion: 1.0.0
ComponentDescription: Uses stream manager to upload a file to an S3 bucket.
ComponentPublisher: Amazon
ComponentDependencies:
aws.greengrass.StreamManager:
VersionRequirement: "^2.0.0"
Manifests:
- Platform:
os: linux
Lifecycle:
install: pip3 install --user -r {artifacts:path}/requirements.txt
run: |
export PYTHONPATH=$PYTHONPATH:{artifacts:decompressedPath}/stream_manager_sdk
python3 {artifacts:path}/stream_manager_s3.py
Artifacts:
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip
Unarchive: ZIP
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt
- Platform:
os: windows
Lifecycle:
install: pip3 install --user -r {artifacts:path}/requirements.txt
run: |
set "PYTHONPATH=%PYTHONPATH%;{artifacts:decompressedPath}/stream_manager_sdk"
py -3 {artifacts:path}/stream_manager_s3.py
Artifacts:
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip
Unarchive: ZIP
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py
- URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt
구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.
JavaScript용 스트림 관리자 SDK는 구성 요소에 포함할 수 있는 소스 코드로 사용할 수 있습니다. 스트림 관리자 SDK의 ZIP 파일을 생성하고, ZIP 파일을 구성 요소 아티팩트로 정의한 다음, 구성 요소 수명 주기에 SDK를 설치합니다.
JavaScript용 스트림 관리자 SDK를 사용하려면
-
aws-greengrass-stream-manager-sdk-js 리포지토리를 복제하거나 다운로드합니다.
git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-js.git
-
JavaScript용 스트림 관리자 SDK의 소스 코드를 포함하는 aws-greengrass-stream-manager-sdk
폴더를 포함한 ZIP 파일을 생성합니다. 이 ZIP 파일을 구성 요소 아티팩트로 제공하면 AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 설치할 때 압축을 해제합니다. 다음을 따릅니다.
-
이전 단계에서 복제하거나 다운로드한 리포지토리가 포함된 폴더를 엽니다.
cd aws-greengrass-stream-manager-sdk-js
-
aws-greengrass-stream-manager-sdk
폴더를 stream-manager-sdk.zip
이라는 이름의 ZIP 파일로 압축합니다.
- Linux or Unix
-
zip -rv stream-manager-sdk.zip aws-greengrass-stream-manager-sdk
- Windows Command Prompt (CMD)
-
tar -acvf stream-manager-sdk.zip aws-greengrass-stream-manager-sdk
- PowerShell
-
Compress-Archive aws-greengrass-stream-manager-sdk stream-manager-sdk.zip
-
stream-manager-sdk.zip
파일에 aws-greengrass-stream-manager-sdk
폴더와 해당 콘텐츠가 포함되어 있는지 확인합니다. 다음 명령을 실행하여 ZIP 파일의 내용을 나열합니다.
- Linux or Unix
-
unzip -l stream-manager-sdk.zip
- Windows Command Prompt (CMD)
-
tar -tf stream-manager-sdk.zip
출력은 다음과 유사합니다.
Archive: stream-manager-sdk.zip
Length Date Time Name
--------- ---------- ----- ----
0 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/
369 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/package.json
1017 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/util.js
8374 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/utilInternal.js
1937 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/exceptions.js
0 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/data/
353343 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/data/index.js
22599 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/client.js
216 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/index.js
--------- -------
387855 9 files
-
스트림 관리자 SDK 아티팩트를 구성 요소의 아티팩트 폴더에 복사합니다. ~/greengrass-components
를 로컬 개발에 사용하는 폴더의 경로로 바꿉니다.
- Linux or Unix
-
cp stream-manager-sdk.zip ~/greengrass-components
/artifacts/com.example.StreamManagerS3JS/1.0.0/
- Windows Command Prompt (CMD)
-
robocopy . %USERPROFILE%\greengrass-components
\artifacts\com.example.StreamManagerS3JS\1.0.0 stream-manager-sdk.zip
- PowerShell
-
cp .\stream-manager-sdk.zip ~\greengrass-components
\artifacts\com.example.StreamManagerS3JS\1.0.0\
-
구성 요소 레시피를 생성합니다. 레시피에서 다음을 수행합니다.
-
stream-manager-sdk.zip
을 아티팩트로 정의합니다.
-
JavaScript 애플리케이션을 아티팩트로 정의합니다.
-
설치 수명 주기에서 stream-manager-sdk.zip
아티팩트의 스트림 관리자 SDK를 설치합니다. 이 npm
install
명령은 스트림 관리자 SDK와 해당 종속 항목을 포함한 node_modules
폴더를 생성합니다.
-
실행 수명 주기에서 node_modules
폴더를 NODE_PATH
에 추가하고 JavaScript 애플리케이션을 실행합니다.
구성 요소 레시피는 다음 예제와 유사할 수 있습니다. 이 구성 요소는 StreamManagerS3 예제를 실행합니다.
- JSON
-
{
"RecipeFormatVersion": "2020-01-25",
"ComponentName": "com.example.StreamManagerS3JS",
"ComponentVersion": "1.0.0",
"ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.",
"ComponentPublisher": "Amazon",
"ComponentDependencies": {
"aws.greengrass.StreamManager": {
"VersionRequirement": "^2.0.0"
}
},
"Manifests": [
{
"Platform": {
"os": "linux"
},
"Lifecycle": {
"install": "npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk",
"run": "export NODE_PATH=$NODE_PATH:{work:path}/node_modules; node {artifacts:path}/index.js"
},
"Artifacts": [
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip",
"Unarchive": "ZIP"
},
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js"
}
]
},
{
"Platform": {
"os": "windows"
},
"Lifecycle": {
"install": "npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk",
"run": "set \"NODE_PATH=%NODE_PATH%;{work:path}/node_modules\" & node {artifacts:path}/index.js"
},
"Artifacts": [
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip",
"Unarchive": "ZIP"
},
{
"URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js"
}
]
}
]
}
- YAML
-
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.StreamManagerS3JS
ComponentVersion: 1.0.0
ComponentDescription: Uses stream manager to upload a file to an S3 bucket.
ComponentPublisher: Amazon
ComponentDependencies:
aws.greengrass.StreamManager:
VersionRequirement: "^2.0.0"
Manifests:
- Platform:
os: linux
Lifecycle:
install: npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk
run: |
export NODE_PATH=$NODE_PATH:{work:path}/node_modules
node {artifacts:path}/index.js
Artifacts:
- URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip
Unarchive: ZIP
- URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js
- Platform:
os: windows
Lifecycle:
install: npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk
run: |
set "NODE_PATH=%NODE_PATH%;{work:path}/node_modules"
node {artifacts:path}/index.js
Artifacts:
- URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip
Unarchive: ZIP
- URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js
구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.
애플리케이션 코드에서 스트림 관리자에 연결
애플리케이션의 스트림 관리자에 연결하려면 스트림 관리자 SDK에서 StreamManagerClient
의 인스턴스를 생성합니다. 이 클라이언트는 기본 포트 8088의 스트림 관리자 구성 요소 또는 지정한 포트에 연결합니다. 인스턴스를 생성한 후 StreamManagerClient
를 사용하는 방법에 대한 자세한 내용은 StreamManagerClient를 사용하여 스트림 작업 섹션을 참조하세요.
예: 기본 포트를 사용하여 스트림 관리자에 연결
- Java
-
import com.amazonaws.greengrass.streammanager.client.StreamManagerClient;
public class MyStreamManagerComponent {
void connectToStreamManagerWithDefaultPort() {
StreamManagerClient client = StreamManagerClientFactory.standard().build();
// Use the client.
}
}
- Python
-
from stream_manager import (
StreamManagerClient
)
def connect_to_stream_manager_with_default_port():
client = StreamManagerClient()
# Use the client.
- JavaScript
-
const {
StreamManagerClient
} = require('aws-greengrass-stream-manager-sdk');
function connectToStreamManagerWithDefaultPort() {
const client = new StreamManagerClient();
// Use the client.
}
예: 기본값이 아닌 포트를 사용하여 스트림 관리자에 연결
기본 포트가 아닌 포트로 스트림 관리자를 구성하는 경우 프로세스 간 통신을 사용하여 구성 요소 구성에서 포트를 검색해야 합니다.
port
구성 파라미터에는 스트림 관리자를 배포할 때 STREAM_MANAGER_SERVER_PORT
에서 지정하는 값이 포함되어 있습니다.
- Java
-
void connectToStreamManagerWithCustomPort() {
EventStreamRPCConnection eventStreamRpcConnection = IPCUtils.getEventStreamRpcConnection();
GreengrassCoreIPCClient greengrassCoreIPCClient = new GreengrassCoreIPCClient(eventStreamRpcConnection);
List<String> keyPath = new ArrayList<>();
keyPath.add("port");
GetConfigurationRequest request = new GetConfigurationRequest();
request.setComponentName("aws.greengrass.StreamManager");
request.setKeyPath(keyPath);
GetConfigurationResponse response =
greengrassCoreIPCClient.getConfiguration(request, Optional.empty()).getResponse().get();
String port = response.getValue().get("port").toString();
System.out.print("Stream Manager is running on port: " + port);
final StreamManagerClientConfig config = StreamManagerClientConfig.builder()
.serverInfo(StreamManagerServerInfo.builder().port(Integer.parseInt(port)).build()).build();
StreamManagerClient client = StreamManagerClientFactory.standard().withClientConfig(config).build();
// Use the client.
}
- Python
-
import awsiot.greengrasscoreipc
from awsiot.greengrasscoreipc.model import (
GetConfigurationRequest
)
from stream_manager import (
StreamManagerClient
)
TIMEOUT = 10
def connect_to_stream_manager_with_custom_port():
# Use IPC to get the port from the stream manager component configuration.
ipc_client = awsiot.greengrasscoreipc.connect()
request = GetConfigurationRequest()
request.component_name = "aws.greengrass.StreamManager"
request.key_path = ["port"]
operation = ipc_client.new_get_configuration()
operation.activate(request)
future_response = operation.get_response()
response = future_response.result(TIMEOUT)
stream_manager_port = str(response.value["port"])
# Use port to create a stream manager client.
stream_client = StreamManagerClient(port=stream_manager_port)
# Use the client.