Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud - AWS Serverless Application Model

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud

Antarmuka Baris AWS Serverless Application Model Perintah (AWS SAM CLI) sam sync perintah menyediakan opsi untuk dengan cepat menyinkronkan perubahan aplikasi lokal ke file AWS Cloud. Gunakan sam sync saat mengembangkan aplikasi Anda untuk:

  1. Secara otomatis mendeteksi dan menyinkronkan perubahan lokal ke file AWS Cloud.

  2. Sesuaikan perubahan lokal apa yang disinkronkan ke file. AWS Cloud

  3. Siapkan aplikasi Anda di cloud untuk pengujian dan validasi.

Dengansam sync, Anda dapat membuat alur kerja pengembangan cepat yang mempersingkat waktu yang diperlukan untuk menyinkronkan perubahan lokal Anda ke cloud untuk pengujian dan validasi.

catatan

sam syncPerintah ini direkomendasikan untuk lingkungan pengembangan. Untuk lingkungan produksi, sebaiknya gunakan sam deploy atau konfigurasi pipeline continuous integration and delivery (CI/CD). Untuk mempelajari selengkapnya, lihat Menyebarkan aplikasi dan sumber daya Anda dengan AWS SAM.

sam syncPerintah adalah bagian dari AWS SAM Accelerate. AWS SAM Acceleratemenyediakan alat yang dapat Anda gunakan untuk mempercepat pengalaman mengembangkan dan menguji aplikasi tanpa server di aplikasi. AWS Cloud

Secara otomatis mendeteksi dan menyinkronkan perubahan lokal ke AWS Cloud

Jalankan sam sync dengan --watch opsi untuk mulai menyinkronkan aplikasi Anda ke file. AWS Cloud Ini melakukan hal berikut:

  1. Membangun aplikasi Anda — Proses ini mirip dengan menggunakan sam build perintah.

  2. Menyebarkan aplikasi Anda — The AWS SAM CLI menyebarkan aplikasi Anda untuk AWS CloudFormation menggunakan pengaturan default Anda. Nilai default berikut digunakan:

    1. AWS kredensi dan pengaturan konfigurasi umum yang ditemukan di folder .aws pengguna Anda.

    2. Pengaturan penerapan aplikasi ditemukan di samconfig.toml file aplikasi Anda.

    Jika nilai default tidak dapat ditemukan, AWS SAM CLI akan memberi tahu Anda dan keluar dari proses sinkronisasi.

  3. Perhatikan perubahan lokal — The AWS SAM CLI tetap berjalan dan mengawasi perubahan lokal pada aplikasi Anda. Inilah yang disediakan --watch opsi.

    Opsi ini dapat dihidupkan secara default. Untuk nilai default, lihat samconfig.toml file aplikasi Anda. Berikut ini adalah file contoh:

    ... [default.sync] [default.sync.parameters] watch = true ...
  4. Sinkronkan perubahan lokal ke AWS Cloud — Saat Anda membuat perubahan lokal, AWS SAM CLI mendeteksi dan menyinkronkan perubahan tersebut ke AWS Cloud melalui metode tercepat yang tersedia. Tergantung pada jenis perubahan, berikut ini dapat terjadi:

    1. Jika sumber daya Anda yang diperbarui mendukung AWS layananAPIs, AWS SAM CLI akan menggunakannya untuk menyebarkan perubahan Anda. Ini menghasilkan sinkronisasi cepat untuk memperbarui sumber daya Anda di AWS Cloud.

    2. Jika sumber daya yang diperbarui tidak mendukung AWS layananAPIs, AWS SAM CLI akan melakukan AWS CloudFormation penyebaran. Ini memperbarui seluruh aplikasi Anda di AWS Cloud. Meskipun tidak secepat itu, itu mencegah Anda dari keharusan memulai penerapan secara manual.

Karena sam sync perintah secara otomatis memperbarui aplikasi Anda di AWS Cloud, disarankan untuk lingkungan pengembangan saja. Ketika Anda berlarisam sync, Anda akan diminta untuk mengkonfirmasi:

**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]: ENTER

Kustomisasi perubahan lokal apa yang disinkronkan ke AWS Cloud

Berikan opsi untuk menyesuaikan perubahan lokal apa yang disinkronkan ke. AWS Cloud Ini dapat mempercepat waktu yang diperlukan untuk melihat perubahan lokal Anda di cloud untuk pengujian dan validasi.

Misalnya, berikan --code opsi untuk menyinkronkan hanya perubahan kode, seperti kode AWS Lambda fungsi. Selama pengembangan, jika Anda berfokus secara khusus pada kode Lambda, ini akan membuat perubahan Anda ke cloud dengan cepat untuk pengujian dan validasi. Berikut adalah contohnya:

$ sam sync --code --watch

Untuk menyinkronkan hanya perubahan kode untuk fungsi atau lapisan Lambda tertentu, gunakan opsi. --resource-id Berikut adalah contohnya:

$ sam sync --code --resource-id HelloWorldFunction --resource-id HelloWorldLayer

Siapkan aplikasi Anda di cloud untuk pengujian dan validasi

sam syncPerintah secara otomatis menemukan metode tercepat yang tersedia untuk memperbarui aplikasi Anda di file. AWS Cloud Ini dapat mempercepat alur kerja pengembangan dan pengujian cloud Anda. Dengan memanfaatkan AWS layananAPIs, Anda dapat dengan cepat mengembangkan, menyinkronkan, dan menguji sumber daya yang didukung. Untuk contoh langsung, lihat Modul 6 - AWS SAM Mempercepat di Lokakarya Lengkap AWS SAM .

Opsi untuk perintah sinkronisasi sam

Berikut ini adalah beberapa opsi utama yang dapat Anda gunakan untuk memodifikasi sam sync perintah. Untuk daftar semua opsi, lihatsam sync.

Lakukan penerapan satu kali AWS CloudFormation

Gunakan --no-watch opsi untuk mematikan sinkronisasi otomatis. Berikut adalah contohnya:

$ sam sync --no-watch

The AWS SAM CLI akan melakukan AWS CloudFormation penyebaran satu kali. Perintah ini mengelompokkan tindakan yang dilakukan oleh sam build dan sam deploy perintah.

Lewati AWS CloudFormation penerapan awal

Anda dapat menyesuaikan apakah AWS CloudFormation penerapan diperlukan setiap kali sam sync dijalankan.

  • Menyediakan --no-skip-deploy-sync untuk memerlukan AWS CloudFormation penerapan setiap kali sam sync dijalankan. Ini memastikan bahwa infrastruktur lokal Anda disinkronkan AWS CloudFormation, mencegah penyimpangan. Menggunakan opsi ini memang menambah waktu tambahan untuk alur kerja pengembangan dan pengujian Anda.

  • Menyediakan --skip-deploy-sync untuk membuat AWS CloudFormation penyebaran opsional. The AWS SAM CLI akan membandingkan AWS SAM template lokal Anda dengan AWS CloudFormation template yang Anda gunakan dan akan melewatkan AWS CloudFormation penerapan awal jika perubahan tidak terdeteksi. Melewatkan AWS CloudFormation penerapan dapat menghemat waktu Anda saat menyinkronkan perubahan lokal ke file. AWS Cloud

    Jika tidak ada perubahan yang terdeteksi, AWS SAM CLI masih akan melakukan AWS CloudFormation penerapan dalam skenario berikut:

    • Jika sudah 7 hari atau lebih sejak AWS CloudFormation penerapan terakhir Anda.

    • Jika sejumlah besar perubahan kode fungsi Lambda terdeteksi, menjadikan AWS CloudFormation penerapan metode tercepat untuk memperbarui aplikasi Anda.

Berikut adalah contohnya:

$ sam sync --skip-deploy-sync

Sinkronkan sumber daya dari tumpukan bersarang

Untuk menyinkronkan sumber daya dari tumpukan bersarang
  1. Berikan tumpukan root menggunakan--stack-name.

  2. Identifikasi sumber daya dalam tumpukan bersarang menggunakan format berikut:nestedStackId/resourceId.

  3. Berikan sumber daya di tumpukan bersarang menggunakan--resource-id.

    Berikut adalah contohnya:

    $ sam sync --code --stack-name sam-app --resource-id myNestedStack/HelloWorldFunction

Untuk informasi selengkapnya tentang membuat aplikasi bersarang, lihatGunakan kembali kode dan sumber daya menggunakan aplikasi bersarang di AWS SAM.

Tentukan AWS CloudFormation tumpukan tertentu untuk diperbarui

Untuk menentukan AWS CloudFormation tumpukan tertentu untuk diperbarui, berikan --stack-name opsi. Berikut adalah contohnya:

$ sam sync --stack-name dev-sam-app

Mempercepat waktu pembuatan dengan membangun proyek Anda di folder sumber

Untuk runtime dan metode build yang didukung, Anda dapat menggunakan --build-in-source opsi untuk membangun proyek secara langsung di folder sumber. Secara default, AWS SAM CLI dibangun di direktori sementara, yang melibatkan penyalinan kode sumber dan file proyek. Dengan--build-in-source, AWS SAM CLI membangun langsung di folder sumber Anda, yang mempercepat proses pembuatan dengan menghapus kebutuhan untuk menyalin file ke direktori sementara.

Untuk daftar runtime dan metode build yang didukung, lihat --build-in-source.

Tentukan file dan folder yang tidak akan memulai sinkronisasi

Gunakan --watch-exclude opsi untuk menentukan file atau folder apa pun yang tidak akan memulai sinkronisasi saat diperbarui. Untuk informasi selengkapnya tentang metrik ini, lihat --watch-exclude.

Berikut ini adalah contoh yang mengecualikan package-lock.json file yang terkait dengan HelloWorldFunction fungsi kami:

$ sam sync --watch --watch-exclude HelloWorldFunction=package-lock.json

Ketika perintah ini dijalankan, AWS SAM CLI akan memulai proses sinkronisasi. Ini termasuk yang berikut:

  • Jalankan sam build untuk membangun fungsi Anda dan mempersiapkan aplikasi Anda untuk penerapan.

  • Jalankan sam deploy untuk menyebarkan aplikasi Anda.

  • Perhatikan perubahan pada aplikasi Anda.

Saat kami memodifikasi package-lock.json file, AWS SAM CLI tidak akan memulai sinkronisasi. Ketika file lain diperbarui, AWS SAM CLI akan memulai sinkronisasi, yang akan menyertakan package-lock.json file.

Berikut ini adalah contoh menentukan fungsi Lambda dari tumpukan anak:

$ sam sync --watch --watch-exclude ChildStackA/MyFunction=database.sqlite3

Pemecahan Masalah

Untuk memecahkan masalah AWS SAM CLI, lihat AWS SAMCLIpemecahan masalah.

Contoh

Menggunakan sam sync untuk memperbarui aplikasi Hello World

Dalam contoh ini, kita mulai dengan menginisialisasi contoh aplikasi Hello World. Untuk mempelajari lebih lanjut tentang aplikasi ini, lihatTutorial: Menyebarkan aplikasi Hello World dengan AWS SAM.

Menjalankan sam sync memulai proses build dan deployment.

$ sam sync The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without performing a CloudFormation deployment. This will cause drift in your CloudFormation stack. **The sync command should only be used against a development stack**. Confirm that you are synchronizing a development stack. Enter Y to proceed with the command, or enter N to cancel: [Y/n]: Queued infra sync. Waiting for in progress code syncs to complete... Starting infra sync. Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/0663e6fe-a888-4efb-b908-e2344261e9c7) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CleanUp Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Build Succeeded Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f. Execute the following command to deploy the packaged template sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f --stack-name <YOUR STACK NAME> Deploying with following values =============================== Stack name : sam-app Region : us-west-2 Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samcliamzn-s3-demo-bucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] Parameter overrides : {} Signing Profiles : null Initiating deployment ===================== 2023-03-17 11:17:19 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- CREATE_IN_PROGRESS AWS::CloudFormation::Stack sam-app Transformation succeeded CREATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole - CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole Resource creation Initiated CREATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt Resource creation Initiated ack CREATE_COMPLETE AWS::IAM::Role HelloWorldFunctionRole - CREATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction - CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Function HelloWorldFunction - CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi - CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi Resource creation Initiated CREATE_COMPLETE AWS::ApiGateway::RestApi ServerlessRestApi - CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d - 5f9d CREATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi - ssionProd CREATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi Resource creation Initiated ssionProd CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d Resource creation Initiated 5f9d CREATE_COMPLETE AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d - 5f9d CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage - CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage Resource creation Initiated CREATE_COMPLETE AWS::ApiGateway::Stage ServerlessRestApiProdStage - CREATE_COMPLETE AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi - ssionProd CREATE_COMPLETE AWS::CloudFormation::Stack sam-app - --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco ---------------------------------------------------------------------------------------------------------------------------------------------- Stack creation succeeded. Sync infra completed. Infra sync completed. CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.

Setelah penerapan selesai, kami memodifikasi HelloWorldFunction kode. The AWS SAM CLI mendeteksi perubahan ini dan menyinkronkan aplikasi kita ke file. AWS Cloud Sejak AWS Lambda mendukung AWS layananAPIs, sinkronisasi cepat dilakukan.

Syncing Lambda Function HelloWorldFunction...
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource
Finished syncing Lambda Function HelloWorldFunction.

Selanjutnya, kita memodifikasi API endpoint kita di AWS SAM template aplikasi. Kami berubah /hello menjadi/helloworld.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: ... Properties: ... Events: HelloWorld: Type: Api Properties: Path: /helloworld Method: get

Karena sumber daya Amazon API Gateway tidak mendukung AWS layananAPI, AWS SAM CLI secara otomatis melakukan AWS CloudFormation penyebaran. Berikut ini adalah contoh output:

Queued infra sync. Waiting for in progress code syncs to complete... Starting infra sync. Manifest is not changed for (HelloWorldFunction), running incremental build Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CopySource Build Succeeded Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9. Execute the following command to deploy the packaged template sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9 --stack-name <YOUR STACK NAME> Deploying with following values =============================== Stack name : sam-app Region : us-west-2 Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samcliamzn-s3-demo-bucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] Parameter overrides : {} Signing Profiles : null Initiating deployment ===================== 2023-03-17 14:41:18 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- UPDATE_IN_PROGRESS AWS::CloudFormation::Stack sam-app Transformation succeeded UPDATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi - UPDATE_COMPLETE AWS::ApiGateway::RestApi ServerlessRestApi - CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment8cf30e - d3cd UPDATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi Requested update requires the ssionProd creation of a new physical resource; hence creating one. UPDATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi Resource creation Initiated ssionProd CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment8cf30e Resource creation Initiated d3cd CREATE_COMPLETE AWS::ApiGateway::Deployment ServerlessRestApiDeployment8cf30e - d3cd UPDATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage - UPDATE_COMPLETE AWS::ApiGateway::Stage ServerlessRestApiProdStage - UPDATE_COMPLETE AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi - ssionProd UPDATE_COMPLETE_CLEANUP_IN_PROGRE AWS::CloudFormation::Stack sam-app - SS DELETE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi - ssionProd DELETE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d - 5f9d DELETE_COMPLETE AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d - 5f9d UPDATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack DELETE_COMPLETE AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermi - ssionProd UPDATE_COMPLETE AWS::CloudFormation::Stack sam-app - --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco ---------------------------------------------------------------------------------------------------------------------------------------------- Stack update succeeded. Sync infra completed. Infra sync completed.

Pelajari selengkapnya

Untuk deskripsi semua sam sync opsi, lihatsam sync.