Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS IoT Greengrass V2で始める デバイスアプリケーションの継続的開発
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
wanda
July 19, 2023
Technology
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS IoT Greengrass V2で始める デバイスアプリケーションの継続的開発
DevelopersIO 2023 大阪にて登壇時に使用した資料です。
wanda
July 19, 2023
More Decks by wanda
See All by wanda
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
2
610
スマートファクトリーの第一歩 AWSマネージドサービスで実現する予知保全と生成AI活用まで
ganota
0
540
試して分かった!AWS を使った PLCのデータ収集と分析基盤の実践ノウハウ #FA設備技術勉強会#13
ganota
2
17k
AWS IoT SiteWise 導入時に検討するべき3つのポイント
ganota
0
6.2k
SORACOM LTE-M Button Plusと100均ショップの商品でIoTポストを作ってみた
ganota
0
1.8k
Dome9で始めるAWSセキュリティリスク管理.pdf
ganota
0
4.4k
Developers.IO_Nagoya_Well-Architected_Frameworkでクラウドジャーニー.pdf
ganota
0
1.3k
Other Decks in Technology
See All in Technology
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
610
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
140
AIエージェントとPhysical AIが拓く製造業の変革(ハノーバーメッセリキャップ)
iotcomjpadmin
0
200
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
140
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
410
BPaaSで進むAIオペレーションの現在地 AI実装が効く領域とスケーラビリティの選定と実装
kentarofujii
0
250
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
560
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
120
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
280
CVE-2026-20833_脆弱性対応とAES 化について
jukishiya
0
350
5分でわかる Amazon Connect_20260608
hwangbyeonghun
0
170
初めてのDatabricks勉強会
taka_aki
2
230
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
450
Prompt Engineering for Job Search
mfonobong
0
360
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Limits of Empathy - UXLibs8
cassininazir
1
380
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
Transcript
AWS IoT Greengrass V 2 2 02 3 / 07
/ 19 AWS
AWS IoT Greengrass Greengrass Development Kit GDK GDK CICD CICD
2
AWS IoT Greengrass AWS CodeCommit, AWS Pipeline, AWS CodeBuild 3
Greengrass 4
myapp.py Recipe zip maven jar S 3 S 3 Greengrass
5
myapp.py Recipe zip maven jar S 3 S 3 Greengrass
6
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
Greengrass Development Kit 8 Greengrass Greengrass Recipe( ) GDK (gdk-con
fi g.json) URI
GDK 2 GDK 9 $ gdk component build $ gdk
component publish
zip jar S 3 S 3 1 0 ʩ GDKͰࣗಈԽʂ
1 1 GDK Λ CI πʔϧͰ͑ ߋʹ։ൃ͕ޮతʹͳΔ
GDK CICD 1 2
CICD 1 3
AWS CLI GDK CLI GDK GDK 1 4
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
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
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 ίϯϙʔωϯτϏϧυ/(
CreateDeployment 1 8
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} #ݟ͢͞ͷͨΊվߦ
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}
2 1 # ࠷৽ͷσϓϩΠϝϯτIDΛऔಘ DEPLOYMENT_ID=$(aws greengrassv2 list-deployments --target-arn ${THING_GROUP_ARN} |
\ jq -r '.deployments[]' | jq -r .deploymentId) ɾෳίϯϙʔωϯτ͕σϓϩΠࡁΈͷ߹ɺͦΕΒͷσϓϩΠใؚΊͯ ɹσϓϩΠ͢Δඞཁ͕͋ΔͨΊɺલͷσϓϩΠϝϯτ*%Λऔಘ ɾσϓϩΠใͷͳ͍ίϯϙʔωϯτʮআʯ͞ΕΔ
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} ɾଞͷσϓϩΠࡁΈίϯϙʔωϯτͷσϓϩΠใΛऔಘ ɾ͜ͷεςʔδͰσϓϩΠ͢Δίϯϙʔωϯτͷ࠷৽όʔδϣϯΛؚΊͨσϓϩΠ ɹఆٛΛ࡞
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} ɾ࡞ͨ͠σϓϩΠఆٛΛݩʹɺσόΠεͷσϓϩΠʢδϣϒʣΛ࣮ߦ ɹɾσϓϩΠఆٛϑΝΠϧΛΦϓγϣϯͰ͢
JSON ( push) 2 4
Greengrass 2 5
Greengrass PHP Greengrass 2 6
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
Docker Buildx multiarch/qemu-user-static CPU 2 8 ηοτΞοϓʹ͕͔͔࣌ؒΔ ख͕͔͔ؒΓ͗͢Δ QEMUͱbinfmt_miscΛ༻ͯ͠ҟͳΔϚϧνΞʔΩςΫνϟͷ ଟ͘ͷΞʔΩςΫνϟΛαϙʔτ
ίϯςφΛ࣮ߦ͢ΔͨΊͷDockerΠϝʔδ
CPU 2 9
AWS 3 0
CodeBuild CPU ECR Docker Manifest List Manifest List AWS 3
1
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ͷΈ
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
3 4
Greengrass GDK CPU multiarch/qemu-user-static CodeBuild Greengrass 3 5
None