AWS IoT Greengrass에 대한 AWS CloudFormation 지원 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.

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

AWS IoT Greengrass에 대한 AWS CloudFormation 지원

AWS CloudFormation은 AWS 리소스를 생성, 관리 및 복제하는 데 도움이 될 수 있는 서비스입니다. AWS CloudFormation 템플릿을 사용하여 AWS IoT Greengrass 그룹과 배포할 디바이스, 구독 및 기타 구성 요소를 정의할 수 있습니다. 관련 예제는 템플릿 예제 섹션을 참조하세요

템플릿에서 생성하는 리소스와 인프라를 스택이라고 합니다. 모든 리소스를 하나의 템플릿에서 정의하거나 다른 스택의 리소스를 참조할 수 있습니다. 에 대한 자세한 내용AWS CloudFormation템플릿 및 기능에 대한 자세한 내용은란 무엇입니까?AWS CloudFormation?AWS CloudFormation사용 설명서.

리소스 만들기

AWS CloudFormation 템플릿은 AWS 리소스의 속성과 관계를 설명하는 JSON 또는 YAML 문서입니다. 지원되는 AWS IoT Greengrass 리소스는 다음과 같습니다.

  • 그룹

  • 코어

  • Devices

  • Lambda 함수

  • 커넥터

  • 리소스(로컬, 기계 학습, 비밀)

  • 구독

  • 로거(로깅 구성)

AWS CloudFormation 템플릿에서 Greengrass 리소스의 구조와 구문은 AWS IoT Greengrass API를 기반으로 합니다. 예를 들어, 이 예제 템플릿은 최상위 수준 DeviceDefinition을 개별 디바이스가 포함된 DeviceDefinitionVersion과 연결합니다. 자세한 내용은 AWS IoT Greengrass 그룹 객체 모델 개요 섹션을 참조하세요.

AWS IoT Greengrass리소스 유형 참조AWS CloudFormation사용 설명서에서 관리할 수 있는 Greengrass 리소스에 대해 설명합니다.AWS CloudFormation. AWS CloudFormation 템플릿을 사용하여 Greengrass 리소스를 생성할 때는 AWS CloudFormation에서만 리소스를 관리하는 것이 좋습니다. 예를 들어, 디바이스를 추가, 변경 또는 제거하려는 경우 (AWS IoT GreengrassAPI 또는AWS IoT콘솔). 이렇게 하면 롤백 및 기타 AWS CloudFormation 변경 관리 기능을 사용할 수 있습니다. 사용에 관한 자세한 내용AWS CloudFormation를 사용하여 리소스 및 스택을 생성하고 관리하는 방법에 대한 자세한 내용은 단원을 참조하십시오.스택 작업AWS CloudFormation사용 설명서.

만들고 배포하는 방법을 보여 주는 연습은AWS IoT Greengrass리소스AWS CloudFormation템플릿에 대한 자세한 내용은자동화AWS IoT Greengrass를 사용하여 설정AWS CloudFormation에 사물 인터넷AWS공식 블로그.

리소스 배포

생성한 후AWS CloudFormation스택을 사용하는 경우 그룹 버전이 포함된AWS CLI또는AWS IoT콘솔을 사용하여 배포할 수 있습니다.

참고

그룹을 배포하려면 Greengrass 서비스 역할이AWS 계정. 서비스 역할은 다음을 허용합니다.AWS IoT Greengrass가 리소스에 액세스하도록 허용AWS Lambda및 기타AWS서비스. 현재 Greengrass 그룹을 이미 배포한 경우 이 역할이 존재해야 합니다.AWS 리전. 자세한 내용은 Greengrass 서비스 역할 섹션을 참조하세요.

그룹을 배포하려면 (AWS CLI)
  • create-deployment 명령을 실행합니다.

    aws greengrass create-deployment --group-id GroupId --group-version-id GroupVersionId --deployment-type NewDeployment
    참고

    CommandToDeployGroup템플릿 예제에서는 스택을 만들 때 그룹 및 그룹 버전 ID와 함께 명령을 출력하는 방법을 보여 줍니다.

그룹을 배포하려면(콘솔)
  1. 에서AWS IoT콘솔의 탐색 창에서Greengrass,클래식 (V1),그룹.

  2. 그룹을 선택합니다.

  3. 그룹 구성 페이지의 Actions(작업)에서 Deploy(배포)를 선택합니다.

    
                배포 작업이 강조 표시된 그룹 페이지 스크린샷입니다.

    그러면 그룹 구성이 배포됩니다.AWS IoT Greengrass코어 디바이스가 있습니다. 문제 해결에 대한 도움말은 AWS IoT Greengrass 문제 해결 단원을 참조하십시오.

템플릿 예제

다음 예제 템플릿은 코어, 디바이스, 함수, 로거, 구독 및 두 개의 리소스가 포함된 Greengrass 그룹을 생성합니다. 이렇게 하기 위해 템플릿은 AWS IoT Greengrass API의 객체 모델을 따릅니다. 예를 들어, 그룹에 추가하려는 디바이스가 DeviceDefinition 리소스와 연결된 DeviceDefinitionVersion 리소스에 포함되어 있는 경우, 디바이스를 그룹에 추가하기 위해 그룹 버전은 DeviceDefinitionVersion의 ARN을 참조합니다.

이 템플릿에는 코어 및 디바이스의 인증서 ARN과 소스 Lambda 함수 (AWS Lambda리소스). 이 템플릿은 RefGetAtt 내장 함수를 사용하여 Greengrass 리소스를 생성하는 데 필요한 ID, ARN 및 기타 속성을 참조합니다.

또한 이 템플릿은 Greengrass 그룹에 추가되는 코어 및 디바이스를 나타내는 두 개의 AWS IoT 디바이스(사물)를 정의합니다.

Greengrass 리소스가 있는 스택을 생성한 후에는AWS CLI또는AWS IoT콘솔을 사용하여그룹을 배포하려면.

참고

예제의 CommandToDeployGroup 문은 그룹을 배포하는 데 사용할 수 있는 전체 create-deployment CLI 명령을 출력하는 방법을 보여 줍니다.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS IoT Greengrass example template that creates a group version with a core, device, function, logger, subscription, and resources.", "Parameters": { "CoreCertificateArn": { "Type": "String" }, "DeviceCertificateArn": { "Type": "String" }, "LambdaVersionArn": { "Type": "String" } }, "Resources": { "TestCore1": { "Type": "AWS::IoT::Thing", "Properties": { "ThingName": "TestCore1" } }, "TestCoreDefinition": { "Type": "AWS::Greengrass::CoreDefinition", "Properties": { "Name": "DemoTestCoreDefinition" } }, "TestCoreDefinitionVersion": { "Type": "AWS::Greengrass::CoreDefinitionVersion", "Properties": { "CoreDefinitionId": { "Ref": "TestCoreDefinition" }, "Cores": [ { "Id": "TestCore1", "CertificateArn": { "Ref": "CoreCertificateArn" }, "SyncShadow": "false", "ThingArn": { "Fn::Join": [ ":", [ "arn:aws:iot", { "Ref": "AWS::Region" }, { "Ref": "AWS::AccountId" }, "thing/TestCore1" ] ] } } ] } }, "TestDevice1": { "Type": "AWS::IoT::Thing", "Properties": { "ThingName": "TestDevice1" } }, "TestDeviceDefinition": { "Type": "AWS::Greengrass::DeviceDefinition", "Properties": { "Name": "DemoTestDeviceDefinition" } }, "TestDeviceDefinitionVersion": { "Type": "AWS::Greengrass::DeviceDefinitionVersion", "Properties": { "DeviceDefinitionId": { "Fn::GetAtt": [ "TestDeviceDefinition", "Id" ] }, "Devices": [ { "Id": "TestDevice1", "CertificateArn": { "Ref": "DeviceCertificateArn" }, "SyncShadow": "true", "ThingArn": { "Fn::Join": [ ":", [ "arn:aws:iot", { "Ref": "AWS::Region" }, { "Ref": "AWS::AccountId" }, "thing/TestDevice1" ] ] } } ] } }, "TestFunctionDefinition": { "Type": "AWS::Greengrass::FunctionDefinition", "Properties": { "Name": "DemoTestFunctionDefinition" } }, "TestFunctionDefinitionVersion": { "Type": "AWS::Greengrass::FunctionDefinitionVersion", "Properties": { "FunctionDefinitionId": { "Fn::GetAtt": [ "TestFunctionDefinition", "Id" ] }, "DefaultConfig": { "Execution": { "IsolationMode": "GreengrassContainer" } }, "Functions": [ { "Id": "TestLambda1", "FunctionArn": { "Ref": "LambdaVersionArn" }, "FunctionConfiguration": { "Pinned": "true", "Executable": "run.exe", "ExecArgs": "argument1", "MemorySize": "512", "Timeout": "2000", "EncodingType": "binary", "Environment": { "Variables": { "variable1": "value1" }, "ResourceAccessPolicies": [ { "ResourceId": "ResourceId1", "Permission": "ro" }, { "ResourceId": "ResourceId2", "Permission": "rw" } ], "AccessSysfs": "false", "Execution": { "IsolationMode": "GreengrassContainer", "RunAs": { "Uid": "1", "Gid": "10" } } } } } ] } }, "TestLoggerDefinition": { "Type": "AWS::Greengrass::LoggerDefinition", "Properties": { "Name": "DemoTestLoggerDefinition" } }, "TestLoggerDefinitionVersion": { "Type": "AWS::Greengrass::LoggerDefinitionVersion", "Properties": { "LoggerDefinitionId": { "Ref": "TestLoggerDefinition" }, "Loggers": [ { "Id": "TestLogger1", "Type": "AWSCloudWatch", "Component": "GreengrassSystem", "Level": "INFO" } ] } }, "TestResourceDefinition": { "Type": "AWS::Greengrass::ResourceDefinition", "Properties": { "Name": "DemoTestResourceDefinition" } }, "TestResourceDefinitionVersion": { "Type": "AWS::Greengrass::ResourceDefinitionVersion", "Properties": { "ResourceDefinitionId": { "Ref": "TestResourceDefinition" }, "Resources": [ { "Id": "ResourceId1", "Name": "LocalDeviceResource", "ResourceDataContainer": { "LocalDeviceResourceData": { "SourcePath": "/dev/TestSourcePath1", "GroupOwnerSetting": { "AutoAddGroupOwner": "false", "GroupOwner": "TestOwner" } } } }, { "Id": "ResourceId2", "Name": "LocalVolumeResourceData", "ResourceDataContainer": { "LocalVolumeResourceData": { "SourcePath": "/dev/TestSourcePath2", "DestinationPath": "/volumes/TestDestinationPath2", "GroupOwnerSetting": { "AutoAddGroupOwner": "false", "GroupOwner": "TestOwner" } } } } ] } }, "TestSubscriptionDefinition": { "Type": "AWS::Greengrass::SubscriptionDefinition", "Properties": { "Name": "DemoTestSubscriptionDefinition" } }, "TestSubscriptionDefinitionVersion": { "Type": "AWS::Greengrass::SubscriptionDefinitionVersion", "Properties": { "SubscriptionDefinitionId": { "Ref": "TestSubscriptionDefinition" }, "Subscriptions": [ { "Id": "TestSubscription1", "Source": { "Fn::Join": [ ":", [ "arn:aws:iot", { "Ref": "AWS::Region" }, { "Ref": "AWS::AccountId" }, "thing/TestDevice1" ] ] }, "Subject": "TestSubjectUpdated", "Target": { "Ref": "LambdaVersionArn" } } ] } }, "TestGroup": { "Type": "AWS::Greengrass::Group", "Properties": { "Name": "DemoTestGroupNewName", "RoleArn": { "Fn::Join": [ ":", [ "arn:aws:iam:", { "Ref": "AWS::AccountId" }, "role/TestUser" ] ] }, "InitialVersion": { "CoreDefinitionVersionArn": { "Ref": "TestCoreDefinitionVersion" }, "DeviceDefinitionVersionArn": { "Ref": "TestDeviceDefinitionVersion" }, "FunctionDefinitionVersionArn": { "Ref": "TestFunctionDefinitionVersion" }, "SubscriptionDefinitionVersionArn": { "Ref": "TestSubscriptionDefinitionVersion" }, "LoggerDefinitionVersionArn": { "Ref": "TestLoggerDefinitionVersion" }, "ResourceDefinitionVersionArn": { "Ref": "TestResourceDefinitionVersion" } }, "Tags": { "KeyName0": "value", "KeyName1": "value", "KeyName2": "value" } } } }, "Outputs": { "CommandToDeployGroup": { "Value": { "Fn::Join": [ " ", [ "groupVersion=$(cut -d'/' -f6 <<<", { "Fn::GetAtt": [ "TestGroup", "LatestVersionArn" ] }, ");", "aws --region", { "Ref": "AWS::Region" }, "greengrass create-deployment --group-id", { "Ref": "TestGroup" }, "--deployment-type NewDeployment --group-version-id", "$groupVersion" ] ] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: >- AWS IoT Greengrass example template that creates a group version with a core, device, function, logger, subscription, and resources. Parameters: CoreCertificateArn: Type: String DeviceCertificateArn: Type: String LambdaVersionArn: Type: String Resources: TestCore1: Type: 'AWS::IoT::Thing' Properties: ThingName: TestCore1 TestCoreDefinition: Type: 'AWS::Greengrass::CoreDefinition' Properties: Name: DemoTestCoreDefinition TestCoreDefinitionVersion: Type: 'AWS::Greengrass::CoreDefinitionVersion' Properties: CoreDefinitionId: !Ref TestCoreDefinition Cores: - Id: TestCore1 CertificateArn: !Ref CoreCertificateArn SyncShadow: 'false' ThingArn: !Join - ':' - - 'arn:aws:iot' - !Ref 'AWS::Region' - !Ref 'AWS::AccountId' - thing/TestCore1 TestDevice1: Type: 'AWS::IoT::Thing' Properties: ThingName: TestDevice1 TestDeviceDefinition: Type: 'AWS::Greengrass::DeviceDefinition' Properties: Name: DemoTestDeviceDefinition TestDeviceDefinitionVersion: Type: 'AWS::Greengrass::DeviceDefinitionVersion' Properties: DeviceDefinitionId: !GetAtt - TestDeviceDefinition - Id Devices: - Id: TestDevice1 CertificateArn: !Ref DeviceCertificateArn SyncShadow: 'true' ThingArn: !Join - ':' - - 'arn:aws:iot' - !Ref 'AWS::Region' - !Ref 'AWS::AccountId' - thing/TestDevice1 TestFunctionDefinition: Type: 'AWS::Greengrass::FunctionDefinition' Properties: Name: DemoTestFunctionDefinition TestFunctionDefinitionVersion: Type: 'AWS::Greengrass::FunctionDefinitionVersion' Properties: FunctionDefinitionId: !GetAtt - TestFunctionDefinition - Id DefaultConfig: Execution: IsolationMode: GreengrassContainer Functions: - Id: TestLambda1 FunctionArn: !Ref LambdaVersionArn FunctionConfiguration: Pinned: 'true' Executable: run.exe ExecArgs: argument1 MemorySize: '512' Timeout: '2000' EncodingType: binary Environment: Variables: variable1: value1 ResourceAccessPolicies: - ResourceId: ResourceId1 Permission: ro - ResourceId: ResourceId2 Permission: rw AccessSysfs: 'false' Execution: IsolationMode: GreengrassContainer RunAs: Uid: '1' Gid: '10' TestLoggerDefinition: Type: 'AWS::Greengrass::LoggerDefinition' Properties: Name: DemoTestLoggerDefinition TestLoggerDefinitionVersion: Type: 'AWS::Greengrass::LoggerDefinitionVersion' Properties: LoggerDefinitionId: !Ref TestLoggerDefinition Loggers: - Id: TestLogger1 Type: AWSCloudWatch Component: GreengrassSystem Level: INFO TestResourceDefinition: Type: 'AWS::Greengrass::ResourceDefinition' Properties: Name: DemoTestResourceDefinition TestResourceDefinitionVersion: Type: 'AWS::Greengrass::ResourceDefinitionVersion' Properties: ResourceDefinitionId: !Ref TestResourceDefinition Resources: - Id: ResourceId1 Name: LocalDeviceResource ResourceDataContainer: LocalDeviceResourceData: SourcePath: /dev/TestSourcePath1 GroupOwnerSetting: AutoAddGroupOwner: 'false' GroupOwner: TestOwner - Id: ResourceId2 Name: LocalVolumeResourceData ResourceDataContainer: LocalVolumeResourceData: SourcePath: /dev/TestSourcePath2 DestinationPath: /volumes/TestDestinationPath2 GroupOwnerSetting: AutoAddGroupOwner: 'false' GroupOwner: TestOwner TestSubscriptionDefinition: Type: 'AWS::Greengrass::SubscriptionDefinition' Properties: Name: DemoTestSubscriptionDefinition TestSubscriptionDefinitionVersion: Type: 'AWS::Greengrass::SubscriptionDefinitionVersion' Properties: SubscriptionDefinitionId: !Ref TestSubscriptionDefinition Subscriptions: - Id: TestSubscription1 Source: !Join - ':' - - 'arn:aws:iot' - !Ref 'AWS::Region' - !Ref 'AWS::AccountId' - thing/TestDevice1 Subject: TestSubjectUpdated Target: !Ref LambdaVersionArn TestGroup: Type: 'AWS::Greengrass::Group' Properties: Name: DemoTestGroupNewName RoleArn: !Join - ':' - - 'arn:aws:iam:' - !Ref 'AWS::AccountId' - role/TestUser InitialVersion: CoreDefinitionVersionArn: !Ref TestCoreDefinitionVersion DeviceDefinitionVersionArn: !Ref TestDeviceDefinitionVersion FunctionDefinitionVersionArn: !Ref TestFunctionDefinitionVersion SubscriptionDefinitionVersionArn: !Ref TestSubscriptionDefinitionVersion LoggerDefinitionVersionArn: !Ref TestLoggerDefinitionVersion ResourceDefinitionVersionArn: !Ref TestResourceDefinitionVersion Tags: KeyName0: value KeyName1: value KeyName2: value Outputs: CommandToDeployGroup: Value: !Join - ' ' - - groupVersion=$(cut -d'/' -f6 <<< - !GetAtt - TestGroup - LatestVersionArn - ); - aws --region - !Ref 'AWS::Region' - greengrass create-deployment --group-id - !Ref TestGroup - '--deployment-type NewDeployment --group-version-id' - $groupVersion

지원되는AWS 리전s

현재 생성 및 관리 할 수 있습니다.AWS IoT Greengrass다음 항목에서만 리소스AWS 리전s:

  • US East (Ohio)

  • 미국 동부(버지니아 북부)

  • 미국 서부(오리건)

  • Asia Pacific (Mumbai)

  • Asia Pacific (Seoul)

  • 아시아 태평양(싱가포르)

  • 아시아 태평양(시드니)

  • 아시아 태평양(도쿄)

  • China (Beijing)

  • Europe (Frankfurt)

  • 유럽(아일랜드)

  • Europe (London)

  • AWS GovCloud(미국 서부)