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
wanda
July 19, 2023
Technology
0
980
AWS IoT Greengrass V2で始める デバイスアプリケーションの継続的開発
DevelopersIO 2023 大阪にて登壇時に使用した資料です。
wanda
July 19, 2023
Tweet
Share
More Decks by wanda
See All by wanda
試して分かった!AWS を使った PLCのデータ収集と分析基盤の実践ノウハウ #FA設備技術勉強会#13
ganota
1
15k
AWS IoT SiteWise 導入時に検討するべき3つのポイント
ganota
0
4.2k
SORACOM LTE-M Button Plusと100均ショップの商品でIoTポストを作ってみた
ganota
0
1.4k
Dome9で始めるAWSセキュリティリスク管理.pdf
ganota
0
3.8k
Developers.IO_Nagoya_Well-Architected_Frameworkでクラウドジャーニー.pdf
ganota
0
960
Other Decks in Technology
See All in Technology
年間一億円削減した時系列データベースのアーキテクチャ改善~不確実性の高いプロジェクトへの挑戦~
lycorptech_jp
PRO
3
2.9k
AWSサービスメニュー開発をしていてAWSを好きだ!と感じた瞬間
toru_kubota
0
130
OSSコミットしてZennの課題を解決した話
dyoshikawa1993
0
150
AWSで”最小権限の原則”を実現するための考え方 /20240722-ssmjp-aws-least-privilege
opelab
10
4.3k
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
1
740
サービス開発を前に進めるために 新米リードエンジニアが 取り組んだこと / Steps Taken by a Novice Lead Engineer to Advance Service Development
nologyance
0
180
Matterport を使ってクラスメソッド各拠点のバーチャルオフィスツアーを作成してみた
wakatsuki
0
160
累計ダウンロード数1億8000万を超えるアプリケーションプラットフォームのレガシーシステム脱却とモダン化への道
kmitsuhashi
0
120
AI研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
130
Docker互換のセキュアなコンテナ実行環境「Podman」超入門
devops_vtj
6
3.2k
AIアシスタントの活用で品質の向上と開発ワークフローのスピードアップ
nagix
1
200
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
yuriemori
0
190
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
The Cost Of JavaScript in 2023
addyosmani
31
4.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
13
430
Bash Introduction
62gerente
607
210k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
245
1.2M
The Pragmatic Product Professional
lauravandoore
29
6.1k
Six Lessons from altMBA
skipperchong
24
3.2k
What the flash - Photography Introduction
edds
65
11k
Leading Effective Engineering Teams 2024
addyosmani
3
300
Visualization
eitanlees
139
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
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