Slide 1

Slide 1 text

AWS IoT Greengrass V 2 2 02 3 / 07 / 19 AWS

Slide 2

Slide 2 text

AWS IoT Greengrass Greengrass Development Kit GDK GDK CICD CICD 2

Slide 3

Slide 3 text

AWS IoT Greengrass AWS CodeCommit, AWS Pipeline, AWS CodeBuild 3

Slide 4

Slide 4 text

Greengrass 4

Slide 5

Slide 5 text

myapp.py Recipe zip maven jar S 3 S 3 Greengrass 5

Slide 6

Slide 6 text

myapp.py Recipe zip maven jar S 3 S 3 Greengrass 6

Slide 7

Slide 7 text

7 S 3 ʲॻࣜʳ s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/myapp.zip s3://BUCKET_NAME/COMPONENT_NAME/1.0.0/myapp.zip s3://BUCKET_NAME/COMPONENT_NAME/1.0.1/myapp.zip s3://BUCKET_NAME/COMPONENT_NAME/1.0.2/myapp.zip

Slide 8

Slide 8 text

Greengrass Development Kit 8 Greengrass Greengrass Recipe( ) GDK (gdk-con fi g.json) URI

Slide 9

Slide 9 text

GDK 2 GDK 9 $ gdk component build $ gdk component publish

Slide 10

Slide 10 text

zip jar S 3 S 3 1 0 ʩ GDKͰࣗಈԽʂ

Slide 11

Slide 11 text

1 1 GDK Λ CI πʔϧͰ࢖͑͹ ߋʹ։ൃ͕ޮ཰తʹͳΔ

Slide 12

Slide 12 text

GDK CICD 1 2

Slide 13

Slide 13 text

CICD 1 3 


Slide 14

Slide 14 text

AWS CLI GDK CLI GDK GDK 1 4

Slide 15

Slide 15 text

Buildspec 1 5 phases: install: commands: - curl "https://awscli.amazonaws.com/awscli-exe-linux-$ARCH.zip" -o "awscliv2.zip" - ./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update - CURRDIR=$(basename "$PWD") - cd ../ && mv $CURRDIR devio2023App && cd devio2023App - python3 -m venv buildenv - . ./buildenv/bin/activate # Install GDK CLI - python3 -m pip install -U git+https://github.com/aws-greengrass/[email protected] build: commands: - gdk component build - gdk component publish

Slide 16

Slide 16 text

CodeBuild CodeCommit myrepo GDK S 3 URI Buildspec 1 6 Ϗϧυ࡞ۀ͢ΔσΟϨΫτϦ໊ΛΞʔςΟϑΝΫτ໊ʹมߋ - CURRDIR=$(basename "$PWD") - cd ../ && mv $CURRDIR devio2023App && cd devio2023App Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/devio2023App.zip" Unarchive: ZIP

Slide 17

Slide 17 text

CodeBuild CodeCommit myrepo GDK S 3 URI Buildspec 1 7 Ϗϧυ࡞ۀ͢ΔσΟϨΫτϦ໊ΛΞʔςΟϑΝΫτ໊ʹมߋ - CURRDIR=$(basename "$PWD") - cd ../ && mv $CURRDIR devio2023App && cd devio2023App Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/devio2023App.zip" Unarchive: ZIP NZSFQP㱠EFWJP"QQ ίϯϙʔωϯτϏϧυ/(

Slide 18

Slide 18 text


 CreateDeployment 1 8

Slide 19

Slide 19 text

Buildspec 1 9 phases: install: commands: - curl "https://awscli.amazonaws.com/awscli-exe-linux-$ARCH.zip" -o "awscliv2.zip" - unzip awscliv2.zip - ./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update build: commands: - AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) 
 - AWS_REGION=ap-northeast-1 - COMPONENT_NAME=$(cat gdk-con fi g.json | jq -r '.component | keys[]’) - chmod +x ./deploy-components.sh - sh -x ./deploy-components.sh ${AWS_ACCOUNT_ID} ɹɹ${AWS_REGION} ${COMPONENT_NAME} ${IOT_THING_GROUP} ${DEPLOYMENT_NAME} #ݟ΍͢͞ͷͨΊվߦ

Slide 20

Slide 20 text

2 0 # ର৅ίϯϙʔωϯτͷ࠷৽όʔδϣϯ਺Λऔಘ LATEST_COMP_VERSION=$(aws greengrassv2 list-components | \ jq -r '.components[] | select(.componentName == "'"${COMPONENT_NAME}"'").latestVersion' | jq -r '.componentVersion') # ࠷৽ͷσϓϩΠϝϯτIDΛऔಘ DEPLOYMENT_ID=$(aws greengrassv2 list-deployments --target-arn ${THING_GROUP_ARN} | jq -r '.deployments[]' | jq -r .deploymentId) # ର৅σϓϩΠϝϯτIDʹ΋ͱ͍ͮͨσϓϩΠఆٛ৘ใΛऔಘɺ৽نʹσϓϩΠఆٛΛ࡞੒ NEW_CONFIG_JSON=$(aws greengrassv2 get-deployment \ --deployment-id ${DEPLOYMENT_ID} | jq .'components' | jq 'del(."$COMP_NAME")' | \ jq '. += {"'"$COMPONENT_NAME"'": {"componentVersion": "'"$LATEST_COMP_VERSION"'","con fi gurationUpdate":{"reset":[""]}}}') FINAL_CONFIG_JSON='{"components":'$NEW_CONFIG_JSON'}' echo $(echo "$FINAL_CONFIG_JSON" | jq '.') > ${DEPLOYMENT_CONFIG_FILE} # σϓϩΠϝϯτͷ࡞੒ʢσϓϩΠ࣮ࢪʣ ## set con fi g fi le URI CONFIG_URI=“ fi leb://${DEPLOYMENT_CONFIG_FILE}” ## Deploy aws greengrassv2 create-deployment --target-arn ${THING_GROUP_ARN} \ --deployment-name ${DEPLOYMENT_NAME} \ --cli-input-json ${CONFIG_URI}

Slide 21

Slide 21 text

2 1 # ࠷৽ͷσϓϩΠϝϯτIDΛऔಘ DEPLOYMENT_ID=$(aws greengrassv2 list-deployments --target-arn ${THING_GROUP_ARN} | \ jq -r '.deployments[]' | jq -r .deploymentId) ɾෳ਺ίϯϙʔωϯτ͕σϓϩΠࡁΈͷ৔߹ɺͦΕΒͷσϓϩΠ৘ใ΋ؚΊͯ 
 ɹσϓϩΠ͢Δඞཁ͕͋ΔͨΊɺ௚લͷσϓϩΠϝϯτ*%Λऔಘ ɾσϓϩΠ৘ใͷͳ͍ίϯϙʔωϯτ͸ʮ࡟আʯ͞ΕΔ

Slide 22

Slide 22 text

2 2 # ର৅σϓϩΠϝϯτIDʹ΋ͱ͍ͮͨσϓϩΠఆٛ৘ใΛऔಘɺ৽نʹσϓϩΠఆٛΛ࡞੒ NEW_CONFIG_JSON=$(aws greengrassv2 get-deployment \ --deployment-id ${DEPLOYMENT_ID} | jq .'components' | jq 'del(."$COMP_NAME")' | \ jq '. += {"'"$COMPONENT_NAME"'": {"componentVersion": "'"$LATEST_COMP_VERSION"'","con fi gurationUpdate":{"reset":[""]}}}') FINAL_CONFIG_JSON='{"components":'$NEW_CONFIG_JSON'}' echo $(echo "$FINAL_CONFIG_JSON" | jq '.') > ${DEPLOYMENT_CONFIG_FILE} ɾଞͷσϓϩΠࡁΈίϯϙʔωϯτͷσϓϩΠ৘ใΛऔಘ ɾ͜ͷεςʔδͰσϓϩΠ͢Δίϯϙʔωϯτͷ࠷৽όʔδϣϯΛؚΊͨσϓϩΠ 
 ɹఆٛΛ࡞੒

Slide 23

Slide 23 text

2 3 # σϓϩΠϝϯτͷ࡞੒ʢσϓϩΠ࣮ࢪʣ ## set con fi g fi le URI CONFIG_URI=“ fi leb://${DEPLOYMENT_CONFIG_FILE}” ## Deploy aws greengrassv2 create-deployment --target-arn ${THING_GROUP_ARN} \ --deployment-name ${DEPLOYMENT_NAME} \ --cli-input-json ${CONFIG_URI} ɾ࡞੒ͨ͠σϓϩΠఆٛΛݩʹɺσόΠε΁ͷσϓϩΠʢδϣϒʣΛ࣮ߦ ɹɾσϓϩΠఆٛϑΝΠϧΛΦϓγϣϯͰ౉͢

Slide 24

Slide 24 text

JSON ( push) 2 4

Slide 25

Slide 25 text

Greengrass 2 5

Slide 26

Slide 26 text

Greengrass PHP Greengrass 2 6

Slide 27

Slide 27 text

ARM, AMD, RISC-V … 3 2 bit, 6 4 bit CodeBuild x 86 _ 6 4 , aarch 6 4 x 8 6 32 bit Greengrass Docker 2 7

Slide 28

Slide 28 text

Docker Buildx multiarch/qemu-user-static CPU 2 8 ηοτΞοϓʹ͕͔͔࣌ؒΔ ख͕͔͔ؒΓ͗͢Δ QEMUͱbinfmt_miscΛ࢖༻ͯ͠ҟͳΔϚϧνΞʔΩςΫνϟͷ ଟ͘ͷΞʔΩςΫνϟΛαϙʔτ ίϯςφΛ࣮ߦ͢ΔͨΊͷDockerΠϝʔδ

Slide 29

Slide 29 text

CPU 2 9

Slide 30

Slide 30 text

AWS 3 0

Slide 31

Slide 31 text

CodeBuild CPU ECR Docker Manifest List Manifest List AWS 3 1

Slide 32

Slide 32 text

Greengrass Docker Greengrass Greengrass 3 2 ComponentCon fi guration: DefaultCon fi guration: MY_TAG: latest ʙதུʙ Manifests: - Lifecycle: Run: "docker container run … xxx.dkr.ecr.xxx.amazonaws.com/myrepo:{con fi guration:/MY_TAG}" Artifacts: - Uri: “docker:xxx.dkr.ecr.xxx.amazonaws.com/myrepo:{con fi guration:/MY_TAG}” Ϩγϐม਺͸ -JGFDZDMF಺ͷΈ

Slide 33

Slide 33 text

docker pull, docker run Greengrass 3 3 ComponentCon fi guration: DefaultCon fi guration: MY_TAG: latest ʙதུʙ Manifests: - Lifecycle: Run: sh -x {artifacts:path}/docker-component-run.sh ‘{con fi guration:/MY_TAG}’ Artifacts: - Uri: s3://όέοτ໊/.../artifacts/ίϯϙʔωϯτ໊/x.x.x/docker-component-run.sh

Slide 34

Slide 34 text

3 4

Slide 35

Slide 35 text

Greengrass GDK CPU multiarch/qemu-user-static CodeBuild Greengrass 3 5

Slide 36

Slide 36 text

No content