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
1.1k
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
16k
AWS IoT SiteWise 導入時に検討するべき3つのポイント
ganota
0
4.8k
SORACOM LTE-M Button Plusと100均ショップの商品でIoTポストを作ってみた
ganota
0
1.5k
Dome9で始めるAWSセキュリティリスク管理.pdf
ganota
0
3.9k
Developers.IO_Nagoya_Well-Architected_Frameworkでクラウドジャーニー.pdf
ganota
0
980
Other Decks in Technology
See All in Technology
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.2k
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
160
Taming you application's environments
salaboy
0
180
dev 補講: プロダクトセキュリティ / Product security overview
wa6sn
1
2.3k
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
180
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
170
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
110
社内で最大の技術的負債のリファクタリングに取り組んだお話し
kidooonn
1
550
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
334
57k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
A better future with KSS
kneath
238
17k
Agile that works and the tools we love
rasmusluckow
327
21k
Docker and Python
trallard
40
3.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
GitHub's CSS Performance
jonrohan
1030
460k
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