Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS IoT Greengrass V2で始める デバイスアプリケーションの継続的開発

wanda
July 19, 2023

AWS IoT Greengrass V2で始める デバイスアプリケーションの継続的開発

DevelopersIO 2023 大阪にて登壇時に使用した資料です。

wanda

July 19, 2023
Tweet

More Decks by wanda

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. 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 ίϯϙʔωϯτϏϧυ/(
  4. 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} #ݟ΍͢͞ͷͨΊվߦ
  5. 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}
  6. 2 1 # ࠷৽ͷσϓϩΠϝϯτIDΛऔಘ DEPLOYMENT_ID=$(aws greengrassv2 list-deployments --target-arn ${THING_GROUP_ARN} |

    \ jq -r '.deployments[]' | jq -r .deploymentId) ɾෳ਺ίϯϙʔωϯτ͕σϓϩΠࡁΈͷ৔߹ɺͦΕΒͷσϓϩΠ৘ใ΋ؚΊͯ 
 ɹσϓϩΠ͢Δඞཁ͕͋ΔͨΊɺ௚લͷσϓϩΠϝϯτ*%Λऔಘ ɾσϓϩΠ৘ใͷͳ͍ίϯϙʔωϯτ͸ʮ࡟আʯ͞ΕΔ
  7. 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} ɾଞͷσϓϩΠࡁΈίϯϙʔωϯτͷσϓϩΠ৘ใΛऔಘ ɾ͜ͷεςʔδͰσϓϩΠ͢Δίϯϙʔωϯτͷ࠷৽όʔδϣϯΛؚΊͨσϓϩΠ 
 ɹఆٛΛ࡞੒
  8. 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} ɾ࡞੒ͨ͠σϓϩΠఆٛΛݩʹɺσόΠε΁ͷσϓϩΠʢδϣϒʣΛ࣮ߦ ɹɾσϓϩΠఆٛϑΝΠϧΛΦϓγϣϯͰ౉͢
  9. 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
  10. 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಺ͷΈ
  11. 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
  12. 3 4